@nklisch/pi-agile-workflow 0.15.3 → 0.16.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +8 -0
  4. package/docs/ARCHITECTURE.md +117 -65
  5. package/docs/PRINCIPLES.md +84 -18
  6. package/docs/SPEC.md +70 -2
  7. package/docs/VISION.md +33 -12
  8. package/hooks/scripts/prompt-context.py +7 -1
  9. package/hooks/scripts/test_prompt_context.py +16 -0
  10. package/package.json +1 -1
  11. package/scripts/tests/convert-content-integrity.test.sh +4 -4
  12. package/scripts/tests/convert-review-weight.test.sh +61 -0
  13. package/scripts/work-view.sh +1 -1
  14. package/skills/autopilot/SKILL.md +138 -91
  15. package/skills/convert/SKILL.md +55 -11
  16. package/skills/epic-design/SKILL.md +37 -70
  17. package/skills/feature-design/SKILL.md +52 -68
  18. package/skills/fix/SKILL.md +52 -34
  19. package/skills/gate-cruft/SKILL.md +69 -24
  20. package/skills/gate-docs/SKILL.md +12 -5
  21. package/skills/gate-patterns/SKILL.md +7 -3
  22. package/skills/gate-refactor/SKILL.md +18 -6
  23. package/skills/gate-security/SKILL.md +16 -7
  24. package/skills/gate-tests/SKILL.md +86 -71
  25. package/skills/implement/SKILL.md +79 -58
  26. package/skills/implement-orchestrator/SKILL.md +274 -587
  27. package/skills/perf-design/SKILL.md +11 -12
  28. package/skills/principles/SKILL.md +175 -379
  29. package/skills/principles/references/advisory-review.md +76 -0
  30. package/skills/principles/references/code-design.md +164 -0
  31. package/skills/principles/references/models.md +42 -63
  32. package/skills/prose-author/SKILL.md +9 -4
  33. package/skills/refactor-design/SKILL.md +26 -17
  34. package/skills/review/SKILL.md +169 -64
  35. package/skills/review/references/substrate-side-effects.md +17 -10
  36. package/skills/scope/SKILL.md +20 -7
  37. package/work-view/crates/cli/.work-view-version +1 -1
  38. package/work-view/dist/aarch64-apple-darwin/work-view +0 -0
  39. package/work-view/dist/aarch64-unknown-linux-musl/work-view +0 -0
  40. package/work-view/dist/x86_64-apple-darwin/work-view +0 -0
  41. package/work-view/dist/x86_64-unknown-linux-musl/work-view +0 -0
@@ -44,45 +44,82 @@ Load only the reference needed for the selected lane:
44
44
  | `review --all` | Drain every item at `stage: review`. |
45
45
  | `review <NL filter>` | Drain a filtered subset of the review queue. Interpret the filter against item bodies, tags, and parent chains. |
46
46
  | `review <branch/commit/range/PR/wip>` | Out-of-band review. Review the target diff and print a verdict. |
47
- | `deep review <target>` / `review --deep <target>` | Use deep mode for a substrate item or out-of-band target. |
47
+ | `review --review-weight <level> <target>` | Set independent-review effort: `none`, `light`, `standard`, `thorough`, or `maximum`. An explicit selector wins over caller notes and project configuration. |
48
+ | `deep review <target>` / `review --deep <target>` | Request deep risk coverage; reviewer topology still respects the effective review weight. |
48
49
 
49
50
  In batch modes (`--all` / NL filter), loop through the matched set and output a
50
51
  single consolidated summary at the end: verdicts per item plus total finding
51
52
  counts.
52
53
 
53
- ## Review Lanes
54
+ ## Review Weight And Lanes
54
55
 
55
- Review cost should match what the target can actually surface. Resolve mode
56
- first, then pick the lane:
56
+ Resolve one effective `review_weight` before choosing a lane. The valid scale is
57
+ `none | light | standard | thorough | maximum`; reject unknown values at the
58
+ boundary. Precedence is:
57
59
 
