devrites 7.1.1 → 7.1.2

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 (147) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +1 -1
  3. package/pack/.claude/agents/devrites-upgrade-planner.md +12 -4
  4. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +21 -4
  5. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +10 -3
  6. package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +7 -4
  7. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +11 -11
  8. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +52 -56
  9. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +11 -1
  10. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +41 -40
  11. package/pack/.claude/skills/rite-autocomplete/SKILL.md +12 -14
  12. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +34 -38
  13. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +38 -39
  14. package/pack/.claude/skills/rite-define/SKILL.md +28 -27
  15. package/pack/.claude/skills/rite-plan/SKILL.md +7 -2
  16. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +5 -2
  17. package/pack/.claude/skills/rite-resolve/SKILL.md +17 -10
  18. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +18 -6
  19. package/pack/.claude/skills/rite-review/SKILL.md +4 -4
  20. package/pack/.claude/skills/rite-review/reference/security-review.md +4 -2
  21. package/pack/.claude/skills/rite-seal/SKILL.md +28 -33
  22. package/pack/.claude/skills/rite-ship/SKILL.md +14 -7
  23. package/pack/.claude/skills/rite-temper/SKILL.md +18 -18
  24. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +6 -7
  25. package/pack/.claude/skills/rite-upgrade/SKILL.md +7 -2
  26. package/pack/.claude/skills/rite-vet/SKILL.md +33 -34
  27. package/pack/generated/claude/agents/devrites-upgrade-planner.md +12 -4
  28. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +21 -4
  29. package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +10 -3
  30. package/pack/generated/claude/skills/devrites-debug-recovery/reference/regression-test.md +7 -4
  31. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +11 -11
  32. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +52 -56
  33. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +11 -1
  34. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +41 -40
  35. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +12 -14
  36. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +34 -38
  37. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +38 -39
  38. package/pack/generated/claude/skills/rite-define/SKILL.md +28 -27
  39. package/pack/generated/claude/skills/rite-plan/SKILL.md +7 -2
  40. package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +5 -2
  41. package/pack/generated/claude/skills/rite-resolve/SKILL.md +17 -10
  42. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +18 -6
  43. package/pack/generated/claude/skills/rite-review/SKILL.md +4 -4
  44. package/pack/generated/claude/skills/rite-review/reference/security-review.md +4 -2
  45. package/pack/generated/claude/skills/rite-seal/SKILL.md +28 -33
  46. package/pack/generated/claude/skills/rite-ship/SKILL.md +14 -7
  47. package/pack/generated/claude/skills/rite-temper/SKILL.md +18 -18
  48. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +6 -7
  49. package/pack/generated/claude/skills/rite-upgrade/SKILL.md +7 -2
  50. package/pack/generated/claude/skills/rite-vet/SKILL.md +33 -34
  51. package/pack/generated/codex/agents/devrites-upgrade-planner.toml +12 -4
  52. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +21 -4
  53. package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +10 -3
  54. package/pack/generated/codex/skills/devrites-debug-recovery/reference/regression-test.md +7 -4
  55. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +11 -11
  56. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +52 -56
  57. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +11 -1
  58. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +41 -40
  59. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +12 -14
  60. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +34 -38
  61. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +38 -39
  62. package/pack/generated/codex/skills/rite-define/SKILL.md +28 -27
  63. package/pack/generated/codex/skills/rite-plan/SKILL.md +7 -2
  64. package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +5 -2
  65. package/pack/generated/codex/skills/rite-resolve/SKILL.md +17 -10
  66. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +18 -6
  67. package/pack/generated/codex/skills/rite-review/SKILL.md +4 -4
  68. package/pack/generated/codex/skills/rite-review/reference/security-review.md +4 -2
  69. package/pack/generated/codex/skills/rite-seal/SKILL.md +28 -33
  70. package/pack/generated/codex/skills/rite-ship/SKILL.md +14 -7
  71. package/pack/generated/codex/skills/rite-temper/SKILL.md +18 -18
  72. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +6 -7
  73. package/pack/generated/codex/skills/rite-upgrade/SKILL.md +7 -2
  74. package/pack/generated/codex/skills/rite-vet/SKILL.md +33 -34
  75. package/pack/generated/devin/agents/devrites-upgrade-planner.md +12 -4
  76. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +21 -4
  77. package/pack/generated/devin/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +10 -3
  78. package/pack/generated/devin/skills/devrites-debug-recovery/reference/regression-test.md +7 -4
  79. package/pack/generated/devin/skills/devrites-lib/reference/reply-contract.md +11 -11
  80. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +52 -56
  81. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +11 -1
  82. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +41 -40
  83. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +12 -14
  84. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +34 -38
  85. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +38 -39
  86. package/pack/generated/devin/skills/rite-define/SKILL.md +28 -27
  87. package/pack/generated/devin/skills/rite-plan/SKILL.md +7 -2
  88. package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +5 -2
  89. package/pack/generated/devin/skills/rite-resolve/SKILL.md +17 -10
  90. package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +18 -6
  91. package/pack/generated/devin/skills/rite-review/SKILL.md +4 -4
  92. package/pack/generated/devin/skills/rite-review/reference/security-review.md +4 -2
  93. package/pack/generated/devin/skills/rite-seal/SKILL.md +28 -33
  94. package/pack/generated/devin/skills/rite-ship/SKILL.md +14 -7
  95. package/pack/generated/devin/skills/rite-temper/SKILL.md +18 -18
  96. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +6 -7
  97. package/pack/generated/devin/skills/rite-upgrade/SKILL.md +7 -2
  98. package/pack/generated/devin/skills/rite-vet/SKILL.md +33 -34
  99. package/pack/generated/omp/agents/devrites-upgrade-planner.md +12 -4
  100. package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +21 -4
  101. package/pack/generated/omp/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +10 -3
  102. package/pack/generated/omp/skills/devrites-debug-recovery/reference/regression-test.md +7 -4
  103. package/pack/generated/omp/skills/devrites-lib/reference/reply-contract.md +11 -11
  104. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +52 -56
  105. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +11 -1
  106. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +41 -40
  107. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +12 -14
  108. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +34 -38
  109. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +38 -39
  110. package/pack/generated/omp/skills/rite-define/SKILL.md +28 -27
  111. package/pack/generated/omp/skills/rite-plan/SKILL.md +7 -2
  112. package/pack/generated/omp/skills/rite-plan/reference/replan-and-repair.md +5 -2
  113. package/pack/generated/omp/skills/rite-resolve/SKILL.md +17 -10
  114. package/pack/generated/omp/skills/rite-resolve/reference/answer-protocol.md +18 -6
  115. package/pack/generated/omp/skills/rite-review/SKILL.md +4 -4
  116. package/pack/generated/omp/skills/rite-review/reference/security-review.md +4 -2
  117. package/pack/generated/omp/skills/rite-seal/SKILL.md +28 -33
  118. package/pack/generated/omp/skills/rite-ship/SKILL.md +14 -7
  119. package/pack/generated/omp/skills/rite-temper/SKILL.md +18 -18
  120. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +6 -7
  121. package/pack/generated/omp/skills/rite-upgrade/SKILL.md +7 -2
  122. package/pack/generated/omp/skills/rite-vet/SKILL.md +33 -34
  123. package/pack/generated/pi/agents/devrites-upgrade-planner.md +12 -4
  124. package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +21 -4
  125. package/pack/generated/pi/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +10 -3
  126. package/pack/generated/pi/skills/devrites-debug-recovery/reference/regression-test.md +7 -4
  127. package/pack/generated/pi/skills/devrites-lib/reference/reply-contract.md +11 -11
  128. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +52 -56
  129. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +11 -1
  130. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +41 -40
  131. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +12 -14
  132. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +34 -38
  133. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +38 -39
  134. package/pack/generated/pi/skills/rite-define/SKILL.md +28 -27
  135. package/pack/generated/pi/skills/rite-plan/SKILL.md +7 -2
  136. package/pack/generated/pi/skills/rite-plan/reference/replan-and-repair.md +5 -2
  137. package/pack/generated/pi/skills/rite-resolve/SKILL.md +17 -10
  138. package/pack/generated/pi/skills/rite-resolve/reference/answer-protocol.md +18 -6
  139. package/pack/generated/pi/skills/rite-review/SKILL.md +4 -4
  140. package/pack/generated/pi/skills/rite-review/reference/security-review.md +4 -2
  141. package/pack/generated/pi/skills/rite-seal/SKILL.md +28 -33
  142. package/pack/generated/pi/skills/rite-ship/SKILL.md +14 -7
  143. package/pack/generated/pi/skills/rite-temper/SKILL.md +18 -18
  144. package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +6 -7
  145. package/pack/generated/pi/skills/rite-upgrade/SKILL.md +7 -2
  146. package/pack/generated/pi/skills/rite-vet/SKILL.md +33 -34
  147. package/package.json +1 -1
