businesslens 0.10.0 → 0.11.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 +9 -0
- package/dist/viewer/200.html +1 -1
- package/dist/viewer/404.html +1 -1
- package/dist/viewer/_nuxt/builds/latest.json +1 -1
- package/dist/viewer/_nuxt/builds/meta/3da08759-853a-4f1f-97f9-21437357aef0.json +1 -0
- package/dist/viewer/index.html +1 -1
- package/docs/business-rules.md +1 -1
- package/docs/product-model.md +11 -0
- package/docs/skill-businesslens-ideate.md +12 -6
- package/docs/skill-businesslens-map.md +13 -5
- package/docs/skill-businesslens-verify.md +13 -0
- package/package.json +1 -1
- package/skills/businesslens-ideate/SKILL.md +12 -9
- package/skills/businesslens-ideate/references/format.md +14 -1
- package/skills/businesslens-ideate/references/planning-rubric.md +7 -4
- package/skills/businesslens-map/SKILL.md +16 -13
- package/skills/businesslens-map/references/format.md +14 -1
- package/skills/businesslens-map/references/mapping-rubric.md +3 -1
- package/skills/businesslens-verify/SKILL.md +15 -1
- package/skills/businesslens-verify/references/format.md +14 -1
- package/skills/businesslens-verify/references/verification-rubric.md +9 -0
- package/dist/viewer/_nuxt/builds/meta/a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae.json +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ 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]
|
|
9
|
+
|
|
10
|
+
## [0.11.0] - 2026-09-07
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Generated product models omit rejected approaches and settled deliberation.
|
|
15
|
+
|
|
8
16
|
## [0.10.0] - 2026-09-06
|
|
9
17
|
|
|
10
18
|
### Added
|
|
@@ -711,6 +719,7 @@ Initial public launch of the repository.
|
|
|
711
719
|
`docs/format.md`.
|
|
712
720
|
- Claude plugin manifest and marketplace entry.
|
|
713
721
|
|
|
722
|
+
[0.11.0]: https://github.com/businesslens/pdd/compare/v0.10.0...v0.11.0
|
|
714
723
|
[0.10.0]: https://github.com/businesslens/pdd/compare/v0.9.0...v0.10.0
|
|
715
724
|
[0.9.0]: https://github.com/businesslens/pdd/compare/v0.8.0...v0.9.0
|
|
716
725
|
[0.8.0]: https://github.com/businesslens/pdd/compare/v0.7.2...v0.8.0
|
package/dist/viewer/200.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.DsWXLqBw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CmwFmk8h.js"><script type="module" src="/_nuxt/CmwFmk8h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DQ3ZnyMB.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.DsWXLqBw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CmwFmk8h.js"><script type="module" src="/_nuxt/CmwFmk8h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DQ3ZnyMB.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.11.0"},app:{baseURL:"/",buildId:"3da08759-853a-4f1f-97f9-21437357aef0",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1788770970157,false]</script></body></html>
|
package/dist/viewer/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.DsWXLqBw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CmwFmk8h.js"><script type="module" src="/_nuxt/CmwFmk8h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DQ3ZnyMB.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.DsWXLqBw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CmwFmk8h.js"><script type="module" src="/_nuxt/CmwFmk8h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DQ3ZnyMB.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.11.0"},app:{baseURL:"/",buildId:"3da08759-853a-4f1f-97f9-21437357aef0",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1788770970157,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"3da08759-853a-4f1f-97f9-21437357aef0","timestamp":1788770959752}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"3da08759-853a-4f1f-97f9-21437357aef0","timestamp":1788770959752,"prerendered":[]}
|
package/dist/viewer/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.DsWXLqBw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CmwFmk8h.js"><script type="module" src="/_nuxt/CmwFmk8h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DQ3ZnyMB.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/_nuxt/entry.DsWXLqBw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CmwFmk8h.js"><script type="module" src="/_nuxt/CmwFmk8h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BwxPsW7a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DQ3ZnyMB.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"light";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{pddVersion:"0.11.0"},app:{baseURL:"/",buildId:"3da08759-853a-4f1f-97f9-21437357aef0",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1788770970157,false]</script></body></html>
|
package/docs/business-rules.md
CHANGED
|
@@ -89,7 +89,7 @@ own act, and the threshold is the store's decision rather than the Product's.
|
|
|
89
89
|
| `references` | no | Use the documented [Reference](./references.md) shape. |
|
|
90
90
|
| H1 and lead paragraph | yes | Name the Rule and state its durable assertion. |
|
|
91
91
|
| `## Intent` | no | Explain the outcome the Rule protects. |
|
|
92
|
-
| `## Rationale` | no | Explain
|
|
92
|
+
| `## Rationale` | no | Explain the current condition or consequence that makes the constraint necessary. Do not recount alternative designs or why they were rejected. |
|
|
93
93
|
|
|
94
94
|
## Behavioral and Context targets
|
|
95
95
|
|
package/docs/product-model.md
CHANGED
|
@@ -111,6 +111,17 @@ The model deliberately holds **no time** (milestones, phasing, v1 against v2),
|
|
|
111
111
|
cost), **no alternatives considered**, and **no risk**. All of that is real
|
|
112
112
|
product work, and none of it is *what the product does*.
|
|
113
113
|
|
|
114
|
+
This applies throughout `.businesslens/`: resource prose, supporting sections,
|
|
115
|
+
limitations, README, and additional files must not retain rejected approaches,
|
|
116
|
+
explanations of why another option was not selected, or deliberation history.
|
|
117
|
+
Keep that discussion in the conversation. An unchosen option does not become a
|
|
118
|
+
product exclusion; record exclusions only when they are established or approved
|
|
119
|
+
product constraints. Current constraints, refusal and failure behavior, and
|
|
120
|
+
material unresolved questions or missing evidence still belong in the model.
|
|
121
|
+
Business Rule rationale may explain what makes a current constraint necessary
|
|
122
|
+
without recounting discarded designs. Structural lint checks the format, not
|
|
123
|
+
whether prose follows this authoring boundary.
|
|
124
|
+
|
|
114
125
|
What overlaps is the PRD's **requirements** section — and
|
|
115
126
|
[`businesslens-ideate`](./skill-businesslens-ideate.md) produces it directly, as
|
|
116
127
|
an approved model delta. The healthy division: **the PRD says why, for whom, how
|
|
@@ -32,12 +32,18 @@ for each thing, which is what makes two models of one product comparable at all.
|
|
|
32
32
|
A quick change keeps its three batched questions instead: a small specific
|
|
33
33
|
change has no frontier.
|
|
34
34
|
|
|
35
|
-
The proposed delta
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
The proposed delta explains the selected model shape and its consequences.
|
|
36
|
+
Significant omissions, consequential modeling boundaries, and material
|
|
37
|
+
uncertainty remain visible in brief explanations of the current proposal. An
|
|
38
|
+
**Open questions** section appears only when questions remain. Review output
|
|
39
|
+
does not enumerate discarded options or repeat settled discussion on later runs.
|
|
40
|
+
|
|
41
|
+
Exploration and comparisons stay in the conversation. Generated model files
|
|
42
|
+
contain current, approved product meaning without rejected approaches or
|
|
43
|
+
deliberation history, including in resource prose, supporting sections,
|
|
44
|
+
limitations, or README. An unchosen option does not become a product exclusion.
|
|
45
|
+
Approved constraints, refusal and failure behavior, and material unresolved
|
|
46
|
+
questions or missing evidence remain visible.
|
|
41
47
|
|
|
42
48
|
Ideate never implements. Its output is the approved Product contract for the
|
|
43
49
|
plan/build flow between ideate and verify.
|
|
@@ -29,11 +29,19 @@ puts what the repository cannot settle to you before writing anything — which
|
|
|
29
29
|
surfaces are supported Interfaces, whether a family of things is one Entity or
|
|
30
30
|
several, where a Scenario ends and an `## Edge cases` bullet begins, and the
|
|
31
31
|
Product's own name for each thing — in rounds, with a recommendation on each.
|
|
32
|
-
It then presents the proposed delta for approval,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
It then presents the proposed delta for approval, explaining the selected model
|
|
33
|
+
shape and its consequences. Significant omissions, consequential modeling
|
|
34
|
+
boundaries, and material uncertainty remain visible in brief explanations of the
|
|
35
|
+
current proposal. An **Open questions** section appears only when questions
|
|
36
|
+
remain. Review output does not enumerate discarded options or repeat settled
|
|
37
|
+
discussion on later runs.
|
|
38
|
+
|
|
39
|
+
Map writes current product meaning only inside `.businesslens/` and runs
|
|
40
|
+
structural lint in an isolated runner. Generated files contain no rejected
|
|
41
|
+
approaches or deliberation history, including in resource prose, supporting
|
|
42
|
+
sections, limitations, or README. An unchosen option does not become a product
|
|
43
|
+
exclusion. Established constraints, refusal and failure behavior, and material
|
|
44
|
+
unresolved questions or missing evidence remain visible.
|
|
37
45
|
|
|
38
46
|
Map never executes target code and never silently replaces a mature model.
|
|
39
47
|
Optional implementation References can provide useful navigation, not proof.
|
|
@@ -51,6 +51,19 @@ loop, and a missing builder produces a complete handoff packet. The user never
|
|
|
51
51
|
has to manually invoke Map or Ideate to continue verification. Verify persists
|
|
52
52
|
no receipt, ledger, or lifecycle state.
|
|
53
53
|
|
|
54
|
+
Its internal mapping and intent resolution write current product meaning without
|
|
55
|
+
rejected approaches or deliberation history anywhere in `.businesslens/`,
|
|
56
|
+
including resource prose, supporting sections, limitations, and README. An
|
|
57
|
+
unchosen option does not become a product exclusion. Current constraints,
|
|
58
|
+
refusal and failure behavior, and material unresolved questions or missing
|
|
59
|
+
evidence remain visible.
|
|
60
|
+
|
|
61
|
+
Proposed deltas explain the selected shape, consequential boundaries, significant
|
|
62
|
+
omissions, and material uncertainty briefly. **Open questions** appears only
|
|
63
|
+
when questions remain. Verify reports the resulting authority decision and
|
|
64
|
+
approval without enumerating discarded options or replaying settled discussion
|
|
65
|
+
on later runs.
|
|
66
|
+
|
|
54
67
|
## Allowed changes
|
|
55
68
|
|
|
56
69
|
The semantic inspection changes nothing. Automatic resolution may:
|
package/package.json
CHANGED
|
@@ -101,15 +101,11 @@ Read before authoring:
|
|
|
101
101
|
changed, or removed; Capability and Journey acceptance Scenarios;
|
|
102
102
|
relationship repairs; limitations; and implementation work implied. Get explicit approval.
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
a Business Rule, and who may perform an operation, all belong there. A
|
|
110
|
-
reviewer can see what the delta says but not what it omits, so an unstated
|
|
111
|
-
judgment call is one nobody can challenge — which makes the approval a
|
|
112
|
-
formality rather than a check.
|
|
104
|
+
Present the selected model shape and its consequences. Surface significant
|
|
105
|
+
omissions, consequential modeling boundaries, and material uncertainty needed
|
|
106
|
+
for approval. Explain these briefly in terms of the current proposal. Do not
|
|
107
|
+
enumerate discarded options or repeat settled discussion. Include
|
|
108
|
+
`Open questions` only when questions remain.
|
|
113
109
|
10. After approval, write only inside `.businesslens/`:
|
|
114
110
|
- blank slate: create the complete layout, canonical README, `.gitignore`,
|
|
115
111
|
taxonomies, product, coverage, and all approved resources;
|
|
@@ -117,6 +113,7 @@ Read before authoring:
|
|
|
117
113
|
relationships;
|
|
118
114
|
- resolution: apply only the approved narrow delta.
|
|
119
115
|
|
|
116
|
+
Write current product meaning under the guardrails below.
|
|
120
117
|
Attach to each resource the artifacts that state its intended behavior — the
|
|
121
118
|
PRD, spec, proposal or design the decision came from, with `role: intent` —
|
|
122
119
|
and preserve existing References only where they remain useful. Keep every
|
|
@@ -141,6 +138,12 @@ Read before authoring:
|
|
|
141
138
|
## Guardrails
|
|
142
139
|
|
|
143
140
|
- Never write model meaning without explicit approval.
|
|
141
|
+
- Never persist rejected approaches, reasons another option was not selected,
|
|
142
|
+
or deliberation history anywhere in `.businesslens/`, including resource prose,
|
|
143
|
+
supporting sections, limitations, README, and additional files. Keep decision
|
|
144
|
+
discussion in the conversation. An unchosen option is not a product exclusion;
|
|
145
|
+
preserve approved constraints, refusal and failure behavior, and material
|
|
146
|
+
unresolved questions or missing evidence.
|
|
144
147
|
- Never present a proposal as a decision or reopen a decision already supplied
|
|
145
148
|
by a verification handoff.
|
|
146
149
|
- Keep model prose at product altitude; do not invent stacks, endpoints,
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Product Model format
|
|
2
2
|
|
|
3
|
+
Author current, approved product meaning. Do not persist alternatives considered,
|
|
4
|
+
rejected approaches, explanations of why another option was not selected, or
|
|
5
|
+
deliberation history anywhere in `.businesslens/`, including resource prose,
|
|
6
|
+
supporting sections, limitations, README, and additional files. Keep discussion
|
|
7
|
+
needed to reach a decision in the conversation; record the resulting behavior
|
|
8
|
+
without replaying settled discussion on later runs. An unchosen option is not a
|
|
9
|
+
product exclusion: record exclusions only when they are established or approved
|
|
10
|
+
product constraints. Preserve observable refusal and failure behavior, current
|
|
11
|
+
constraints, and material unresolved questions or missing evidence. Structural
|
|
12
|
+
lint does not determine whether prose contains deliberation history.
|
|
13
|
+
|
|
3
14
|
## Layout
|
|
4
15
|
|
|
5
16
|
A representative model looks like this:
|
|
@@ -200,7 +211,9 @@ not contain another H1 or H2.
|
|
|
200
211
|
information changes carry no state to select by). A value is a scalar or
|
|
201
212
|
`{ configuredBy: <entity-id> }`. Permission claims appear only here. A Rule
|
|
202
213
|
on exactly one behavioral target with no `contexts` is a warning; Entity and
|
|
203
|
-
Context targets are always valid.
|
|
214
|
+
Context targets are always valid. Rationale explains the current condition or
|
|
215
|
+
consequence that makes the constraint necessary; it never recounts alternative
|
|
216
|
+
designs or why they were rejected.
|
|
204
217
|
- Journey: at least one unique `actors` entry, H1, no lead prose, `## Goal`,
|
|
205
218
|
and `## Success criterion`. A Journey is a stable goal, not a route or
|
|
206
219
|
Capability wrapper. Every Journey needs achieved Journey Scenario coverage
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
identified Capabilities, and place every named route at its most-specific Context place.
|
|
59
59
|
- Use a decision point only when branches converge on the same result without
|
|
60
60
|
changing the Capability sequence. Otherwise write separate Scenarios.
|
|
61
|
-
- Record intent
|
|
62
|
-
|
|
61
|
+
- Record intent as the outcome a boundary or behavior protects, without
|
|
62
|
+
comparisons to discarded designs.
|
|
63
63
|
- Do not assume parity across Interfaces. Decide each availability Context and
|
|
64
64
|
every Scenario's Step Contexts independently.
|
|
65
65
|
|
|
@@ -78,8 +78,11 @@ that apply to all routes may omit `contexts`, and Journey Steps may omit Capabil
|
|
|
78
78
|
|
|
79
79
|
- Propose concrete drafts and let the user correct them.
|
|
80
80
|
- Batch related open questions; ask only decisions the user must make.
|
|
81
|
-
-
|
|
82
|
-
|
|
81
|
+
- While a choice remains open, discuss a recommendation and its tradeoff in the
|
|
82
|
+
conversation. After resolution, record the resulting product meaning without
|
|
83
|
+
retaining discarded directions or replaying settled discussion on later runs.
|
|
84
|
+
- Record material unresolved points as limitations instead of guessing; an
|
|
85
|
+
unchosen option is not a limitation or product exclusion.
|
|
83
86
|
- Keep screenshots, mockups, research, and sitemaps external. References may
|
|
84
87
|
attach them with `role: intent` or `role: context`, but BusinessLens neither
|
|
85
88
|
creates nor certifies them.
|
|
@@ -64,7 +64,8 @@ Read before authoring:
|
|
|
64
64
|
close, **split**: a merge stays available to anyone later, while a collapse
|
|
65
65
|
deletes the difference and leaves nothing saying it was ever a question. Put
|
|
66
66
|
both shapes and their counts to the author when you can; when there is no
|
|
67
|
-
author to ask, split and
|
|
67
|
+
author to ask, split and surface the unresolved granularity question in the
|
|
68
|
+
proposed delta.
|
|
68
69
|
Name each fact the Product keeps (`- **Name** — prose`) so a Rule can cite
|
|
69
70
|
it. **Every Step says what it does to the Product's things**: `entities` is
|
|
70
71
|
required on every Step — creates, changes, removes, or reads, with the state
|
|
@@ -154,7 +155,7 @@ Read before authoring:
|
|
|
154
155
|
|
|
155
156
|
**With no author reachable**, do not quietly choose. Apply the recorded
|
|
156
157
|
defaults — split rather than collapse, omit rather than assert — and carry
|
|
157
|
-
every unanswered question into `
|
|
158
|
+
every unanswered question into `Open questions` as an open question rather
|
|
158
159
|
than a settled decision.
|
|
159
160
|
|
|
160
161
|
Those defaults key on the call being close, so a rule that appears to settle
|
|
@@ -167,19 +168,15 @@ Read before authoring:
|
|
|
167
168
|
uncertainty. Get explicit approval for product meaning. Do not silently
|
|
168
169
|
replace a mature model.
|
|
169
170
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
Business Rule, and whether an authorization check in the code is product
|
|
176
|
-
meaning — a grant — or only implementation, all belong there.
|
|
177
|
-
A reviewer can see what the model says but
|
|
178
|
-
not what it omits, so an unstated judgment call is one nobody can challenge —
|
|
179
|
-
which makes the approval a formality rather than a check.
|
|
171
|
+
Present the selected model shape and its consequences. Surface significant
|
|
172
|
+
omissions, consequential modeling boundaries, and material uncertainty needed
|
|
173
|
+
for approval. Explain these briefly in terms of the current proposal. Do not
|
|
174
|
+
enumerate discarded options or repeat settled discussion. Include
|
|
175
|
+
`Open questions` only when questions remain.
|
|
180
176
|
9. Write only inside `.businesslens/` after approval. Create the complete
|
|
181
177
|
authored layout when absent, including the canonical `.businesslens/README.md`
|
|
182
|
-
and `.gitignore`.
|
|
178
|
+
and `.gitignore`. Write current product meaning under the guardrails below.
|
|
179
|
+
Set coverage by model breadth:
|
|
183
180
|
- `draft` while the model itself still needs author review;
|
|
184
181
|
- `partial` when useful but known areas remain unmapped;
|
|
185
182
|
- `complete` only when the intended product breadth is modeled.
|
|
@@ -199,6 +196,12 @@ Read before authoring:
|
|
|
199
196
|
## Guardrails
|
|
200
197
|
|
|
201
198
|
- Describe established behavior, never desired behavior.
|
|
199
|
+
- Never persist rejected approaches, reasons another option was not selected,
|
|
200
|
+
or deliberation history anywhere in `.businesslens/`, including resource prose,
|
|
201
|
+
supporting sections, limitations, README, and additional files. Keep decision
|
|
202
|
+
discussion in the conversation. An unchosen option is not a product exclusion;
|
|
203
|
+
preserve established constraints, refusal and failure behavior, and material
|
|
204
|
+
unresolved questions or missing evidence.
|
|
202
205
|
- Write no placeholder resources and claim no certainty beyond inspected source.
|
|
203
206
|
- Never write outside `.businesslens/`; leave target `AGENTS.md`, `CLAUDE.md`,
|
|
204
207
|
and root README byte-identical.
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Product Model format
|
|
2
2
|
|
|
3
|
+
Author current, approved product meaning. Do not persist alternatives considered,
|
|
4
|
+
rejected approaches, explanations of why another option was not selected, or
|
|
5
|
+
deliberation history anywhere in `.businesslens/`, including resource prose,
|
|
6
|
+
supporting sections, limitations, README, and additional files. Keep discussion
|
|
7
|
+
needed to reach a decision in the conversation; record the resulting behavior
|
|
8
|
+
without replaying settled discussion on later runs. An unchosen option is not a
|
|
9
|
+
product exclusion: record exclusions only when they are established or approved
|
|
10
|
+
product constraints. Preserve observable refusal and failure behavior, current
|
|
11
|
+
constraints, and material unresolved questions or missing evidence. Structural
|
|
12
|
+
lint does not determine whether prose contains deliberation history.
|
|
13
|
+
|
|
3
14
|
## Layout
|
|
4
15
|
|
|
5
16
|
A representative model looks like this:
|
|
@@ -200,7 +211,9 @@ not contain another H1 or H2.
|
|
|
200
211
|
information changes carry no state to select by). A value is a scalar or
|
|
201
212
|
`{ configuredBy: <entity-id> }`. Permission claims appear only here. A Rule
|
|
202
213
|
on exactly one behavioral target with no `contexts` is a warning; Entity and
|
|
203
|
-
Context targets are always valid.
|
|
214
|
+
Context targets are always valid. Rationale explains the current condition or
|
|
215
|
+
consequence that makes the constraint necessary; it never recounts alternative
|
|
216
|
+
designs or why they were rejected.
|
|
204
217
|
- Journey: at least one unique `actors` entry, H1, no lead prose, `## Goal`,
|
|
205
218
|
and `## Success criterion`. A Journey is a stable goal, not a route or
|
|
206
219
|
Capability wrapper. Every Journey needs achieved Journey Scenario coverage
|
|
@@ -111,7 +111,9 @@ When the call is still close, **split**. A merge stays available to anyone later
|
|
|
111
111
|
A collapse throws away exactly the differences a reader came for and leaves
|
|
112
112
|
nothing in the model saying they existed, so the next reader cannot tell there
|
|
113
113
|
was a question. Put both shapes and their counts to the author when you can; with
|
|
114
|
-
no author to ask, split and
|
|
114
|
+
no author to ask, split and surface the unresolved granularity question in the
|
|
115
|
+
proposed delta. Once resolved, record the resulting product meaning without
|
|
116
|
+
retaining the compared shapes or replaying the discussion on later runs.
|
|
115
117
|
|
|
116
118
|
One shape defeats the list test: a candidate whose kept information is a
|
|
117
119
|
**subset** of another's. An intersection always exists, so "a single list is true
|
|
@@ -126,6 +126,13 @@ the diff.
|
|
|
126
126
|
open question rather than a settled decision. This does not touch the
|
|
127
127
|
authority question in step 6, which is already asked the right way.
|
|
128
128
|
|
|
129
|
+
In every model delta, present the selected shape and its consequences.
|
|
130
|
+
Surface significant omissions, consequential modeling boundaries, and material
|
|
131
|
+
uncertainty needed for approval. Explain these briefly in terms of the current
|
|
132
|
+
proposal. Do not enumerate discarded options or repeat settled discussion.
|
|
133
|
+
Include `Open questions` only when questions remain. Every model-writing
|
|
134
|
+
branch follows the persistence guardrails below.
|
|
135
|
+
|
|
129
136
|
**Code-right**
|
|
130
137
|
|
|
131
138
|
- Run the internal intent-resolution protocol: settle the undetermined calls
|
|
@@ -174,7 +181,8 @@ the diff.
|
|
|
174
181
|
11. Run final lint. Report:
|
|
175
182
|
- requested and inspected scope;
|
|
176
183
|
- aligned contracts;
|
|
177
|
-
- authority decisions and approvals
|
|
184
|
+
- resulting authority decisions and approvals, without replaying settled
|
|
185
|
+
alternatives or unchanged deliberation;
|
|
178
186
|
- model deltas and external build attempts;
|
|
179
187
|
- References refreshed;
|
|
180
188
|
- unresolved or unverifiable blockers;
|
|
@@ -187,6 +195,12 @@ the diff.
|
|
|
187
195
|
|
|
188
196
|
- Report-only mode forbids writes, child delegation, and builder invocation.
|
|
189
197
|
- Never change product meaning without explicit approval.
|
|
198
|
+
- Never persist rejected approaches, reasons another option was not selected,
|
|
199
|
+
or deliberation history anywhere in `.businesslens/`, including resource prose,
|
|
200
|
+
supporting sections, limitations, README, and additional files. Keep decision
|
|
201
|
+
discussion in the conversation. An unchosen option is not a product exclusion;
|
|
202
|
+
preserve established or approved constraints, refusal and failure behavior,
|
|
203
|
+
and material unresolved questions or missing evidence.
|
|
190
204
|
- Never change implementation inside a BusinessLens analysis phase.
|
|
191
205
|
- Never treat References, coverage, tests, names, or a green lint result as
|
|
192
206
|
proof by themselves.
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Product Model format
|
|
2
2
|
|
|
3
|
+
Author current, approved product meaning. Do not persist alternatives considered,
|
|
4
|
+
rejected approaches, explanations of why another option was not selected, or
|
|
5
|
+
deliberation history anywhere in `.businesslens/`, including resource prose,
|
|
6
|
+
supporting sections, limitations, README, and additional files. Keep discussion
|
|
7
|
+
needed to reach a decision in the conversation; record the resulting behavior
|
|
8
|
+
without replaying settled discussion on later runs. An unchosen option is not a
|
|
9
|
+
product exclusion: record exclusions only when they are established or approved
|
|
10
|
+
product constraints. Preserve observable refusal and failure behavior, current
|
|
11
|
+
constraints, and material unresolved questions or missing evidence. Structural
|
|
12
|
+
lint does not determine whether prose contains deliberation history.
|
|
13
|
+
|
|
3
14
|
## Layout
|
|
4
15
|
|
|
5
16
|
A representative model looks like this:
|
|
@@ -200,7 +211,9 @@ not contain another H1 or H2.
|
|
|
200
211
|
information changes carry no state to select by). A value is a scalar or
|
|
201
212
|
`{ configuredBy: <entity-id> }`. Permission claims appear only here. A Rule
|
|
202
213
|
on exactly one behavioral target with no `contexts` is a warning; Entity and
|
|
203
|
-
Context targets are always valid.
|
|
214
|
+
Context targets are always valid. Rationale explains the current condition or
|
|
215
|
+
consequence that makes the constraint necessary; it never recounts alternative
|
|
216
|
+
designs or why they were rejected.
|
|
204
217
|
- Journey: at least one unique `actors` entry, H1, no lead prose, `## Goal`,
|
|
205
218
|
and `## Success criterion`. A Journey is a stable goal, not a route or
|
|
206
219
|
Capability wrapper. Every Journey needs achieved Journey Scenario coverage
|
|
@@ -41,8 +41,17 @@ When authority is not already explicit, present:
|
|
|
41
41
|
|
|
42
42
|
Group questions by root decision. Do not ask a menu of symptoms.
|
|
43
43
|
|
|
44
|
+
Discuss the choices only while authority remains open. After resolution, report
|
|
45
|
+
the resulting decision without replaying settled alternatives on later runs.
|
|
46
|
+
|
|
44
47
|
## Internal intent resolution
|
|
45
48
|
|
|
49
|
+
Both internal authoring flows write current product meaning under the format's
|
|
50
|
+
persistence rule. Keep rejected approaches and selection history in the
|
|
51
|
+
conversation, including when drafting resource prose, supporting sections,
|
|
52
|
+
limitations, or README. Preserve current constraints and material unresolved
|
|
53
|
+
questions or missing evidence; an unchosen option is not a product exclusion.
|
|
54
|
+
|
|
46
55
|
Use when code-right or neither-right is chosen. Draft the smallest exact Product
|
|
47
56
|
Model delta. Cover affected Interfaces, optional Experiences, Capabilities,
|
|
48
57
|
availability Contexts, Rules, Capability Scenarios, Journeys, Journey Scenarios,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae","timestamp":1788769642599,"prerendered":[]}
|