58
- | Target | Lane | What runs |
60
+ 1. explicit `--review-weight <level>` or an unambiguous natural-language caller selector
61
+ 2. an autopilot/production-skill caller note carrying the effective level
62
+ 3. `review_weight` in `.work/CONVENTIONS.md`
63
+ 4. `standard`
64
+
65
+ The weight is an effort budget, not a verdict and not a fixed orchestration
66
+ recipe. Risk, evidence, and item tier determine how to spend it; current models
67
+ choose the exact topology within the stated ceiling/intent. Record the effective
68
+ weight, its source, selected lane, and decisive risk/evidence signals in Review
69
+ Notes.
70
+
71
+ | Weight | High-level review intent |
72
+ |---|---|
73
+ | `none` | No independent reviewer. Perform an administrative review of the target's own green verification and acceptance evidence; close only when both are sufficient. |
74
+ | `light` | Stories remain verification-only. Larger items receive at most one focused fresh-context pass. |
75
+ | `standard` | Balanced risk-based default: fast low-risk stories, focused Standard work out of band, and fresh-context Deep review for features, epics, and escalated stories. |
76
+ | `thorough` | Increase independent coverage with additional fresh-context passes or reviewers where the risk surface benefits; keep complementary before adversarial. |
77
+ | `maximum` | For features/epics, use multi-model, multi-pass complementary → adversarial review when those capabilities exist. Dynamically escalate stories according to risk rather than reviewing every story identically. |
78
+
79
+ Lane selection is `weight + risk + evidence + kind-as-heuristic`. Resolve mode
80
+ first, gather enough context to identify risk, then choose:
81
+
82
+ | Starting point | Default lane | Evidence or risk adjustment |
59
83
  |---|---|---|
60
- | **story item** | **Fast** | Confirm the green implementation verification already recorded by `implement`, then advance and roll up. No lens walk, no diff re-analysis, no peer. |
61
- | **out-of-band target** | **Standard** | Review the diff in the current context using the core lenses. Print a structured verdict. No substrate writes, no stage changes, no commit. |
62
- | **feature / epic item** | **Deep** | Full lens review using fresh-context evaluation when available. |
63
- | **explicit `--deep` target** | **Deep** | Use the deep lens set even for an out-of-band target. For a story item, keep the fast lane unless the caller explicitly asked for `--deep`. |
84
+ | **story item** | **Fast** | Keep Fast only with recorded green verification and no escalation signal. Escalate to Deep for a caller-interface change, security or correctness surface, cross-cutting scope, a touched foundation-doc claim, or explicit `--deep`. |
85
+ | **out-of-band target** | **Standard** | Use Deep only when explicitly requested; otherwise calibrate the Standard lens walk to the observed risk. |
86
+ | **feature / epic item** | **Deep** | Kind signals aggregate contract risk; green child evidence informs the review but does not replace the parent's own review. |
87
+ | **explicit `--deep` target** | **Deep** | Request the strongest depth the effective weight permits; depth overrides the kind heuristic, not an explicit weight ceiling. |
88
+
89
+ Risk is not inferred from size alone. A tiny authentication or public-contract
90
+ change can require Deep; a broad mechanical change can remain Standard when its
91
+ evidence and contracts make that safe. `none` is the explicit exception to
92
+ independent fresh-context review: it still performs the item's own acceptance
93
+ check and records a verdict, so it never turns child completion into automatic
94
+ parent approval.
64
95
 
65
96
  ### Fast Lane
66
97
 
67
- Stories use the fast lane by default:
98
+ A genuinely low-risk story uses the fast lane; `none` also uses this
99
+ administrative shape for every tier:
68
100
 
69
- 1. Read the story body.
101
+ 1. Read the item body, recorded implementation scope, and acceptance criteria.
70
102
  2. Confirm an implementation/verification record exists and reports green build