@@ -1,7 +1,6 @@
1
1
  # Scope modes + the two passes
2
2
 
3
- The heart of `/rite-temper`: two ordered passes (heat, then quench), converging on exactly
4
- one scope mode. Ambition is a **generative** move followed by a **required convergence**: the
3
+ `/rite-temper`: two ordered passes (heat, then quench), converging on one scope mode. Ambition is a **generative** move followed by a **required convergence**: the
5
4
  divergence is never the spec; the converged sweet spot is.
6
5
 
7
6
  ## Pass 1: FORWARD (heat: raise ambition on the outcome)
@@ -41,11 +40,11 @@ Mode selection is the first convergence move. Record the chosen mode + rationale
41
40
  | **REDUCE-TO-MVP** | Over-scoped: second-system bloat, ~all must-haves, gold-plating | Hammer scope to the Minimum Usable Subset; move the rest to Non-goals with one-line reasons + revisit notes | Strongest YAGNI alignment. Cutting acceptance is **still a spec change**: record it via the Guard, never a silent trim |
42
41
 
43
42
  ## Bound ambition by reversibility
44
- The bigger the bet, the more it must be reversible. Irreversible-risk areas (auth, migrations,
45
- public API, data model) get the **opposite** of ambition: maximum conservatism, explicit
46
- rollback, and they **always pause** regardless of mode (the [`afk-hitl.md`](../../devrites-lib/reference/standards/afk-hitl.md) irreversible-risk
47
- list is honored verbatim). Size big bets so that if the whole thing vanished tomorrow, you'd be
48
- fine.
43
+ Bigger bets need more reversibility. Auth, migrations, public API, and data-model
44
+ changes need maximum conservatism, full review, and explicit rollback.
45
+ Pause only for actual [canonical irreversible-risk items](../../devrites-lib/reference/standards/afk-hitl.md#irreversible-risk-list-always-pause)
46
+ or unresolved human-owned decisions, not an already-approved reversible internal
47
+ data-model change. Size bets to tolerate their disappearance tomorrow.
49
48
 
50
49
  ## Effort foresight (frame it now, not "later")
51
50
  While choosing scope, surface the late-stage questions early: *"What will surprise us at
@@ -99,8 +99,13 @@ references, and only current phase contracts needed for the observed gap.
99
99
  - a missing/malformed strict manifest, missing/malformed/mismatched evidence binding,
100
100
  a browser-binding defect when that file exists, or current candidate-check failure
101
101
  → `/rite-prove`;
102
- - candidate-affecting capability-ledger, `DESIGN.md`, or ADR rollups still deferred by
103
- an old Ship-era workspace → `/rite-polish`;
102
+ - required candidate-affecting capability-ledger, `DESIGN.md`, or ADR rollups still
103
+ deferred by an old Ship-era workspace → `gap`: no admitted route. STOP with an
104
+ explicit `/rite-polish` handoff for separate user authorization; never invoke
105
+ those rollup writes inside Upgrade. After authorization outside Upgrade, normal
106
+ affected Prove → Review → Seal applies;
107
+ - workspace-only Polish refresh → `/rite-polish` only when its exact paths remain
108
+ within the admitted gate artifacts and no candidate-affecting rollup is required;
104
109
  - a missing, stale, or mismatched review binding → `/rite-review`;
105
110
  - a missing, stale, or mismatched seal binding or failed Seal gate → `/rite-seal`.
106
111
 
@@ -11,10 +11,10 @@ user-invocable: true
11
11
 
12
12
  # /rite-vet: review the plan before build
13
13
 
14
- Vet every plan's scope, architecture, quality, proof, performance, failures and writer
15
- safety. Fold cited technical findings; design Build tests. Temper owns product;
16
- Vet owns implementation; current `$ARGUMENTS` (`--full`) feeds the depth triggers in
17
- `reference/depth.md`; profiles never remove the exact plan-reviewer gate
14
+ Vet each plan: scope, architecture, quality, proof, performance, failures, writer
15
+ safety. Fold cited technical findings; design Build tests. Temper owns product,
16
+ Vet implementation. Current `$ARGUMENTS` (`--full`) feeds `reference/depth.md`
17
+ triggers; profiles never remove the exact plan-reviewer gate
18
18
  ([orchestration-profiles.md](../devrites-lib/reference/orchestration-profiles.md)).
19
19
 
20
20
  ## Rules
@@ -41,21 +41,23 @@ plan declares a root-authored executable workflow file, read
41
41
 
42
42
  ## Invariants
43
43
 
44
- - Review implementation, not ambition. Challenge creep, complexity, proof, and
45
- risk without changing accepted product scope.
46
- - Root owns decisions/writes/readiness; reviewers judge without route policy.
47
- Cite findings/confidence; suppress
48
- unverified or confidence ≤4 findings under `review-axes.md`.
49
- Lens arrows in `eng-lenses.md` are heuristics; band findings only under the
50
- four `review-axes.md` names.
51
- - Auth, migration, public API, and data-model changes use maximum caution and the
52
- irreversible-risk stop. Project principles never become trade-offs.
44
+ - Review implementation, not ambition. Challenge creep/complexity/proof/risk
45
+ without changing accepted product scope.
46
+ - Root owns decisions/writes/readiness; reviewers judge, not route. Cite
47
+ findings/confidence; suppress unverified or confidence ≤4 findings per
48
+ `review-axes.md`. `eng-lenses.md` arrows are heuristics; use only the four
49
+ `review-axes.md` band names.
50
+ - Auth, migration, public API, and data-model changes need maximum caution,
51
+ full review, and explicit rollback. Pause only for
52
+ [canonical irreversible-risk items](../devrites-lib/reference/standards/afk-hitl.md#irreversible-risk-list-always-pause)
53
+ or unresolved human-owned decisions, not an already-approved reversible internal
54
+ data-model change. Project principles never become trade-offs.
53
55
  - **Governance-protected paths** (`.devrites/**`, pack skill/agent trees,
54
- `NOTICE.md` generator regions, CI/hook config named in repo docs) require explicit
55
- human approval before plan slices may edit them. A slice touching a protected path
56
- without approval → Vet **NEEDS CLARIFICATION**.
57
- - Use the lowest axis band; never average or round thin to ready. Search before
58
- asking and resolve reversible technical choices. Ask only human-owned choices.
56
+ `NOTICE.md` generator regions, documented CI/hook config) require explicit
57
+ human approval before plan slices edit them; absent approval → Vet
58
+ **NEEDS CLARIFICATION**.
59
+ - Use lowest axis band; never average/round thin to ready. Search; resolve
60
+ reversible technical choices; ask only human-owned.
59
61
  - Preserve a valid technical return cursor. Agent-owned `NEEDS REPLAN` returns
60
62
  internally to its caller, not to the human; on a direct invocation there is
61
63
  no caller, so Vet becomes it — save a return cursor
@@ -76,18 +78,16 @@ plan declares a root-authored executable workflow file, read
76
78
  assumptions, and state. Require approved Plan and `Decision coverage: CLEAR`;
77
79
  otherwise stop for Define or Clarify. Check placement (`get_architecture`),
78
80
  blast radius (`trace_path`), and reuse (`search_graph`) per [`code-navigation.md`](../devrites-lib/reference/standards/code-navigation.md).
79
- 1. **Select depth.** Apply `reference/depth.md` exactly; never skip. Every initial
80
- pass records an engineering verdict and test-plan coverage. A valid Recovery
81
- recheck retains prior depth and enters 1b.
82
- 1a. **Independent initial pass.** Freeze candidate and dispatch the exact fresh
83
- read-only plan reviewer — plus developer-experience reviewer for developer
84
- surfaces (trigger `devex`) and the current strategy reviewer after significant
85
- Temper — in
86
- parallel under `../devrites-lib/reference/parallel-dispatch.md`; they are
87
- independent read-only passes on one frozen candidate. Missing
88
- required account blocks. Run root steps 2–4, including step 3's preflight
89
- commands, on the same frozen candidate while the wave is out; reconcile the
90
- accounts when they return.
81
+ 1. **Select depth.** Apply `reference/depth.md` exactly; never skip. Initial passes
82
+ record engineering verdict and test-plan coverage. Valid Recovery rechecks
83
+ retain prior depth; enter 1b.
84
+ 1a. **Independent initial pass.** Freeze candidate; dispatch exact fresh read-only
85
+ plan reviewer, plus developer-experience reviewer for developer surfaces
86
+ (trigger `devex`) and current strategy reviewer after significant Temper, in
87
+ parallel under `../devrites-lib/reference/parallel-dispatch.md`: independent
88
+ read-only passes on one frozen candidate. Missing required account blocks.
89
+ Meanwhile run root steps 2–4, including step 3 preflight commands, on that
90
+ candidate; reconcile returned accounts.
91
91
  1b. **Recovery recheck.** Require valid return cursor, accepted prior finding,
92
92
  exact fingerprint/reproduction, repaired candidate identity, changed
93
93
  paths/criteria, affected drift/evidence, and the recorded delta self-check.
@@ -118,14 +118,13 @@ plan declares a root-authored executable workflow file, read
118
118
  Do not fall through to steps 2–7. Retain evidenced unchanged coverage; changed
119
119
  global contract/uncertain impact requires full applicable review. Reopen historical
120
120
  findings only for affected invariants/dependencies.
121
- 2. **Challenge scope.** Apply review-axes §0 and search accepted decisions.
121
+ 2. **Challenge scope.** Apply review-axes §0; search accepted decisions.
122
122
  Harden to the smallest contract-complete plan, using marked topology action.
123
123
  Then verify bidirectional ID-and-meaning traceability across spec/plan/
124
124
  tasks/test-plan/traceability, acceptance, terms, principles, anti-slop,
125
125
  and conventions; every slice and test-plan row maps to a live requirement
126
- and vice versa. Critical gaps and
127
- unexcepted principle breaches block; record the challenge result in `eng-review.md`
128
- §2 (Scope challenge) after recheck.
126
+ and vice versa. Critical gaps/unexcepted principle breaches block. Record
127
+ rechecked result in `eng-review.md` §2 (Scope challenge).
129
128
  3. **Preflight Build entry.** Under `reference/artifacts.md`, verify exact
130
129
  command/cwd/tool/version/prerequisite; output filters must preserve upstream
131
130
  failure. Verify dependencies from authoritative source plus nearest manifest.
@@ -37,7 +37,10 @@ rules cannot fail.
37
37
  - `repairable`: each defect is neutral, preservation-safe, and owned by Clarify,
38
38
  Plan repair, Converge, Vet, Prove, Polish, Review, or Seal.
39
39
  - `unsupported`: cursor/topology is unofficial; propose no rewrite.
40
- - `gap`: evidence/contracts are insufficient. Missing input or unverifiable current rules produce `gap`, never `current` or `repairable`.
40
+ - `gap`: evidence/contracts are insufficient or the required delta has no admitted
41
+ preservation-safe route. Missing input or unverifiable current rules produce `gap`,
42
+ never `current` or `repairable`. Required candidate-affecting rollup writes also
43
+ produce `gap`.
41
44
 
42
45
  ## Rules
43
46
 
@@ -51,9 +54,14 @@ rules cannot fail.
51
54
  slices beyond the feature ceiling to Plan course-correct (`MVP cut` + named
52
55
  continuation sequence); built slices and their evidence stay.
53
56
  - For released post-Build work, route a strict-manifest, evidence/browser-binding, or
54
- candidate-check defect to Prove; an old Ship-era candidate rollup to Polish; a
55
- review-binding defect to Review; and a seal-binding or Seal-gate defect to Seal.
56
- Include only applicable owners, ordered Prove, Polish, Review, Seal. Never infer scope
57
+ candidate-check defect to Prove; a workspace-only Polish refresh to Polish only
58
+ within Upgrade's admitted gate artifacts; a review-binding defect to Review; and a
59
+ seal-binding or Seal-gate defect to Seal. Required candidate-affecting capability-ledger,
60
+ `DESIGN.md`, or ADR rollups are outside admission: return `gap` with an explicit
61
+ `$rite-polish` handoff for separate user authorization, no writable paths and no admitted route.
62
+ Never recommend invoking those writes inside Upgrade. After authorization
63
+ outside Upgrade, normal affected Prove → Review → Seal applies.
64
+ Include only applicable admitted owners, ordered Prove, Polish, Review, Seal. Never infer scope
57
65
  or treat an old pass as current proof. A Prove repair is admissible only when legacy
58
66
  scope inputs are present and agree unambiguously; ambiguous candidate scope produces
59
67
  `gap` with no route.
@@ -53,6 +53,21 @@ has no clear next move. Optional slug selects the active workspace; defaults to
53
53
  gone, hypothesis recorded. Classify the failure.
54
54
  See [cleanup-and-classify.md](reference/cleanup-and-classify.md).
55
55
 
56
+ ## Caller-owned records and routing
57
+
58
+ The controlling root accepts and persists all recovery records in `decisions.md`,
59
+ `evidence.md`, and `## Dead ends` before the next admission/attempt. This rule governs
60
+ all loaded recovery steps, including cleanup and regression instructions. A leaf
61
+ returns the complete class/rationale, proposed routing, hypothesis/probe, baseline,
62
+ exact failure/evidence, causal fingerprint, attempt number and failed idea/dead ends,
63
+ and human predicate in its existing result fields (`gates`, `dead_ends`,
64
+ `follow_ups`, or `Escalation` as applicable); no new result schema is required.
65
+ A leaf never writes `.devrites/**`, changes phase, invokes agents, or commits through
66
+ recovery. Only the controlling root routes to owning rites and supplies later attempts
67
+ with accepted records. Product/test edits remain inside the caller's exact allowed
68
+ paths; recovery never widens them. Commit/PR wording is a returned proposal for the
69
+ authorized owner, not authority to commit.
70
+
56
71
  ## Hard rules
57
72
 
58
73
  - Quote exact signal-bearing error text with typed redactions (not paraphrase); apply
@@ -79,8 +94,9 @@ has no clear next move. Optional slug selects the active workspace; defaults to
79
94
  <!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"durable active failure or ambiguous admitted state","action":"OFFLINE_RECOVERY; correct offline, re-preflight, narrow Vet, retry only under cap","return":"saved caller or exact Plan/Vet route"} -->
