Fixed
- Report: Graphs show again in
pdd-kit viewand in Nuxt hosts of the report viewer; in 0.34.0 they were drawn with no height. (#119) (bd51001)
Contributors
Full Changelog: v0.34.0...v0.34.1
pdd-kit view and in Nuxt hosts of the report viewer; in 0.34.0 they were drawn with no height. (#119) (bd51001)Full Changelog: v0.34.0...v0.34.1
blueprint list shows every published Blueprint by the name blueprint pull takes. (e685cd0)npx @itai-gendler/pdd-kit. The Product Model lives in product-model/ instead of .businesslens/ (rename the directory to keep yours), the skills are pdd-map, pdd-ideate and pdd-verify (run npx @itai-gendler/pdd-kit install again), and environment variables start with PDD_KIT_. (9514989)blueprint contribute opens its pull request on the new pdd-kit repository, and merging it publishes the Blueprint. (9514989)blueprint pull --catalog, BUSINESSLENS_CATALOG_URL and BUSINESSLENS_CONTRIBUTE_UPSTREAM. PDD_KIT_BLUEPRINT_REPOSITORY now points list, pull and contribute at a fork. (9514989)Full Changelog: v0.33.0...v0.34.0
businesslens view opens a model with lint errors whenever it can still be built, and counts its problems in the header. A save that breaks the build keeps the last version on screen and says how old it is. (#111) (1afb13c)Full Changelog: v0.32.0...v0.33.0
singleton: true. (#108) (5618c05)lint catches a permission that doesn't say whose setting it reads, and a Capability named with an umbrella verb such as manage. (#108) (5618c05)ProductReportV18 names; use ProductReport and ProductReportSchema. (#108) (5618c05)Full Changelog: v0.31.0...v0.32.0
Full Changelog: v0.30.0...v0.31.0
product/cover.webp, shown on its catalog card; each of the fifteen launch Blueprints has one. (#88) (4cc2750)with, and only removing the thing itself needs permission. (#88) (4cc2750)lint catches a Journey that never carries its own person through two Capabilities, an opposite action hidden inside a Capability, an AI agent permission that names no person, an unguarded change, and limitations that describe the model instead of the product. (#88) (4cc2750)Full Changelog: v0.29.1...v0.30.0
Full Changelog: v0.29.0...v0.29.1
Full Changelog: v0.28.0...v0.29.0
Full Changelog: v0.27.0...v0.28.0
Full Changelog: v0.25.1...v0.26.0
Full Changelog: v0.25.0...v0.25.1
Full Changelog: v0.24.2...v0.25.0
Full Changelog: v0.24.1...v0.24.2
Full Changelog: v0.24.0...v0.24.1
BUSINESSLENS_NO_UPDATE_CHECK=1. (#77) (0784f6a)Full Changelog: v0.23.1...v0.24.0
Full Changelog: v0.23.0...v0.23.1
Full Changelog: v0.22.0...v0.23.0
Full Changelog: v0.21.0...v0.22.0
Full Changelog: v0.20.0...v0.21.0
Full Changelog: v0.19.0...v0.20.0
Full Changelog: v0.18.0...v0.19.0
Full Changelog: v0.17.0...v0.18.0
Full Changelog: v0.16.0...v0.17.0
Full Changelog: v0.15.0...v0.16.0
Full Changelog: v0.14.0...v0.15.0
Full Changelog: v0.13.0...v0.14.0
--cwd and --scope project|global. (#53) (89947f3)Full Changelog: v0.12.0...v0.13.0
Full Changelog: v0.11.0...v0.12.0
Full Changelog: v0.9.0...v0.10.0
one-to-one, one-to-many, and
many-to-many read from the declaring Entity to its target; the inverse is
derived so two files cannot disagree. Entity pages and the What it keeps
topology view render the product's own relationship graph. (#34) (2a14ea1)permits grants name
actors, a related Entity path, self, unattended work, or configuration, with
optional fact and state conditions. lint rejects Steps and Screens that no
applicable grant can permit, without claiming runtime authorization has been
proved. (#34) (2a14ea1)entities: [] or entries shaped as
{ entity, as, effect, from, to }, where effect is
creates|changes|removes|reads. Lifecycles and reverse edges are composed
from acceptance Steps rather than authored a second time. (#34) (2a14ea1)unattended: true for schedules, expiry, retry, and other Product-owned
behavior with no Actor. (#34) (2a14ea1)agent joins the Interface types, and an Interface may own shared Screens
beside its Experiences. A shared Screen is inside every Experience of its
Interface: a Capability it exposes must be available in each, a Step on it is
inside a Capability's availability only when every Experience is, and that
Step counts as Scenario coverage for each. (#34) (2a14ea1)spec/rejected.md — shapes designed far enough to be costed and then
chosen against, so the same argument is not had twice. It binds nothing and
takes rejections and deferrals only: never a plan, a status, or a file
reference. Entries are appended, so reopening a decision means a superseding
entry rather than an edit. It carries what a format or report change most
often re-proposes — tags and free-form metadata, a glossary resource type,
typed facts, actors/ as its own collection, permission on a Capability
target, transitions on the Entity, the permission algebra's discarded
spellings, and Blueprint provenance. (#34) (2a14ea1)ProductReportV13Schema, ProductReportV13, the unversioned current
aliases, Entity/fact/relation types, Step effect types, and grant types. (#34) (2a14ea1)## Information kept is a list of uniquely named facts, so a Rule can govern
one fact exactly. ## Product states is retired. (#34) (2a14ea1)install and update refuse it with Refusing to
overwrite … Pass --force. One --force re-adopts it, and every later run
is marked. (#34) (2a14ea1)businesslens-map, businesslens-ideate, and the authoring branches of
businesslens-verify settle undetermined boundary, granularity, naming, and
acceptance calls in rounds before writing. They attach the evidence they read
and surface remaining judgment calls explicitly; ideate's proposed delta ends
with a Judgment calls section, as map's already did. (#34) (2a14ea1)businesslens-verify re-derives findings from the current model and
repository, verifies Entity facts, states, relations, composed transitions,
Step effects, and Rule grants, and never persists a workflow ledger. (#34) (2a14ea1)version parameter — is written where a catalog
operator reads it. (#34) (2a14ea1)t), so a Lifecycle or Scenarios tab
survives a refresh and can be linked. (#34) (2a14ea1)plans/ is retired; the constraints it carried
moved into the registers that govern them. AGENTS.md gains How format
decisions are judged — the shipped agent as the standard a rule must meet,
the ranked quality axes, empirical double-authoring, descriptive and
generative use judged equally, and the pull-request diff as the binding human
surface. Its report viewer standards gain four rendering rules and the
four-row test for making a section render as more than prose. (#34) (2a14ea1)actors/ is no longer a collection, and Actor is no longer a resource
type. A person or system that acts is an Entity with
kind: person|system and acts: external|internal. Actor remains a role. (#34) (2a14ea1)blueprint pull asks for the report version it can read, and refuses
another. The Accept header is derived from the schema's major, and a
catalog answering with a different version parameter is refused before the
body is parsed. A report of another schema version, from a catalog or a file,
is refused in one sentence naming both versions instead of a Zod issue dump. (#34) (2a14ea1)blueprint open and pull keep the author's coverage prose. Only
method is rewritten, as the report contract says; the note that
implementation alignment has not been verified here now lives in method
with the other origin claim, and limitations and rationale come through
exactly as authored. (#34) (2a14ea1)interfaceIds is exactly the Interface its id names.
Expansion files an Experience by its qualified id, so a list saying anything
else was a second encoding of containment — a report could validate under one
Interface and expand under another. (#34) (2a14ea1)businesslens view can stay open while the model is edited. (#34) (2a14ea1)node_modules
are excluded from the npm tarball; and check-repo pins both registers and
the CLI header to the report schema's major, so the version cannot go stale
in prose the way it once did in code. (#34) (2a14ea1)skills entry that is
not a plain directory name now invalidates the marker, a recorded name this
Product could not have written is left alone, and every removal must resolve
to a direct child of the skills directory — so a crafted manifest can no
longer point install at a directory outside it. (#34) (2a14ea1)Full Changelog: v0.8.0...v0.9.0
<type>.md are product assets owned by
the entity; anything under the reserved implementation/ directory
describes this realization and stays home. Class comes from the path, which is
the only rule a tool writing a capture on CI can satisfy. An optional
assets: list titles and scopes those files without ever setting their class,
and unlisted files stay legal. (#30) (1a22915)state: on a reference or asset, valid only on a Screen and
validated against its ## Product states, so several captures of one view are
placed beside the state each depicts instead of arriving as a flat list. (#30) (1a22915)prd Reference kind for attaching a product requirements document as
intent or context without making that external document the Product Model
authority. (#30) (1a22915)screens: list on an Interface or Experience declaring
reading order over its own children. Reachability stays with the tree. (#30) (1a22915)businesslens view serves repository files from a read-only, extension-
allowlisted mount, and the report viewer renders local visual references and
co-located assets as thumbnails instead of inert text. (#30) (1a22915)kind as its silhouette — a person or a system, at the size every
other kind's mark uses — and the Product-boundary relationship is written as
a word where each reading has room for it. A Scenario Step names its Actor
with that mark in a chip that opens the Actor, rather than as prose. (#30) (1a22915)BusinessLensReportViewer exposes both as bindable models. (#30) (1a22915)@vue-flow/core with a
@dagrejs/dagre layered layout, both optional peer dependencies): one
entity box and one container box for nine visual categories (with both
Scenario types distinguished in content), a fixed relation-verb
vocabulary, a measured Interface → Experience → Screen containment map, a
sitemap of the same hierarchy drawn either as a top-down tree or radially
from the Product core, plus focused entity filtering on the named Topology
surface. (#30) (1a22915){ place: ... } Context shape across Capability availability, Scenario
Steps, and Business Rule selectors. A Context place resolves to an Interface,
Experience, or Screen; Screens derive their place from their path and declare
no availability of their own. (#30) (1a22915){ placeId: ... } Contexts,
removes the former availability and Place wire records, and is the only
accepted report version. The CLI, report SDK, Product Report, bundled skills,
fixtures, and Content Feed Reader Blueprint consume schema 6 and report v10
directly. (#30) (1a22915)surface-parent, surface-tree IDs, and the former Delivery surfaces view, has
been replaced by concrete entity names and screen-parent. (#30) (1a22915)report-viewer-lab name with no
active report experiments; the background audition remains independent in
theme-lab. (#30) (1a22915)routes and one ordered, typed steps list. An Actor
Step names its responsible Actor, a Journey Step may name its Capability, and
a contextualized Step maps every route to its exact Interface, Experience, or
Screen. Route-neutral Steps remain first-class without a Context. The
separate Journey
flow, operation, stage ids, per-Step route objects, Scenario-wide Actors
and availability, authored Screen Scenario backlinks, and Markdown ## Steps
are removed. Folder schema 3 and Product Report v7 are no longer accepted;
this release has no compatibility reader. (#30) (1a22915)type (web,
mobile-app, desktop-app, cli, api, webhook, messaging, voice,
or device). Reports preserve it directly and use it to distinguish
Interface contexts visually instead of guessing from ids or route names. (#30) (1a22915)Flows tab and the
duplicate Journey-local diagram are removed because they projected the same
authored Steps while silently dropping Steps without a Capability. The named
topology view is now Journey composition: it explicitly answers the
narrower Capability-composition question. Outside visible Domain groupings,
Capability nodes use the consistent Capability color rather than inheriting
a Domain color that could be mistaken for status. (#30) (1a22915)1, and drop any column constant across the rows on
screen. (#30) (1a22915)routes, typed steps, and per-route Contexts in
prose but showed no Scenario file, leaving the model's most structured
artifact to be inferred. The example is single-route, because that is the
case where the routes requirement is least guessable. (#30) (1a22915)summary,
category, authors, and license. Report hosts read all four, and a model
authored without them reaches a Blueprint incomplete. (#30) (1a22915)npm run check asserts that every entity kind, frontmatter key, and required
section named in spec/format.md also appears in the canonical skill
reference. The reference may be terser than the contract; it may not omit a
name, because an agent cannot author a key it was never told about. It found
the three missing Product keys above on its first run. (#30) (1a22915)businesslens/nuxt/theme layer, which shipped as a public
export with no documentation of its palette roles, type scale,
<BusinessLensBrand> lockup, or icon-family composable. (#30) (1a22915)<id>.md until it owns an asset or typed child
collection, then expands to <id>/<type>.md. Both shapes derive the same id
and cannot coexist. This keeps leaf-heavy collections readable while giving
every kind—Screens most of all—a co-located namespace when needed.
product.md similarly expands to product/product.md only when it owns
logo.svg. Two coexisting shapes, and an expanded folder missing its
<type>.md, are lint errors — neither is a state a correct model passes
through. An expanded folder that owns nothing yet is a warning instead: the
rule still holds, and expansion normalizes the folder back to the compact
form, but an author reaches the expanded shape in two steps and the
intermediate step is not a defect. (#30) (1a22915)interfaces:, a Capability Scenario no longer
writes capability:, a Journey Scenario no longer writes journey:, and a
Screen no longer writes availability:. Reparenting is a git mv that reads
correctly in a pull request. (#30) (1a22915)## Boundary section, and only Capability authors domain: — a Screen's,
Experience's or Journey's Domains are derived through their Capabilities
rather than restated where a second copy could disagree. (#30) (1a22915)schemaVersion is 10.0.0, and the catalog media type moves
to version=10. There is exactly one accepted report version, as before. (#30) (1a22915)docs/capabilities.md, Journey
Scenarios in docs/journeys.md, and the containment rule that separates them
in docs/product-model.md. The standalone docs/scenarios.md is removed. (#30) (1a22915)lint cannot recover direction
from the files, so the rule lives in spec/format.md, the Product Model
docs, and the mapping rubric. (#30) (1a22915)feed-provider Actor and the syndicated-feed-integration Interface;
feed-synchronization now lives on the Reader-facing Interfaces where its
result is seen, carries the RSS specification as a context Reference, and is
triggered by a Reader-initiated refresh on the Source list Screen — a trigger
the model previously never stated. Its catch-up failure variation no longer
contradicts itself about whether the backlog was unchanged or caught up. (#30) (1a22915)businesslens/nuxt/report-viewer accepts the canonical
ProductReportV10 directly and owns the complete Product Report projection
and topology engine. The lossy businesslens/report/view-model export and
the former whole-report audition layer are removed. The private,
unpublished report-viewer-lab remains as an empty boundary for future
experiments, while theme-lab continues to own background auditions. (#30) (1a22915)businesslens/nuxt/theme;
businesslens/theme-lab/variants exposes background choices only. (#30) (1a22915){ heading, content } records instead of an opaque Markdown string. Lint
rejects Journey and Scenario lead prose, duplicate or conflicting structured
sections, malformed structured lists, and duplicate values in set-valued
relations rather than allowing authored content to disappear or inflate
derived relationships. (#30) (1a22915)not-achieved Journey Scenarios and the
golden fixture one, so result is an axis with real values rather than a
constant, and failureOnlyCapabilityIds is exercised against authored
content instead of always deriving empty. (#30) (1a22915)theme, not an old theme-lab audition
path, and rejects the retired lossy Report View Model export instead of
requiring it. The stale assertions stopped the first v0.8.0 publish
attempts before npm. (#32) (dbca71a)package.json no longer lists plans/shared-theme-lab.md among its packaged
files. The file was deleted while the entry stayed, and npm drops a missing
files entry silently, so the packed tarball simply carried no plans/ at
all and nothing reported it. (#30) (1a22915)Learn from examples, which no
page has used since the feed-reader walkthrough was removed. An allowed group
with nothing behind it is a sidebar section the navigation cannot build. (#30) (1a22915)lint and report validation. A route id names one
traversal, so a second id over the same sequence claims a lane the Product
does not have. The Content Feed Reader Blueprint carried two:
publish-on-mobile and unlist-from-mobile, which never left the web
Interface, and could not have — neither Capability declares a mobile context. (#30) (1a22915)product/logo.svg, where
schema 5 puts it once the Product expands. (#30) (1a22915)manifest-src, which was
blocking site.webmanifest. (#30) (1a22915)businesslens/nuxt/theme, where the promoted
Product Report and the bundled local viewer inherit them without depending on a
lab layer. (#30) (1a22915)Full Changelog: v0.7.2...v0.8.0
--help and strict option parsing to the Blueprint catalog publisher so
its maintainer-only production flow is discoverable before a credential is
configured. (#12) (2d03595)BL ligature apart in the generated tab icons, so a browser tab shows
two letters instead of one blob at 16px. Only the favicon family is respaced —
the logo artwork and the larger app icons keep the ligature as drawn. (#11) (b863f6d)--catalog
value from sending it to an arbitrary HTTPS host. (#12) (2d03595)Full Changelog: v0.7.1...v0.7.2
businesslens/theme-lab/variants subpath into dist so
plain Node consumers such as Playwright can import it from node_modules
without relying on unsupported TypeScript stripping. (5cf8b56)Full Changelog: v0.7.0...v0.7.1
businesslens view renders the current Product Model privately on localhost,
recompiles automatically after debounced source edits, streams revisions to
open browsers, retains the last valid report during lint errors, writes no
generated report, and opens no network listener beyond 127.0.0.1. (2339dd3)businesslens exports for the pure Product Report view-model projection,
the shared Nuxt report renderer, and a sibling BusinessLens-wide theme Layer,
so hosts share UI without a second public npm package. (2339dd3).businesslens/logo.svg Product logo used by the local viewer and
Blueprint presentation. (2339dd3)person|system and external|internal. (2339dd3)code|spec|proposal|doc|adr|visual|research) and attachment roles
(intent|implementation|context). Referenced content stays outside the
Product Model and never replaces its prose or proves alignment. (2339dd3)businesslens-map for initial adoption, scoped remapping, and deliberate
Product Model coverage expansion without executing target code. (2339dd3)businesslens-verify as the single post-build invocation. It classifies
model/code gaps, negotiates only authority decisions, automatically runs
internal intent-resolution or scoped-mapping phases, hands code corrections
to a harness-injected builder, and re-verifies until aligned or blocked. (2339dd3)report only verification mode, an explicit missing-builder handoff, and an
unchanged-gap stopping rule. Verification findings are re-derived rather than
persisted in a receipt or ledger. (2339dd3)-h/-V flags,
strict option ownership, and usage validation before command execution. (2339dd3)-c, --cwd now always means "run from this directory". A model directly in the
current directory wins over the Git-root model whether or not --cwd . was
typed explicitly. (2339dd3)blueprint.yaml. Product
ID, title, summary, description, category, tags, authors, license, and report
content come from product.md; visual identity comes only from
.businesslens/logo.svg, and catalog operational state remains outside the
Product Model. (2339dd3)summary for the
short Product description, and renames computed entity totals to counts. (2339dd3)blueprint contribute no longer accepts --slug; the Product
ID is the canonical contribution directory, branch suffix, catalog slug, and
pull name. (2339dd3)features/ is
rejected; Capabilities live in capabilities/. (2339dd3)exit. Journeys use Capabilities and exact availability, may cross Domains,
and no longer declare one Domain. Business Rules exclusively own Rule scope. (2339dd3)businesslens-map,
businesslens-ideate, and businesslens-verify. Ideate also handles a narrow
already-decided verification handoff without reopening broad brainstorming. (2339dd3)businesslens validate is now businesslens lint. The old
spelling is refused with exit code 2 and a replacement message; it is not an
alias. Lint output contains only ok, errors, warnings, and counts—no
branch situation or authority inference. (2339dd3)references replaces both codeRefs and links. Reference
records are strict, duplicate targets fail lint, code targets require tracked
files, and missing local non-code targets warn. (2339dd3)coverage.status now describes model breadth only: draft while the model
itself is under review, partial with known unmapped areas, and complete
when intended product scope is modeled. A complete model may have zero
References. (2339dd3)workspace or portable Reference
profile. Portable projection replaces evidence-redaction terminology and
keeps only HTTP(S) intent/context References. (2339dd3).businesslens/README.md. BusinessLens still never writes target-root
AGENTS.md, CLAUDE.md, or README files. (2339dd3)open, pull,
and contribute; Blueprint contributions accept every valid model-breadth
Coverage status and publish no source-repository provenance. (2339dd3)README.md plus a
.gitignore covering build/ and cache/), and CLI argument, provider,
scope, slug, and catalog-origin errors consistently exit with usage code 2. (2339dd3)ideate → injected build → verify (including final lint) → merge. Map is explicitly not a
daily maintenance command, and lint is explicitly not semantic verification. (2339dd3)blueprint pull retrieves the optional logo from the selected catalog's
same-origin endpoint, so custom catalogs and commit-pinned reports cannot be
paired with the current logo from the official PDD main branch. (2339dd3)businesslens-init, businesslens-sync, businesslens-doctor, and
businesslens-deep-dive. Their useful scopes now belong to map or verify. (2339dd3)businesslens-contribute skill. Catalog contribution remains the
deterministic businesslens blueprint contribute CLI command. (2339dd3)branch-state module. (2339dd3)Full Changelog: 1e35f0f...v0.7.0
BusinessLens consolidates onto one site. The Platform is retired; the Blueprint
catalog moves to pdd-kit.dev and becomes anonymous to browse and to pull.
The previous published npm version is 0.5.0. An intermediate draft of this
release included authenticated Platform workflows, but it was never published;
the final 0.6.0 replaces those workflows with the anonymous catalog and the
pull-request contribution flow described below.
businesslens open <report> expands a local Product Report back into a
canonical .businesslens/ Product Model, making export and open
semantic inverses. (#5) (1b01308)businesslens pull <blueprint-name> anonymously retrieves a Blueprint and
expands it without a user-facing report.json download. It writes a
greenfield block into AGENTS.md and sends
user-agent: businesslens/<version> to the catalog. (#5) (1b01308)businesslens/report library entry point exporting the Product Report
schema, its cross-entity validator, and the canonical digest. It depends only
on zod and never loads the CLI. (#5) (1b01308)redactSourceEvidence in the businesslens/report contract strips every
repository reference from a report before it leaves its owning workspace —
codeRefs, repository entryPoints, repository-relative links, and
coverage.sourceAreas. Product-facing routes and HTTP(S) URLs are kept.
coverage.mapped remains a model-quality signal, and
coverage.evidenceRedacted records both that those counts describe the
origin repository and that validation must reject any repository path still
present. (#5) (1b01308)businesslens-plan and businesslens-verify skills for planning in the
Product Model and verifying implementation evidence before merge. (#5) (1b01308)businesslens-implement builds the software a Product Model describes, with
its scenarios as the acceptance contract. (#5) (1b01308)businesslens-ideate proposes candidate product directions as a shortlist.
It is the only skill that never writes to the model. (#5) (1b01308)blueprints/ — the Blueprint source layout, with a blueprint.yaml manifest
and MIT-licensed content. (#5) (1b01308)blueprints:check, wired into verify, parses every manifest, builds every
Blueprint, and rejects any that carries source evidence. It does not trust
contribute, because anyone can open a pull request by hand. (#5) (1b01308)blueprints:publish pushes built Blueprints to the catalog. (#5) (1b01308)resolveModelRoot allows the model to live outside the Git root or without a
repository, adding general monorepo support. (#5) (1b01308)docs/terminology.md defines every product-model entity and separates the
terms that are easy to confuse. (#5) (1b01308)businesslens publish is now businesslens contribute, and
opens a pull request against businesslens/pdd through the gh CLI rather
than submitting to a Platform. No API key is involved. The model in the pull
request is regenerated from a redacted report, so it carries no source paths
and is byte-identical to what pull produces. (#5) (1b01308)businesslens build is now businesslens export. build still
works and warns; it will be removed after 0.6.x. (#5) (1b01308)export emits a source-free Product Report v4 at
.businesslens/build/report.json, replacing the portable v3 project.json.
The report carries no repository URL, commit, branch, or workspace metadata. (#5) (1b01308).businesslens/ is now called the Product Model throughout
the CLI, docs, and skills. "Product map" is reserved for a visual or
navigable view of that model. Draft coverage is an evidence state and no
longer implies a reusable Blueprint. (#5) (1b01308)--catalog defaults to https://pdd-kit.dev and accepts any origin.
Precedence is --catalog, BUSINESSLENS_CATALOG_URL, then the default. (#5) (1b01308)businesslens-publish is now businesslens-contribute. (#5) (1b01308)open appended its coverage limitation
unconditionally, so every open/pull cycle gained another copy and broke the
guarantee that a pulled Blueprint matches what the catalog holds. (#5) (1b01308)Full Changelog: v0.5.0...1e35f0f
build and publish CLI commands, the businesslens-publish skill with its
isolated runner, and the CI publishing recipe
(#1). (cff997b)Full Changelog: v0.4.0...v0.5.0
Initial public launch of the repository.
install, update, and validate commands. (90ed7d1)businesslens-init, businesslens-sync,
businesslens-deep-dive, businesslens-validate, and
businesslens-doctor. (90ed7d1).businesslens/ product-map format and its contract in
docs/format.md. (90ed7d1)Full Changelog: v0.4.0