71
- and tests.
72
- 3. If verification is present and green, load
103
+ and tests (or an explicit reason the change needs no executable checks).
104
+ 3. Confirm the recorded evidence addresses the item's acceptance criteria.
105
+ 4. Check explicitly for the escalation signals above. At `standard` or higher,
106
+ switch a risky story to Deep before issuing a verdict. At `none` or `light`,
107
+ stay within the selected effort ceiling and record the unexamined risk.
108
+ 5. If verification and acceptance evidence are green, load
73
109
  [substrate-side-effects.md](references/substrate-side-effects.md) and advance
74
- `review -> done` with a one-line record:
75
- `Verdict: Approve - story verified by implement; fast-lane advance`.
76
- 4. If verification is absent or failing, either run cheap verification yourself
77
- or bounce `review -> implementing` with a `## Review findings` note.
110
+ `review -> done` with a one-line record naming the weight and evidence.
111
+ 6. If evidence is absent or failing, run only cheap verification that fits the
112
+ selected weight or bounce `review -> implementing` with a
113
+ `## Review findings` note.
78
114
 
79
- Skip the lens walk for fast-lane stories. Do not deep-review a story unless the
80
- caller explicitly requested `--deep`.
115
+ Skip the lens walk only when evidence and the effective weight permit it. Kind
116
+ alone never grants an advance, and `none` never means "done because children
117
+ are done."
81
118
 
82
119
  ### Standard Lane
83
120
 
84
- Standalone reviews use the standard lane. Load
85
- [target-resolution.md](references/target-resolution.md) and
121
+ Standalone reviews use the standard lane unless the caller explicitly requests
122
+ Deep. Load [target-resolution.md](references/target-resolution.md) and
86
123
  [review-lenses.md](references/review-lenses.md), read enough surrounding code to
87
124
  understand the change, then print the structured review. Do not create `.work`
88
125
  items, advance stages, archive files, or commit metadata unless the user
@@ -90,37 +127,48 @@ explicitly converts the findings into substrate work.
90
127
 
91
128
  ### Deep Lane
92
129
 
93
- Feature, epic, and explicit deep reviews use the deep lane. Load
130
+ Feature, epic, escalated-story, and explicit deep reviews use the deep lane when
131
+ the effective weight permits independent review. Load
94
132
  [deep-review.md](references/deep-review.md) plus any target or lens reference it
95
- points to. Prefer fresh-context evaluation when available; if no fresh reviewer
96
- is reachable, do a degraded inline deep review and record that limitation in
97
- Notes rather than skipping the review. Deep reviews follow the two-phase order
98
- **completeness/complementary, then adversarial** and because a review target
99
- is a complete artifact, each phase is a **convergence loop to nits**, not a
100
- single pass (the ideal is the full `peer-review` loop when available). For a
101
- feature/epic (deep or complex scope) use **two different model classes** when
102
- available, one per phase (see
103
- [../principles/references/models.md](../principles/references/models.md) §6 for
104
- the design-vs-review loop distinction).
133
+ points to. The evaluation must run in fresh context: use a different-class peer
134
+ when reachable; otherwise use the strongest same-harness fresh-context
135
+ sub-agent prompted with the reviewer posture. If the selected weight calls for
136
+ fresh review and neither is available, record the limitation and block rather
137
+ than approving from the host context. Deep reviews never become inline
138
+ self-review; this requirement overrides any older inline-fallback wording in a
139
+ lane reference.
140
+
141
+ Calibrate depth from the weight table instead of treating Deep as one fixed
142
+ recipe. `light` caps a larger item's review at one fresh pass; `standard`
143
+ balances coverage against observed risk; `thorough` adds complementary and
144
+ adversarial coverage where useful; `maximum` seeks multi-model, multi-pass
145
+ complementary → adversarial convergence for features/epics and dynamically
146
+ escalates risky stories. These are ceilings and intent, not mandatory agent
147
+ counts. Preserve complementary-before-adversarial order whenever both run (see
148
+ [../principles/references/models.md](../principles/references/models.md) §6).
105
149
 
106
150
  ## Workflow
