devrites 6.1.1 → 6.1.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 (221) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/docs/cli.md +4 -1
  4. package/docs/command-map.md +1 -1
  5. package/docs/engine/commands.md +4 -4
  6. package/docs/orchestration.md +4 -3
  7. package/docs/usage.md +1 -1
  8. package/engine/commands.go +1 -1
  9. package/engine/help.go +5 -1
  10. package/engine/internal/acceptance/cli.go +14 -5
  11. package/engine/internal/acceptance/run.go +20 -5
  12. package/engine/internal/lib/apply_bundle.go +474 -0
  13. package/engine/internal/lib/claims.go +12 -2
  14. package/engine/internal/lib/claims_holder.go +124 -0
  15. package/engine/internal/lib/cli_observe.go +14 -0
  16. package/engine/internal/lib/diffscope.go +2 -1
  17. package/engine/internal/lib/taskgraph.go +124 -0
  18. package/engine/internal/parallel/cli.go +111 -9
  19. package/engine/internal/parallel/lease.go +58 -4
  20. package/engine/internal/parallel/ops.go +244 -75
  21. package/engine/internal/parallel/select.go +31 -6
  22. package/engine/main.go +4 -0
  23. package/pack/.claude/agents/devrites-plan-drafter.md +13 -3
  24. package/pack/.claude/agents/devrites-slice-wright.md +5 -1
  25. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +14 -5
  26. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +24 -9
  27. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +6 -2
  28. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +3 -0
  29. package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +3 -0
  30. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +7 -0
  31. package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +10 -6
  32. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +1 -1
  33. package/pack/.claude/skills/rite-autocomplete/SKILL.md +2 -2
  34. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +1 -1
  35. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -2
  36. package/pack/.claude/skills/rite-build/SKILL.md +7 -7
  37. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -2
  38. package/pack/.claude/skills/rite-build/reference/checkpoint.md +1 -1
  39. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +3 -2
  40. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +28 -21
  41. package/pack/.claude/skills/rite-build/reference/phase-contract.md +10 -1
  42. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +3 -2
  43. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +9 -2
  44. package/pack/.claude/skills/rite-define/SKILL.md +11 -2
  45. package/pack/.claude/skills/rite-handoff/SKILL.md +1 -1
  46. package/pack/.claude/skills/rite-plan/SKILL.md +20 -9
  47. package/pack/.claude/skills/rite-plan/reference/slicing.md +5 -0
  48. package/pack/.claude/skills/rite-polish/SKILL.md +6 -4
  49. package/pack/.claude/skills/rite-prove/SKILL.md +3 -2
  50. package/pack/.claude/skills/rite-review/SKILL.md +6 -1
  51. package/pack/.claude/skills/rite-seal/SKILL.md +2 -2
  52. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +7 -1
  53. package/pack/.claude/skills/rite-vet/SKILL.md +9 -5
  54. package/pack/.claude/skills/rite-vet/reference/artifacts.md +8 -0
  55. package/pack/.claude/skills/rite-vet/reference/review-axes.md +1 -1
  56. package/pack/generated/claude/agents/devrites-plan-drafter.md +13 -3
  57. package/pack/generated/claude/agents/devrites-slice-wright.md +5 -1
  58. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +14 -5
  59. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +24 -9
  60. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +6 -2
  61. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +3 -0
  62. package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +3 -0
  63. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +7 -0
  64. package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +10 -6
  65. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +1 -1
  66. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +2 -2
  67. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +1 -1
  68. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -2
  69. package/pack/generated/claude/skills/rite-build/SKILL.md +7 -7
  70. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -2
  71. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +1 -1
  72. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +3 -2
  73. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +28 -21
  74. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +10 -1
  75. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +3 -2
  76. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +9 -2
  77. package/pack/generated/claude/skills/rite-define/SKILL.md +11 -2
  78. package/pack/generated/claude/skills/rite-handoff/SKILL.md +1 -1
  79. package/pack/generated/claude/skills/rite-plan/SKILL.md +20 -9
  80. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +5 -0
  81. package/pack/generated/claude/skills/rite-polish/SKILL.md +6 -4
  82. package/pack/generated/claude/skills/rite-prove/SKILL.md +3 -2
  83. package/pack/generated/claude/skills/rite-review/SKILL.md +6 -1
  84. package/pack/generated/claude/skills/rite-seal/SKILL.md +2 -2
  85. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +7 -1
  86. package/pack/generated/claude/skills/rite-vet/SKILL.md +9 -5
  87. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +8 -0
  88. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +1 -1
  89. package/pack/generated/codex/agents/devrites-plan-drafter.toml +13 -3
  90. package/pack/generated/codex/agents/devrites-slice-wright.toml +5 -1
  91. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +14 -5
  92. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +24 -9
  93. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +6 -2
  94. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +3 -0
  95. package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +3 -0
  96. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +7 -0
  97. package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +10 -6
  98. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +1 -1
  99. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +2 -2
  100. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +1 -1
  101. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +6 -2
  102. package/pack/generated/codex/skills/rite-build/SKILL.md +7 -7
  103. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -2
  104. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +1 -1
  105. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +3 -2
  106. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +28 -21
  107. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +10 -1
  108. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +3 -2
  109. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +9 -2
  110. package/pack/generated/codex/skills/rite-define/SKILL.md +11 -2
  111. package/pack/generated/codex/skills/rite-handoff/SKILL.md +1 -1
  112. package/pack/generated/codex/skills/rite-plan/SKILL.md +20 -9
  113. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +5 -0
  114. package/pack/generated/codex/skills/rite-polish/SKILL.md +6 -4
  115. package/pack/generated/codex/skills/rite-prove/SKILL.md +3 -2
  116. package/pack/generated/codex/skills/rite-review/SKILL.md +6 -1
  117. package/pack/generated/codex/skills/rite-seal/SKILL.md +2 -2
  118. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +7 -1
  119. package/pack/generated/codex/skills/rite-vet/SKILL.md +9 -5
  120. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +8 -0
  121. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +1 -1
  122. package/pack/generated/devin/agents/devrites-plan-drafter.md +13 -3
  123. package/pack/generated/devin/agents/devrites-slice-wright.md +5 -1
  124. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +14 -5
  125. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +24 -9
  126. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +6 -2
  127. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +3 -0
  128. package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +3 -0
  129. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +7 -0
  130. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +10 -6
  131. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +1 -1
  132. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +2 -2
  133. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +1 -1
  134. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +6 -2
  135. package/pack/generated/devin/skills/rite-build/SKILL.md +7 -7
  136. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +2 -2
  137. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +1 -1
  138. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +3 -2
  139. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +28 -21
  140. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +10 -1
  141. package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +3 -2
  142. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +9 -2
  143. package/pack/generated/devin/skills/rite-define/SKILL.md +11 -2
  144. package/pack/generated/devin/skills/rite-handoff/SKILL.md +1 -1
  145. package/pack/generated/devin/skills/rite-plan/SKILL.md +20 -9
  146. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +5 -0
  147. package/pack/generated/devin/skills/rite-polish/SKILL.md +6 -4
  148. package/pack/generated/devin/skills/rite-prove/SKILL.md +3 -2
  149. package/pack/generated/devin/skills/rite-review/SKILL.md +6 -1
  150. package/pack/generated/devin/skills/rite-seal/SKILL.md +2 -2
  151. package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +7 -1
  152. package/pack/generated/devin/skills/rite-vet/SKILL.md +9 -5
  153. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +8 -0
  154. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +1 -1
  155. package/pack/generated/omp/agents/devrites-plan-drafter.md +13 -3
  156. package/pack/generated/omp/agents/devrites-slice-wright.md +5 -1
  157. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +14 -5
  158. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +24 -9
  159. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +6 -2
  160. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +3 -0
  161. package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +3 -0
  162. package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +7 -0
  163. package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +10 -6
  164. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +1 -1
  165. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +2 -2
  166. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +1 -1
  167. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +6 -2
  168. package/pack/generated/omp/skills/rite-build/SKILL.md +7 -7
  169. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +2 -2
  170. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +1 -1
  171. package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +3 -2
  172. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +28 -21
  173. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +10 -1
  174. package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +3 -2
  175. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +9 -2
  176. package/pack/generated/omp/skills/rite-define/SKILL.md +11 -2
  177. package/pack/generated/omp/skills/rite-handoff/SKILL.md +1 -1
  178. package/pack/generated/omp/skills/rite-plan/SKILL.md +20 -9
  179. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +5 -0
  180. package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -4
  181. package/pack/generated/omp/skills/rite-prove/SKILL.md +3 -2
  182. package/pack/generated/omp/skills/rite-review/SKILL.md +6 -1
  183. package/pack/generated/omp/skills/rite-seal/SKILL.md +2 -2
  184. package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +7 -1
  185. package/pack/generated/omp/skills/rite-vet/SKILL.md +9 -5
  186. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +8 -0
  187. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +1 -1
  188. package/pack/generated/pi/agents/devrites-plan-drafter.md +13 -3
  189. package/pack/generated/pi/agents/devrites-slice-wright.md +5 -1
  190. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +14 -5
  191. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +24 -9
  192. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +6 -2
  193. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +3 -0
  194. package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +3 -0
  195. package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +7 -0
  196. package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +10 -6
  197. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +1 -1
  198. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +2 -2
  199. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +1 -1
  200. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +6 -2
  201. package/pack/generated/pi/skills/rite-build/SKILL.md +7 -7
  202. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +2 -2
  203. package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +1 -1
  204. package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +3 -2
  205. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +28 -21
  206. package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +10 -1
  207. package/pack/generated/pi/skills/rite-build/reference/spec-drift-guard.md +3 -2
  208. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +9 -2
  209. package/pack/generated/pi/skills/rite-define/SKILL.md +11 -2
  210. package/pack/generated/pi/skills/rite-handoff/SKILL.md +1 -1
  211. package/pack/generated/pi/skills/rite-plan/SKILL.md +20 -9
  212. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +5 -0
  213. package/pack/generated/pi/skills/rite-polish/SKILL.md +6 -4
  214. package/pack/generated/pi/skills/rite-prove/SKILL.md +3 -2
  215. package/pack/generated/pi/skills/rite-review/SKILL.md +6 -1
  216. package/pack/generated/pi/skills/rite-seal/SKILL.md +2 -2
  217. package/pack/generated/pi/skills/rite-seal/reference/phase-contract.md +7 -1
  218. package/pack/generated/pi/skills/rite-vet/SKILL.md +9 -5
  219. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +8 -0
  220. package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +1 -1
  221. package/package.json +1 -1
