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 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
@@ -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.10.0"},app:{baseURL:"/",buildId:"a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1788769654318,false]</script></body></html>
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
- <!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.10.0"},app:{baseURL:"/",buildId:"a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1788769654318,false]</script></body></html>
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":"a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae","timestamp":1788769642599}
1
+ {"id":"3da08759-853a-4f1f-97f9-21437357aef0","timestamp":1788770959752}
@@ -0,0 +1 @@
1
+ {"id":"3da08759-853a-4f1f-97f9-21437357aef0","timestamp":1788770959752,"prerendered":[]}
@@ -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.10.0"},app:{baseURL:"/",buildId:"a896fe5d-32c4-4d9c-88fa-db55d6ddb2ae",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1788769654319,false]</script></body></html>
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>
@@ -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 why the constraint exists. |
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
 
@@ -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 then ends with a **Judgment calls** section naming every
36
- choice that could defensibly have gone the other way and the alternative it was
37
- chosen over — Capability and Entity granularity, whether something warranted an
38
- Interface, Experience, Entity or Journey, whether a constraint is a Business
39
- Rule, and who may perform an operation. A reviewer can see what a delta says but
40
- not what it omits, so an unstated judgment call is one nobody can challenge.
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, ending with a **Judgment
33
- calls** section that names every choice that could defensibly have gone the
34
- other way and the alternative it was chosen over, so a reviewer can challenge
35
- what the model omits as well as what it says. It writes only inside
36
- `.businesslens/` and runs structural lint in an isolated runner.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "businesslens",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Product-Driven Development for coding agents: a git-tracked Product Model in .businesslens/, verified against implementation.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -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
- **Always end the delta with a `Judgment calls` section**, naming every
105
- choice that could defensibly have gone the other way, the alternative it was
106
- chosen over, and why. Capability granularity, Entity granularity — one
107
- Entity per thing, or one standing for several — whether something warranted
108
- an Interface, an Experience, an Entity or a Journey, whether a constraint is
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 where the reason behind a boundary or behavior will guide
62
- implementation choices.
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
- - State a recommendation and its tradeoff when multiple directions remain.
82
- - Record unresolved points as limitations instead of guessing.
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 record it as a judgment call rather than choosing.
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 `Judgment calls` as an open question rather
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
- **Always end the delta with a `Judgment calls` section**, naming every choice
171
- that could defensibly have gone the other way, the alternative, and why you
172
- chose as you did. Capability granularity, Entity granularity — one Entity per
173
- thing, or one standing for several — whether something warranted an
174
- Interface, an Experience, an Entity or a Journey, whether a constraint is a
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`. Set coverage by model breadth:
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 record it as a judgment call rather than choosing.
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":[]}