107
151
 
108
- ### Phase 0: Resolve Mode And Depth
152
+ ### Phase 0: Resolve Mode, Weight, And Depth
109
153
 
110
154
  Default to substrate mode when the target looks like a work item id, when any
111
155
  item is at `stage: review`, or when autopilot delegated the review. Use
112
156
  standalone mode when the user names a branch, commit, commit range, PR number,
113
157
  `wip`, working tree, or otherwise asks for an out-of-band code review.
114
158
 
159
+ Resolve and validate effective `review_weight` using the precedence above before
160
+ any mutation. Explicit caller selection always wins.
161
+
115
162
  If both interpretations are plausible, prefer substrate mode but ask the user
116
163
  before mutating `.work`. If the caller is autopilot or a harness goal, do not
117
164
  ask: choose substrate mode and the next review item.
118
165
 
119
- Depth:
120
- - **Fast**: story item with green implementation verification.
121
- - **Standard**: out-of-band target or explicitly lightweight review.
122
- - **Deep**: feature/epic item, explicit `--deep`, or a review where the user asks
123
- for robustness across design, contracts, release, and operational dimensions.
166
+ Depth after applying the weight ceiling:
167
+ - **Fast/administrative**: low-risk story with green evidence, any story at
168
+ `light`, or any tier at `none`.
169
+ - **Standard**: out-of-band target unless explicitly deep.
170
+ - **Deep**: feature/epic item, risk-escalated story, explicit `--deep`, or a
171
+ robustness request when the weight permits fresh-context evaluation.
124
172
 
125
173
  ### Phase 1: Identify The Target
126
174
 
@@ -139,8 +187,10 @@ Standalone mode:
139
187
 
140
188
  Substrate mode:
141
189
  - Read the item file.
142
- - Internalize the brief, design, implementation notes, and verification evidence.
143
- - For a feature, also read each child story body.
190
+ - Internalize the brief, design, implementation notes, acceptance criteria, and
191
+ verification evidence.
192
+ - For a feature or epic, read direct child bodies and their review evidence;
193
+ children inform but never replace the parent's own review.
144
194
 
145
195
  Standalone mode:
146
196
  - Read the user's stated target.
@@ -156,8 +206,11 @@ All modes:
156
206
 
157
207
  ### Phase 3: Determine The Change Scope
158
208
 
159
- Load [target-resolution.md](references/target-resolution.md). Use it to gather
160
- the diff, PR metadata, commit messages, or epic aggregate scope.
209
+ For Standard and Deep lanes, load
210
+ [target-resolution.md](references/target-resolution.md). Use it to gather the
211
+ diff, PR metadata, commit messages, or epic aggregate scope. Fast uses the
212
+ recorded implementation scope and verification instead of re-analyzing the
213
+ diff.
161
214
 
162
215
  If the non-epic diff is empty:
163
216
  - Autopilot substrate mode: advance only if the item has complete green
@@ -176,22 +229,36 @@ Standard lane:
176
229
 
177
230
  Deep lane:
178
231
  - Load [deep-review.md](references/deep-review.md).
