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.
- package/CHANGELOG.md +145 -2
- package/README.md +9 -8
- package/dist/cli.js +1320 -230
- package/dist/{logo-Bmv9IEAA.js → logo-ByUBSRUb.js} +1 -1
- package/dist/logo.js +1 -1
- package/dist/{portable-D2Rj2CNS.d.ts → portable-DLmp7hXK.d.ts} +543 -129
- package/dist/{portable-CftE4zWs.js → portable-DmgFo37G.js} +585 -98
- package/dist/{report-digest--J16_c08.js → report-digest-BtjFf-4A.js} +1 -1
- package/dist/report-digest.d.ts +1 -1
- package/dist/report-digest.js +2 -2
- package/dist/report.d.ts +3 -3
- package/dist/report.js +2 -2
- package/dist/viewer/200.html +1 -1
- package/dist/viewer/404.html +1 -1
- package/dist/viewer/_nuxt/BBXYWdOb.js +34 -0
- package/dist/viewer/_nuxt/{BCK3bAyi.js → BEJDMCE-.js} +1 -1
- package/dist/viewer/_nuxt/{CWdMyG9_.js → CJcIrhQV.js} +1 -1
- package/dist/viewer/_nuxt/{45uNmsQO.js → Cg_HAYWl.js} +7 -7
- package/dist/viewer/_nuxt/builds/latest.json +1 -1
- package/dist/viewer/_nuxt/builds/meta/dfaa63d9-42ea-4651-be04-5b083359905b.json +1 -0
- package/dist/viewer/_nuxt/entry.C6eP1tkN.css +1 -0
- package/dist/viewer/_nuxt/index.CKCUwjo1.css +1 -0
- package/dist/viewer/index.html +1 -1
- package/docs/business-rules.md +301 -33
- package/docs/capabilities.md +113 -29
- package/docs/ci.md +4 -2
- package/docs/cli-contribute.md +3 -3
- package/docs/cli-export.md +6 -5
- package/docs/cli-install.md +11 -2
- package/docs/cli-lint.md +15 -7
- package/docs/cli-open.md +2 -2
- package/docs/cli-pull.md +26 -1
- package/docs/domains.md +19 -9
- package/docs/entities.md +395 -0
- package/docs/experiences.md +31 -17
- package/docs/from-a-blueprint.md +3 -3
- package/docs/from-an-idea.md +1 -1
- package/docs/index.md +1 -1
- package/docs/installation.md +10 -2
- package/docs/interfaces.md +26 -14
- package/docs/journeys.md +22 -6
- package/docs/product-model.md +114 -24
- package/docs/references.md +20 -20
- package/docs/screens.md +41 -7
- package/docs/skill-businesslens-ideate.md +18 -1
- package/docs/skill-businesslens-map.md +12 -2
- package/docs/skill-businesslens-verify.md +3 -3
- package/docs/with-sdd.md +3 -3
- package/layers/nuxt/report-viewer/README.md +32 -17
- package/layers/nuxt/report-viewer/app/assets/report-viewer.css +3 -3
- package/layers/nuxt/report-viewer/app/components/BlrActorType.vue +19 -18
- package/layers/nuxt/report-viewer/app/components/BlrConnections.vue +72 -54
- package/layers/nuxt/report-viewer/app/components/BlrContextPlace.vue +9 -9
- package/layers/nuxt/report-viewer/app/components/BlrContexts.vue +2 -2
- package/layers/nuxt/report-viewer/app/components/BlrEntityLifecycle.vue +197 -0
- package/layers/nuxt/report-viewer/app/components/BlrFlowCanvas.vue +42 -9
- package/layers/nuxt/report-viewer/app/components/BlrFlowGroup.vue +5 -5
- package/layers/nuxt/report-viewer/app/components/BlrFlowLabel.vue +3 -3
- package/layers/nuxt/report-viewer/app/components/BlrFlowNode.vue +10 -10
- package/layers/nuxt/report-viewer/app/components/BlrFlowRoutedEdge.vue +135 -0
- package/layers/nuxt/report-viewer/app/components/BlrFlowSelfEdge.vue +105 -0
- package/layers/nuxt/report-viewer/app/components/BlrFlowState.vue +112 -0
- package/layers/nuxt/report-viewer/app/components/BlrKind.vue +16 -16
- package/layers/nuxt/report-viewer/app/components/BlrLinks.vue +14 -14
- package/layers/nuxt/report-viewer/app/components/BlrOverview.vue +22 -20
- package/layers/nuxt/report-viewer/app/components/BlrPageBlock.vue +18 -18
- package/layers/nuxt/report-viewer/app/components/BlrProductTopology.vue +44 -43
- package/layers/nuxt/report-viewer/app/components/BlrRail.vue +8 -8
- package/layers/nuxt/report-viewer/app/components/BlrReportShell.vue +230 -190
- package/layers/nuxt/report-viewer/app/components/{BlrEntityBody.vue → BlrResourceBody.vue} +358 -58
- package/layers/nuxt/report-viewer/app/components/{BlrEntityCard.vue → BlrResourceCard.vue} +32 -32
- package/layers/nuxt/report-viewer/app/components/{BlrEntityPage.vue → BlrResourcePage.vue} +53 -19
- package/layers/nuxt/report-viewer/app/components/BlrScenarios.vue +13 -13
- package/layers/nuxt/report-viewer/app/components/BlrSearchPalette.vue +15 -15
- package/layers/nuxt/report-viewer/app/components/BlrStepContext.vue +3 -3
- package/layers/nuxt/report-viewer/app/components/BlrStepEntity.vue +117 -0
- package/layers/nuxt/report-viewer/app/components/BusinessLensReportViewer.vue +14 -6
- package/layers/nuxt/report-viewer/app/utils/entityLifecycle.ts +192 -0
- package/layers/nuxt/report-viewer/app/utils/flowGraph.ts +154 -113
- package/layers/nuxt/report-viewer/app/utils/pageSections.ts +47 -30
- package/layers/nuxt/report-viewer/app/utils/productTopologyFilters.ts +13 -13
- package/layers/nuxt/report-viewer/app/utils/productTopologyGraphs.ts +147 -63
- package/layers/nuxt/report-viewer/app/utils/productTopologyLayout.ts +2 -2
- package/layers/nuxt/report-viewer/app/utils/productTopologyViews.ts +35 -9
- package/layers/nuxt/report-viewer/app/utils/reportPalette.ts +1 -1
- package/layers/nuxt/report-viewer/app/utils/reportWorkspace.ts +717 -137
- package/layers/nuxt/report-viewer/app/utils/{entityCards.ts → resourceCards.ts} +77 -53
- package/layers/nuxt/report-viewer/app/utils/{entityDocs.ts → resourceDocs.ts} +6 -6
- package/layers/nuxt/report-viewer/app/utils/resourceFacets.ts +226 -0
- package/layers/nuxt/report-viewer/app/utils/{entityFacts.ts → resourceFacts.ts} +49 -37
- package/layers/nuxt/report-viewer/nuxt.config.ts +5 -0
- package/package.json +4 -2
- package/skills/businesslens-ideate/SKILL.md +60 -11
- package/skills/businesslens-ideate/references/format.md +245 -69
- package/skills/businesslens-ideate/references/planning-rubric.md +28 -13
- package/skills/businesslens-map/SKILL.md +127 -19
- package/skills/businesslens-map/references/format.md +245 -69
- package/skills/businesslens-map/references/mapping-rubric.md +96 -18
- package/skills/businesslens-verify/SKILL.md +46 -13
- package/skills/businesslens-verify/references/build-handoff.md +1 -1
- package/skills/businesslens-verify/references/format.md +246 -70
- package/dist/viewer/_nuxt/B62M9XwM.js +0 -34
- package/dist/viewer/_nuxt/builds/meta/64c42d86-c8d2-45a2-b130-53ab6b26c14b.json +0 -1
- package/dist/viewer/_nuxt/entry.CLPavHBc.css +0 -1
- package/dist/viewer/_nuxt/index.DsK0G5y5.css +0 -1
- package/docs/actors.md +0 -91
- 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
|
-
## [
|
|
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.
|
|
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
|
|
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
|
-
├──
|
|
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
|
|
30
|
-
`<id>/<type>.md` only when it needs a namespace for assets or child
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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),
|