@nklisch/pi-agile-workflow 0.16.1 → 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 (33) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/docs/ARCHITECTURE.md +23 -11
  4. package/docs/PRINCIPLES.md +84 -18
  5. package/docs/SPEC.md +19 -2
  6. package/docs/VISION.md +11 -6
  7. package/hooks/scripts/prompt-context.py +7 -1
  8. package/hooks/scripts/test_prompt_context.py +16 -0
  9. package/package.json +1 -1
  10. package/scripts/work-view.sh +1 -1
  11. package/skills/autopilot/SKILL.md +49 -34
  12. package/skills/convert/SKILL.md +27 -3
  13. package/skills/epic-design/SKILL.md +21 -3
  14. package/skills/feature-design/SKILL.md +34 -11
  15. package/skills/gate-cruft/SKILL.md +69 -24
  16. package/skills/gate-docs/SKILL.md +12 -5
  17. package/skills/gate-patterns/SKILL.md +7 -3
  18. package/skills/gate-refactor/SKILL.md +18 -6
  19. package/skills/gate-security/SKILL.md +16 -7
  20. package/skills/gate-tests/SKILL.md +86 -71
  21. package/skills/implement/SKILL.md +18 -8
  22. package/skills/principles/SKILL.md +67 -13
  23. package/skills/principles/references/advisory-review.md +8 -1
  24. package/skills/principles/references/code-design.md +62 -5
  25. package/skills/refactor-design/SKILL.md +23 -13
  26. package/skills/review/SKILL.md +36 -17
  27. package/skills/review/references/substrate-side-effects.md +17 -10
  28. package/skills/scope/SKILL.md +20 -7
  29. package/work-view/crates/cli/.work-view-version +1 -1
  30. package/work-view/dist/aarch64-apple-darwin/work-view +0 -0
  31. package/work-view/dist/aarch64-unknown-linux-musl/work-view +0 -0
  32. package/work-view/dist/x86_64-apple-darwin/work-view +0 -0
  33. package/work-view/dist/x86_64-unknown-linux-musl/work-view +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agile-workflow",
3
3
  "description": "Markdown-based work-tracking substrate for AI-driven projects. Items as files in .work/, late-binding releases, gates that produce items, goal-backed autopilot queue runner. See docs/VISION.md.",