179
- - Use fresh-context evaluation when available.
180
- - Apply the core lenses plus the deep dimensions.
181
-
182
- ### Phase 5: Classify Findings
183
-
184
- - **Blocker**: must be fixed before advancing or merging. Examples:
185
- correctness bug, security vulnerability, undocumented breaking change,
186
- foundation-doc drift, or a test that proves the change is wrong.
187
- - **Important**: should be addressed but is not strictly blocking. Examples:
188
- missing tests for meaningful logic, questionable design, unclear naming, minor
189
- security gap, or refactor opportunity.
190
- - **Nit**: optional improvement, style polish, small documentation improvement,
191
- or nonessential refactor.
192
-
193
- If there are zero blockers and zero important findings, say so plainly. Do not
194
- pad the review with invented concerns.
232
+ - Run the evaluation in fresh context at the effective weight; do not approve
233
+ inline when the selected weight requires a fresh reviewer and none is available.
234
+ - Apply the core lenses plus the applicable deep dimensions.
235
+
236
+ ### Phase 5: Adjudicate And Classify Findings
237
+
238
+ The host/receiving agent owns classification. Treat fresh-reviewer severities as
239
+ proposals, verify concrete claims, and weigh each finding against repository
240
+ context: acceptance criteria, supported deployment and users, likelihood, blast
241
+ radius, recoverability, existing safeguards, and delay cost. Reviewer confidence,
242
+ model strength, or repeated mention does not make a finding blocking.
243
+
244
+ - **Blocker**: a credible, material current-cycle risk to required correctness,
245
+ security, data integrity, public contracts, acceptance criteria, release
246
+ safety, or trustworthy verification. It must be fixed or kept active before
247
+ advancing. Examples include a demonstrated correctness bug, exploitable
248
+ vulnerability, unintended breaking change, material foundation-doc drift, or
249
+ a test that proves required behavior is wrong.
250
+ - **Important**: valid work below the current-cycle blocker bar. Park it in the
251
+ unbound backlog with the risk rationale and advance the reviewed item. Examples
252
+ include unlikely low-consequence edges, worthwhile hardening, nonessential
253
+ tests, design cleanup, naming, or refactor opportunities.
254
+ - **Nit**: optional polish that does not warrant a substrate item.
255
+ - **Rejected**: unsupported, inapplicable, or cost-disproportionate advice;
256
+ record a brief reason when it came from an independent reviewer.
257
+
258
+ Rarity alone is not dismissal: a corner case with severe consequences may still
259
+ block. Conversely, a real issue does not block merely because a reviewer found
260
+ it. If there are zero receiver-confirmed blockers and zero important findings,
261
+ say so plainly. Do not pad the review with invented concerns.
195
262
 
196
263
  ### Phase 6: Finish
197
264
 
@@ -205,10 +272,39 @@ Standalone mode:
205
272
 
206
273
  Substrate mode:
207
274
  - Load [substrate-side-effects.md](references/substrate-side-effects.md).
208
- - File above-nit findings into the substrate.
209
- - Advance the item if there are no blockers, or bounce it if blockers exist.
210
- - Append the review record.
211
- - Commit the substrate changes.
275
+ - File receiver-accepted findings according to their disposition: current-cycle
276
+ blockers active, important findings in the unbound backlog, and nits nowhere.
277
+ - Advance the item if there are no receiver-confirmed blockers, or bounce it if
278
+ blockers exist.
279
+ - Append the review record and commit the reviewed item's transition.
280
+ - After an approval reaches `done`, run Conservative Parent Roll-Up below.
281
+
282
+ ### Conservative Parent Roll-Up
283
+
284
+ A child's approval is evidence that an ancestor may be ready for review; it is
285
+ never approval of the ancestor itself. After advancing any item to `done`:
286
+
287
+ 1. Find its immediate parent. If there is none, stop.
288
+ 2. Count all direct children across active and terminal tiers. If any child is
289
+ non-terminal, stop the entire roll-up at this ancestor.
290
+ 3. If the parent is `implementing`, advance it to `review`, append a `Children
291
+ complete` note, and commit that transition. If it is already `review`, leave
292
+ the stage unchanged. Never change an implementing/review parent directly to
293
+ `done` just because its children are done.
294
+ 4. Run this skill on the parent using the normal weight/risk/evidence lane
295
+ selection. Features and epics therefore receive their own Deep review when
296
+ independent review is enabled, or their own administrative acceptance review
297
+ at `none`.
298
+ 5. Only an Approve or Approve-with-comments verdict may advance the parent to
299
+ `done`; commit that review transition. A bounce or block stops roll-up.
300
+ 6. Once the parent is approved and `done`, repeat from step 1 for its parent.
301
+
302
+ This recursion can complete story → feature → epic in one review invocation,
303
+ but every ancestor crosses its own real `review` stage and receives its own
304
+ selected review lane at the same effective weight. Preserve active parent bodies
305
+ while walking the chain; terminal retention/archive handling applies only where
306
+ the substrate-side-effects contract says the item is no longer needed for an
307
+ active parent.
212
308
 
