businesslens 0.8.0 → 0.9.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.
Files changed (107) hide show
  1. package/CHANGELOG.md +145 -2
  2. package/README.md +9 -8
  3. package/dist/cli.js +1320 -230
  4. package/dist/{logo-Bmv9IEAA.js → logo-ByUBSRUb.js} +1 -1
  5. package/dist/logo.js +1 -1
  6. package/dist/{portable-D2Rj2CNS.d.ts → portable-DLmp7hXK.d.ts} +543 -129
  7. package/dist/{portable-CftE4zWs.js → portable-DmgFo37G.js} +585 -98
  8. package/dist/{report-digest--J16_c08.js → report-digest-BtjFf-4A.js} +1 -1
  9. package/dist/report-digest.d.ts +1 -1
  10. package/dist/report-digest.js +2 -2
  11. package/dist/report.d.ts +3 -3
  12. package/dist/report.js +2 -2
  13. package/dist/viewer/200.html +1 -1
  14. package/dist/viewer/404.html +1 -1
  15. package/dist/viewer/_nuxt/BBXYWdOb.js +34 -0
  16. package/dist/viewer/_nuxt/{BCK3bAyi.js → BEJDMCE-.js} +1 -1
  17. package/dist/viewer/_nuxt/{CWdMyG9_.js → CJcIrhQV.js} +1 -1
  18. package/dist/viewer/_nuxt/{45uNmsQO.js → Cg_HAYWl.js} +7 -7
  19. package/dist/viewer/_nuxt/builds/latest.json +1 -1
  20. package/dist/viewer/_nuxt/builds/meta/dfaa63d9-42ea-4651-be04-5b083359905b.json +1 -0
  21. package/dist/viewer/_nuxt/entry.C6eP1tkN.css +1 -0
  22. package/dist/viewer/_nuxt/index.CKCUwjo1.css +1 -0
  23. package/dist/viewer/index.html +1 -1
  24. package/docs/business-rules.md +301 -33
  25. package/docs/capabilities.md +113 -29
  26. package/docs/ci.md +4 -2
  27. package/docs/cli-contribute.md +3 -3
  28. package/docs/cli-export.md +6 -5
  29. package/docs/cli-install.md +11 -2
  30. package/docs/cli-lint.md +15 -7
  31. package/docs/cli-open.md +2 -2
  32. package/docs/cli-pull.md +26 -1
  33. package/docs/domains.md +19 -9
  34. package/docs/entities.md +395 -0
  35. package/docs/experiences.md +31 -17
  36. package/docs/from-a-blueprint.md +3 -3
  37. package/docs/from-an-idea.md +1 -1
  38. package/docs/index.md +1 -1
  39. package/docs/installation.md +10 -2
  40. package/docs/interfaces.md +26 -14
  41. package/docs/journeys.md +22 -6
  42. package/docs/product-model.md +114 -24
  43. package/docs/references.md +20 -20
  44. package/docs/screens.md +41 -7
  45. package/docs/skill-businesslens-ideate.md +18 -1
  46. package/docs/skill-businesslens-map.md +12 -2
  47. package/docs/skill-businesslens-verify.md +3 -3
  48. package/docs/with-sdd.md +3 -3
  49. package/layers/nuxt/report-viewer/README.md +32 -17
  50. package/layers/nuxt/report-viewer/app/assets/report-viewer.css +3 -3
  51. package/layers/nuxt/report-viewer/app/components/BlrActorType.vue +19 -18
  52. package/layers/nuxt/report-viewer/app/components/BlrConnections.vue +72 -54
  53. package/layers/nuxt/report-viewer/app/components/BlrContextPlace.vue +9 -9
  54. package/layers/nuxt/report-viewer/app/components/BlrContexts.vue +2 -2
  55. package/layers/nuxt/report-viewer/app/components/BlrEntityLifecycle.vue +197 -0
  56. package/layers/nuxt/report-viewer/app/components/BlrFlowCanvas.vue +42 -9
  57. package/layers/nuxt/report-viewer/app/components/BlrFlowGroup.vue +5 -5
  58. package/layers/nuxt/report-viewer/app/components/BlrFlowLabel.vue +3 -3
  59. package/layers/nuxt/report-viewer/app/components/BlrFlowNode.vue +10 -10
  60. package/layers/nuxt/report-viewer/app/components/BlrFlowRoutedEdge.vue +135 -0
  61. package/layers/nuxt/report-viewer/app/components/BlrFlowSelfEdge.vue +105 -0
  62. package/layers/nuxt/report-viewer/app/components/BlrFlowState.vue +112 -0
  63. package/layers/nuxt/report-viewer/app/components/BlrKind.vue +16 -16
  64. package/layers/nuxt/report-viewer/app/components/BlrLinks.vue +14 -14
  65. package/layers/nuxt/report-viewer/app/components/BlrOverview.vue +22 -20
  66. package/layers/nuxt/report-viewer/app/components/BlrPageBlock.vue +18 -18
  67. package/layers/nuxt/report-viewer/app/components/BlrProductTopology.vue +44 -43
  68. package/layers/nuxt/report-viewer/app/components/BlrRail.vue +8 -8
  69. package/layers/nuxt/report-viewer/app/components/BlrReportShell.vue +230 -190
  70. package/layers/nuxt/report-viewer/app/components/{BlrEntityBody.vue → BlrResourceBody.vue} +358 -58
  71. package/layers/nuxt/report-viewer/app/components/{BlrEntityCard.vue → BlrResourceCard.vue} +32 -32
  72. package/layers/nuxt/report-viewer/app/components/{BlrEntityPage.vue → BlrResourcePage.vue} +53 -19
  73. package/layers/nuxt/report-viewer/app/components/BlrScenarios.vue +13 -13
  74. package/layers/nuxt/report-viewer/app/components/BlrSearchPalette.vue +15 -15
  75. package/layers/nuxt/report-viewer/app/components/BlrStepContext.vue +3 -3
  76. package/layers/nuxt/report-viewer/app/components/BlrStepEntity.vue +117 -0
  77. package/layers/nuxt/report-viewer/app/components/BusinessLensReportViewer.vue +14 -6
  78. package/layers/nuxt/report-viewer/app/utils/entityLifecycle.ts +192 -0
  79. package/layers/nuxt/report-viewer/app/utils/flowGraph.ts +154 -113
  80. package/layers/nuxt/report-viewer/app/utils/pageSections.ts +47 -30
  81. package/layers/nuxt/report-viewer/app/utils/productTopologyFilters.ts +13 -13
  82. package/layers/nuxt/report-viewer/app/utils/productTopologyGraphs.ts +147 -63
  83. package/layers/nuxt/report-viewer/app/utils/productTopologyLayout.ts +2 -2
  84. package/layers/nuxt/report-viewer/app/utils/productTopologyViews.ts +35 -9
  85. package/layers/nuxt/report-viewer/app/utils/reportPalette.ts +1 -1
  86. package/layers/nuxt/report-viewer/app/utils/reportWorkspace.ts +717 -137
  87. package/layers/nuxt/report-viewer/app/utils/{entityCards.ts → resourceCards.ts} +77 -53
  88. package/layers/nuxt/report-viewer/app/utils/{entityDocs.ts → resourceDocs.ts} +6 -6
  89. package/layers/nuxt/report-viewer/app/utils/resourceFacets.ts +226 -0
  90. package/layers/nuxt/report-viewer/app/utils/{entityFacts.ts → resourceFacts.ts} +49 -37
  91. package/layers/nuxt/report-viewer/nuxt.config.ts +5 -0
  92. package/package.json +4 -2
  93. package/skills/businesslens-ideate/SKILL.md +60 -11
  94. package/skills/businesslens-ideate/references/format.md +245 -69
  95. package/skills/businesslens-ideate/references/planning-rubric.md +28 -13
  96. package/skills/businesslens-map/SKILL.md +127 -19
  97. package/skills/businesslens-map/references/format.md +245 -69
  98. package/skills/businesslens-map/references/mapping-rubric.md +96 -18
  99. package/skills/businesslens-verify/SKILL.md +46 -13
  100. package/skills/businesslens-verify/references/build-handoff.md +1 -1
  101. package/skills/businesslens-verify/references/format.md +246 -70
  102. package/dist/viewer/_nuxt/B62M9XwM.js +0 -34
  103. package/dist/viewer/_nuxt/builds/meta/64c42d86-c8d2-45a2-b130-53ab6b26c14b.json +0 -1
  104. package/dist/viewer/_nuxt/entry.CLPavHBc.css +0 -1
  105. package/dist/viewer/_nuxt/index.DsK0G5y5.css +0 -1
  106. package/docs/actors.md +0 -91
  107. package/layers/nuxt/report-viewer/app/utils/entityFacets.ts +0 -215