@@ -76,7 +76,8 @@ test changes.
76
76
  command, cwd, prerequisites, exit, and sanitized
77
77
  decisive output, plus the test selector, runner counts
78
78
  (collected/ran/passed/failed/skipped), and attempt number with first-attempt
79
- outcome; output and exit come from one execution. Run relevant suite plus build/typecheck/lint. Recheck the
79
+ outcome; output and exit come from one execution. Run relevant suite plus build/typecheck/lint,
80
+ concurrently when they share no build directory, port, or lock. Recheck the
80
81
  candidate and require identical digest/no source mutation. Reject substituted
81
82
  commands, malformed manifests, zero-test/skipped/filtered behavioral claims,
82
83
  exit-status-only claims, status-masking forms, and source drift. A retry-only
@@ -109,7 +110,7 @@ test changes.
109
110
  described screenshots, console/network, interaction, target comparisons, and
110
111
  every required state. Material mismatch fails.
111
112
  7. **Independent validation.** Fresh read-only `devrites-proof-runner` and
112
- `devrites-spec-reviewer` judge the same candidate/commands/evidence/acceptance map.
113
+ `devrites-spec-reviewer`, in one parallel wave, judge the same candidate/commands/evidence/acceptance map.
113
114
  Neither runs commands; reject missing/stale, invented-ID, label-only or self-attested reports.
114
115
  8. **Map proof.** Reconcile verdicts under [acceptance-proof.md](reference/acceptance-proof.md).
115
116
  Every criterion/scenario/interaction/key link needs discriminating evidence or a
@@ -79,7 +79,8 @@ Pull these via `Read` when the diff demands them:
79
79
  reviewer's brief without severity) and ends in `review.md` with its own label and
80
80
  action tag — never silently dropped. Hand each lane reviewer the
81
81
  `devrites-engine recall --paths <its touched paths>` pointers as prior context, not findings.
82
- 2. **Review tests first:** do they prove the acceptance criteria? Missing,
82
+ 2. **Review tests first** while the step-3 cohort runs — launch it first; this
83
+ root pass needs none of its output: do they prove the acceptance criteria? Missing,
83
84
  weak, or wrong tests are the first findings.
84
85
  **Completion:** every acceptance criterion maps to a proven test or a labeled finding.
85
86
  3. **Review spec and code separately in parallel.** A change can pass
@@ -100,6 +101,10 @@ Pull these via `Read` when the diff demands them:
100
101
  (scope creep / drift), (c) criteria implemented incorrectly. Quote the spec
101
102
  line per finding. If the spec is missing or unreadable, report `Review gap:
102
103
  missing spec` and do not infer requirements from the diff."
104
+ - **Seal roles** → `devrites-test-analyst`, plus `devrites-doubt-reviewer` per
105
+ stood decision and `devrites-devex-reviewer` when triggered, join this cohort on
106
+ the same digest. Their findings join step 7's single correction, and Seal cites
107
+ their unchanged same-candidate accounts instead of re-dispatching them.
103
108
  - **Code-review axis** → `devrites-code-reviewer`: "Apply your full documented
104
109
  discipline (tests-first, correctness, readability, architecture, maintainability,
105
110
  standards) on the feature workspace + diff. Cite file:line; skip tooling-enforced
@@ -61,8 +61,8 @@ Follow [`reference/phase-contract.md`](reference/phase-contract.md)
61
61
 