213
309
  ## Output
214
310
 
@@ -234,12 +330,17 @@ Approve | Approve with comments | Request changes | Block
234
330
  ### Nits
235
331
  - Nit: <brief note> (`file:line`)
236
332
 
333
+ ### Rejected proposals
334
+ - <reviewer proposal>: <repository-context rationale>
335
+
237
336
  ## Notes
238
- <mode, depth, skipped lenses, limitations, or anything else worth recording>
337
+ <mode, depth, risk context, skipped lenses, limitations, or anything else worth recording>
239
338
  ```
240
339
 
241
340
  If no findings above nit level in substrate mode: "This change looks good.
242
341
  Nothing blocking or significant to flag. Item advanced to `stage: done`."
342
+ Also report each ancestor moved to `review`, approved to `done`, bounced, or
343
+ left waiting on a non-terminal child.
243
344
 
244
345
  If no findings above nit level in standalone mode: "This change looks good.
245
346
  Nothing blocking or significant to flag."
@@ -264,4 +365,8 @@ Nothing blocking or significant to flag."
264
365
  - Foundation-doc drift is a blocker, not a nit. Rolling foundation is a hard
265
366
  rule.
266
367
  - Do not advance an item past review unless the verdict is Approve or Approve
267
- with comments. Pushing through blockers defeats the point of the stage.
368
+ with comments. Pushing through receiver-confirmed material blockers defeats
369
+ the point of the stage; parking lower-risk findings does not.
370
+ - Child completion never substitutes for a parent's review. Roll-up may move an
371
+ implementing parent to `review`, but only that parent's selected lane may move
372
+ it to `done`.
@@ -8,15 +8,21 @@ commit unless the user explicitly asks for that side effect.
8
8
 
9
9
  ## Triage Findings Into Items
10
10
 
11
- For each finding above nit level, create a substrate item so it does not
12
- disappear into prose:
13
-
14
- - **Blocker**: either fix inline if small, or create a story in
15
- `.work/active/stories/` with `stage: implementing` and tags such as `[bug]`,
16
- `[security]`, `[tests]`, or the appropriate category.
17
- - **Important**: park as a backlog item in `.work/backlog/`, or scope as a
18
- feature if substantial.
19
- - **Nit**: keep in conversation only; nits do not warrant items.
11
+ The receiving agent first adjudicates reviewer proposals under
12
+ `principles/SKILL.md` Part IV. Reviewer severity labels are not authoritative.
13
+ For each accepted finding above nit level, preserve the chosen disposition so it
14
+ does not disappear into prose:
15
+
16
+ - **Blocker**: a receiver-confirmed material current-cycle risk. Either fix
17
+ inline if small, or create a story in `.work/active/stories/` with
18
+ `stage: implementing` and tags such as `[bug]`, `[security]`, `[tests]`, or the
19
+ appropriate category. It prevents the reviewed item from advancing.
20
+ - **Important**: valid work below the blocker bar. Park it as an unbound backlog
21
+ item in `.work/backlog/` with the contextual risk rationale; do not scope it
22
+ active merely because it is substantial or a reviewer called it blocking.
23
+ - **Nit**: keep in review notes only; nits do not warrant items.
24
+ - **Rejected**: create no item; record a brief reason in the review record when
25
+ independent review proposed it.
20
26
 
21
27
  Review-created items use `gate_origin: null`; gate-produced findings set
22
28
  `gate_origin`.
@@ -140,8 +146,9 @@ Append this section to the reviewed item:
140
146
  **Blockers**: <list with item ids> (or "none")
141
147
  **Important**: <list with item ids> (or "none")
142
148
  **Nits**: <inline notes - not items>
149
+ **Rejected**: <reviewer proposals and brief reasons> (or "none")
143
150
 
144
- **Notes**: <mode, depth, skipped lenses, limitations, or anything else worth recording>
151
+ **Notes**: <mode, depth, risk context, skipped lenses, limitations, or anything else worth recording>
145
152
  ```