80
95
  - **Classify before routing** with
81
96
  [cleanup-and-classify.md](reference/cleanup-and-classify.md).
82
- - **Durably record class and rationale** in `decisions.md` and the applicable
83
- `evidence.md` or `## Dead ends` entry.
97
+ - **Durably record class and rationale** through [Caller-owned records and routing](#caller-owned-records-and-routing):
98
+ root persists `decisions.md` and the applicable `evidence.md` or `## Dead ends`
99
+ entry; leaves return the full payload for root acceptance.
84
100
  - **One causal fingerprint, counted by the caller.** Normalize the root cause as
85
101
  `<affected boundary>: <failed invariant/failure mechanism>` and bind its minimal
86
102
  reproduction plus decisive signal rather than hashing symptom text.
@@ -98,5 +114,6 @@ has no clear next move. Optional slug selects the active workspace; defaults to
98
114
  human-only access becomes a human gate; otherwise return the spent strategy and
99
115
  reproduction to the caller, which escalates or parks per the
100
116
  [retry contract](../devrites-lib/reference/standards/afk-hitl.md#retry-cap-no-progress-loops-and-self-resolve);
101
- never request attempt four of the same strategy. While budget remains, coupled failure requiring behavior change routes
102
- `$rite-plan repair` inline; behavior-neutral rerouting uses `unblock` inline.
117
+ never request attempt four of the same strategy. While budget remains, the controlling
118
+ root routes coupled failure requiring behavior change to `$rite-plan repair` inline;
119
+ behavior-neutral rerouting uses `unblock` inline. Leaves return proposed routes only.
@@ -1,5 +1,10 @@
1
1
  # Cleanup + classify
2
2
 
3
+ All recording and routing below follows
4
+ [`SKILL.md` § Caller-owned records and routing](../SKILL.md#caller-owned-records-and-routing):
5
+ root accepts/persists the full payload and owns transitions; leaves return proposals
6
+ and evidence only, never workspace writes, agent launches, or commits.
7
+
3
8
  ## Classify one causal fingerprint
4
9
 
5
10
  Fingerprint the diagnosis, not its symptom. Reuse it until evidence disproves it; then
@@ -19,8 +24,9 @@ required before the next consumptive execution pause. Fresh authorization never
19
24
  pauses offline diagnosis or correction from retained evidence; never ask for a
20
25
  blind retry.
21
26
 
22
- Record class/routing in `decisions.md` and each failed attempt in `evidence.md`
23
- or `## Dead ends`. Apply the causal-fingerprint and three-attempt rules in
27
+ Root records class/routing in `decisions.md` and each failed attempt in `evidence.md`
28
+ or `## Dead ends`; leaves return the complete record for root acceptance/persistence
29
+ before the next admission. Apply the causal-fingerprint and three-attempt rules in
24
30
  [`SKILL.md`](../SKILL.md) Hard rules; record baseline, exact failure,
25
31
  hypothesis/probe, attempt number, and any human predicate.
26
32
 
@@ -31,4 +37,5 @@ hypothesis/probe, attempt number, and any human predicate.
31
37
  - [ ] Regression test passes (or absence of seam is documented).
32
38
  - [ ] All `[DEBUG-...]` instrumentation removed (`grep` the prefix).
33
39
  - [ ] Throwaway harnesses deleted (or moved to a clearly marked debug location).
34
- - [ ] The correct hypothesis is stated in `evidence.md` + the commit/PR message: next debugger learns.
40
+ - [ ] Root persists the correct hypothesis in `evidence.md`; leaves return it plus
41
+ proposed commit/PR wording for the authorized owner, without committing.
@@ -10,10 +10,13 @@ confidence.
10
10
 
11
11
  ## No correct seam? That itself is the finding
12
12
 
13
- Note it in `evidence.md` and append a follow-up in the active feature's
14
- `decisions.md` (or run `$rite-plan repair` if the spec is affected): the
15
- codebase architecture is preventing this class of failure from being locked
16
- down. Frame it as a *deepening opportunity* ("this module needs a seam at <X>
13
+ Follow [`SKILL.md` § Caller-owned records and routing](../SKILL.md#caller-owned-records-and-routing):
14
+ root notes it in `evidence.md` and appends a follow-up in the active feature's
15
+ `decisions.md` (or routes `$rite-plan repair` if the spec is affected). A leaf
16
+ returns the complete finding, evidence, and proposed route for root acceptance and
17
+ persistence; it never writes the workspace or invokes the rite. The codebase
18
+ architecture is preventing this class of failure from being locked down. Frame it as
19
+ a *deepening opportunity* ("this module needs a seam at <X>
17
20
  so this failure can be regression-tested") so the next `$rite-plan` repair or
18
21
  architecture cleanup pass has a concrete target.
19
22
 
@@ -1,8 +1,7 @@
1
1
  # DevRites completion reply contract
2
2
 
3
- Use the host's normal response. Do not run a progress renderer, emit session
4
- telemetry, assign a health score, or repeat state already visible in the durable
5
- artifact.
3
+ Use normal host responses. No progress renderer, session telemetry, health score,
4
+ or repetition of durable artifact state.
6
5
 
7
6
  Keep the reply compact and evidence-backed:
8
7
 
@@ -21,16 +20,17 @@ Next: <one recommended action>
21
20
  Record: <primary durable artifact path>
22
21
  ```
23
22
 
24
- `Changed:` is the complete write set, not a highlight reel: every file written
25
- or edited this turn — workspace artifact and project source alike — appears
26
- there or inside one named grouped entry, so a reviewer can `git diff` exactly
27
- those paths. `Record:` then names the single durable artifact a later session
28
- reads first.
23
+ `Changed:` lists every file written/edited this turn (workspace and source),
24
+ individually or in one named group, so reviewers can `git diff` those paths.
25
+ `Record:` names the single durable artifact the next session reads first.
29
26
 
30
- Mid-flight replies — the turns between completion states — obey the same economy:
27
+ Active `$rite-autocomplete` consumes green checkpoints/`next_action` internally.
28
+ Continue execution or tool progress; never end with a text-only final reply between green phases.
31
29
 
32
- - **Restate position.** The reader cannot hold "step 3 of 5" between turns; name it
33
- (`step N of M` / `state: <where things stand>`) rather than asking them to remember.
30
+ Standalone HITL mid-flight replies follow the same economy:
31
+
32
+ - **Restate position** (`step N of M` / `state: <where things stand>`); do not rely
33
+ on the reader remembering it between turns.
34
34
  - **One next action, doable now.** `Next:` names one concrete action completable in
35
35
  under two minutes — a command, a file to open, a yes/no decision. "Want me to
36
36
  continue?" is a stall, not an action.
@@ -4,11 +4,8 @@
4
4
 
5
5
  > Applies when: any rite/devrites skill that can pause for a human or run unattended; irreversible-risk list, budgets, recovery accounting.
6
6
 
7
- Defines two modes for `rite-*`/`devrites-*` skills that may pause; main
8
- callers are `$rite-build`, `$rite-status`, `$rite-resolve`, and
9
- `devrites-doubt`.
10
-
11
- The contract uses one sentinel, one queue, and one resume verb.
7
+ Two pause modes for `rite-*`/`devrites-*`, chiefly `$rite-build`, `$rite-status`,
8
+ `$rite-resolve`, `devrites-doubt`: one sentinel, queue, resume verb.
12
9
 
13
10
  ## Contents
14
11
 
@@ -46,15 +43,15 @@ The contract uses one sentinel, one queue, and one resume verb.
46
43
  ceiling (and every irreversible-risk item) pause and queue a `questions.md` entry for
47
44
  `$rite-resolve`.
48
45
 
49
- `.devrites/AFK` presence is authoritative for run mode; gate-deciding skills re-read
50
- it at decision time. There is no `state.md` run-mode field to drift out of sync.
46
+ `.devrites/AFK` presence owns run mode; gate-deciding skills re-read it at decision
47
+ time. No `state.md` run-mode field can drift out of sync.
51
48
 
52
49
  ## The sentinel: `.devrites/AFK`
53
50
 
54
51
  Presence = AFK active. The file body is optional YAML:
55
52
 
56
53
  ```yaml
57
- max_slices: 10 # whole-workspace writer budget; seeds state.md remaining count
54
+ max_slices: 10 # whole-workspace writer budget; seeds state.md remaining count
58
55
  max_agents: 32 # native agent dispatches in one host activation
59
56
  max_minutes: 120 # min; $rite-autocomplete: not a ceiling
60
57
  max_review_queue: 8 # unresolved review/gate items admitted before fan-out stops
@@ -64,55 +61,52 @@ notify: 'curl -fsS -m 10 -d "$DEVRITES_QID: $DEVRITES_QUESTION" ntfy.sh/my-topic
64
61
  allow_gates: [advisory, validating] # gate severities AFK auto-handles (auto-picks the recommended option)
65
62
  continue_sequence: true # after Seal GO, open the next recorded continuation
66
63
  max_workspaces: 5 # workspaces one armed sequence may open
67
- max_parallel: 10 # unattended default cap; `--parallel N` on this invocation wins and may rewrite only this field
64
+ max_parallel: 10 # unattended default cap; `--parallel N` on this invocation wins and may rewrite only this field
68
65
  ```
69
66
 
70
- The file is **read-only config**: never rewritten in place, except `$rite-autocomplete --parallel N` writes or replaces only `max_parallel: N`. `max_slices` is the initial
71
- budget; the mutable remaining count is the `state.md` cursor
72
- `afk_slices_remaining` (`AFK slices remaining: <n>` in the released bullet
73
- form), owned by the controlling root. Recognize either spelling and preserve
74
- the existing table or bullet presentation. Before dispatch, a configured
75
- `max_slices` and any existing remaining value must be decimal nonnegative
76
- integers; malformed or negative values fail closed. The pending → built state transition spends
67
+ The file is **read-only config**: never rewritten in place, except `$rite-autocomplete --parallel N` writes or replaces only `max_parallel: N`.
68
+
69
+ Outside active `$rite-autocomplete`, the following slice-budget rules apply:
70
+ `max_slices` seeds root-owned `state.md` cursor `afk_slices_remaining`
71
+ (released bullet alias: `AFK slices remaining: <n>`). Accept either spelling;
72
+ preserve table/bullet presentation. Before dispatch, require configured
73
+ `max_slices` and existing remaining values to be decimal nonnegative integers;
74
+ malformed or negative values fail closed. The pending → built state transition spends
77
75
  exactly one slice: on the first green slice write `max_slices - 1`, otherwise
78
76
  write `remaining - 1`, never below zero. Re-reading an already built slice does
79
77
  not spend again. At zero, stop before the next dispatch.
80
78
 
81
- An orchestrator that can derive a stricter budget only after planning may pre-seed
82
- `afk_slices_remaining` in `state.md` before the first dispatch instead of rewriting the
83
- sentinel. It uses the minimum of pending work and every configured/explicit cap. An
84
- existing counter may be lowered but never increased or reinitialized. Once present, that state
85
- counter is the effective remaining budget even when the read-only sentinel omits
86
- `max_slices`.
79
+ A stricter post-planning budget may pre-seed `afk_slices_remaining` before first
80
+ dispatch, not rewrite the sentinel: use the minimum of pending work and all
81
+ configured/explicit caps. An existing counter may be lowered but never increased or reinitialized.
82
+ It remains effective even if the sentinel omits `max_slices`. Under active `$rite-autocomplete`, skip these slice-cap checks,
83
+ charges, zero stops, and minimum-cap seeding; use its
84
+ [post-Vet budget](../../../rite-autocomplete/reference/loop.md#derive-the-mutable-post-vet-budget).
87
85
 
88
86
  ### Sequence continuation (`continue_sequence`, `max_workspaces`)
89
87
 
90
- `continue_sequence: true` lets one armed run open the next **recorded** continuation
91
- after a `Seal GO` instead of stopping. Under `$rite-autocomplete`, absent means on, even
92
- in an existing sentinel; `false` opts out. `max_workspaces` (default 5) is the
93
- sequence budget (nonnegative decimal, fail closed): spend one when a new workspace is
94
- opened, never when resuming the current one. `max_slices` stays **per workspace** —
95
- each new workspace's `state.md` seeds its own `afk_slices_remaining`.
88
+ `continue_sequence: true` opens the next **recorded** continuation after Seal GO.
89
+ Under `$rite-autocomplete`, absent means on, even in existing sentinels; `false` opts out.
90
+ `max_workspaces` (default 5): nonnegative decimal sequence budget, fail closed;
91
+ charge new workspaces only, never resumes. `max_slices`/`afk_slices_remaining` stay **per workspace** outside active
92
+ `$rite-autocomplete`, which uses its post-Vet pending count.
96
93
 
97
94
  The chain lives in root-owned `state.md` cursor fields, not in chat:
98
95
  `sequence_parent` (the immediately preceding workspace slug), `sequence_position`
99
96
  (1-based ordinal), `sequence_workspaces_remaining` (slots the chain may still
100
97
  open after this workspace), and — on the release milestone only —
101
- `sequence_role: release`. Seeding is exactly-once because the values are
102
- derived, not remembered: a continuation's fields are computed from its recorded
103
- parent and the parent's counter at creation, and a resumed run that finds a
104
- continuation workspace missing the fields re-derives the same values from its
105
- `brief.md` parent/position plus the parent's counter — never a second charge. A
106
- workspace without a recorded parent/position is not a sequence member; the
107
- counter only decreases, malformed values fail closed, and `0` opens nothing.
98
+ `sequence_role: release`. Seed exactly once from the recorded parent and its counter at creation.
99
+ On resume, re-derive missing continuation fields from its `brief.md` parent/position
100
+ and parent counter — same values, never a second charge. No recorded parent/position means no sequence membership. Counter only decreases;
101
+ malformed values fail closed; `0` opens nothing.
108
102
  `sequence_role: release` makes `check candidate` and `check seal` require the
109
103
  candidate manifest to cover the whole recorded chain — run
110
104
  `devrites-engine state merge-manifest <slug>` before Prove.
111
105
 
112
106
  - Only continuations recorded in the parent's `decisions.md` sequence
113
107
  ([slicing.md § Continuation workspaces](../../../rite-plan/reference/slicing.md#continuation-workspaces))
114
- qualify; no recorded next entry, or the cap/review-queue bound reached, stops
115
- with the winning reason.
108
+ qualify; no next entry or exhausted `max_workspaces` stops with that reason. The review-queue bound applies only outside active
109
+ `$rite-autocomplete`.
116
110
  - Milestones are **not** shipped: they stay sealed and unarchived in `.devrites/work/`
117
111
  with `Next step: $rite-ship` preserved. Local `WIP(<slug>):` checkpoints still
118
112
  land ([checkpoint.md](../../../rite-build/reference/checkpoint.md)), so the tree
@@ -120,8 +114,9 @@ candidate manifest to cover the whole recorded chain — run
120
114
  - Git stays human-gated. The release ship is one disclosed plan, one literal `GO`, and
121
115
  one native approval; it collapses the sequence's `WIP` commits into the single
122
116
  release commit and may archive the sealed predecessors.
123
- - Every human-owned, safety, access, exhaustion, and `NO-GO` condition still stops the
124
- run exactly as without this field.
117
+ - Human-owned, safety, access, and exhaustion stops remain. Active
118
+ `$rite-autocomplete` recovers agent-owned Seal `NO-GO` per
119
+ [stop-conditions.md](../../../rite-autocomplete/reference/stop-conditions.md), not a handoff.
125
120
 
126
121
  `max_parallel` is the unattended default batch cap only when this invocation does
127
122
  not contain `--parallel N`; `1` forces the serial cycle only in that default
@@ -145,28 +140,30 @@ Existing sentinels that declare writer admission but miss/malform these fail clo
145
140
  state-owned slice counter. A leftover `expires_at` is ignored and never rewritten.
146
141
  Read-only watchers use equivalent native caps from [`loop-operations.md`](loop-operations.md).
147
142
 
143
+ Outside active `$rite-autocomplete`, the following dispatch/queue limits apply:
148
144
  `max_agents` counts every leaf in the native activation, including failures and
149
145
  parallel branches; do not add dispatch telemetry to `.devrites/`. `max_review_queue`
150
146
  counts open validating questions plus unresolved admitted Critical/Important findings.
151
- Above it stop; at it run only reconciliation that reduces the queue. Optional
152
- `max_tokens`/`max_cost_usd` lower enforceable native caps; if declared but unobservable, stop.
147
+ Above it stop; at it run only reconciliation that reduces the queue.
148
+
149
+ Optional `max_tokens`/`max_cost_usd` lower native caps in all unattended modes; if declared but unobservable, stop.
153
150
  `$rite-autocomplete` deliberately ignores `max_slices`, `max_agents`, `max_minutes` and
154
151
  `max_review_queue` ([stop-conditions.md](../../../rite-autocomplete/reference/stop-conditions.md));
155
- there they are not a ceiling.
152
+ not ceilings there.
156
153
 
157
154
  Numeric limits are nonnegative decimals. Before costly checks, fan-out, or writing,
158
- run cheap readiness, reject overlap, count queue, and confirm agent/time/token/cost
159
- headroom; re-check after every result. Never start one call that can exceed remaining
160
- headroom. Agent/time/token/cost counters are per native activation and start fresh only
161
- for a genuinely new activation. Slices, recovery attempts, and current
162
- review queue remain durable/recomputed across wakes. Persist each activation stop and
163
- checkpoint before notification.
155
+ run cheap readiness and reject overlap. Outside active `$rite-autocomplete`, count
156
+ queue and confirm agent/time headroom; under Autocomplete those ignored limits
157
+ never block admission. In both cases confirm declared token/cost and native safety
158
+ headroom; re-check after every result. Never start a call that can exceed an
159
+ applicable remaining limit. Agent/time/token/cost counters are per native activation and start fresh only
160
+ for a new activation. Slice/recovery state and review queue remain durable/recomputed across wakes.
161
+ Persist stops/checkpoints before notification.
164
162
 
165
- New sentinels write no `expires_at` and no notification/token/cost cap.
166
- Post-Vet pending count may lower slices. Existing files
167
- never receive missing defaults implicitly.
163
+ New sentinels omit `expires_at` and notification/token/cost caps. Post-Vet pending
164
+ count may lower standalone slices. Never add missing defaults to existing files.
168
165
 
169
- To leave AFK, delete the file. The next skill invocation reverts to HITL.
166
+ Delete the file to restore HITL on the next invocation.
170
167
 
171
168
  ## The four gates
172
169
 
@@ -223,10 +220,9 @@ keep the **rejected options in `questions.md`**.
223
220
 
224
221
  ## Decision ownership: search before asking
225
222
 
226
- A gate is human only when its remaining choice is human-owned. First search live code,
227
- project/decision docs, and authoritative dependency sources; make and record reversible
228
- implementation/test choices. Ask only about product, scope, acceptance, architecture policy,
229
- irreversible risk, or human-only access/action.
223
+ First search live code, project/decision docs, and authoritative dependency sources;
224
+ make and record reversible implementation/test choices. Ask only human-owned
225
+ product, scope, acceptance, architecture-policy, irreversible-risk, or access/action choices.
230
226
 
231
227
  Objective test/build/tool failure runs bounded `devrites-debug-recovery`; fix it, or escalate and
232
228
  park it under the [retry contract](#retry-cap-no-progress-loops-and-self-resolve). Never ask
@@ -10,7 +10,10 @@ Follow DevRites policy and [`depth profiles`](../orchestration-profiles.md).
10
10
  - Root owns scope, questions/decisions/results, `.devrites/**`, phase transitions — not product source/tests; vetted executable workflow artifacts follow [`workflow-artifacts.md`](workflow-artifacts.md).
11
11
  - Every named role runs; unavailable → HITL, never skip/substitute.
12
12
  <!-- /root-only -->
13
- - Only bounded wright writes product source/tests; others inspect an immutable candidate.
13
+ - Among lifecycle `devrites-*` specialists, only bounded wright writes product
14
+ source/tests; others inspect an immutable candidate. The independent `$rite-fast`
15
+ lane instead uses only its existing `fast-builder` as writer under its own roster;
16
+ never substitute a lifecycle role. Root remains source/test nonwriter.
14
17
  - Leaves never invoke agents, ask humans, change phase, push, install/deploy, migrate live data, or act irreversibly; they return evidence/proposals for root acceptance. Sole exception: one local unpushed transfer commit by an eligible native-worktree `devrites-slice-wright` — transport, not shipping authority or a checkpoint.
15
18
 
16
19
  <!-- root-only -->
@@ -56,8 +59,15 @@ Workflow-named skills (e.g. devrites-source-driven) are invoked inline in the ro
56
59
 
57
60
  ## Source-writing boundary
58
61
 
62
+ Among lifecycle `devrites-*` specialists only (independent Fast exception below):
59
63
  Claude grants only wright `acceptEdits`; Codex root is workspace-capable (children cannot elevate). Wright alone `:workspace`; others `:read-only`. Wright gets the smallest exact project-relative source/test list — no directories/globs, traversal, or `.devrites/**`; no scope widening; root rejects `git diff --name-only` extras. Never patch product source/tests in root, bypass/substitute wright, accept drift, or recreate a dispatch bridge.
60
64
 
65
+ Independent Fast exception: `$rite-fast` uses its existing `fast-builder` write-capable
66
+ profile, not a `devrites-*` substitute, under the exact Fast roster and lane contract.
67
+ Only that bounded writer may edit its exact project-relative source/test paths; no
68
+ workspace writes, scope widening, or second writer. Root remains source/test nonwriter.
69
+ This exception grants no additional tools, permissions, phase, agent-launch, or Git authority.
70
+
61
71
  Isolated-worktree pilot only under [`wright-dispatch.md`](../../../rite-build/reference/wright-dispatch.md#isolated-writer-worktree-pilot): one writer, committed/clean baseline, non-submodule parent, exact transfer commit, candidate reconciliation — never parallel writers nor weaker exact-path admission. Root may materialize only exact Vet-ready workflow-artifact paths per [`workflow-artifacts.md`](workflow-artifacts.md) — not a writer dispatch or candidate mutation.
62
72
 
63
73
  Each job gets objective/exclusions, exact paths/immutable candidate, rubric/result shape, a **stop condition** (when to return), and the exact result shape; a dispatch missing them is malformed and re-issued. Briefs MUST NOT seed verdict/severity cap/conclusion/suppression. Results state status/scope, outcome, commands/escalation; wright adds paths, changed files, gates, stood decisions; results never widen scope.