62
62
  1. read workspace and final diff;
63
63
  2. recheck the canonical candidate/bindings and approved repository/CI proof;
64
- 3. admit valid Spec/Code accounts; dispatch remaining required exact roles under
65
- `../devrites-lib/reference/parallel-dispatch.md` on the same frozen candidate,
64
+ 3. admit every valid same-candidate Review account; dispatch remaining required exact roles under
65
+ `../devrites-lib/reference/parallel-dispatch.md` in one wave, proof-runner included, on the same frozen candidate,
66
66
  code review through its § Engineering lanes;
67
67
  4. reconcile their read-only verdicts against source and immutable evidence;
68
68
  5. draft GO/NO-GO `seal.md` with acceptance, tests, decisions, and seven roster accounts plus proof-runner and doubt-reviewer
@@ -13,12 +13,18 @@
13
13
  candidate check afterward and require the identical digest and no source
14
14
  mutation. Capture command, cwd, exit, decisive output, and identity.
15
15
  Missing/red/mismatched blocks; unavailable is `cannot_verify`, never pass.
16
+ Steps 3–6 share one dispatch wave: launch every role they still need
17
+ (proof-runner, test-analyst, doubt-reviewer, roster) together, admit valid
18
+ same-candidate Review accounts instead, and do the root work of steps 4–6 while
19
+ the wave runs.
20
+
16
21
  3. **Judge acceptance.** Dispatch exact `devrites-proof-runner` on immutable
17
22
  proof; admit valid same-candidate `devrites-spec-reviewer` evidence from Review
18
23
  or dispatch that exact reviewer. Reconcile every
19
24
  AC/REQ/scenario/key link by ID and meaning; missing/stale/self-attested/mismatched is NO-GO.
20
25
  4. **Judge tests.** Diff baseline/candidate tests for deletion, skip/focus,
21
- tautology, or weakening; dispatch exact `devrites-test-analyst`. Missing or
26
+ tautology, or weakening; admit the same-candidate `devrites-test-analyst` account
27
+ from Review or dispatch that exact analyst. Missing or
22
28
  adverse account, or green tests not asserting mapped behavior, is Critical.
23
29
  5. **Resolve gates.** Open blocking/escalating/validating questions and drift
24
30
  block. Each stood decision needs a reconciled exact `devrites-doubt-reviewer` verdict.
@@ -5,7 +5,7 @@ argument-hint: "[slug] [--cross-model] [--full]"
5
5
  user-invocable: true
6
6
  ---
7
7
 
8
- <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/code-navigation.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/parallel-dispatch.md","devrites-lib/reference/standards/gates.md","rite-vet/reference/review-axes.md","rite-vet/reference/artifacts.md","rite-vet/reference/depth.md","rite-vet/reference/eng-lenses.md","rite-vet/reference/anti-patterns.md"],"triggers":{"afk":["devrites-lib/reference/standards/afk-hitl.md"],"applicability":["devrites-lib/reference/standards/repository-topology.md","devrites-lib/reference/standards/data-integrity.md","devrites-lib/reference/standards/integration-reliability.md"],"assumption-delta":["devrites-lib/reference/standards/assumption-checkpoints.md"],"cross-model":["rite-vet/reference/cross-model.md"],"devex":["devrites-lib/reference/standards/developer-experience.md"],"dod":["devrites-lib/reference/standards/definition-of-done.md"],"elicitation":["devrites-lib/reference/standards/elicitation.md"],"errors":["devrites-lib/reference/standards/error-handling.md"],"grammar":["devrites-lib/reference/standards/spec-grammar.md"],"one-shot":["devrites-lib/reference/standards/one-shot-actions.md"],"performance":["devrites-lib/reference/standards/performance.md"],"principles":["devrites-lib/reference/standards/principles.md"],"reslice":["devrites-lib/reference/standards/acceptance-preserving-reslice.md"],"testing":["devrites-lib/reference/standards/testing.md"],"workflow":["devrites-lib/reference/standards/development-workflow.md"],"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"],"yagni":["devrites-lib/reference/standards/patterns.md","devrites-lib/reference/standards/coding-style.md"]},"workspace":["brief.md","spec.md","state.md","decisions.md","assumptions.md","questions.md","decision-coverage.md","strategy.md","architecture.md","plan.md","tasks.md","traceability.md","eng-review.md","test-plan.md","gates.md"],"workspaceByRole":{"devex-reviewer":["spec.md","plan.md","tasks.md","decisions.md","state.md"],"plan-reviewer":["spec.md","plan.md","tasks.md","test-plan.md","decision-coverage.md","architecture.md","decisions.md","state.md"],"strategy-reviewer":["brief.md","spec.md","plan.md","decisions.md","decision-coverage.md","strategy.md","state.md"]}} -->
8
+ <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/code-navigation.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/parallel-dispatch.md","devrites-lib/reference/standards/gates.md","rite-vet/reference/review-axes.md","rite-vet/reference/artifacts.md","rite-vet/reference/depth.md","rite-vet/reference/eng-lenses.md","rite-vet/reference/anti-patterns.md"],"triggers":{"afk":["devrites-lib/reference/standards/afk-hitl.md"],"applicability":["devrites-lib/reference/standards/repository-topology.md","devrites-lib/reference/standards/data-integrity.md","devrites-lib/reference/standards/integration-reliability.md"],"assumption-delta":["devrites-lib/reference/standards/assumption-checkpoints.md"],"cross-model":["rite-vet/reference/cross-model.md"],"devex":["devrites-lib/reference/standards/developer-experience.md"],"dod":["devrites-lib/reference/standards/definition-of-done.md"],"elicitation":["devrites-lib/reference/standards/elicitation.md"],"errors":["devrites-lib/reference/standards/error-handling.md"],"grammar":["devrites-lib/reference/standards/spec-grammar.md"],"one-shot":["devrites-lib/reference/standards/one-shot-actions.md"],"performance":["devrites-lib/reference/standards/performance.md"],"principles":["devrites-lib/reference/standards/principles.md"],"reslice":["devrites-lib/reference/standards/acceptance-preserving-reslice.md"],"testing":["devrites-lib/reference/standards/testing.md"],"workflow":["devrites-lib/reference/standards/development-workflow.md"],"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"],"yagni":["devrites-lib/reference/standards/patterns.md","devrites-lib/reference/standards/coding-style.md"]},"workspace":["brief.md","spec.md","state.md","decisions.md","assumptions.md","questions.md","decision-coverage.md","strategy.md","architecture.md","plan.md","tasks.md","traceability.md","eng-review.md","test-plan.md","gates.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/elicitation.md"],"workspaceByRole":{"doubt-reviewer":["spec.md","architecture.md","plan.md","tasks.md","test-plan.md","decisions.md","state.md"],"devex-reviewer":["spec.md","plan.md","tasks.md","decisions.md","state.md"],"plan-reviewer":["spec.md","plan.md","tasks.md","test-plan.md","decision-coverage.md","architecture.md","decisions.md","state.md"],"strategy-reviewer":["brief.md","spec.md","plan.md","decisions.md","decision-coverage.md","strategy.md","state.md"]}} -->
9
9
  > Read-set manifest: `devrites-engine context --skills-root .agents/skills <slug> --phase vet` bundles every file named below into one deduplicated read. Trigger names map to the conditional rules in the sections that follow.