4
- "version": "0.16.1",
4
+ "version": "0.16.3",
5
5
  "author": {
6
6
  "name": "nklisch"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agile-workflow",
3
- "version": "0.16.1",
3
+ "version": "0.16.3",
4
4
  "description": "Markdown-based work-tracking substrate for AI-driven projects. Items as files in .work/, late-binding releases, gates that produce items, goal-backed autopilot queue runner.",
5
5
  "author": {
6
6
  "name": "nklisch"
@@ -369,7 +369,10 @@ Advisory review follows risk in both direct and autopilot design. Independent
369
369
  review uses completeness/advisory before adversarial posture, is labeled
370
370
  cross-model only for a known different model class, and is non-blocking at
371
371
  design time. Final autopilot completion still requires the successful review
372
- path selected by the effective review weight.
372
+ path selected by the effective review weight. The receiving orchestrator owns
373
+ finding disposition: it verifies reviewer proposals in repository context,
374
+ keeps only credible material current-cycle risks blocking, and parks valid
375
+ lower-priority work in the unbound backlog.
373
376
 
374
377
  ### Queue selection algorithm
375
378
 
@@ -397,11 +400,12 @@ path selected by the effective review weight.
397
400
  7. Re-read substrate state after the production skill returns; it may already
398
401
  have completed review and eligible parent roll-up. Commit each item
399
402
  transition separately.
400
- 8. If review bounced an item, treat its durable findings as the next
401
- implementation input and keep cycling implementation → verification → review.
402
- Bounce count is diagnostic history, never a stop condition. Recurring findings
403
- trigger deeper root-cause/design diagnosis and fresh context where useful,
404
- not a human handoff.
403
+ 8. If review bounced an item, treat only receiver-confirmed material blockers as
404
+ the next implementation input and keep cycling implementation → verification
405
+ review. Park valid lower-priority findings unbound; they do not reopen the
406
+ scoped queue. Bounce count is diagnostic history, never a stop condition.
407
+ Recurring blockers trigger deeper root-cause/design diagnosis and fresh
408
+ context where useful, but repetition alone does not elevate severity.
405
409
  9. Goto 1 unless a stop condition applies.
406
410
  ```
407
411
 
@@ -500,6 +504,9 @@ session epoch:
500
504
  Code-design capsule:
501
505
  - Ports & Adapters: keep domain logic independent of DB/filesystem/HTTP/time/randomness.
502
506
  - Single Source of Truth: define growing variant sets once; derive downstream behavior.
507
+ - Proportional rigor: validate real boundaries; add invariants, edge handling, and determinism only when context warrants them.
508
+ - Code economy: prefer the shortest clear solution; test useful interfaces, complex units, and bug regressions.
509
+ - Leave it simpler: eliminate unnecessary code, tests, checks, abstractions, and compatibility paths; ask before reducing guarantees.
503
510
  ...
504
511
  ```
505
512
 
@@ -548,14 +555,19 @@ Override via `gates_for_release` in `.work/CONVENTIONS.md`.
548
555
 
549
556
  ### Gate-as-item-producer pattern
550
557
 
551
- Each gate scans the bundle of items at `release_binding: <current-version>`
552
- and produces new items rather than emitting a pass/fail report:
558
+ Each gate focuses on the bundle of items at
559
+ `release_binding: <current-version>` and produces new items rather than
560
+ emitting a pass/fail report. The bundle is a center of gravity, not a hard scan
561
+ boundary: gates may follow concrete evidence into adjacent dependencies, shared
562
+ infrastructure, or system-wide mechanisms. Findings caused by, exposed by, or
563
+ materially relevant to the release bind to it; merely ambient discoveries go
564
+ to the unbound backlog so the gate does not silently expand release scope.
553
565
 
554
566
  | Gate | What it scans | What it produces |
555
567
  |---|---|---|
556
568
  | `gate-security` | Bound items' code changes against security checklist | Items with `gate_origin: security`, tagged `[security]`, `release_binding` set |
557
- | `gate-tests` | Coverage of bound items' acceptance criteria | Items with `gate_origin: tests`, tagged `[testing]` for gaps |
558
- | `gate-cruft` | Dead code introduced or revealed by the bundle | Items with `gate_origin: cruft`, tagged `[cleanup]` |
569
+ | `gate-tests` | Useful coverage at stable interfaces, complex units, and bug regressions; low-value tests exposed by the bundle | Items with `gate_origin: tests`, tagged `[testing]` for valuable gaps or removals |
570
+ | `gate-cruft` | Local or system-wide code, tests, checks, compatibility paths, and abstractions that may no longer earn their cost | Items with `gate_origin: cruft`, tagged `[cleanup]`; guarantee-reducing removals require user confirmation |
559
571
  | `gate-docs` | Foundation-doc alignment with the bundle's behavior changes | Items with `gate_origin: docs`, tagged `[documentation]` — enforces rolling-foundation |
560
572
  | `gate-patterns` | Reusable patterns that emerged in the bundle | Detailed pattern-skill files in `.agents/skills/patterns/` (single source of truth) with optional Claude mirror, the generated hook-loaded `.agents/rules/patterns.md` digest (slug+one-liner index pointing back at the skill, with banner + source hash), plus a tracking item with `gate_origin: patterns` |
561
573
 
@@ -741,7 +753,7 @@ configured in `CONVENTIONS.md` (default: security → tests → cruft → docs
741
753
 
742
754
  | Skill | Role | Notes |
743
755
  |---|---|---|
744
- | `principles` | Loads code-design + substrate-execution principles | Code-design (Ports & Adapters, SSOT, Generated Contracts, Fail Fast) carried from workflow; substrate-execution (item-IS-the-work, rolling-foundation, late-binding) added |
756
+ | `principles` | Loads code-design + substrate-execution principles | Code-design includes clear boundaries, proportional rigor, code economy, useful tests, and continuous simplification; substrate-execution includes item-IS-the-work, rolling-foundation, and late-binding |
745
757
  | `research` | Investigate libraries/APIs | Carried; produces research docs in `docs/research/` (separate from `.work/`) |
746
758
  | `refactor-conventions-creator` | Create project-specific refactor conventions skill | Carried |
747
759
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  The plugin's `principles` skill loads two distinct paradigms:
4
4
 
5
- - **Code-design principles** — Ports & Adapters, Single Source of Truth,
6
- Generated Contracts, Fail Fast. Carried from the `workflow` plugin.
5
+ - **Code-design principles** — clear boundaries and sources of truth,
6
+ proportional rigor, code economy, useful tests, and continuous simplification.
7
7
  These tell the agent how to write good code at design time and
8
8
  implementation time.
9
9
  - **Substrate-execution principles** — Item-IS-the-Work, Rolling-Foundation,
@@ -18,7 +18,7 @@ shapes how work moves through the system.
18
18
 
19
19
  # Part I — Code-Design Principles
20
20
 
21
- These four principles govern both architectural decisions and how code is
21
+ These principles govern both architectural decisions and how code is
22
22
  written. Each section has guidance for design time and implementation time.
23
23
 
24
24
  ## 1. Ports & Adapters
@@ -213,21 +213,20 @@ If a generated type needs extending, use
213
213
  `type MyType = GeneratedType & { extra: string }` — extend the source of
214
214
  truth, don't replace it.
215
215
 
216
- ## 4. Fail Fast (implementation only)
216
+ ## 4. Fail Fast—Where It Matters
217
217
 
218
- Catch bad data at the door, not three calls deep where the stack trace is
219
- useless. Validate inputs at the entry point of every function or system
220
- boundary.
218
+ Catch bad data at real trust boundaries, not three calls deep. Validate
219
+ untrusted input and required external contracts before domain logic runs. Add
220
+ internal checks only where a violated precondition is plausible and
221
+ consequential for this project.
221
222
 
222
223
  - At system boundaries (HTTP handlers, CLI args, external API responses,
223
- config files): parse with Zod or equivalent before any logic runs
224
- - At internal function boundaries: assert preconditions at the top of the
225
- function guard clauses, not nested ifs
226
- - Prefer `throw`/`return early` over propagating bad state deep into call
227
- chains
228
- - Errors should be loud and specific at the point of violation —
229
- "expected positive number, got -3" beats a cryptic null reference five
230
- layers down
224
+ config files): parse before logic runs
225
+ - At internal boundaries: add guards when they protect a real invariant, not
226
+ mechanically at every function
227
+ - Prefer early, specific failure when failure is part of the required contract
228
+ - Do not manufacture exhaustive edge handling, invariants, retries, or firm
229
+ determinism that the project's scope and consequences do not need
231
230
 
232
231
  **Good:**
233
232
  ```typescript
@@ -250,6 +249,73 @@ function processOrder(input: any) {
250
249
  }
251
250
  ```
252
251
 
252
+ ## 5. Code Economy
253
+
254
+ Short, direct code is a virtue when it stays clear. Prefer fewer concepts,
255
+ layers, branches, options, and lines over speculative generality. Terse does not
256
+ mean cryptic: simplify the model first, then its expression. Every abstraction
257
+ or extension point must earn its maintenance cost in current scope.
258
+
259
+ ### At design time
260
+
261
+ - Start with the most direct solution that satisfies the actual brief
262
+ - Reject hypothetical flexibility without a current second use or committed need
263
+ - Compare approaches by concepts removed as well as capabilities added
264
+
265
+ ### At implementation time
266
+
267
+ - Delete obsolete paths and incidental machinery exposed by the change
268
+ - Inline or consolidate before extracting another abstraction
269
+ - Match rigor to the project's context rather than treating every codebase as
270
+ critical infrastructure
271
+
272
+ ## 6. Tests Earn Their Keep
273
+
274
+ Tests are maintained code. Prioritize stable public interfaces, important seams,
275
+ high-consequence behavior, and regressions learned from real bugs. Unit tests
276
+ belong around genuinely complex isolated logic, not every wrapper, branch, or
277
+ line. Coverage numbers are evidence, not goals.
278
+
279
+ ### At design time
280
+
281
+ - Name the interface, risk, or regression each proposed test protects
282
+ - Prefer one useful interface test over several implementation-bound unit tests
283
+ - Do not require one automated test per unit, edge, or acceptance statement
284
+
285
+ ### At implementation time
286
+
287
+ - Add regression tests when bugs reveal meaningful risk
288
+ - Remove duplicate, tautological, brittle, obsolete, or low-value tests
289
+ - Keep simple code simple when an isolated test adds no useful confidence
290
+
291
+ ## 7. Leave It Simpler
292
+
293
+ Exploration, design, and implementation include an elimination pass. Look for
294
+ code, tests, checks, abstractions, configuration, and compatibility paths the
295
+ feature can make unnecessary. Fold safe cohesive cleanup into the task or create
296
+ explicit cleanup/refactor stories; park broader opportunities.
297
+
298
+ Question whole systems, not only local fragments. A validation layer, invariant
299
+ system, test suite, compatibility mechanism, or defensive subsystem may no
300
+ longer justify its cost. Removing behavior, guarantees, validation, determinism,
301
+ compatibility, or safety is a product decision: explain the trade-off and ask
302
+ the user rather than silently weakening it.
303
+
304
+ ### Review proportionality
305
+
306
+ Reviewer output is evidence, not authority. The receiving agent verifies claims
307
+ and judges their current-cycle risk against the repository's acceptance criteria,
308
+ supported users and deployment shape, likelihood, blast radius, recoverability,
309
+ safeguards, and delay cost. Credible material risks to required correctness,
310
+ security, data, public contracts, acceptance, release safety, or trustworthy
311
+ verification block. Valid lower-priority concerns are parked unbound; nits stay
312
+ in review notes; unsupported advice is rejected with a brief rationale.
313
+
314
+ A successful independent review path requires adjudicating every proposal, not
315
+ implementing every suggestion. A rare severe case may still block, while a real
316
+ corner case with negligible consequence need not. Reviewer labels, model
317
+ strength, and repeated mention do not replace the receiving agent's judgment.
318
+
253
319
  ---
254
320
 
255
321
  # Part II — Substrate-Execution Principles
@@ -259,7 +325,7 @@ shape stage transitions, item bodies, foundation-doc evolution, and
259
325
  release binding. The agent applies these whenever operating on `.work/`
260
326
  or `docs/`.
261
327
 
262
- ## 5. Item-IS-the-Work
328
+ ## 8. Item-IS-the-Work
263
329
 
264
330
  The unit of work is its file. The brief, the design, the implementation
265
331
  notes, and the review findings all accumulate in the item's body as
@@ -314,7 +380,7 @@ stages advance. Reading the file IS reading the state of the work.
314
380
  - [ ] Item body at completion is a complete record
315
381
  - [ ] Code does not reference item IDs; only logical concepts
316
382
 
317
- ## 6. Rolling-Foundation
383
+ ## 9. Rolling-Foundation
318
384
 
319
385
  Foundation docs (`docs/VISION.md`, `docs/SPEC.md`, `docs/ARCHITECTURE.md`,
320
386
  and any others) describe the project's vision (future-looking) and current
@@ -398,7 +464,7 @@ which timing style was used.
398
464
  - [ ] `git log docs/<file>.md` shows the audit trail; the doc shows the
399
465
  present
400
466
 
401
- ## 7. Late-Binding
467
+ ## 10. Late-Binding
402
468
 
403
469
  Items advance stages when work actually completes. Releases bind items
404
470
  only when the user cuts a version. Foundation docs are not pre-decided
package/docs/SPEC.md CHANGED
@@ -95,7 +95,9 @@ item kind as a starting heuristic. Low-risk stories can close from recorded
95
95
  green verification, while risky stories, features, and epics receive the
96
96
  fresh-context coverage allowed by the effective weight. Child completion may
97
97
  make a parent eligible for its own review, but never approves the parent by
98
- itself.
98
+ itself. Fresh-reviewer findings are proposals: the receiving agent verifies and
99
+ classifies them against repository context. Only credible material current-cycle
100
+ risk blocks advancement; valid lower-priority findings are parked unbound.
99
101
 
100
102
  ### Questions and advisory review
101
103
 
@@ -125,7 +127,13 @@ convention, then `standard`:
125
127
  available for the highest-risk scopes.
126
128
 
127
129
  These levels state review intent and ceilings, not fixed reviewer counts or pass
128
- recipes.
130
+ recipes. A successful review path requires every proposed finding to be
131
+ adjudicated, not implemented. The receiving orchestrator weighs acceptance
132
+ criteria, supported users and deployment shape, likelihood, blast radius,
133
+ recoverability, safeguards, and delay cost. It fixes or activates material
134
+ current-cycle blockers, parks valid lower-priority concerns in the unbound
135
+ backlog, and rejects unsupported advice with a rationale. Reviewer labels and
136
+ repetition are evidence, not authority.
129
137
 
130
138
  ### Backlog item shape
131
139
 
@@ -204,6 +212,15 @@ backlog_staleness_days: 90
204
212
  The default `gates_for_release` order is fixed: **security → tests → cruft
205
213
  → docs → patterns**. Override only if the project has a justified reason.
206
214
 
215
+ Release-bound items define each gate's focus, not a hard scan boundary. A gate
216
+ may follow concrete evidence into adjacent dependencies, shared infrastructure,
217
+ or system-wide mechanisms. Findings caused by, exposed by, or materially
218
+ relevant to the release bind to it. Merely ambient discoveries must be written
219
+ to the unbound backlog, so wider inspection does not silently expand release
220
+ scope. Any cruft proposal that reduces behavior, validation, determinism,
221
+ compatibility, safety, or another meaningful guarantee requires explicit user
222
+ confirmation before it becomes active removal work.
223
+
207
224
  **`gate-refactor` is an opt-in gate** — not in the default list. Add it when your project has
208
225
  scan-rule libraries installed under `gate_refactor_scan_library_roots` (defaults:
209
226
  `{project}/.agents/skills/scan-*/SKILL.md`, then
package/docs/VISION.md CHANGED
@@ -42,10 +42,10 @@ The plugin enforces three execution principles:
42
42
  No pre-tagged release bindings. Items advance stages when work actually
43
43
  completes. Releases bind items only when the user cuts a version.
44
44
 
45
- The plugin's `principles` skill loads these alongside the code-design
46
- principles (Ports & Adapters, Single Source of Truth, Generated Contracts,
47
- Fail Fast) carried over from `workflow`. The two paradigms substrate
48
- execution and code design operate together during agile-workflow work.
45
+ The plugin's `principles` skill loads these alongside code-design principles
46
+ for clear boundaries, proportional rigor, code economy, useful tests, and
47
+ continuous simplification. The two paradigms—substrate execution and code
48
+ design—operate together during agile-workflow work.
49
49
 
50
50
  ## Who this is for
51
51
 
@@ -95,9 +95,14 @@ agile-workflow is complete enough to operate as the supported workflow engine:
95
95
  - Questions and advisory review are consequence-driven: routine reversible
96
96
  choices use recorded judgment; strategic or difficult-to-reverse choices get
97
97
  an explicit checkpoint; independent review scales through the project's
98
- high-level review weight while preserving fresh-context deep review.
98
+ high-level review weight while preserving fresh-context deep review. Reviewer
99
+ findings remain proposals: the receiving orchestrator weighs actual repository
100
+ risk, blocks only on material current-cycle concerns, and parks valid
101
+ lower-priority work rather than forcing every suggestion into implementation.
99
102
  - Real releases move through scope → design → implement → review →
100
- release-deploy on the substrate; gates produce durable findings, and the
103
+ release-deploy on the substrate; gates focus on bound work while following
104
+ relevant evidence into adjacent or system-wide code, distinguish release
105
+ findings from ambient backlog discoveries, and produce durable items. The
101
106
  release ships only after every bound item is terminal. Foundation docs roll
102
107
  forward, release binding stays late, and terminal retention keeps git as the
103
108
  audit trail without leaking obsolete authority.
@@ -78,7 +78,10 @@ CAPSULES = {
78
78
  "Ports & Adapters: domain logic stays independent of DB/filesystem/HTTP/time/randomness.",
79
79
  "Single Source of Truth: growing variant sets have one registry; types, validation, routing, and display derive from it.",
80
80
  "Generated Contracts: boundary types come from schema/router/DB inference or generation instead of hand copies.",
81
- "Fail Fast: unknown input is validated at system boundaries and internal preconditions are asserted early.",
81
+ "Proportional rigor: validate real boundaries; add invariants, edge handling, and determinism only when context warrants them.",
82
+ "Code economy: prefer the shortest clear solution and fewer concepts over speculative generality.",
83
+ "Useful tests: protect important interfaces, complex units, and bug regressions—not every line or surface.",
84
+ "Leave it simpler: when touching an area, eliminate unnecessary code, tests, checks, abstractions, and compatibility paths; ask before reducing guarantees.",
82
85
  ],
83
86
  },
84
87
  "dispatch_economy": {
@@ -92,6 +95,7 @@ CAPSULES = {
92
95
  "Agents are for breadth, isolation, fresh judgment, or independent write ownership.",
93
96
  "Parallelism follows ownership and dependency layers rather than item count.",
94
97
  "Dispatch rationale belongs in run notes or the item body when it affects bundling or wave width.",
98
+ "Gate scope: release-bound work is the focus, not a hard boundary; follow concrete evidence and route ambient findings to the unbound backlog.",
95
99
  ],
96
100
  },
97
101
  "advisory_review": {
@@ -104,6 +108,8 @@ CAPSULES = {
104
108
  "Cross-model peer review applies only when a different model class is available.",
105
109
  "Same-model review uses a fresh-context sub-agent rather than inline self-review.",
106
110
  "Stories fast-advance on verification; features and epics get deeper review.",
111
+ "Reviewer findings are proposals; the receiving orchestrator judges actual risk in repository context.",
112
+ "Only material current-cycle risk blocks completion; park valid lower-priority findings and continue.",
107
113
  "Advisory review is non-blocking during design, but final autopilot completion needs a successful review path.",
108
114
  ],
109
115
  },
@@ -372,6 +372,22 @@ class RulesLoaderTest(unittest.TestCase):
372
372
  printed = out.getvalue()
373
373
  self.assertIn("Agile Workflow Principles", printed)
374
374
  self.assertIn("Code-design capsule", printed)
375
+ self.assertIn("Code economy", printed)
376
+ self.assertIn("Useful tests", printed)
377
+ self.assertIn("ask before reducing guarantees", printed)
378
+
379
+ def test_gate_prompt_emits_wider_scope_rule(self) -> None:
380
+ payload = self._payload(
381
+ session_id="gate-scope", cwd=str(self.root), prompt="gate the release items"
382
+ )
383
+ out = io.StringIO()
384
+ with mock.patch.object(
385
+ prompt_context.sys, "stdin", io.StringIO(json.dumps(payload))
386
+ ), mock.patch.object(prompt_context.sys, "stdout", out):
387
+ rc = prompt_context.main()
388
+ self.assertEqual(rc, 0)
389
+ self.assertIn("release-bound work is the focus, not a hard boundary", out.getvalue())
390
+ self.assertIn("ambient findings", out.getvalue())
375
391
 
376
392
  def test_main_sessionstart_emits_rules(self) -> None:
377
393
  (self.rules_dir / "a.md").write_text("Rule A body", encoding="utf-8")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nklisch/pi-agile-workflow",
3
- "version": "0.16.1",
3
+ "version": "0.16.3",
4
4
  "description": "Markdown-based work-tracking substrate for AI-driven projects.",
5
5
  "author": {
6
6
  "name": "nklisch"
@@ -22,7 +22,7 @@
22
22
  set -euo pipefail
23
23
 
24
24
  # Kept in lockstep with plugin.json by scripts/bump-version.sh. Do not hand-edit.
25
- WORK_VIEW_VERSION="0.16.1"
25
+ WORK_VIEW_VERSION="0.16.3"
26
26
 
27
27
  # ============================================================================
28
28
  # Version prelude (POSIX / bash 3.2 safe — runs BEFORE the Bash-4 guard)
@@ -6,9 +6,10 @@ description: >
6
6
  make autonomous progress on the substrate. Reads .work/active/, picks ready items by depends_on and
7
7
  stage, delegates to design, implement, and review skills, commits transitions, and repeats until the
8
8
  scope is done or blocked. Before reporting complete, runs a final peer-review/fresh-context
9
- completion pass and fixes or files accepted findings. No /loop or --resume mechanics; the harness
10
- goal/continuation feature owns long-running persistence. Epic-scoped by default; --all drains all
11
- active work; free-text scope directives are allowed.
9
+ completion pass, adjudicates reviewer proposals, fixes material blockers, and parks lower-risk
10
+ valid findings. No /loop or --resume mechanics; the harness goal/continuation feature owns
11
+ long-running persistence. Epic-scoped by default; --all drains all active work; free-text scope
12
+ directives are allowed.
12
13
  ---
13
14
 
14
15
  # Autopilot
@@ -166,8 +167,11 @@ this caller note in every delegated prompt:
166
167
  > advisory policy from `principles/SKILL.md` Part IV in direct and autopilot
167
168
  > modes: use independent review only when the risk and review weight warrant it,
168
169
  > and label review cross-model only when a different model class is actually
169
- > selected. Peer failures during design are non-blocking. Preserve
170
- > complementary→adversarial order when both phases run. For reviewer posture and
170
+ > selected. Treat reviewer findings as proposals: independently adjudicate them
171
+ > against repository context, fix or activate only material current-cycle
172
+ > blockers, and park valid lower-risk work in the unbound backlog. Peer failures
173
+ > during design are non-blocking. Preserve complementary→adversarial order when
174
+ > both phases run. For reviewer posture and
171
175
  > host-native roles, load `principles/references/subagents.md`; for capability
172
176
  > mapping, load `principles/references/models.md`. A top-tier reasoning peer may
173
177
  > take 10 to 30 minutes; quiet output after a few minutes is not a hang.
@@ -227,19 +231,23 @@ bounces[<item-id>] = times this item has gone implementing -> review -> implemen
227
231
 
228
232
  After every bounce:
229
233
 
230
- 1. Confirm the review left concrete, durable findings in the item body.
231
- 2. Rebuild the queue so the item naturally re-enters implementation.
232
- 3. Implement the findings, run the relevant verification, and send the item
234
+ 1. Confirm the receiving agent—not the reviewer alone—adjudicated the proposals
235
+ and left concrete, receiver-confirmed blockers in the item body.
236
+ 2. Park valid findings below the material current-cycle bar in the unbound
237
+ backlog; they do not keep the item bounced or enter this run's queue.
238
+ 3. Rebuild the queue so the item naturally re-enters implementation.
239
+ 4. Implement the blockers, run the relevant verification, and send the item
233
240
  through review again.
234
- 4. Continue until review approves the item or autonomous work reaches a genuine
241
+ 5. Continue until review approves the item or autonomous work reaches a genuine
235
242
  hard blocker under `principles/SKILL.md` Part III.
236
243
 
237
- There is no fixed bounce limit. If the same substantive finding survives more
238
- than one correction pass, treat recurrence as evidence that the attempted fix or
239
- design model is wrong: re-read the item and foundation docs, diagnose the root
240
- cause, revise the item design or implementation notes when needed, and use a
241
- fresh implementation or review context when that would add independent
242
- judgment. Do not park the item at `review`, label it stuck, or require human
244
+ There is no fixed bounce limit. If the same material finding survives more than
245
+ one correction pass, treat recurrence as evidence that the attempted fix or
246
+ design model may be wrong: re-read the item and foundation docs, diagnose the
247
+ root cause, revise the item design or implementation notes when needed, and use
248
+ a fresh implementation or review context when that would add independent
249
+ judgment. Recurrence alone never elevates a low-risk finding into a blocker. Do
250
+ not park the active item at `review`, label it stuck, or require human
243
251
  intervention solely because a counter reached two (or any other number).
244
252
 
245
253
  ### Phase 6: Refactor Cadence (`--all` Only)
@@ -310,20 +318,25 @@ When the scoped queue appears drained:
310
318
  blocked on final review and include the reason. `none` requires complete
311
319
  administrative evidence instead of a fresh reviewer; missing evidence blocks
312
320
  rather than becoming an invented pass.
313
- 5. For every substantive accepted finding:
314
- - Small and clearly safe fix: fix it immediately, run verification, commit,
315
- and rebuild the queue.
316
- - Needs tracked work: create or update a substrate item at the right stage
317
- (`drafting` for design gaps, `implementing` for concrete fixes), commit,
318
- and rebuild the queue.
319
- - Invalid or lower-value finding: reject it with a one-line rationale in the
320
- final review summary.
321
+ 5. The receiving autopilot agent adjudicates every proposed finding against the
322
+ repository's acceptance criteria, users and deployment shape, likelihood,
323
+ blast radius, recoverability, safeguards, and delay cost. Reviewer severity
324
+ is evidence, not the verdict:
325
+ - Receiver-confirmed material current-cycle blocker: fix it immediately when
326
+ small and safe, or create/update an active item at the right stage
327
+ (`drafting` for design gaps, `implementing` for concrete fixes); verify,
328
+ commit, and rebuild the queue.
329
+ - Valid but below the blocker bar: park an unbound backlog item with a brief
330
+ risk rationale, commit it, and continue. It does not reopen the drained
331
+ scope or prevent completion.
332
+ - Nit or unsupported/inapplicable claim: note or reject it with a one-line
333
+ rationale; do not create active work.
321
334
  6. If rebuilding the queue finds new or regressed `drafting`, `implementing`, or
322
- `review` items in scope, return to Phase 2 and drain them. Completion is not
323
- allowed while accepted final-review findings remain active.
324
- 7. Once the final review path succeeds, produces no accepted
325
- blocking/substantive findings, and the queue is still empty, report the goal
326
- as complete.
335
+ `review` items in scope, return to Phase 2 and drain them. Parked review
336
+ follow-ups remain outside autopilot scope until separately promoted.
337
+ 7. Once the final review path succeeds, every proposal is adjudicated, no
338
+ receiver-confirmed blocker remains, and the queue is still empty, report the
339
+ goal as complete.
327
340
 
328
341
  Record the final review in the autopilot final summary. Do not paste the full
329
342
  peer transcript into item bodies; summarize accepted/rejected points where they
@@ -343,8 +356,8 @@ Narrate briefly as items advance. Final summary:
343
356
  - Effective worker capability and selection rationale
344
357
  - Effective review weight and source
345
358
  - Final completion-review status: administrative, cross-model, same-harness
346
- fresh-context, or failed; include accepted findings fixed/filed and rejected
347
- findings summary
359
+ fresh-context, or failed; summarize blockers fixed/activated, lower-risk
360
+ findings parked, and proposals rejected
348
361
  - Goal outcome: complete, blocked, or interrupted
349
362
 
350
363
  ## Guardrails
@@ -352,11 +365,13 @@ Narrate briefly as items advance. Final summary:
352
365
  - Never use structured question tool while an autopilot goal is actively driving the
353
366
  delegated work. Resolve with judgment and log rationale.
354
367
  - Do not report `complete` until Phase 8 has run successfully at the effective
355
- review weight and all accepted findings have been fixed or filed back into the
356
- queue.
368
+ review weight, every proposal has been adjudicated, and all receiver-confirmed
369
+ material blockers have been fixed or filed into the active queue. Parked
370
+ lower-risk findings do not block completion.
357
371
  - Commit after every item state change or blocker note.
358
372
  - Do not push, force-push, or release; the user controls publication.
359
- - Do not touch `.work/backlog/` except to report that backlog items are out of
360
- scope.
373
+ - Do not drain or promote `.work/backlog/`; it is outside autopilot scope.
374
+ Review disposition may park valid lower-priority findings there without
375
+ reopening the run.
361
376
  - The substrate is the resume point. No `PROGRESS.md`, no watchdog loops, no
362
377
  `--resume`.
@@ -628,6 +628,22 @@ must already exist at their new home or the dense content is lost.
628
628
  All other tags are project-specific (see `.work/CONVENTIONS.md`) and do not
629
629
  affect skill routing.
630
630
 
631
+ ### Engineering posture
632
+
633
+ Prefer short, clear code and context-appropriate rigor over speculative
634
+ generality. Not every project needs exhaustive invariants, edge handling,
635
+ firm determinism, or universal coverage. Test important interfaces, complex
636
+ units, and regressions learned from bugs—not every line. When touching an
637
+ area, eliminate unnecessary code, tests, checks, abstractions, and
638
+ compatibility paths; leave it simpler. Ask before removing meaningful
639
+ behavior, guarantees, validation, compatibility, or safety.
640
+
641
+ Release-bound items define a gate's focus, not a hard scan boundary. Gates
642
+ may follow concrete evidence into adjacent dependencies, shared
643
+ infrastructure, or system-wide mechanisms. Bind release-relevant findings;
644
+ route merely ambient discoveries to the unbound backlog so a scan does not
645
+ silently expand a release.
646
+
631
647
  ### Test integrity
632
648
 
633
649
  When running, writing, or modifying tests:
@@ -643,6 +659,11 @@ must already exist at their new home or the dense content is lost.
643
659
  green again, if a parked production bug is small enough for a single
644
660
  stride, pick it up immediately as `/agile-workflow:scope` → design →
645
661
  implement. Larger bugs stay in backlog for prioritization.
662
+ - **Tests must earn their upkeep.** Prefer tests at stable interfaces,
663
+ regression tests for real bugs, and unit tests for genuinely complex
664
+ units. Do not add tests merely to cover every line or surface; remove
665
+ duplicate, tautological, implementation-bound, or obsolete tests when
666
+ they add less confidence than maintenance cost.
646
667
  - **NEVER game a test to make it pass.** A failing test that documents
647
668
  *why* it fails — an inline comment naming the bug, a `skip` linked to a
648
669
  backlog id, an `xfail` with a reason — is more honest than a green test
@@ -654,8 +675,11 @@ must already exist at their new home or the dense content is lost.
654
675
  override agile-workflow defaults. When peeragent is available with a different
655
676
  model class, large/risky autopilot design decisions may use one advisory pass;
656
677
  small/low-risk work skips it. Autopilot also runs a final peer-review loop
657
- before reporting completion and fixes or files accepted findings first.
658
- Same-model peers fall back to local sub-agents instead. Claude Opus peeragent
678
+ before reporting completion. Reviewer findings are proposals: the receiving
679
+ orchestrator verifies them against repository context and actual risk. Only
680
+ credible material current-cycle risks block; park valid lower-priority
681
+ findings in the unbound backlog and continue. Same-model peers fall back to
682
+ local sub-agents instead. Claude Opus peeragent
659
683
  calls can take 10 to 30 minutes on large reviews; no return after a few minutes
660
684
  is not evidence that the call has hung.
661
685
 
@@ -670,7 +694,7 @@ must already exist at their new home or the dense content is lost.
670
694
  this managed-section overwrite — content verification, NOT just a non-empty +
671
695
  end-marker check): confirm `.agents/rules/agile-workflow.md` exists AND that the
672
696
  dense rule content the slim removes from AGENTS actually landed there — each
673
- section is present (`### Tag semantics`, `### Test integrity`, the
697
+ section is present (`### Tag semantics`, `### Engineering posture`, `### Test integrity`, the
674
698
  advisory-review paragraph, and Broad entry points), or recompute per the Phase
675
699
  1.8 provenance check. Only when the content is verified present do you write or
676
700
  refresh the slim AGENTS section (Phase 6), overwriting the managed AGENTS block.
@@ -125,9 +125,9 @@ Instead:
125
125
 
126
126
  ### Phase 2: Ground yourself
127
127
 
128
- The principles skill auto-loads — both code-design (Ports & Adapters, SSOT,
129
- Generated Contracts, Fail Fast) and substrate-execution (Item-IS-the-Work,
130
- Rolling-Foundation, Late-Binding) are active.
128
+ The principles skill auto-loads — code-design includes proportional rigor, code
129
+ economy, useful tests, and leaving touched areas simpler; substrate-execution
130
+ includes Item-IS-the-Work, Rolling-Foundation, and Late-Binding.
131
131
 
132
132
  Read:
133
133
  1. `docs/VISION.md`, `docs/SPEC.md`, `docs/ARCHITECTURE.md` — foundation that
@@ -207,6 +207,17 @@ Aim for 2-6 child features per epic. Fewer than 2 means the epic was probably
207
207
  sized as a feature; flag the user. More than 6 means you're slicing too thin;
208
208
  collapse.
209
209
 
210
+ ### Phase 4.4: Identify simplification arcs
211
+
212
+ For each area the epic touches, ask what capabilities, code, tests, checks,
213
+ abstractions, compatibility paths, or whole subsystems the new direction can
214
+ make unnecessary. Prefer feature arcs that replace and remove over arcs that
215
+ only layer on more machinery. Fold cohesive elimination into the owning feature
216
+ brief or create an explicit `[refactor]`/`[cleanup]` child feature when it needs
217
+ independent design and review. Park unrelated cleanup. Any arc that removes
218
+ behavior or meaningful guarantees becomes a high-level design decision for user
219
+ confirmation, not an assumed refactor.
220
+
210
221
  ### Phase 4.5: Identify cross-feature dependencies
211
222
 
212
223
  For each candidate feature, ask:
@@ -309,6 +320,9 @@ capability it covers, why it exists in this epic, what it does NOT cover>
309
320
  - Position in epic: <e.g., "foundation feature — others depend on its types"
310
321
  / "consumer of feature-X" / "independent capability">
311
322
 
323
+ ## Simplification opportunity
324
+ - <what this feature should delete, consolidate, replace, or deliberately retain>
325
+
312
326
  ## Foundation references
313
327
  - `docs/VISION.md` — relevant section(s) (only if directly relevant)
314
328
  - `docs/ARCHITECTURE.md` — relevant component(s)
@@ -362,6 +376,10 @@ feature lands.">
362
376
  - `<feature-id-2>` — <one-line description> — depends on: `[<feature-id-1>]`
363
377
  - `<feature-id-3>` — <one-line description> — depends on: `[<feature-id-1>]`
364
378
 
379
+ ### Simplification arcs
380
+
381
+ - <feature-id> — <code/tests/checks/abstractions/subsystems it should remove or consolidate>
382
+
365
383
  ### Decomposition risks
366
384
 
367
385
  <from pre-mortem, if any. Otherwise omit the section.>