package/CHANGELOG.md CHANGED
@@ -5,7 +5,149 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## [0.9.0] - 2026-09-04
9
+
10
+ ### Added
11
+
12
+ - **Entity — one resource type for every thing the Product keeps or reasons
13
+ about.** Identity, not storage, is the test. An Entity carries named facts,
14
+ optional states, and relations in product language; implementation types,
15
+ keys, indexes, join records, and regenerable representations stay out.
16
+ - **Entity relations state both ends.** `one-to-one`, `one-to-many`, and
17
+ `many-to-many` read from the declaring Entity to its target; the inverse is
18
+ derived so two files cannot disagree. Entity pages and the *What it keeps*
19
+ topology view render the product's own relationship graph.
20
+ - **Business Rules can express authorization.** An Entity target selects an
21
+ operation, facts, states, and optional Contexts. `permits` grants name
22
+ actors, a related Entity path, self, unattended work, or configuration, with
23
+ optional fact and state conditions. `lint` rejects Steps and Screens that no
24
+ applicable grant can permit, without claiming runtime authorization has been
25
+ proved.
26
+ - **A Scenario Step says what it does to the Product's things.** Every Step
27
+ carries `entities: []` or entries shaped as
28
+ `{ entity, as, effect, from, to }`, where `effect` is
29
+ `creates|changes|removes|reads`. Lifecycles and reverse edges are composed
30
+ from acceptance Steps rather than authored a second time.
31
+ - **Unattended Scenarios.** A first condition Step may state
32
+ `unattended: true` for schedules, expiry, retry, and other Product-owned
33
+ behavior with no Actor.
34
+ - `agent` joins the Interface types, and an Interface may own shared Screens
35
+ beside its Experiences. A shared Screen is inside every Experience of its
36
+ Interface: a Capability it exposes must be available in each, a Step on it is
37
+ inside a Capability's availability only when every Experience is, and that
38
+ Step counts as Scenario coverage for each.
39
+ - **A Domain states what its Boundary excludes**, in the authored folder and on
40
+ the wire.
41
+ - **The Product Report renders every Entity edge.** Entities have a rail entry,
42
+ collection, page, search results, facts, relations, composed lifecycle, and
43
+ topology presence. An Entity with States reads its lifecycle as a state
44
+ machine on its own tab, with each selecting Rule's grants in full. Scenario
45
+ Steps show what they create, change, remove, or read; Journey outcomes
46
+ summarize what they leave behind; Rules read their grants as sentences.
47
+ - **`spec/rejected.md`** — shapes designed far enough to be costed and then
48
+ chosen against, so the same argument is not had twice. It binds nothing and
49
+ takes rejections and deferrals only: never a plan, a status, or a file
50
+ reference. Entries are appended, so reopening a decision means a superseding
51
+ entry rather than an edit. It carries what a format or report change most
52
+ often re-proposes — tags and free-form metadata, a glossary resource type,
53
+ typed facts, `actors/` as its own collection, permission on a Capability
54
+ target, `transitions` on the Entity, the permission algebra's discarded
55
+ spellings, and Blueprint provenance.
56
+ - BusinessLens now keeps a reviewed Product Model of itself. The Content Feed
57
+ Reader Blueprint and golden Fixture Shop were expanded to exercise Entities,
58
+ relations, lifecycles, unattended behavior, and permission Rules.
59
+
60
+ ### Changed
61
+
62
+ - **Folder schema 8 and Product Report v13 are the only accepted contracts.**
63
+ Historical reports are refused rather than migrated. The report SDK exports
64
+ `ProductReportV13Schema`, `ProductReportV13`, the unversioned current
65
+ aliases, Entity/fact/relation types, Step effect types, and grant types.
66
+ - **A Capability no longer declares Entities and an Entity no longer declares
67
+ transitions.** Scenario Steps are the single source of truth for what happens
68
+ to the things the Product keeps.
69
+ - `## Information kept` is a list of uniquely named facts, so a Rule can govern
70
+ one fact exactly. `## Product states` is retired.
71
+ - Behavioral ids are verb-noun and reuse vocabulary the model already declares.
72
+ Entity, Domain, and Business Rule ids do not begin with a verb. The linter
73
+ derives these naming findings rather than asking an author to judge them.
74
+ - Whether an Interface needs Experiences, and whether it divides, is derived
75
+ rather than judged: audiences are disjoint when no available Capability
76
+ bridges them, with the counterpart exception for symmetric platform pairs.
77
+ Interface entry-point keys may name the Interface's type or another Interface
78
+ from which it is reached.
79
+ - A Business Rule governs at least two behaviors or an independent Context, and
80
+ a Domain states what its Boundary excludes. Both are now linted.
81
+ - **The installer decides ownership by its manifest alone.** A directory that
82
+ merely names a skill and mentions BusinessLens is somebody else's; retired
83
+ skills are removed only when the manifest recorded them; every harness is
84
+ checked before any is written, so a refusal leaves nothing changed. This is
85
+ visible on upgrade: an installation made before the marker existed carries no
86
+ proof it is ours, so `install` and `update` refuse it with *Refusing to
87
+ overwrite … Pass `--force`*. One `--force` re-adopts it, and every later run
88
+ is marked.
89
+ - `businesslens-map`, `businesslens-ideate`, and the authoring branches of
90
+ `businesslens-verify` settle undetermined boundary, granularity, naming, and
91
+ acceptance calls in rounds before writing. They attach the evidence they read
92
+ and surface remaining judgment calls explicitly; ideate's proposed delta ends
93
+ with a `Judgment calls` section, as map's already did.
94
+ - `businesslens-verify` re-derives findings from the current model and
95
+ repository, verifies Entity facts, states, relations, composed transitions,
96
+ Step effects, and Rule grants, and never persists a workflow ledger.
97
+ - The docs define each resource type on its owning page. Actor guidance moved
98
+ into Entities, Capability and Journey pages own their Scenario fields,
99
+ Business Rules owns permission semantics, and the catalog transport — the
100
+ report media type and its `version` parameter — is written where a catalog
101
+ operator reads it.
102
+ - The open page tab lives in the URL (`t`), so a Lifecycle or Scenarios tab
103
+ survives a refresh and can be linked.
104
+ - **The design record under `plans/` is retired; the constraints it carried
105
+ moved into the registers that govern them.** `AGENTS.md` gains *How format
106
+ decisions are judged* — the shipped agent as the standard a rule must meet,
107
+ the ranked quality axes, empirical double-authoring, descriptive and
108
+ generative use judged equally, and the pull-request diff as the binding human
109
+ surface. Its report viewer standards gain four rendering rules and the
110
+ four-row test for making a section render as more than prose.
111
+
112
+ ### Removed
113
+
114
+ - **`actors/` is no longer a collection, and Actor is no longer a resource
115
+ type.** A person or system that acts is an Entity with
116
+ `kind: person|system` and `acts: external|internal`. Actor remains a role.
117
+
118
+ ### Fixed
119
+
120
+ - **`blueprint pull` asks for the report version it can read, and refuses
121
+ another.** The Accept header is derived from the schema's major, and a
122
+ catalog answering with a different `version` parameter is refused before the
123
+ body is parsed. A report of another schema version, from a catalog or a file,
124
+ is refused in one sentence naming both versions instead of a Zod issue dump.
125
+ - **`blueprint open` and `pull` keep the author's coverage prose.** Only
126
+ `method` is rewritten, as the report contract says; the note that
127
+ implementation alignment has not been verified here now lives in `method`
128
+ with the other origin claim, and `limitations` and `rationale` come through
129
+ exactly as authored.
130
+ - **An Experience's `interfaceIds` is exactly the Interface its id names.**
131
+ Expansion files an Experience by its qualified id, so a list saying anything
132
+ else was a second encoding of containment — a report could validate under one
133
+ Interface and expand under another.
134
+ - The stable viewer keeps the current page and its filters through a recompile,
135
+ so `businesslens view` can stay open while the model is edited.
136
+ - The packed Nuxt Layer consumer, viewer documentation, and package manifest
137
+ stay aligned with the current report major; generated Layer `node_modules`
138
+ are excluded from the npm tarball; and `check-repo` pins both registers and
139
+ the CLI header to the report schema's major, so the version cannot go stale
140
+ in prose the way it once did in code.
141
+
142
+ ### Security
143
+
144
+ - **The installer follows no name it did not write.** The installation manifest
145
+ is read out of the target repository, which BusinessLens treats as untrusted,
146
+ and every name it records reaches a recursive remove. A `skills` entry that is
147
+ not a plain directory name now invalidates the marker, a recorded name this
148
+ Product could not have written is left alone, and every removal must resolve
149
+ to a direct child of the skills directory — so a crafted manifest can no
150
+ longer point `install` at a directory outside it.
9
151
 