10
10
 
11
11
 
@@ -85,7 +85,9 @@ plan declares a root-authored executable workflow file, read
85
85
  Temper — in
86
86
  parallel under `../devrites-lib/reference/parallel-dispatch.md`; they are
87
87
  independent read-only passes on one frozen candidate. Missing
88
- required account blocks.
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.
89
91
  1b. **Recovery recheck.** Require valid return cursor, accepted prior finding,
90
92
  exact fingerprint/reproduction, repaired candidate identity, changed
91
93
  paths/criteria, affected drift/evidence, and the recorded delta self-check.
@@ -108,8 +110,8 @@ plan declares a root-authored executable workflow file, read
108
110
  marked as a refinement of an already-pinned clause; the recheck may re-raise
109
111
  it only by naming a concrete failure path the declaration omits. A
110
112
  `new_failure_mode` finding is never residual-eligible. A fold whose
111
- findings are all Suggestion-or-lower rechecks mechanically at the
112
- materialization gate — anchors applied, mirrors consistent, invariants
113
+ findings are all `mechanism` kind or Suggestion-or-lower rechecks mechanically at the
114
+ materialization gate — anchors applied (a clean `state apply-bundle`), mirrors consistent, invariants
113
115
  pass — without a dispatched reviewer; sub-Important findings already
114
116
  cannot keep recovery open. Reconcile
115
117
  shared artifact/readiness gates, then enter step 8 or the next repair.
@@ -142,7 +144,9 @@ plan declares a root-authored executable workflow file, read
142
144
  ownership. The plan's `Shared contract proof` names one reused boundary
143
145
  artifact plus two consuming tests for every changed API/event/schema/provider-
144
146
  consumer seam, or an explicit no-impact statement. Missing, one-sided,
145
- duplicated-contract, vague, or non-consuming proof fails closed.
147
+ duplicated-contract, vague, or non-consuming proof fails closed. Each slice
148
+ names a fast writer-safe check its wright can run; proof reachable only through
149
+ root-owned full gates is a `mechanism` finding.
146
150
 
147
151
  Technical gaps are `NEEDS REPLAN` and Plan repair — each finding marks
148
152
  itself `new_failure_mode` or names the already-pinned clause/fingerprint
@@ -103,6 +103,14 @@ From $rite-vet on <iso>. Runner + conventions: <detected framework + command>.
103
103
  Link any disposable parser fixture. Preflight values are planning evidence, not post-build proof;
104
104
  Prove recaptures the observed command, candidate identity, and result.
105
105
 
