businesslens 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +289 -5
- package/README.md +62 -24
- package/dist/businesslensThemeLabVariants.d.ts +1 -22
- package/dist/businesslensThemeLabVariants.js +1 -63
- package/dist/cli.js +1320 -564
- package/dist/portable-CftE4zWs.js +1170 -0
- package/dist/{portable-D-39sG6M.d.ts → portable-D2Rj2CNS.d.ts} +608 -140
- package/dist/{report-digest-B5HEnjj6.js → report-digest--J16_c08.js} +1 -1
- package/dist/report-digest.d.ts +1 -1
- package/dist/report-digest.js +2 -2
- package/dist/report.d.ts +8 -2
- package/dist/report.js +2 -2
- package/dist/viewer/200.html +1 -1
- package/dist/viewer/404.html +1 -1
- package/dist/viewer/_nuxt/45uNmsQO.js +37 -0
- package/dist/viewer/_nuxt/B62M9XwM.js +34 -0
- package/dist/viewer/_nuxt/{CXkZ3uUu.js → BCK3bAyi.js} +1 -1
- package/dist/viewer/_nuxt/{0agZip0Q.js → CWdMyG9_.js} +1 -1
- package/dist/viewer/_nuxt/builds/latest.json +1 -1
- package/dist/viewer/_nuxt/builds/meta/64c42d86-c8d2-45a2-b130-53ab6b26c14b.json +1 -0
- package/dist/viewer/_nuxt/entry.CLPavHBc.css +1 -0
- package/dist/viewer/_nuxt/index.DsK0G5y5.css +1 -0
- package/dist/viewer/index.html +1 -1
- package/dist/viewer/site.webmanifest +4 -4
- package/docs/actors.md +22 -2
- package/docs/business-rules.md +46 -15
- package/docs/capabilities.md +205 -24
- package/docs/ci.md +6 -4
- package/docs/cli-contribute.md +11 -7
- package/docs/cli-export.md +7 -2
- package/docs/cli-install.md +1 -1
- package/docs/cli-lint.md +19 -6
- package/docs/cli-open.md +8 -6
- package/docs/cli-pull.md +1 -1
- package/docs/cli-update.md +1 -1
- package/docs/cli-view.md +1 -1
- package/docs/cli.md +2 -2
- package/docs/domains.md +53 -17
- package/docs/experiences.md +29 -14
- package/docs/from-a-blueprint.md +11 -7
- package/docs/from-an-idea.md +5 -3
- package/docs/from-your-repo.md +9 -4
- package/docs/index.md +6 -5
- package/docs/integration.md +2 -2
- package/docs/interfaces.md +42 -6
- package/docs/journeys.md +279 -43
- package/docs/product-model.md +146 -39
- package/docs/product.md +11 -4
- package/docs/references.md +88 -11
- package/docs/screens.md +49 -30
- package/docs/skill-businesslens-ideate.md +8 -4
- package/docs/skill-businesslens-map.md +11 -4
- package/docs/skill-businesslens-verify.md +7 -7
- package/docs/skills.md +1 -1
- package/docs/with-plan-mode.md +1 -1
- package/docs/with-sdd.md +7 -5
- package/layers/nuxt/report-viewer/README.md +63 -44
- package/layers/nuxt/report-viewer/app/assets/report-structure.css +3 -1
- package/layers/nuxt/report-viewer/app/assets/report-viewer.css +56 -0
- package/layers/nuxt/report-viewer/app/components/BlrActorType.vue +74 -0
- package/layers/nuxt/report-viewer/app/components/BlrConnections.vue +304 -0
- package/layers/nuxt/report-viewer/app/components/BlrContextPlace.vue +80 -0
- package/layers/nuxt/report-viewer/app/components/BlrContexts.vue +58 -0
- package/layers/nuxt/report-viewer/app/components/BlrEntityBody.vue +725 -0
- package/layers/nuxt/report-viewer/app/components/BlrEntityCard.vue +166 -0
- package/layers/nuxt/report-viewer/app/components/BlrEntityPage.vue +141 -0
- package/layers/nuxt/report-viewer/app/components/BlrFlowCanvas.vue +312 -0
- package/layers/nuxt/report-viewer/app/components/BlrFlowGroup.vue +126 -0
- package/layers/nuxt/report-viewer/app/components/BlrFlowLabel.vue +47 -0
- package/layers/nuxt/report-viewer/app/components/BlrFlowNode.vue +217 -0
- package/layers/nuxt/report-viewer/app/components/BlrInterfaceType.vue +100 -0
- package/layers/nuxt/report-viewer/app/components/BlrKind.vue +78 -0
- package/layers/nuxt/report-viewer/app/components/BlrLinks.vue +56 -0
- package/layers/nuxt/report-viewer/app/components/BlrOverview.vue +359 -0
- package/layers/nuxt/report-viewer/app/components/BlrPageBlock.vue +93 -0
- package/layers/nuxt/report-viewer/app/components/BlrProductTopology.vue +367 -0
- package/layers/nuxt/report-viewer/app/components/BlrProse.vue +64 -0
- package/layers/nuxt/report-viewer/app/components/BlrRail.vue +131 -0
- package/layers/nuxt/report-viewer/app/components/BlrRefs.vue +150 -0
- package/layers/nuxt/report-viewer/app/components/BlrReportShell.vue +1363 -0
- package/layers/nuxt/report-viewer/app/components/BlrScenarios.vue +183 -0
- package/layers/nuxt/report-viewer/app/components/BlrSearchPalette.vue +72 -0
- package/layers/nuxt/report-viewer/app/components/BlrStepContext.vue +24 -0
- package/layers/nuxt/report-viewer/app/components/BusinessLensReportViewer.vue +48 -253
- package/layers/nuxt/report-viewer/app/utils/entityCards.ts +257 -0
- package/layers/nuxt/report-viewer/app/utils/entityDocs.ts +32 -0
- package/layers/nuxt/report-viewer/app/utils/entityFacets.ts +215 -0
- package/layers/nuxt/report-viewer/app/utils/entityFacts.ts +129 -0
- package/layers/nuxt/report-viewer/app/utils/flowGraph.ts +783 -0
- package/layers/nuxt/report-viewer/app/utils/pageSections.ts +98 -0
- package/layers/nuxt/report-viewer/app/utils/productTopologyFilters.ts +92 -0
- package/layers/nuxt/report-viewer/app/utils/productTopologyGraphs.ts +530 -0
- package/layers/nuxt/report-viewer/app/utils/productTopologyLayout.ts +124 -0
- package/layers/nuxt/report-viewer/app/utils/productTopologyViews.ts +149 -0
- package/layers/nuxt/report-viewer/app/utils/reportMarkdown.ts +139 -0
- package/layers/nuxt/report-viewer/app/utils/reportPalette.ts +79 -0
- package/layers/nuxt/report-viewer/app/utils/reportWorkspace.ts +1328 -0
- package/layers/nuxt/report-viewer/app/utils/scenarioRouteWindow.ts +55 -0
- package/layers/nuxt/report-viewer/nuxt.config.ts +73 -2
- package/layers/nuxt/theme/README.md +43 -0
- package/layers/nuxt/theme/app/assets/theme.css +60 -2
- package/layers/nuxt/theme/app/components/BusinessLensBrand.vue +62 -0
- package/layers/nuxt/theme/app/composables/useBusinessLensThemeHead.ts +16 -0
- package/layers/nuxt/{theme-lab/public/brand/icons/marks/m4 → theme/public}/site.webmanifest +4 -4
- package/layers/nuxt/theme-lab/app/assets/theme-lab.css +20 -15
- package/layers/nuxt/theme-lab/app/components/BusinessLensThemeLabBar.vue +3 -4
- package/layers/nuxt/theme-lab/app/composables/useBusinessLensThemeLabHead.ts +1 -10
- package/layers/nuxt/theme-lab/app/utils/businesslensThemeLabVariants.ts +0 -63
- package/layers/nuxt/theme-lab/nuxt.config.ts +1 -4
- package/package.json +23 -7
- package/skills/businesslens-ideate/SKILL.md +15 -9
- package/skills/businesslens-ideate/references/format.md +218 -60
- package/skills/businesslens-ideate/references/planning-rubric.md +28 -15
- package/skills/businesslens-map/SKILL.md +15 -6
- package/skills/businesslens-map/references/format.md +218 -60
- package/skills/businesslens-map/references/mapping-rubric.md +30 -12
- package/skills/businesslens-verify/SKILL.md +12 -6
- package/skills/businesslens-verify/references/build-handoff.md +5 -3
- package/skills/businesslens-verify/references/format.md +218 -60
- package/skills/businesslens-verify/references/verification-rubric.md +12 -8
- package/dist/portable-BG1UM2eJ.js +0 -576
- package/dist/report-view-model.d.ts +0 -98
- package/dist/report-view-model.js +0 -80
- package/dist/viewer/_nuxt/C2YqwjgQ.js +0 -1
- package/dist/viewer/_nuxt/DBtS0ETw.js +0 -37
- package/dist/viewer/_nuxt/builds/meta/14019c81-af3a-4f33-ab5e-b0583ecd7aa9.json +0 -1
- package/dist/viewer/_nuxt/entry.DU06319b.css +0 -1
- package/dist/viewer/brand/icons/marks/m10/site.webmanifest +0 -32
- package/dist/viewer/brand/icons/marks/m4/apple-touch-icon.png +0 -0
- package/dist/viewer/brand/icons/marks/m4/favicon-32.png +0 -0
- package/dist/viewer/brand/icons/marks/m4/favicon.ico +0 -0
- package/dist/viewer/brand/icons/marks/m4/favicon.svg +0 -14
- package/dist/viewer/brand/icons/marks/m4/icon-192.png +0 -0
- package/dist/viewer/brand/icons/marks/m4/icon-512.png +0 -0
- package/dist/viewer/brand/icons/marks/m4/maskable-icon-512.png +0 -0
- package/dist/viewer/brand/icons/marks/m4/site.webmanifest +0 -32
- package/dist/viewer/brand/icons/marks/m7/apple-touch-icon.png +0 -0
- package/dist/viewer/brand/icons/marks/m7/favicon-32.png +0 -0
- package/dist/viewer/brand/icons/marks/m7/favicon.ico +0 -0
- package/dist/viewer/brand/icons/marks/m7/favicon.svg +0 -9
- package/dist/viewer/brand/icons/marks/m7/icon-192.png +0 -0
- package/dist/viewer/brand/icons/marks/m7/icon-512.png +0 -0
- package/dist/viewer/brand/icons/marks/m7/maskable-icon-512.png +0 -0
- package/dist/viewer/brand/icons/marks/m7/site.webmanifest +0 -32
- package/dist/viewer/brand/icons/marks/m8/apple-touch-icon.png +0 -0
- package/dist/viewer/brand/icons/marks/m8/favicon-32.png +0 -0
- package/dist/viewer/brand/icons/marks/m8/favicon.ico +0 -0
- package/dist/viewer/brand/icons/marks/m8/favicon.svg +0 -8
- package/dist/viewer/brand/icons/marks/m8/icon-192.png +0 -0
- package/dist/viewer/brand/icons/marks/m8/icon-512.png +0 -0
- package/dist/viewer/brand/icons/marks/m8/maskable-icon-512.png +0 -0
- package/dist/viewer/brand/icons/marks/m8/site.webmanifest +0 -32
- package/dist/viewer/brand/logo/variants/mark-4-dark.svg +0 -11
- package/dist/viewer/brand/logo/variants/mark-4.svg +0 -11
- package/dist/viewer/brand/logo/variants/mark-7-dark.svg +0 -6
- package/dist/viewer/brand/logo/variants/mark-7.svg +0 -6
- package/dist/viewer/brand/logo/variants/mark-8-dark.svg +0 -5
- package/dist/viewer/brand/logo/variants/mark-8.svg +0 -5
- package/dist/viewer/brand/logo/variants/wordmark-11-dark.svg +0 -173
- package/dist/viewer/brand/logo/variants/wordmark-11.svg +0 -173
- package/docs/scenarios.md +0 -86
- package/layers/nuxt/report-viewer/app/utils/report-view-model.ts +0 -12
- package/layers/nuxt/theme-lab/app/components/BusinessLensBrand.vue +0 -84
- package/layers/nuxt/theme-lab/app/components/BusinessLensThemeLabLogoRow.vue +0 -119
- package/layers/nuxt/theme-lab/app/composables/useBusinessLensLogoVariant.ts +0 -78
- package/layers/nuxt/theme-lab/app/utils/businesslensThemeLabMarks.d.mts +0 -11
- package/layers/nuxt/theme-lab/app/utils/businesslensThemeLabMarks.mjs +0 -29
- package/layers/nuxt/theme-lab/public/brand/icons/apple-touch-icon.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/favicon-32.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/favicon.svg +0 -7
- package/layers/nuxt/theme-lab/public/brand/icons/icon-192.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m10/apple-touch-icon.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m10/favicon-32.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m10/favicon.ico +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m10/favicon.svg +0 -7
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m10/icon-192.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m10/icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m10/maskable-icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m10/site.webmanifest +0 -32
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m4/apple-touch-icon.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m4/favicon-32.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m4/favicon.ico +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m4/favicon.svg +0 -14
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m4/icon-192.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m4/icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m4/maskable-icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m7/apple-touch-icon.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m7/favicon-32.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m7/favicon.ico +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m7/favicon.svg +0 -9
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m7/icon-192.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m7/icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m7/maskable-icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m7/site.webmanifest +0 -32
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m8/apple-touch-icon.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m8/favicon-32.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m8/favicon.ico +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m8/favicon.svg +0 -8
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m8/icon-192.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m8/icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m8/maskable-icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/icons/marks/m8/site.webmanifest +0 -32
- package/layers/nuxt/theme-lab/public/brand/icons/maskable-icon-512.png +0 -0
- package/layers/nuxt/theme-lab/public/brand/logo/variants/mark-4-dark.svg +0 -11
- package/layers/nuxt/theme-lab/public/brand/logo/variants/mark-4.svg +0 -11
- package/layers/nuxt/theme-lab/public/brand/logo/variants/mark-7-dark.svg +0 -6
- package/layers/nuxt/theme-lab/public/brand/logo/variants/mark-7.svg +0 -6
- package/layers/nuxt/theme-lab/public/brand/logo/variants/mark-8-dark.svg +0 -5
- package/layers/nuxt/theme-lab/public/brand/logo/variants/mark-8.svg +0 -5
- package/layers/nuxt/theme-lab/public/brand/logo/variants/wordmark-11-dark.svg +0 -173
- package/layers/nuxt/theme-lab/public/brand/logo/variants/wordmark-11.svg +0 -173
- package/layers/nuxt/theme-lab/public/favicon.ico +0 -0
- package/layers/nuxt/theme-lab/public/site.webmanifest +0 -32
- package/plans/shared-theme-lab.md +0 -136
- /package/dist/viewer/brand/logo/{variants/mark-10-dark.svg → mark-dark.svg} +0 -0
- /package/dist/viewer/brand/logo/{variants/mark-10.svg → mark.svg} +0 -0
- /package/dist/viewer/brand/logo/{variants/wordmark-3-dark.svg → wordmark-dark.svg} +0 -0
- /package/dist/viewer/brand/logo/{variants/wordmark-3.svg → wordmark.svg} +0 -0
- /package/{dist/viewer/brand/icons/marks/m10 → layers/nuxt/theme/public/brand/icons}/apple-touch-icon.png +0 -0
- /package/layers/nuxt/{theme-lab → theme}/public/brand/icons/businesslens-app-icon.svg +0 -0
- /package/layers/nuxt/{theme-lab → theme}/public/brand/icons/businesslens-maskable-icon.svg +0 -0
- /package/{dist/viewer/brand/icons/marks/m10 → layers/nuxt/theme/public/brand/icons}/favicon-32.png +0 -0
- /package/{dist/viewer/brand/icons/marks/m10 → layers/nuxt/theme/public/brand/icons}/favicon.ico +0 -0
- /package/{dist/viewer/brand/icons/marks/m10 → layers/nuxt/theme/public/brand/icons}/favicon.svg +0 -0
- /package/layers/nuxt/{theme-lab → theme}/public/brand/icons/icon-1024.png +0 -0
- /package/{dist/viewer/brand/icons/marks/m10 → layers/nuxt/theme/public/brand/icons}/icon-192.png +0 -0
- /package/{dist/viewer/brand/icons/marks/m10 → layers/nuxt/theme/public/brand/icons}/icon-512.png +0 -0
- /package/{dist/viewer/brand/icons/marks/m10 → layers/nuxt/theme/public/brand/icons}/maskable-icon-512.png +0 -0
- /package/layers/nuxt/{theme-lab/public/brand/logo/variants/mark-10-dark.svg → theme/public/brand/logo/mark-dark.svg} +0 -0
- /package/layers/nuxt/{theme-lab/public/brand/logo/variants/mark-10.svg → theme/public/brand/logo/mark.svg} +0 -0
- /package/layers/nuxt/{theme-lab/public/brand/logo/variants/wordmark-3-dark.svg → theme/public/brand/logo/wordmark-dark.svg} +0 -0
- /package/layers/nuxt/{theme-lab/public/brand/logo/variants/wordmark-3.svg → theme/public/brand/logo/wordmark.svg} +0 -0
- /package/layers/nuxt/{theme-lab/public/brand/icons → theme/public}/favicon.ico +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,291 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.8.0] - 2026-08-25
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Co-located assets.** Files beside `<type>.md` are product assets owned by
|
|
15
|
+
the entity; anything under the reserved `implementation/` directory
|
|
16
|
+
describes this realization and stays home. Class comes from the path, which is
|
|
17
|
+
the only rule a tool writing a capture on CI can satisfy. An optional
|
|
18
|
+
`assets:` list titles and scopes those files without ever setting their class,
|
|
19
|
+
and unlisted files stay legal.
|
|
20
|
+
- An optional `state:` on a reference or asset, valid only on a Screen and
|
|
21
|
+
validated against its `## Product states`, so several captures of one view are
|
|
22
|
+
placed beside the state each depicts instead of arriving as a flat list.
|
|
23
|
+
- A `prd` Reference kind for attaching a product requirements document as
|
|
24
|
+
`intent` or `context` without making that external document the Product Model
|
|
25
|
+
authority.
|
|
26
|
+
- An optional ordered `screens:` list on an Interface or Experience declaring
|
|
27
|
+
reading order over its own children. Reachability stays with the tree.
|
|
28
|
+
- `businesslens view` serves repository files from a read-only, extension-
|
|
29
|
+
allowlisted mount, and the report viewer renders local `visual` references and
|
|
30
|
+
co-located assets as thumbnails instead of inert text.
|
|
31
|
+
- **Every entity has a page**, at its own URL, with the authored body at full
|
|
32
|
+
width — steps, inline routes, decision points, screen states, rule statements,
|
|
33
|
+
connections, and references are no longer confined to a drawer. Every page
|
|
34
|
+
has Overview; Capability and Journey pages alone add Scenarios.
|
|
35
|
+
- **A concrete Actor's marker draws what it is.** The Actor mark carries the
|
|
36
|
+
authored `kind` as its silhouette — a person or a system, at the size every
|
|
37
|
+
other kind's mark uses — and the Product-boundary `relationship` is written as
|
|
38
|
+
a word where each reading has room for it. A Scenario Step names its Actor
|
|
39
|
+
with that mark in a chip that opens the Actor, rather than as prose.
|
|
40
|
+
- The open section and the open entity page live in the URL, so a report has
|
|
41
|
+
deep links, a working browser back button, and a refresh that lands where it
|
|
42
|
+
left. `BusinessLensReportViewer` exposes both as bindable models.
|
|
43
|
+
- Each collection states the question it answers and the derivation behind its
|
|
44
|
+
reading order, in the vocabulary the named topology views already use.
|
|
45
|
+
- Every collection opens grouped by the containment the format declares for it,
|
|
46
|
+
and says so when an entity relates to more than one group.
|
|
47
|
+
- Counterpart Screens, Experiences and Interfaces cross-link from their pages:
|
|
48
|
+
the same thing on another Interface is named as such rather than appearing to
|
|
49
|
+
be a duplicate row.
|
|
50
|
+
- One entity's neighbourhood is drawn on the named Topology canvas, at a width
|
|
51
|
+
that can render it, when the reader chooses the page's Neighbourhood action.
|
|
52
|
+
- The stable BusinessLens Product Report: an entity-first browse, search,
|
|
53
|
+
scenario, journey, and named-topology experience over one complete report
|
|
54
|
+
projection. It renders every authored entity on its page while ranking
|
|
55
|
+
collection and Overview readings for repeated human use.
|
|
56
|
+
- A shared Vue Flow foundation in the report-viewer layer (`@vue-flow/core` with a
|
|
57
|
+
`@dagrejs/dagre` layered layout, both optional peer dependencies): one
|
|
58
|
+
entity box and one container box for nine visual categories (with both
|
|
59
|
+
Scenario types distinguished in content), a fixed relation-verb
|
|
60
|
+
vocabulary, a measured Interface → Experience → Screen containment map, a
|
|
61
|
+
sitemap of the same hierarchy drawn either as a top-down tree or radially
|
|
62
|
+
from the Product core, plus focused entity filtering on the named Topology
|
|
63
|
+
surface.
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
|
|
67
|
+
- **Context is now the single location concept.** Folder schema 6 replaces
|
|
68
|
+
scalar availability boundaries and Scenario Places with one strict
|
|
69
|
+
`{ place: ... }` Context shape across Capability availability, Scenario
|
|
70
|
+
Steps, and Business Rule selectors. A Context place resolves to an Interface,
|
|
71
|
+
Experience, or Screen; Screens derive their place from their path and declare
|
|
72
|
+
no availability of their own.
|
|
73
|
+
- Product Report v10 mirrors the same model with `{ placeId: ... }` Contexts,
|
|
74
|
+
removes the former availability and Place wire records, and is the only
|
|
75
|
+
accepted report version. The CLI, report SDK, Product Report, bundled skills,
|
|
76
|
+
fixtures, and Content Feed Reader Blueprint consume schema 6 and report v10
|
|
77
|
+
directly.
|
|
78
|
+
- Product Model terminology now names the Interface → Experience → Screen
|
|
79
|
+
hierarchy directly. The under-defined “surface” alias, including
|
|
80
|
+
`surface-parent`, surface-tree IDs, and the former Delivery surfaces view, has
|
|
81
|
+
been replaced by concrete entity names and `screen-parent`.
|
|
82
|
+
- Product Report entity readings present authored Capability Context once
|
|
83
|
+
instead of repeating it in the fact strip and under “Available in.” Derived
|
|
84
|
+
Journey and Scenario Contexts stay with their concrete routes, Screen
|
|
85
|
+
placement stays in identity, and Rule Context selectors stay with
|
|
86
|
+
applicability. Journey starting places retain the exact first route Context
|
|
87
|
+
and appear as “Starts at”; raw entry-point routes remain report data rather
|
|
88
|
+
than human-facing report content.
|
|
89
|
+
- Collection rows, relations, search results, and topology entities open their
|
|
90
|
+
URL-backed pages directly. References stay in Overview, Neighbourhood opens
|
|
91
|
+
Topology, and the inspector and slideover are removed. The private report
|
|
92
|
+
experiment layer remains under the final `report-viewer-lab` name with no
|
|
93
|
+
active report experiments; the background audition remains independent in
|
|
94
|
+
`theme-lab`.
|
|
95
|
+
- **Capability and Journey Scenarios share one route-and-Steps model.** Every
|
|
96
|
+
Scenario now owns named `routes` and one ordered, typed `steps` list. An Actor
|
|
97
|
+
Step names its responsible Actor, a Journey Step may name its Capability, and
|
|
98
|
+
a contextualized Step maps every route to its exact Interface, Experience, or
|
|
99
|
+
Screen. Route-neutral Steps remain first-class without a Context. The
|
|
100
|
+
separate Journey
|
|
101
|
+
`flow`, `operation`, stage ids, per-Step route objects, Scenario-wide Actors
|
|
102
|
+
and availability, authored Screen Scenario backlinks, and Markdown `## Steps`
|
|
103
|
+
are removed. Folder schema 3 and Product Report v7 are no longer accepted;
|
|
104
|
+
this release has no compatibility reader.
|
|
105
|
+
- Every Interface now declares one required interaction `type` (`web`,
|
|
106
|
+
`mobile-app`, `desktop-app`, `cli`, `api`, `webhook`, `messaging`, `voice`,
|
|
107
|
+
or `device`). Reports preserve it directly and use it to distinguish
|
|
108
|
+
Interface contexts visually instead of guessing from ids or route names.
|
|
109
|
+
- A Journey Step names a durable Capability, never a Capability Scenario, while
|
|
110
|
+
its text states the concrete observable action or condition. Capability
|
|
111
|
+
Scenarios may split and merge without leaving dangling Journey composition
|
|
112
|
+
references.
|
|
113
|
+
- **Journey pages have one Scenario reading.** The peer `Flows` tab and the
|
|
114
|
+
duplicate Journey-local diagram are removed because they projected the same
|
|
115
|
+
authored Steps while silently dropping Steps without a Capability. The named
|
|
116
|
+
topology view is now **Journey composition**: it explicitly answers the
|
|
117
|
+
narrower Capability-composition question. Outside visible Domain groupings,
|
|
118
|
+
Capability nodes use the consistent Capability color rather than inheriting
|
|
119
|
+
a Domain color that could be mistaken for status.
|
|
120
|
+
- **Capability and Journey Scenarios share one Steps treatment.** Both render
|
|
121
|
+
the same Step-by-route matrix. Columns use the authored route name and stable
|
|
122
|
+
order; placed cells show the exact typed Interface → Experience → Screen
|
|
123
|
+
hierarchy. Step-kind labels explain Actor actions, Product actions, and
|
|
124
|
+
conditions; Capability labels appear only where they discriminate Journey
|
|
125
|
+
Steps. Steps without a Context and Context transitions are described in
|
|
126
|
+
plain language, without exposing internal route ids.
|
|
127
|
+
- **The report navigation rail lists kinds, flat.** Kinds do not nest —
|
|
128
|
+
instances do — so both Scenario kinds leave the rail and are read on the page
|
|
129
|
+
for the Capability or Journey that owns them. The Capability and Journey main
|
|
130
|
+
screens open their collections directly, without a redundant parent/Scenario
|
|
131
|
+
tab strip. Ten destinations instead of twelve, and no indentation claiming a
|
|
132
|
+
hierarchy the other eight rows have too.
|
|
133
|
+
- **Collection chrome scales with the collection.** The per-relation filter
|
|
134
|
+
dropdowns collapse into one control with a chip per *active* filter, and it is
|
|
135
|
+
not rendered at all below eight entities — seven dropdowns above four Journeys
|
|
136
|
+
was a wall, not an offer. The card-style switcher is gone; the dense row is
|
|
137
|
+
the only layout, and it carries the fact that distinguishes an entity from its
|
|
138
|
+
neighbours (a Screen's scope, a Scenario's parent) where the repeated kind
|
|
139
|
+
label used to be.
|
|
140
|
+
- Entity tables render the name of a relation the format makes single-valued
|
|
141
|
+
rather than the count `1`, and drop any column constant across the rows on
|
|
142
|
+
screen.
|
|
143
|
+
- The bundled skills carry a worked Capability Scenario. The reference every
|
|
144
|
+
skill reads described `routes`, typed `steps`, and per-route Contexts in
|
|
145
|
+
prose but showed no Scenario file, leaving the model's most structured
|
|
146
|
+
artifact to be inferred. The example is single-route, because that is the
|
|
147
|
+
case where the `routes` requirement is least guessable.
|
|
148
|
+
- The bundled skills name the Product's portable identity keys — `summary`,
|
|
149
|
+
`category`, `authors`, and `license`. Report hosts read all four, and a model
|
|
150
|
+
authored without them reaches a Blueprint incomplete.
|
|
151
|
+
- `npm run check` asserts that every entity kind, frontmatter key, and required
|
|
152
|
+
section named in `spec/format.md` also appears in the canonical skill
|
|
153
|
+
reference. The reference may be terser than the contract; it may not omit a
|
|
154
|
+
name, because an agent cannot author a key it was never told about. It found
|
|
155
|
+
the three missing Product keys above on its first run.
|
|
156
|
+
- A README for the `businesslens/nuxt/theme` layer, which shipped as a public
|
|
157
|
+
export with no documentation of its palette roles, type scale,
|
|
158
|
+
`<BusinessLensBrand>` lockup, or icon-family composable.
|
|
159
|
+
- **Folder schema 5 — a breaking change with no compatibility reader.** An
|
|
160
|
+
entity is compact as `<id>.md` until it owns an asset or typed child
|
|
161
|
+
collection, then expands to `<id>/<type>.md`. Both shapes derive the same id
|
|
162
|
+
and cannot coexist. This keeps leaf-heavy collections readable while giving
|
|
163
|
+
every kind—Screens most of all—a co-located namespace when needed.
|
|
164
|
+
`product.md` similarly expands to `product/product.md` only when it owns
|
|
165
|
+
`logo.svg`. Two coexisting shapes, and an expanded folder missing its
|
|
166
|
+
`<type>.md`, are `lint` errors — neither is a state a correct model passes
|
|
167
|
+
through. An expanded folder that owns nothing *yet* is a warning instead: the
|
|
168
|
+
rule still holds, and expansion normalizes the folder back to the compact
|
|
169
|
+
form, but an author reaches the expanded shape in two steps and the
|
|
170
|
+
intermediate step is not a defect.
|
|
171
|
+
- **The Interface → Experience → Screen hierarchy nests.** An Experience
|
|
172
|
+
belongs to exactly one Interface and
|
|
173
|
+
a Screen to exactly one scope, so the path is the parent relation. An
|
|
174
|
+
Experience no longer writes `interfaces:`, a Capability Scenario no longer
|
|
175
|
+
writes `capability:`, a Journey Scenario no longer writes `journey:`, and a
|
|
176
|
+
Screen no longer writes `availability:`. Reparenting is a `git mv` that reads
|
|
177
|
+
correctly in a pull request.
|
|
178
|
+
- **Interface, Experience, and Screen ids are qualified** by the path that
|
|
179
|
+
distinguishes them. Experience and Screen names repeat across Interfaces on purpose: two entities of the same
|
|
180
|
+
kind sharing a path suffix below their Interface are counterparts — the same
|
|
181
|
+
thing on two Interfaces. Behavior-tree ids stay bare and globally unique.
|
|
182
|
+
- **Domain is a subject axis, not a capability folder.** It now requires a
|
|
183
|
+
`## Boundary` section, and only Capability authors `domain:` — a Screen's,
|
|
184
|
+
Experience's or Journey's Domains are derived through their Capabilities
|
|
185
|
+
rather than restated where a second copy could disagree.
|
|
186
|
+
- Product Report `schemaVersion` is `10.0.0`, and the catalog media type moves
|
|
187
|
+
to `version=10`. There is exactly one accepted report version, as before.
|
|
188
|
+
- Scenario documentation moves onto its parent's page. A Scenario is not a
|
|
189
|
+
top-level entity — it has a mandatory single parent that decides its kind —
|
|
190
|
+
so Capability Scenarios are documented in `docs/capabilities.md`, Journey
|
|
191
|
+
Scenarios in `docs/journeys.md`, and the containment rule that separates them
|
|
192
|
+
in `docs/product-model.md`. The standalone `docs/scenarios.md` is removed.
|
|
193
|
+
- An external system is an Actor only when it **initiates** interaction with
|
|
194
|
+
the Product, and only then does it arrive through an Interface.
|
|
195
|
+
Interfaces are inbound by definition; an outbound connection the Product
|
|
196
|
+
opens to a third party — a polled feed, a payment processor, a mail provider,
|
|
197
|
+
a model API — is not an Interface and its far side is not an Actor. Model the
|
|
198
|
+
call inside the Capability that makes it, scope that Capability to the
|
|
199
|
+
Interfaces where an Actor observes the result, and make its
|
|
200
|
+
product-significant failure behavior a Capability Scenario. Direction, not
|
|
201
|
+
ownership, is the axis: the same third party calling the Product back through
|
|
202
|
+
a webhook is a genuine Actor with a genuine Interface. No entity type, folder
|
|
203
|
+
schema, parser, or linter behavior changes — `lint` cannot recover direction
|
|
204
|
+
from the files, so the rule lives in `spec/format.md`, the Product Model
|
|
205
|
+
docs, and the mapping rubric.
|
|
206
|
+
- The Content Feed Reader Blueprint applies that rule. It drops the
|
|
207
|
+
`feed-provider` Actor and the `syndicated-feed-integration` Interface;
|
|
208
|
+
`feed-synchronization` now lives on the Reader-facing Interfaces where its
|
|
209
|
+
result is seen, carries the RSS specification as a context Reference, and is
|
|
210
|
+
triggered by a Reader-initiated refresh on the Source list Screen — a trigger
|
|
211
|
+
the model previously never stated. Its catch-up failure variation no longer
|
|
212
|
+
contradicts itself about whether the backlog was unchanged or caught up.
|
|
213
|
+
- **Breaking.** `businesslens/nuxt/report-viewer` accepts the canonical
|
|
214
|
+
`ProductReportV10` directly and owns the complete Product Report projection
|
|
215
|
+
and topology engine. The lossy `businesslens/report/view-model` export and
|
|
216
|
+
the former whole-report audition layer are removed. The private,
|
|
217
|
+
unpublished `report-viewer-lab` remains as an empty boundary for future
|
|
218
|
+
experiments, while `theme-lab` continues to own background auditions.
|
|
219
|
+
- **Breaking.** Logo, lockup, and favicon selection are no longer theme-lab
|
|
220
|
+
experiments. The approved mark, wordmark, brand renderer, favicon, and
|
|
221
|
+
install-icon family now live at canonical paths in `businesslens/nuxt/theme`;
|
|
222
|
+
`businesslens/theme-lab/variants` exposes background choices only.
|
|
223
|
+
- The Product Report keeps entity identity collision-safe across collections,
|
|
224
|
+
preserves focus across live recompiles, separates Capability and Journey
|
|
225
|
+
Scenario readings, shows Screen-to-Journey derivation provenance, renders
|
|
226
|
+
ordered Journey path lanes, and uses fixed named views instead of a generic
|
|
227
|
+
cross-kind grouping builder. Mobile navigation is a dedicated drawer.
|
|
228
|
+
- Product Report v10 stores authored supporting H2 sections as ordered
|
|
229
|
+
`{ heading, content }` records instead of an opaque Markdown string. Lint
|
|
230
|
+
rejects Journey and Scenario lead prose, duplicate or conflicting structured
|
|
231
|
+
sections, malformed structured lists, and duplicate values in set-valued
|
|
232
|
+
relations rather than allowing authored content to disappear or inflate
|
|
233
|
+
derived relationships.
|
|
234
|
+
- The Content Feed Reader catalog Blueprint now models two actor-facing access
|
|
235
|
+
boundaries: Reader work and Visitor consumption. Feed collection is an
|
|
236
|
+
outbound Capability dependency rather than a synthetic Actor or Interface.
|
|
237
|
+
The model has two Actors, two Interfaces, three Experiences, three Domains,
|
|
238
|
+
eight Screens, ten Capabilities, twenty-four Capability Scenarios, four
|
|
239
|
+
Journeys, eight Journey Scenarios, and four Business Rules. Domains group
|
|
240
|
+
Capabilities on one axis — Sources, Reading, Collections — so no Capability
|
|
241
|
+
needs its Domain's definition widened to admit it.
|
|
242
|
+
- Both teaching models now demonstrate a Journey that is attempted and not
|
|
243
|
+
reached. The Blueprint carries two `not-achieved` Journey Scenarios and the
|
|
244
|
+
golden fixture one, so `result` is an axis with real values rather than a
|
|
245
|
+
constant, and `failureOnlyCapabilityIds` is exercised against authored
|
|
246
|
+
content instead of always deriving empty.
|
|
247
|
+
- The Product Report treats Capability Scenarios and Journey Scenarios as
|
|
248
|
+
separate entity kinds rather than one kind carrying a type flag. They remain
|
|
249
|
+
contained by their Capability or Journey while preserving their own search
|
|
250
|
+
results, pages, terminal results, and derived backlinks.
|
|
251
|
+
|
|
252
|
+
### Fixed
|
|
253
|
+
|
|
254
|
+
- The release artifact smoke test follows the promoted stable boundaries: it
|
|
255
|
+
requires the approved icon under `theme`, not an old `theme-lab` audition
|
|
256
|
+
path, and rejects the retired lossy Report View Model export instead of
|
|
257
|
+
requiring it. The stale assertions stopped the first `v0.8.0` publish
|
|
258
|
+
attempts before npm.
|
|
259
|
+
- `package.json` no longer lists `plans/shared-theme-lab.md` among its packaged
|
|
260
|
+
files. The file was deleted while the entry stayed, and npm drops a missing
|
|
261
|
+
`files` entry silently, so the packed tarball simply carried no `plans/` at
|
|
262
|
+
all and nothing reported it.
|
|
263
|
+
- The docs group allowlist no longer permits `Learn from examples`, which no
|
|
264
|
+
page has used since the feed-reader walkthrough was removed. An allowed group
|
|
265
|
+
with nothing behind it is a sidebar section the navigation cannot build.
|
|
266
|
+
- Two routes of one Scenario that repeat the same Context place sequence are
|
|
267
|
+
now a finding in both `lint` and report validation. A route id names one
|
|
268
|
+
traversal, so a second id over the same sequence claims a lane the Product
|
|
269
|
+
does not have. The Content Feed Reader Blueprint carried two:
|
|
270
|
+
`publish-on-mobile` and `unlist-from-mobile`, which never left the web
|
|
271
|
+
Interface, and could not have — neither Capability declares a mobile context.
|
|
272
|
+
- Entity pages no longer inherit the scroll offset of the collection or entity
|
|
273
|
+
that opened them, so each reading begins at its own title, identity, and lead.
|
|
274
|
+
- The local viewer resolves the Blueprint logo at `product/logo.svg`, where
|
|
275
|
+
schema 5 puts it once the Product expands.
|
|
276
|
+
- An unexpected entry in a collection is now an explicit finding. A file nested
|
|
277
|
+
one level too deep, or saved with the wrong extension, previously vanished
|
|
278
|
+
from the model with no finding at all.
|
|
279
|
+
- The local viewer's Content-Security-Policy sets `manifest-src`, which was
|
|
280
|
+
blocking `site.webmanifest`.
|
|
281
|
+
- The Product Report light and dark page surfaces are part of the shared theme
|
|
282
|
+
again. The warm base, top glow, and paper grain moved from the optional
|
|
283
|
+
theme-lab audition layer into `businesslens/nuxt/theme`, where the promoted
|
|
284
|
+
Product Report and the bundled local viewer inherit them without depending on a
|
|
285
|
+
lab layer.
|
|
286
|
+
- Journey composition no longer implies a Screen is reached from a Step that
|
|
287
|
+
cannot expose it. A Screen is authored against the whole Journey Scenario, so
|
|
288
|
+
it now attaches to the last Capability-bearing Step whose Capability declares that
|
|
289
|
+
Screen and shares an availability context with it — a non-visual integration
|
|
290
|
+
Step no longer appears to land on a Reader Screen.
|
|
291
|
+
- Journey composition lays ordered Capability-bearing Steps downward with variations side by side. A
|
|
292
|
+
left-to-right chain was wider than the canvas for a short Journey, so it
|
|
293
|
+
scaled the whole graph down and left the height unused.
|
|
294
|
+
|
|
10
295
|
## [0.7.2] - 2026-08-05
|
|
11
296
|
|
|
12
297
|
### Added
|
|
@@ -68,10 +353,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
68
353
|
- `report only` verification mode, an explicit missing-builder handoff, and an
|
|
69
354
|
unchanged-gap stopping rule. Verification findings are re-derived rather than
|
|
70
355
|
persisted in a receipt or ledger.
|
|
71
|
-
- Accepted decisions covering
|
|
72
|
-
|
|
73
|
-
[non-persisted verification](./adr/0006-verification-is-not-persisted.md),
|
|
74
|
-
and the [three-skill boundary](./adr/0007-three-skills-and-one-verification-loop.md).
|
|
356
|
+
- Accepted decisions covering repository-owned files, unified References,
|
|
357
|
+
non-persisted verification, and the three-skill boundary.
|
|
75
358
|
|
|
76
359
|
### Changed
|
|
77
360
|
|
|
@@ -271,7 +554,8 @@ Initial public launch of the repository.
|
|
|
271
554
|
`docs/format.md`.
|
|
272
555
|
- Claude plugin manifest and marketplace entry.
|
|
273
556
|
|
|
274
|
-
[Unreleased]: https://github.com/businesslens/pdd/compare/v0.
|
|
557
|
+
[Unreleased]: https://github.com/businesslens/pdd/compare/v0.8.0...HEAD
|
|
558
|
+
[0.8.0]: https://github.com/businesslens/pdd/compare/v0.7.2...v0.8.0
|
|
275
559
|
[0.7.2]: https://github.com/businesslens/pdd/compare/v0.7.1...v0.7.2
|
|
276
560
|
[0.7.1]: https://github.com/businesslens/pdd/compare/v0.7.0...v0.7.1
|
|
277
561
|
[0.7.0]: https://github.com/businesslens/pdd/compare/v0.6.0...v0.7.0
|
package/README.md
CHANGED
|
@@ -16,19 +16,19 @@ resolution loop.
|
|
|
16
16
|
```text
|
|
17
17
|
.businesslens/
|
|
18
18
|
├── README.md
|
|
19
|
-
├── product.md
|
|
20
|
-
├── actors
|
|
21
|
-
├── interfaces/
|
|
22
|
-
├──
|
|
23
|
-
├──
|
|
24
|
-
├──
|
|
25
|
-
├──
|
|
26
|
-
├── business-rules/
|
|
27
|
-
├── journeys/<id>/journey.md
|
|
28
|
-
│ └── scenarios/<id>.md
|
|
19
|
+
├── product.md # or product/product.md beside logo.svg
|
|
20
|
+
├── actors/<id>.md # or <id>/actor.md with assets
|
|
21
|
+
├── interfaces/<id>.md # or <id>/interface.md with screens/ or experiences/
|
|
22
|
+
├── domains/<id>.md # or <id>/domain.md with assets; optional collection
|
|
23
|
+
├── capabilities/<id>.md # or <id>/capability.md with scenarios/ or assets
|
|
24
|
+
├── journeys/<id>.md # or <id>/journey.md with scenarios/ or assets; optional
|
|
25
|
+
├── business-rules/<id>.md # or <id>/business-rule.md with assets
|
|
29
26
|
└── coverage.md
|
|
30
27
|
```
|
|
31
28
|
|
|
29
|
+
Leaf entities stay compact as `<id>.md`. An entity expands to
|
|
30
|
+
`<id>/<type>.md` only when it needs a namespace for assets or child entities.
|
|
31
|
+
|
|
32
32
|
## Getting started
|
|
33
33
|
|
|
34
34
|
Install the skills:
|
|
@@ -97,21 +97,57 @@ Catalog contribution stays in the CLI; there is no contribution skill.
|
|
|
97
97
|
proof or verification receipts.
|
|
98
98
|
- `coverage.status` describes model breadth: `draft` while the model itself is
|
|
99
99
|
under review, `partial` with known unmapped areas, and `complete` when the
|
|
100
|
-
intended product
|
|
100
|
+
intended product breadth is modeled.
|
|
101
101
|
- A complete model may contain zero References.
|
|
102
102
|
- A Product may expose several Interfaces—such as web, mobile, CLI, and a
|
|
103
103
|
supported API—without being classified as one of those delivery forms.
|
|
104
|
-
- Experiences are coherent usage contexts
|
|
105
|
-
Interface
|
|
106
|
-
|
|
107
|
-
-
|
|
108
|
-
|
|
104
|
+
- Experiences are optional coherent usage contexts, each belonging to exactly
|
|
105
|
+
one Interface. Availability is a list of strict Context objects whose
|
|
106
|
+
`place` is an undivided Interface or an Experience.
|
|
107
|
+
- Domains are optional regions of subject matter. Only a Capability authors
|
|
108
|
+
`domain:`; every other Domain relation is derived.
|
|
109
|
+
- Screens are optional platform-neutral product views, nested in the Interface
|
|
110
|
+
or Experience that contains them. Their path supplies their place. Product
|
|
111
|
+
assets sit beside the entity they describe; anything
|
|
112
|
+
under `implementation/` describes this realization and stays home.
|
|
109
113
|
- `lint` checks format, required content, relationships, Reference grammar, and
|
|
110
114
|
tracked code-reference paths. `verify` checks meaning against current code.
|
|
111
115
|
|
|
112
116
|
Every model creation path writes `.businesslens/README.md`. BusinessLens never
|
|
113
117
|
writes target `AGENTS.md`, `CLAUDE.md`, or root README files.
|
|
114
118
|
|
|
119
|
+
## Where the Product Model is defined
|
|
120
|
+
|
|
121
|
+
Use these sources in this order:
|
|
122
|
+
|
|
123
|
+
1. Read the [Product Model overview](./docs/product-model.md) for the mental
|
|
124
|
+
model and relationship overview.
|
|
125
|
+
2. Use [`spec/format.md`](./spec/format.md) as the normative contract for the
|
|
126
|
+
authored `.businesslens/` files. It defines every entity, file shape,
|
|
127
|
+
relation, and semantic boundary, and changes before parser or linter
|
|
128
|
+
behavior changes. Its companion [`spec/report.md`](./spec/report.md) is the
|
|
129
|
+
contract for the serialized Product Report, its portable projection, and
|
|
130
|
+
expansion.
|
|
131
|
+
3. Use the individual entity pages under [`docs/`](./docs/) for approachable
|
|
132
|
+
explanations, examples, and the relevant `lint` findings. They restate the
|
|
133
|
+
format contract and must not introduce a second definition.
|
|
134
|
+
4. Follow [`src/core/model.ts`](./src/core/model.ts),
|
|
135
|
+
[`src/core/frontmatter.ts`](./src/core/frontmatter.ts),
|
|
136
|
+
[`src/core/markdown.ts`](./src/core/markdown.ts), and
|
|
137
|
+
[`src/commands/lint.ts`](./src/commands/lint.ts) to understand what the CLI
|
|
138
|
+
parses and enforces today.
|
|
139
|
+
5. Use [`src/core/portable.ts`](./src/core/portable.ts) for the generated Product
|
|
140
|
+
Report JSON schema and relationship validation, and
|
|
141
|
+
[`src/commands/export.ts`](./src/commands/export.ts) for the authored-model to
|
|
142
|
+
report projection.
|
|
143
|
+
|
|
144
|
+
The installed skills carry self-contained format summaries and semantic
|
|
145
|
+
rubrics so agents can judge concepts that structural lint cannot prove—for
|
|
146
|
+
example, whether something is genuinely a durable Capability or a coherent
|
|
147
|
+
multi-Capability Journey. Those guides must remain consistent with
|
|
148
|
+
`spec/format.md`; they do not supersede it. Viewer backlinks and topology are
|
|
149
|
+
derived report projections, not additional authored relationships.
|
|
150
|
+
|
|
115
151
|
## Documentation
|
|
116
152
|
|
|
117
153
|
- [Introduction](./docs/index.md) · [Installation](./docs/installation.md) ·
|
|
@@ -119,11 +155,11 @@ writes target `AGENTS.md`, `CLAUDE.md`, or root README files.
|
|
|
119
155
|
- Start [from your repo](./docs/from-your-repo.md),
|
|
120
156
|
[from a Blueprint](./docs/from-a-blueprint.md), or
|
|
121
157
|
[from an idea](./docs/from-an-idea.md)
|
|
122
|
-
- [Product Model](./docs/product-model.md) ·
|
|
123
|
-
[References](./docs/references.md)
|
|
158
|
+
- [Product Model](./docs/product-model.md) · [References](./docs/references.md)
|
|
124
159
|
- [Skills](./docs/skills.md) · [CLI](./docs/cli.md) ·
|
|
125
160
|
[CI/CD](./docs/ci.md)
|
|
126
|
-
- [Format contract](./spec/format.md)
|
|
161
|
+
- [Format contract](./spec/format.md) ·
|
|
162
|
+
[Report contract](./spec/report.md)
|
|
127
163
|
|
|
128
164
|
## Nuxt layers
|
|
129
165
|
|
|
@@ -131,12 +167,14 @@ The package also exposes separately composable Nuxt layers:
|
|
|
131
167
|
|
|
132
168
|
- `businesslens/nuxt/report-viewer` renders a Product Report without owning its
|
|
133
169
|
host navigation or page shell.
|
|
134
|
-
- `businesslens/nuxt/theme` provides the stable BusinessLens palette, type,
|
|
135
|
-
semantic UI foundation
|
|
170
|
+
- `businesslens/nuxt/theme` provides the stable BusinessLens palette, type,
|
|
171
|
+
semantic UI foundation, approved surfaces, logo/wordmark renderer, and
|
|
172
|
+
browser/install icon family.
|
|
136
173
|
- `businesslens/nuxt/theme-lab` extends that stable theme with the shared,
|
|
137
|
-
opt-in background
|
|
138
|
-
|
|
139
|
-
|
|
174
|
+
opt-in background experiments used by the landing site and local report
|
|
175
|
+
viewer. A consumer that does not opt in receives the approved stable
|
|
176
|
+
presentation from `theme`; a background graduates by moving into `theme`,
|
|
177
|
+
never by a consumer depending on `theme-lab` in production.
|
|
140
178
|
|
|
141
179
|
## Safety
|
|
142
180
|
|
|
@@ -14,26 +14,5 @@ declare const BUSINESSLENS_DARK_BACKGROUNDS: BusinessLensBackgroundVariant[];
|
|
|
14
14
|
declare const BUSINESSLENS_DEFAULT_LIGHT_BACKGROUND = "l4";
|
|
15
15
|
declare const BUSINESSLENS_DEFAULT_DARK_BACKGROUND = "d1";
|
|
16
16
|
declare function findBusinessLensBackground(list: BusinessLensBackgroundVariant[], id: string | null | undefined, fallback: string): BusinessLensBackgroundVariant;
|
|
17
|
-
type BusinessLensLogoDisplay = 'mark' | 'lockup';
|
|
18
|
-
interface BusinessLensLogoVariant {
|
|
19
|
-
id: string;
|
|
20
|
-
name: string;
|
|
21
|
-
tagline: string;
|
|
22
|
-
/** Basename under `/brand/logo/variants`, without the `-dark` suffix. */
|
|
23
|
-
file: string;
|
|
24
|
-
}
|
|
25
|
-
interface BusinessLensLockupVariant extends BusinessLensLogoVariant {
|
|
26
|
-
direction: 'row' | 'column';
|
|
27
|
-
wordmarkHeight: number;
|
|
28
|
-
symbolScale: number;
|
|
29
|
-
gapRatio: number;
|
|
30
|
-
}
|
|
31
|
-
declare const BUSINESSLENS_MARK_VARIANTS: BusinessLensLogoVariant[];
|
|
32
|
-
declare const BUSINESSLENS_LOCKUP_VARIANTS: BusinessLensLockupVariant[];
|
|
33
|
-
declare const BUSINESSLENS_DEFAULT_MARK: string;
|
|
34
|
-
declare const BUSINESSLENS_DEFAULT_LOCKUP = "k3";
|
|
35
|
-
declare const BUSINESSLENS_DEFAULT_LOGO_DISPLAY: BusinessLensLogoDisplay;
|
|
36
|
-
declare function businessLensLogoSrc(variant: BusinessLensLogoVariant, dark?: boolean): string;
|
|
37
|
-
declare function findBusinessLensLogo<T extends BusinessLensLogoVariant>(list: T[], id: string | null | undefined, fallback: string): T;
|
|
38
17
|
//#endregion
|
|
39
|
-
export { BUSINESSLENS_DARK_BACKGROUNDS, BUSINESSLENS_DEFAULT_DARK_BACKGROUND, BUSINESSLENS_DEFAULT_LIGHT_BACKGROUND,
|
|
18
|
+
export { BUSINESSLENS_DARK_BACKGROUNDS, BUSINESSLENS_DEFAULT_DARK_BACKGROUND, BUSINESSLENS_DEFAULT_LIGHT_BACKGROUND, BUSINESSLENS_LIGHT_BACKGROUNDS, BusinessLensBackgroundVariant, findBusinessLensBackground };
|
|
@@ -1,35 +1,3 @@
|
|
|
1
|
-
//#region layers/nuxt/theme-lab/app/utils/businesslensThemeLabMarks.mjs
|
|
2
|
-
var businesslensThemeLabMarks_default = {
|
|
3
|
-
defaultMark: "m10",
|
|
4
|
-
marks: [
|
|
5
|
-
{
|
|
6
|
-
id: "m4",
|
|
7
|
-
name: "Monogram",
|
|
8
|
-
tagline: "BL ligature cut from an aperture hex",
|
|
9
|
-
file: "mark-4"
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
id: "m7",
|
|
13
|
-
name: "Tile",
|
|
14
|
-
tagline: "Ink BL on a solid brass tile",
|
|
15
|
-
file: "mark-7"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
id: "m8",
|
|
19
|
-
name: "Ligature",
|
|
20
|
-
tagline: "Bare BL with a terracotta full point",
|
|
21
|
-
file: "mark-8"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
id: "m10",
|
|
25
|
-
name: "Bare",
|
|
26
|
-
tagline: "Bare BL ligature, no punctuation",
|
|
27
|
-
file: "mark-10"
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
//#endregion
|
|
33
1
|
//#region layers/nuxt/theme-lab/app/utils/businesslensThemeLabVariants.ts
|
|
34
2
|
const BUSINESSLENS_LIGHT_BACKGROUNDS = [{
|
|
35
3
|
id: "l2",
|
|
@@ -79,36 +47,6 @@ const BUSINESSLENS_DEFAULT_DARK_BACKGROUND = "d1";
|
|
|
79
47
|
function findBusinessLensBackground(list, id, fallback) {
|
|
80
48
|
return list.find((item) => item.id === id) ?? list.find((item) => item.id === fallback);
|
|
81
49
|
}
|
|
82
|
-
const BUSINESSLENS_MARK_VARIANTS = businesslensThemeLabMarks_default.marks;
|
|
83
|
-
const BUSINESSLENS_STAMP_GEOMETRY = {
|
|
84
|
-
direction: "row",
|
|
85
|
-
wordmarkHeight: 26,
|
|
86
|
-
symbolScale: 1.31,
|
|
87
|
-
gapRatio: .25
|
|
88
|
-
};
|
|
89
|
-
const BUSINESSLENS_LOCKUP_VARIANTS = [{
|
|
90
|
-
id: "k3",
|
|
91
|
-
name: "Stamp",
|
|
92
|
-
tagline: "Letterspaced caps between hairline rules",
|
|
93
|
-
file: "wordmark-3",
|
|
94
|
-
...BUSINESSLENS_STAMP_GEOMETRY
|
|
95
|
-
}, {
|
|
96
|
-
id: "k11",
|
|
97
|
-
name: "Brass Lens",
|
|
98
|
-
tagline: "Neutral Business with the Lens in brass",
|
|
99
|
-
file: "wordmark-11",
|
|
100
|
-
...BUSINESSLENS_STAMP_GEOMETRY
|
|
101
|
-
}];
|
|
102
|
-
const BUSINESSLENS_DEFAULT_MARK = businesslensThemeLabMarks_default.defaultMark;
|
|
103
|
-
const BUSINESSLENS_DEFAULT_LOCKUP = "k3";
|
|
104
|
-
const BUSINESSLENS_DEFAULT_LOGO_DISPLAY = "lockup";
|
|
105
|
-
const BUSINESSLENS_LOGO_BASE = "/brand/logo/variants";
|
|
106
|
-
function businessLensLogoSrc(variant, dark = false) {
|
|
107
|
-
return `${BUSINESSLENS_LOGO_BASE}/${variant.file}${dark ? "-dark" : ""}.svg`;
|
|
108
|
-
}
|
|
109
|
-
function findBusinessLensLogo(list, id, fallback) {
|
|
110
|
-
return list.find((item) => item.id === id) ?? list.find((item) => item.id === fallback);
|
|
111
|
-
}
|
|
112
50
|
|
|
113
51
|
//#endregion
|
|
114
|
-
export { BUSINESSLENS_DARK_BACKGROUNDS, BUSINESSLENS_DEFAULT_DARK_BACKGROUND, BUSINESSLENS_DEFAULT_LIGHT_BACKGROUND,
|
|
52
|
+
export { BUSINESSLENS_DARK_BACKGROUNDS, BUSINESSLENS_DEFAULT_DARK_BACKGROUND, BUSINESSLENS_DEFAULT_LIGHT_BACKGROUND, BUSINESSLENS_LIGHT_BACKGROUNDS, findBusinessLensBackground };
|