10
152
  ## [0.8.0] - 2026-08-25
11
153
 
@@ -554,7 +696,8 @@ Initial public launch of the repository.
554
696
  `docs/format.md`.
555
697
  - Claude plugin manifest and marketplace entry.
556
698
 
557
- [Unreleased]: https://github.com/businesslens/pdd/compare/v0.8.0...HEAD
699
+ [Unreleased]: https://github.com/businesslens/pdd/compare/v0.9.0...HEAD
700
+ [0.9.0]: https://github.com/businesslens/pdd/compare/v0.8.0...v0.9.0
558
701
  [0.8.0]: https://github.com/businesslens/pdd/compare/v0.7.2...v0.8.0
559
702
  [0.7.2]: https://github.com/businesslens/pdd/compare/v0.7.1...v0.7.2
560
703
  [0.7.1]: https://github.com/businesslens/pdd/compare/v0.7.0...v0.7.1
package/README.md CHANGED
@@ -6,7 +6,8 @@
6
6
 
7
7
  **Product-Driven Development for coding agents.** BusinessLens keeps intended
8
8
  product behavior in a Git-tracked `.businesslens/` Product Model: who the
9
- product serves, what they accomplish, and which rules must remain true.
9
+ product serves, what they accomplish, what it keeps and what changes it, and
10
+ which rules must remain true, including who may act.
10
11
 