106
+ ## Feature gates
107
+ | Gate | Command | Cwd | Expected |
108
+ |---|---|---|---|
109
+ | <full suite / workspace lint / audit> | <exact command> | <path> | <exit/output> |
110
+
111
+ Whole-repository rows only: Build runs them per landing
112
+ ([tiers](../../rite-build/reference/phase-contract.md#proof-tiers)), Prove on the final candidate.
113
+
106
114
  Commands in this durable artifact are portable repository commands: no RTK or local shell
107
115
  aliases, user-specific absolute paths, or temporary proof trees. Evidence records
108
116
  the command actually executed.
@@ -30,7 +30,7 @@ Before implementation review, check for work beyond the settled spec.
30
30
  (over-budget `tasks.md`/`plan.md` from slice or AC count) is a scope finding, not a
31
31
  `Budget override`: route to `$rite-plan course-correct` (`MVP cut`) with the
32
32
  continuation sequence named; do not vet the whole epic. An `ADVISORY size:`
33
- slice without `Size rationale:` is a non-blocking Suggestion to split it.
33
+ or `hub:` line without its rationale is a non-blocking Suggestion to split or seam it.
34
34
  4. **Built-in check.** For each new pattern/infra/concurrency approach, invoke
35
35
  `devrites-source-driven` inline to verify current framework/runtime support and cite it. Custom
36
36
  work where a built-in suffices is a scope-reduction finding.
@@ -24,7 +24,8 @@ seams supplied by the orchestrator.
24
24
  planning artifacts while preserving settled intent.
25
25
 
26
26
  Reuse existing seams and dependencies before proposing new ones. Build vertical
27
- slices in dependency order. Map every REQ and AC to a slice and executable proof,
27
+ slices in dependency order; put a hub file's shared edit in one seam slice
28
+ ([slicing.md](../skills/rite-plan/reference/slicing.md#slice-independence)). Map every REQ and AC to a slice and executable proof,
28
29
  name rollback and failure paths; keep acceptance-changing proposals separate. Durable
29
30
  proof commands must be portable repository commands, never host-local wrappers,
30
31
  user-specific absolute paths, or temporary proof trees.
@@ -78,10 +79,13 @@ Return this result:
78
79
 
79
80
  ```yaml
80
81
  mode: define | repair
82
+ base_hashes: {} # <path>: sha256 of the bytes you read, for every replace/patch target
81
83
  candidate_files:
82
84
  - path: <requested canonical target>
83
85
  operation: create | replace | patch
84
- content: <complete candidate or exact bounded delta>
86
+ content: <complete file; create/replace only>
87
+ hunks: [] # patch only: {id, old_text, new_text}; old_text byte-exact, unique in the pinned file
88
+ retired_ids: [] # tracked IDs (AC/REQ/HZN/SLICE/DEC/...) the delta removes on purpose
85
89
  acceptance_map: []
86
90
  dependency_order: []
87
91
  technical_decisions: []
@@ -91,7 +95,13 @@ applicability_disposition: []
91
95
  self_attack_exposures: []
92
96
  ```
93
97
 
94
- The root validates the cross-file bundle and persists accepted content.
98
+ The root saves the bundle as JSON and applies it with `devrites-engine state
99
+ apply-bundle <slug> <bundle.json>`, which refuses a stale pin, a missing,
100
+ duplicate, or overlapping `old_text`, an unlisted vanished ID, a new task-graph
101
+ problem, new budget overshoot, or a new dated delta section, and writes nothing on refusal. Pin each
102
+ `base_hashes` entry with `shasum -a 256` (or `sha256sum`) on the exact file you
103
+ read, and prefer short anchored hunks to whole-file `replace`. Patch the owning
104
+ clause in place; never add a dated delta section beside superseded text.
95
105
 
96
106
  ## Tools / read-write mode
97
107
 
@@ -108,7 +108,11 @@ unclear boundary is underspecified: return `Escalation` without proceeding.
108
108
  that source in the result. Never invent an API.
109
109
  - **No process residue.** Do not put `SLICE-###`, slice numbers, or "this slice"
110
110
  in product source, tests, comments, or filenames.
111
- 4. **VERIFY (fail-on-red).** Run writer-safe tests/types/lint. Report required
111
+ 4. **VERIFY (fail-on-red).** Run writer-safe tests/types/lint: `Tests/proof` plus
112
+ tests of changed code; `## Feature gates` rows are root-owned. Writer-safe means
113
+ local and non-consumptive — syntax/type/lint, unit and self-check suites, and a
114
+ narrow smoke of the changed path — never only a syntax check; contract text
115
+ cannot strip it. Report required
112
116
  build/browser/E2E as `not-run` (root-owned, artifact-producing gates), and only
113
117
  when the exact command, cwd, and prerequisites already appear in the unchanged
114
118
  vetted `test-plan.md`; never synthesize or rewrite a root command. Root runs
@@ -4,7 +4,9 @@ Host dispatch; DevRites governs.
4
4
 
5
5
  ## Roster
6
6
 
7
- Review: Spec/Code plus triggered frontend/security/performance; Seal: all applicable roles.
7
+ Review: Spec/Code, triggered frontend/security/performance, and the seal roles that can
8
+ judge the frozen digest (test-analyst, doubt, devex); Seal: all applicable roles, citing
9
+ same-candidate Review accounts.
8
10
 
9
11
  | Reviewer | Fires | Trigger |
10
12
  |---|---|---|
@@ -74,8 +76,10 @@ If the candidate diff has no matching surfaces, record
74
76
  and dedupe by evidence/root cause. Account for all seven (and, in `seal.md`, `devrites-proof-runner` and `devrites-doubt-reviewer`) in
75
77
  `review.md`/`seal.md`, each [engineering lane](#engineering-lanes) separately:
76
78
  `Outcome:` plus admitted account, or
77
- `Not-applicable: <inspected-scope reason>`. Spec/Code may cite valid unchanged
78
- `review.md` under [evidence validity](candidate-integrity.md#evidence-validity); persist no dispatch telemetry.
79
+ `Not-applicable: <inspected-scope reason>`. Seal cites, rather than re-dispatches, any
80
+ role `review.md` admitted on the identical candidate under
81
+ [evidence validity](candidate-integrity.md#evidence-validity); a changed digest or newly
82
+ triggered surface needs a fresh account. Persist no dispatch telemetry.
79
83
  7. Missing profile, null/failure, or malformed output is a `gap`; never
80
84
  infer approval or substitute inline review.
81
85
 
@@ -127,7 +131,8 @@ child's handle, path/resource ownership and capacity reservation until the
127
131
  native host confirms a terminal state and returned work has been reconciled.
128
132
  Query or wait on that handle; do not replace the child, release its slot, or
129
133
  reuse its resources while it may still run. If terminal state cannot be
130
- established, record a gap and retain ownership. A result classification alone
134
+ established, record a gap and retain ownership; for a child launched by an earlier
135
+ session, the claim proof below settles it. A result classification alone
131
136
  does not prove host termination.
132
137
 
133
138
  On resume (compaction or a new session), run `devrites-engine dispatch <slug>
@@ -135,7 +140,11 @@ status`, `parallel status`, and `claim list --all` before any dispatch. A read-o
135
140
  wave whose handles this session cannot query: `abandon` it, record each unreturned
136
141
  role `gap`, and re-dispatch fresh on the current digest; its late returns are
137
142
  `stale`. A writer keeps its claim and lease — no relaunch on those paths until the
138
- claim is released or its holder is proven terminal. A wright that never returned an
143
+ claim is released or its holder is proven terminal. For an unqueryable writer,
144
+ `claim list --all` showing its claim `released` or `dead` (the engine proved the
145
+ holding session exited on this host) is that proof: `abandon` the wave, record the
146
+ role `gap`, claim the paths, and re-dispatch without waiting on the launching
147
+ session. `live` or `expired` stays held. A wright that never returned an
139
148
  admitted result leaves unadmitted bytes: task-path changes since its pre-dispatch
140
149
  `git diff --name-only` baseline are never cited as built nor discarded, and are
141
150
  named in the re-dispatch contract; changes outside task paths stop for the human
@@ -223,8 +223,9 @@ project/decision docs, and authoritative dependency sources; make and record rev
223
223
  implementation/test choices. Ask only about product, scope, acceptance, architecture policy,
224
224
  irreversible risk, or human-only access/action.
225
225
 
226
- Objective test/build/tool failure runs bounded `devrites-debug-recovery`; fix it or record a
227
- technical blocker. Never ask permission for another attempt, test, parser repair, or probe.
226
+ Objective test/build/tool failure runs bounded `devrites-debug-recovery`; fix it, or escalate and
227
+ park it under the [retry contract](#retry-cap-no-progress-loops-and-self-resolve). Never ask
228
+ permission for another attempt, test, parser repair, or probe.
228
229
  Close decisions at the earliest informed phase: product in spec, coverage in clarify,
229
230
  scope/risk in temper, architecture/dependencies in define, and proof/toolchain in vet. Build
230
231
  keeps only unavailable-pre-code or mandatory action-time checkpoints.
@@ -375,6 +376,14 @@ access, safety and irreversible-action boundaries independently stop work.
375
376
  closes every deferred row with a labeled verdict; Seal blocks on any without one.
376
377
  **Failing case:** round 4 finds three Important items on clauses untouched since
377
378
  round 1 and dispatches another repair.
379
+ - **Recovery findings need a discriminator; recovery scope stays frozen.** While a
380
+ fingerprint is in recovery, a new Important finding keeps it open or opens another
381
+ only with an executed reproduction or a quoted AC/INV/PROH/accepted-DEC line whose
382
+ observable outcome fails; root turns it into a control the next wright must pass.
383
+ A static counterexample against plan-invented hardening goes to the Review trail or
384
+ `## Deferred findings` (Review gives it a verdict; Seal blocks without one). A
385
+ Critical with a concrete failure path always opens a fingerprint. A correction adds
386
+ no proof site or mechanism its fingerprint's closure does not need. No reviewer is skipped.
378
387
  - **Separate consumptive authority from recovery.** Spent one-shot authorization
379
388
  blocks another execution, not offline recovery. Retained evidence starts caller-owned
380
389
  diagnosis/correction immediately; the next consumptive execution needs fresh authority.
@@ -388,13 +397,19 @@ access, safety and irreversible-action boundaries independently stop work.
388
397
  the fingerprint's current *strategy*, not the work. Record that strategy and its
389
398
  attempts under `## Dead ends`, then the controlling caller escalates inline in the
390
399
  same invocation: re-diagnose from the reproduction and dead ends, take the first
391
- class below that still has an untried strategy, run `/rite-plan repair` plus
392
- narrow Vet for it, and resume with a fresh three-attempt budget. Classes, in order:
393
- (1) **shared root cause**: fix the owner every failing path routes through and
394
- enforce it across all callers instead of another local guard; (2) **boundary
395
- redesign**: acceptance-preserving reslice or redesign of the failing seam;
396
- (3) **diagnostic amplification**: add discriminating probes or fixtures, then
397
- correct from that evidence. A recorded strategy, or a rewording of one, never
400
+ class below that still has an untried strategy, and resume with a fresh
401
+ three-attempt budget. Re-plan only when the strategy must change a planning
402
+ input (writer allowlist, interface or contract, slice topology, or a
403
+ `test-plan.md` proof row): run `/rite-plan repair` plus narrow Vet for it. A
404
+ strategy that fits the vetted plan, with `devrites-engine check readiness <slug>`
405
+ still passing, goes straight to the wright with the dead ends in its contract;
406
+ Build's review and proof still gate it. Classes, in order, cheapest evidence
407
+ before costliest change: (1) **shared root cause**: fix the owner every failing
408
+ path routes through and enforce it across all callers instead of another local
409
+ guard; (2) **diagnostic amplification**: add discriminating probes or fixtures,
410
+ then correct from that evidence (last for a consumptive action, whose attempt
411
+ needs fresh authorization); (3) **boundary redesign**: acceptance-preserving
412
+ reslice or redesign of the failing seam, built on that evidence. A recorded strategy, or a rewording of one, never
398
413
  repeats. Escalation never weakens tests, validators or acceptance. Each
399
414
  fingerprint gets at most three escalations per activation; record each in
400
415
  `drift.md` with its class and strategy.
@@ -62,7 +62,9 @@ a human plus an agent) can share one working tree. Before a same-tree writer
62
62
  starts, it records an advisory claim — `devrites-engine claim add --session
63
63
  <id> <paths>` — retains the returned `<claim-id>`, then checks the same paths
64
64
  with `devrites-engine claim check --session <id> <paths>`; a held claim from a
65
- live foreign session is a stop-and-report, not a merge-later problem. On every
65
+ live foreign session is never merged later or overridden. Unattended, skip only
66
+ work that needs those paths, run independent work, and re-check `claim list --all`
67
+ before stopping; stop and report the holder only when nothing independent remains. On every
66
68
  host-confirmed terminal path after `add` ([unknown outcomes keep it](../parallel-dispatch.md#cancellation-and-terminal-reconciliation)) — return,
67
69
  rejected result, stop, or a launch refused with no handle — run
68
70
  `devrites-engine claim release --session <id> --id <claim-id>`. Claims expire
@@ -73,7 +75,9 @@ Claims cover product paths only; root-authored `.devrites/**` files use
73
75
  Expiry is not proof the holder stopped: size `claim add --ttl <minutes>` to the
74
76
  expected write (engine max 240) and re-add before it lapses; before writing, also
75
77
  read `claim list --all` — a foreign `expired` claim on overlapping paths whose
76
- session is not proven terminal counts as held (stop and report). **Failing case:**
78
+ session is not proven terminal counts as held (stop and report). `dead` (engine-proven
79
+ exited holder) or `released` is terminal: reconcile per
80
+ [§ Cancellation](../parallel-dispatch.md#cancellation-and-terminal-reconciliation). **Failing case:**
77
81
  session B's `claim check` passes at minute 35 over session A's still-running wright.
78
82
 
79
83
  ## Independence
@@ -163,6 +163,9 @@ A skill that stops without doing this leaves the workspace incomplete.
163
163
 
164
164
  Long contexts degrade reasoning quality. Act on context at **50-70% used, not 95%**.
165
165
 
166
+ Read the engine `context` bundle once per phase instead of re-reading the files it
167
+ contains; after compaction re-read the bundle, not its sources.
168
+
166
169
  Every rite names the single resume command on its action line; a `↻ Hygiene:` footer
167
170
  advises `/clear`, `/compact`, or `/rite-handoff` and never a competing command. Full phase-by-phase guidance:
168
171
  [`context-hygiene.md`](context-hygiene.md).
@@ -124,6 +124,9 @@ an error because the runner can never execute it.
124
124
  (an invariant the output must always satisfy) over example (one concrete
125
125
  input/output case). An example-shaped oracle on a property-shaped outcome is
126
126
  a weak gate — reviewers flag it even when it passes.
127
+ - One CHECK, one oracle: never chain another artifact's self-test before the
128
+ AC's oracle with `&&` — give the self-test its own gate, so a red self-test
129
+ never hides the AC's own result.
127
130
  - When an outcome becomes impossible, `gates abandon` it and route the
128
131
  handoff — never delete the row to make the ledger pass.
129
132
  - The gate set is the coverage denominator: it never shrinks to reach
@@ -250,6 +250,13 @@ Dismiss an irrelevant case with a reason; silently omitting an applicable case i
250
250
  - A flaky test is a broken test. Isolate and fix it immediately; don't paper over it with
251
251
  retries or `sleep`. **Failing case:** a known-flaky test is left with retries so the
252
252
  suite is paper-green at Prove/Seal → NO-GO.
253
+ - **A diagnostic rerun is allowed, never proof.** Rerun a timing-shaped failure on
254
+ the unchanged candidate to classify it flaky or deterministic before a repair;
255
+ record it as diagnostic, never as a pass.
256
+ - **Attributable RED.** A negative control or mutant counts RED only on a positive
257
+ marker from the targeted assertion; a setup, construction, or observation failure
258
+ is never credited as RED. Prove the classifier with an injected setup failure
259
+ that must stay uncredited.
253
260
  - **A retry-only pass is `flaky`, never green.** A pass earned by rerun on an unchanged
254
261
  candidate digest (no admitted correction between attempts), or by a runner retry
255
262
  setting, is `flaky`: record every attempt with the first attempt's outcome. It never
@@ -326,12 +326,16 @@ Epoch starts 1. `FAILED` records preimages/cleanup/epoch/fingerprint/reason/
326
326
  boundary/route/no-progress count. Resolved fingerprints close; a different
327
327
  invariant gets a distinct fingerprint. Handoff death resumes its retry epoch with
328
328
  prior rows immutable. `WA-OP-011/012` enforce independent fingerprint/epoch caps
329
- and terminal source cleanup. Exhaustion records:
329
+ and terminal source cleanup. Exhaustion closes this admission, not the work:
330
+ the controlling caller escalates it under the
331
+ [retry contract](afk-hitl.md#retry-cap-no-progress-loops-and-self-resolve)
332
+ through `PLAN_VET_REPAIR`, and a re-vetted changed design re-admits under a new
333
+ identity with fresh epochs. A fully escalated fingerprint parks. Exhaustion records:
330
334
 
331
335
  ```text
332
- status=blocked
336
+ status=running
333
337
  exhaustion_cause=<same-fingerprint-count|total-epoch-limit>
334
- next_action=none — technical recovery exhausted; requires new evidence or changed failure conditions
338
+ next_action=/rite-plan repair <slug> — escalate exhausted workflow attempt
335
339
  ```
336
340
 
337
341
  The journal, evidence section, and observer retain that cause; epoch exhaustion
@@ -343,7 +347,7 @@ Precedence: busy owner; safety/access/approval gate; completed historical; activ
343
347
  journal; `CLEANED`; missing/stale authority; stale writer evidence; current
344
348
  admission. `PROVED|CLEANING` resumes cleanup; install-through-`PROVING`, rollback,
345
349
  or failure cleanup routes offline; retryable `FAILED` routes correction/retry;
346
- `EXHAUSTED` blocks; `PREPARING|PREPARED` resumes only with current authority.
350
+ `EXHAUSTED` escalates; `PREPARING|PREPARED` resumes only with current authority.
347
351
  There is no actor-history migration or backfill.
348
352
 
349
353
  |Route|Owner|Exact action|Durable state/status/next action|Cursor/output|
@@ -356,7 +360,7 @@ There is no actor-history migration or backfill.
356
360
  | `VERIFY_EXISTING`|controlling root|verify `CLEANED`, targets, proof, and product separation; do not reinstall|restore saved return phase/action|no retry/slice/action budget|
357
361
  | `NO_BACKFILL`|controlling root|no action|completed state unchanged|no new output|
358
362
  | `WAIT_ACTIVE_OWNER`|non-owner|no write; stop invocation|shared state unchanged|fixed owner-busy diagnostic|
359
- | `BLOCKED_EXHAUSTED`|controlling root|no attempt 4|blocked with exact exhausted next action|fixed exhausted diagnostic|
363
+ | `BLOCKED_EXHAUSTED`|controlling root|no attempt 4 on this admission; escalate through `PLAN_VET_REPAIR` or park per retry contract|`status=running`, exact exhausted `next_action`; parked keeps the parked-recovery action|fixed exhausted diagnostic; no intermediate reply|
360
364
  | `BLOCKED_GATE`|controlling root|follow existing safety/access/approval gate|gate-owned state|gate output; never reinterpret as retry|
361
365
 
362
366
  |Scenario ID|Trigger|Exact route / action|Durable consequence|Forbidden behavior|
@@ -422,7 +426,7 @@ pairs remain injective for actionable seams.
422
426
  | `devrites-debug-recovery/SKILL.md`|durable active failure or ambiguous admitted state|`OFFLINE_RECOVERY`; correct offline, re-preflight, narrow Vet, retry only under cap|saved caller or exact Plan/Vet route|
423
427
  | `rite-autocomplete/SKILL.md`|lifecycle cursor encounters admitted set or resumable journal|invoke classifier; execute returned route internally|saved phase/action; zero intermediate reply|
424
428
  | `rite-autocomplete/reference/loop.md`|loop tick sees Workflow Artifact trigger/state|invoke classifier once under owner lock; no actor-history migration|same loop cursor; no budget charge for verify/rerun|
425
- | `rite-autocomplete/reference/stop-conditions.md`|classifier returns owner-busy, exhausted, or existing hard gate|stop on exact `WAIT_ACTIVE_OWNER`, `BLOCKED_EXHAUSTED`, or `BLOCKED_GATE` result|unchanged cursor plus fixed route-owned output|
429
+ | `rite-autocomplete/reference/stop-conditions.md`|classifier returns owner-busy, exhausted, or existing hard gate|escalate `BLOCKED_EXHAUSTED`; on `WAIT_ACTIVE_OWNER` run independent work and recheck; stop on exact `BLOCKED_GATE` result|unchanged cursor plus fixed route-owned output|
426
430
  | `rite-build/SKILL.md`|Vet-ready admitted bytes require root authorship outside product wright|`ROOT_TRANSACTION`; root writes only admitted `.devrites/**` targets|saved Build slice cursor; wright product allowlist unchanged|
427
431
  | `rite-build/reference/phase-contract.md`|Build gate enters or resumes transaction|invoke canonical operation table; reconcile exact result|same slice/checkpoint cursor or Plan/Vet route|
428
432
  | `rite-prove/SKILL.md`|Prove consumes installed Workflow Artifact or `CLEANED` rerun|`VERIFY_EXISTING` or admitted proof path ending `PROVE_AND_RETURN`|saved Prove cursor; stop before real action|
@@ -237,7 +237,7 @@ slices; use `none` when they do not apply. Complexity above 3 triggers reslicing
237
237
  unless the stated reason makes the boundary irreducible. A Writer allowlist of 12+
238
238
  files prints an engine `ADVISORY size:` line (`check task-graph`, `check slice`;
239
239
  never blocking): split it acceptance-preserving, or add `Size rationale:` naming
240
- the inseparable capability.
240
+ the inseparable capability; `ADVISORY hub:` takes a seam slice or `Serial rationale:`.
241
241
 
242
242
  ## Read next by phase
243
243
 
@@ -107,8 +107,8 @@ executable controller/harness/bundle bytes or a missing writer, read
107
107
  `/rite-review` → `/rite-seal`. Read and execute each skill; durable files, not
108
108
  chat, carry state. Apply the mutable post-vet budget before first Build.
109
109
  Build runs the largest eligible path-disjoint batch (cap: this invocation's
110
- `--parallel N`, else sentinel `max_parallel`, else 10) and recomputes after
111
- every completed round until no pending slice remains; a one-slice round is serial for that round only, then
110
+ `--parallel N`, else sentinel `max_parallel`, else 10) and refills a slot
111
+ per landing until no pending slice remains; a one-slice round is serial for that round only, then
112
112
  selection runs again (host isolation still forces serial when concurrent writers
113
113
  cannot be separated). When `--parallel N`
114
114
  is present, pass it into `/rite-build` and do not consult leftover sentinel
@@ -67,7 +67,7 @@ Workspace files carry state; chat does not. Read and execute each phase skill:
67
67
  | 3 | `/rite-temper` | harden or reduce; `expand` and extra acceptance stop for a human; irreversible risk still pauses |
68
68
  | 4 | `/rite-define` | approved plan/tasks/traceability |
69
69
  | 5 | `/rite-vet` | every plan; derive mutable budget after READY |
70
- | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; one-slice round when <2 eligible); recompute after each round; charge once per green built slice |
70
+ | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; one-slice round when <2 eligible); refill per landing; charge once per landed slice |
71
71
  | 7 | `/rite-prove` | all slices built; approved proof; recovery on red |
72
72
  | 8 | `/rite-polish` | re-prove after code edits |
73
73
  | 9 | `/rite-review` | in-scope correction then fresh proof |
@@ -38,7 +38,7 @@ Agent-owned backtracking is not a stop condition while the exact causal
38
38
  fingerprint has budget. Invoke the earlier phase, affected Vet, remediation, and
39
39
  proof; then resume the origin. Three no-progress corrections of that exact
40
40
  fingerprint spend only its current strategy: escalate to the next correction
41
- class inline (shared root cause, boundary redesign, diagnostic amplification)
41
+ class inline (shared root cause, diagnostic amplification, boundary redesign)
42
42
  with a fresh budget, never asking permission. After three escalations in this
43
43
  activation the fingerprint parks; finish all independent work, then stop once.
44
44
  Preserve reproduction, attempts, and dead ends; never offer `/rite-plan unblock`
@@ -58,7 +58,7 @@ amplification Plan repair and narrow Vet inline, then pause for fresh GO before
58
58
  one evidence-acquisition attempt. Without a safe seam, escalate to the next
59
59
  class or park; only a real human/risk/scope gate stops for a human.
60
60
 
61
- <!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"classifier returns owner-busy, exhausted, or existing hard gate","action":"stop on exact WAIT_ACTIVE_OWNER, BLOCKED_EXHAUSTED, or BLOCKED_GATE result","return":"unchanged cursor plus fixed route-owned output"} -->
61
+ <!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"classifier returns owner-busy, exhausted, or existing hard gate","action":"escalate BLOCKED_EXHAUSTED; on WAIT_ACTIVE_OWNER run independent work and recheck; stop on exact BLOCKED_GATE result","return":"unchanged cursor plus fixed route-owned output"} -->
62
62
  ## Other stop classes
63
63
 
64
64
  - **Gate severity:** escalating always stops. Blocking with a ranked recommended
@@ -85,6 +85,10 @@ class or park; only a real human/risk/scope gate stops for a human.
85
85
  pre-existing remaining value, explicit flag, sentinel cap, or post-vet pending count
86
86
  does not stop. Zero with no pending slices is normal completion.
87
87
  Malformed flag stops before any write.
88
+ - **Foreign writer:** a `live`/`expired` claim or `WAIT_ACTIVE_OWNER` held by
89
+ another session blocks only work on those paths; run independent work, re-check,
90
+ and stop only when nothing independent remains. `released`/`dead` claims are
91
+ reconciled per [§ Cancellation](../../devrites-lib/reference/parallel-dispatch.md#cancellation-and-terminal-reconciliation).
88
92
  - **Resource envelope:** overlapping run or missing AFK after arm still stops.
89
93
  Do not stop on `--max-slices`, `max_agents`, `max_minutes`, or `max_review_queue`.
90
94
  - **Confidence:** intent still cannot become testable acceptance after interview.
@@ -74,15 +74,15 @@ Wright applies anti-slop; root verifies returns and never patches source. Refuse
74
74
 
75
75
  Omitted/`1` ≡ serial; `2`–`10` is a **cap** — the root runs the largest eligible
76
76
  path-disjoint set it can start now (`N_eff`), takes fewer when the cap cannot be
77
- filled, and recomputes after every completed round (serial slice or parallel
78
- integrate) until no pending slice remains
77
+ filled, and refills a slot per landing (serial slice or one sibling) until
78
+ no pending slice remains
79
79
  ([`parallel-batch.md` § Dynamic selection](reference/parallel-batch.md#dynamic-selection-and-re-batching)).
80
- Unattended runs (`/rite-autocomplete`, `.devrites/AFK` `max_parallel`) repeat batches
81
- inside the same run; HITL stops after each batch. This invocation's `--parallel N`
80
+ Unattended runs (`/rite-autocomplete`, `.devrites/AFK` `max_parallel`) refill
81
+ inside the same run; HITL stops after each landing. This invocation's `--parallel N`
82
82
  is the cap: leftover sentinel `max_parallel` is not consulted. Autocomplete with
83
83
  that flag also writes or replaces only `max_parallel: N`. Non-integer/`N≤0`/`N>10` hard refuse.
84
- All-green (independent review + proof) then integrate as one local `WIP(<slug>):`
85
- commit per sibling onto the current control branch (never pushed). Do not
84
+ Each sibling lands alone when its review + proof are green (`integrate --slice`):
85
+ one local `WIP(<slug>):` commit onto the control branch (never pushed). Do not
86
86
  integrate a sibling because the wright returned. A red/gap sibling gets a bounded repair
87
87
  round in its own worktree — never rebuilt from scratch while budget remains.
88
88
  Post-writer inventory and affected rechecks follow `phase-contract.md` § Independent
@@ -93,7 +93,7 @@ a human `Fix`. Exhausted repair blocks and preserves everything;
93
93
  `cleanup --force` salvages slice branches before removing worktrees —
94
94
  human-gated to abandon a batch, orchestrator-emitted only as the salvage
95
95
  step of an automatic frozen-lease re-batch.
96
- AFK charges after integrate only. Running lease blocks another
96
+ AFK charges per landed sibling only. Running lease blocks another
97
97
  `/rite-build`. Details: `parallel-batch.md`.
98
98
 
99
99
  ## Execute and reply
@@ -44,8 +44,8 @@ The controlling root owns the cap:
44
44
  before the next dispatch.
45
45
  - **Serial:** charge when fail-on-red is green and the built record is written
46
46
  (same rewrite as step 2).
47
- - **Parallel `--parallel`:** charge only after **successful serial integrate**
48
- — once per integrated green sibling. Abort / integrate-failed → charge **0**.
47
+ - **Parallel `--parallel`:** charge only after **successful integrate**
48
+ — once per landed green sibling. Abort / integrate-failed → charge **0**.
49
49
  Do not charge on worktree-green before integrate. See
50
50
  [`parallel-batch.md`](parallel-batch.md).
51
51
 
@@ -18,7 +18,7 @@ the orchestrator pauses for approval before landing it.
18
18
  and fail-on-red proof are green, with no open Critical/Important and no repair
19
19
  wright still in flight. Serial: git recipe below (skip empty index) or isolated
20
20
  FF of a matching `transfer_commit`. Parallel: `devrites-engine parallel
21
- integrate --apply-to-control` (no second control `git commit`).
21
+ integrate --slice <id> --apply-to-control` (no second control `git commit`).
22
22
  - **Do not:** when a wright returns; before review/proof; with red/gap findings;
23
23
  fast-forward an isolated transfer onto control before those checks.
24
24
 
@@ -22,13 +22,14 @@ DISPATCH → hand the slice contract to devrites-slice-wright (fresh context).
22
22
  — dispatch the initial read-only reviews of distinct decisions in parallel
23
23
  (independent claims, fresh contexts); wright fixes stay serial — writers share files
24
24
  PROVE → root, concurrent with the reviews on the same frozen candidate:
25
- required build/browser/E2E, then returned-diff/path recheck; fail-on-red
25
+ required build/browser/E2E (narrow self-check/smoke first, full gate only
26
+ after it is green, long runs in the background), then returned-diff/path recheck; fail-on-red
26
27
  (red/gap → repair wright, then re-review and re-prove; do not commit yet)
27
28
  RECORD → orchestrator: after green verification, update state.md/evidence.md and
28
29
  upsert the authoritative candidate manifest from the actual scoped diff
29
30
  (CHECKPOINT) → only now, with review+proof green: local WIP(<slug>): <imperative summary>
30
31
  on the control branch (no slice id) → checkpoint.md
31
- NEXT → HITL root reports and stops. AFK with parallel cap>1: return to parallel-batch selection and run the new N_eff; otherwise repeat under afk-discipline.md
32
+ NEXT → HITL root reports and stops. AFK with parallel cap>1: return to parallel-batch selection to refill; otherwise repeat under afk-discipline.md
32
33
  ```
33
34
 
34
35
  ## Why the boundary matters