146
153
 
147
154
  ## Commit
@@ -170,18 +170,21 @@ second confirmation round.
170
170
 
171
171
  ### Phase B8: Promote each confirmed cluster
172
172
 
173
- For each cluster, run the single-idea-mode Phases 3-6 inline:
173
+ For each cluster, run the single-idea-mode Phase 1.9 and Phases 3-6 inline:
174
174
 
175
- 1. **Declare dependencies** — within-cluster (child stories under a feature)
175
+ 1. **Frame simplification opportunities** — record what the cluster can delete,
176
+ consolidate, replace, or make unnecessary; separate cohesive cleanup from
177
+ unrelated backlog work.
178
+ 2. **Declare dependencies** — within-cluster (child stories under a feature)
176
179
  and cross-cluster (one feature depends on another's output). Use
177
180
  `work-view --blocking` for cycle detection.
178
- 2. **Foundation-doc roll-forward** (large clusters only) — full Phase 4 of
181
+ 3. **Foundation-doc roll-forward** (large clusters only) — full Phase 4 of
179
182
  single-idea mode, scoped to that cluster's impact.
180
- 3. **Write item files** — the parent (epic or feature) plus any child files.
183
+ 4. **Write item files** — the parent (epic or feature) plus any child files.
181
184
  Use `git mv` to move backlog files into the new structure where they map
182
185
  1:1; reference the backlog idea in the parent's brief and `git rm` the
183
186
  backlog file where it was absorbed without a direct child.
184
- 4. **Commit per cluster** — `scope: <cluster-id> (<kind>, <size>)` with a
187
+ 5. **Commit per cluster** — `scope: <cluster-id> (<kind>, <size>)` with a
185
188
  foundation-doc roll-forward note where applicable.
186
189
 
187
190
  Promote leftovers per the Phase B7 decision (one commit per promoted leftover,
@@ -267,7 +270,7 @@ interfaces).
267
270
  Aim for 2-5 questions. Zero is fine if the user's brief and foundation docs
268
271
  already pin every strategic choice. For small (story) and medium (feature)
269
272
  scope, the bar is higher — only ask if a strategic ambiguity genuinely
270
- affects framing; otherwise skip directly to Phase 2.
273
+ affects framing; otherwise continue through Phases 1.8 and 1.9 without questions.
271
274
 
272
275
  Use `structured question tool` to ask. Capture answers in the item body under a
273
276
  `## Strategic decisions` section so the downstream design family inherits
@@ -306,7 +309,14 @@ journey before the item is written.
306
309
 
307
310
  Skip this phase if `ux-ui-design` is not installed.
308
311
 
309
- Then proceed to Phase 2.
312
+ Then proceed to Phase 1.9.
313
+
314
+ ### Phase 1.9: Frame simplification opportunities
315
+
316
+ Record what the idea could delete, consolidate, replace, or make unnecessary—code,
317
+ tests, checks, abstractions, compatibility paths, configuration, or whole subsystems.
318
+ Fold cohesive cleanup into the brief, note independent `[refactor]`/`[cleanup]`
319
+ children, and park unrelated work. Removing guarantees requires a strategic decision.
310
320
 
311
321
  ### Phase 2: Size the scope
312
322
 
@@ -414,6 +424,9 @@ updated: YYYY-MM-DD
414
424
  ## Brief
415
425
  <one to three paragraphs describing what this is and why it exists>
416
426
 
427
+ ## Simplification opportunity
428
+ <what this work may delete, consolidate, replace, or deliberately retain; "none identified" is valid>
429
+
417
430
  <!-- Subsequent sections (Design, Implementation Notes, etc.) accumulate as
418
431
  work progresses. -->
419
432
  ```
@@ -1 +1 @@
1
- 0.15.3
1
+ 0.16.3