11
12
  The model is Markdown, reviewable in pull requests, and useful without a hosted
12
13
  service. `businesslens lint` checks its structure. The `businesslens-verify`
@@ -17,7 +18,7 @@ resolution loop.
17
18
  .businesslens/
18
19
  ├── README.md
19
20
  ├── product.md # or product/product.md beside logo.svg
20
- ├── actors/<id>.md # or <id>/actor.md with assets
21
+ ├── entities/<id>.md # or <id>/entity.md with assets; the ones that act carry kind and acts
21
22
  ├── interfaces/<id>.md # or <id>/interface.md with screens/ or experiences/
22
23
  ├── domains/<id>.md # or <id>/domain.md with assets; optional collection
23
24
  ├── capabilities/<id>.md # or <id>/capability.md with scenarios/ or assets
@@ -26,8 +27,8 @@ resolution loop.
26
27
  └── coverage.md
27
28
  ```
28
29
 
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.
30
+ Leaf resources stay compact as `<id>.md`. A resource expands to
31
+ `<id>/<type>.md` only when it needs a namespace for assets or child resources.
31
32
 
32
33
  ## Getting started
33
34
 
@@ -93,7 +94,7 @@ Catalog contribution stays in the CLI; there is no contribution skill.
93
94
  ## Product Model semantics
94
95
 
95
96
  - `references` optionally attach intent, implementation, or context artifacts
96
- to any semantic entity. They are navigation and supporting material, not
97
+ to any semantic resource. They are navigation and supporting material, not
97
98
  proof or verification receipts.
98
99
  - `coverage.status` describes model breadth: `draft` while the model itself is
99
100
  under review, `partial` with known unmapped areas, and `complete` when the
@@ -108,7 +109,7 @@ Catalog contribution stays in the CLI; there is no contribution skill.
108
109
  `domain:`; every other Domain relation is derived.
109
110
  - Screens are optional platform-neutral product views, nested in the Interface
110
111
  or Experience that contains them. Their path supplies their place. Product
111
- assets sit beside the entity they describe; anything
112
+ assets sit beside the resource they describe; anything
112
113
  under `implementation/` describes this realization and stays home.
113
114
  - `lint` checks format, required content, relationships, Reference grammar, and
114
115
  tracked code-reference paths. `verify` checks meaning against current code.
@@ -123,12 +124,12 @@ Use these sources in this order:
123
124
  1. Read the [Product Model overview](./docs/product-model.md) for the mental
124
125
  model and relationship overview.
125
126
  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
+ authored `.businesslens/` files. It defines every resource type, file shape,
127
128
  relation, and semantic boundary, and changes before parser or linter
128
129
  behavior changes. Its companion [`spec/report.md`](./spec/report.md) is the
129
130
  contract for the serialized Product Report, its portable projection, and
130
131
  expansion.
131
- 3. Use the individual entity pages under [`docs/`](./docs/) for approachable
132
+ 3. Use the individual resource type pages under [`docs/`](./docs/) for approachable
132
133
  explanations, examples, and the relevant `lint` findings. They restate the
133
134
  format contract and must not introduce a second definition.
134
135
  4. Follow [`src/core/model.ts`](./src/core/model.ts),