devrites 7.3.0 → 7.3.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 (153) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +19 -3
  3. package/bin/devrites.mjs +31 -5
  4. package/docs/engine/commands.md +41 -3
  5. package/docs/release.md +5 -2
  6. package/engine/Makefile +2 -2
  7. package/engine/internal/acceptance/newfinal_origins.go +39 -0
  8. package/engine/internal/acceptance/preconditions.go +17 -11
  9. package/engine/internal/acceptance/transcript.go +23 -4
  10. package/engine/internal/gate/gate.go +8 -6
  11. package/engine/internal/gate/readiness_binding.go +54 -24
  12. package/engine/internal/install/apply.go +36 -21
  13. package/engine/internal/install/binary.go +67 -9
  14. package/engine/internal/install/install.go +63 -21
  15. package/engine/internal/install/manifest.go +4 -5
  16. package/engine/internal/install/merge.go +89 -33
  17. package/engine/internal/install/preflight.go +60 -19
  18. package/engine/internal/install/uninstall.go +19 -9
  19. package/engine/internal/install/update.go +0 -4
  20. package/engine/internal/lib/claims.go +170 -4
  21. package/engine/internal/lib/claims_holder.go +13 -16
  22. package/engine/internal/lib/closeout.go +52 -28
  23. package/engine/internal/lib/context_io.go +88 -4
  24. package/engine/internal/lib/continuation.go +111 -24
  25. package/engine/internal/lib/dispatch.go +157 -24
  26. package/engine/internal/lib/final_prerequisites.go +137 -0
  27. package/engine/internal/lib/manifest_union.go +62 -25
  28. package/engine/internal/lib/next.go +10 -10
  29. package/engine/internal/lib/packet.go +32 -8
  30. package/engine/internal/lib/packet_integrity.go +194 -2
  31. package/engine/internal/lib/resolve.go +128 -142
  32. package/engine/internal/lib/treebaseline.go +0 -1
  33. package/engine/internal/markdowntext/markdowntext.go +110 -31
  34. package/engine/internal/overhaul/records/check.go +45 -5
  35. package/engine/internal/overhaul/records/consistency.go +34 -8
  36. package/engine/internal/overhaul/records/run.go +55 -11
  37. package/engine/internal/parallel/landing.go +17 -0
  38. package/engine/internal/state/acceptance.go +35 -5
  39. package/engine/internal/state/feature.go +3 -2
  40. package/engine/internal/state/observation.go +50 -3
  41. package/engine/internal/state/write.go +20 -44
  42. package/engine/internal/workflow/commands.go +25 -3
  43. package/engine/main.go +19 -0
  44. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +41 -39
  45. package/pack/.claude/skills/devrites-lib/reference/parallel-workspaces.md +46 -12
  46. package/pack/.claude/skills/overhaul/SKILL.md +8 -4
  47. package/pack/.claude/skills/overhaul/references/lifecycle.md +13 -6
  48. package/pack/.claude/skills/overhaul/references/orchestration.md +32 -21
  49. package/pack/.claude/skills/overhaul/references/records.md +23 -8
  50. package/pack/.claude/skills/overhaul/references/scope-and-safety.md +7 -2
  51. package/pack/.claude/skills/overhaul/references/scoring.md +7 -0
  52. package/pack/.claude/skills/rite-autocomplete/SKILL.md +9 -10
  53. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +8 -1
  54. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +17 -17
  55. package/pack/.claude/skills/rite-clarify/SKILL.md +25 -25
  56. package/pack/.claude/skills/rite-prove/SKILL.md +15 -7
  57. package/pack/.claude/skills/rite-review/SKILL.md +7 -0
  58. package/pack/.claude/skills/rite-vet/SKILL.md +10 -1
  59. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +41 -39
  60. package/pack/generated/claude/skills/devrites-lib/reference/parallel-workspaces.md +46 -12
  61. package/pack/generated/claude/skills/overhaul/SKILL.md +8 -4
  62. package/pack/generated/claude/skills/overhaul/references/lifecycle.md +13 -6
  63. package/pack/generated/claude/skills/overhaul/references/orchestration.md +32 -21
  64. package/pack/generated/claude/skills/overhaul/references/records.md +23 -8
  65. package/pack/generated/claude/skills/overhaul/references/scope-and-safety.md +7 -2
  66. package/pack/generated/claude/skills/overhaul/references/scoring.md +7 -0
  67. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +9 -10
  68. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +8 -1
  69. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +17 -17
  70. package/pack/generated/claude/skills/rite-clarify/SKILL.md +25 -25
  71. package/pack/generated/claude/skills/rite-prove/SKILL.md +15 -7
  72. package/pack/generated/claude/skills/rite-review/SKILL.md +7 -0
  73. package/pack/generated/claude/skills/rite-vet/SKILL.md +10 -1
  74. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +41 -39
  75. package/pack/generated/codex/skills/devrites-lib/reference/parallel-workspaces.md +46 -12
  76. package/pack/generated/codex/skills/overhaul/SKILL.md +8 -4
  77. package/pack/generated/codex/skills/overhaul/references/lifecycle.md +13 -6
  78. package/pack/generated/codex/skills/overhaul/references/orchestration.md +32 -21
  79. package/pack/generated/codex/skills/overhaul/references/records.md +23 -8
  80. package/pack/generated/codex/skills/overhaul/references/scope-and-safety.md +7 -2
  81. package/pack/generated/codex/skills/overhaul/references/scoring.md +7 -0
  82. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +9 -10
  83. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +8 -1
  84. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +17 -17
  85. package/pack/generated/codex/skills/rite-clarify/SKILL.md +25 -25
  86. package/pack/generated/codex/skills/rite-prove/SKILL.md +15 -7
  87. package/pack/generated/codex/skills/rite-review/SKILL.md +7 -0
  88. package/pack/generated/codex/skills/rite-vet/SKILL.md +10 -1
  89. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +41 -39
  90. package/pack/generated/devin/skills/devrites-lib/reference/parallel-workspaces.md +46 -12
  91. package/pack/generated/devin/skills/overhaul/SKILL.md +8 -4
  92. package/pack/generated/devin/skills/overhaul/references/lifecycle.md +13 -6
  93. package/pack/generated/devin/skills/overhaul/references/orchestration.md +32 -21
  94. package/pack/generated/devin/skills/overhaul/references/records.md +23 -8
  95. package/pack/generated/devin/skills/overhaul/references/scope-and-safety.md +7 -2
  96. package/pack/generated/devin/skills/overhaul/references/scoring.md +7 -0
  97. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +9 -10
  98. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +8 -1
  99. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +17 -17
  100. package/pack/generated/devin/skills/rite-clarify/SKILL.md +25 -25
  101. package/pack/generated/devin/skills/rite-prove/SKILL.md +15 -7
  102. package/pack/generated/devin/skills/rite-review/SKILL.md +7 -0
  103. package/pack/generated/devin/skills/rite-vet/SKILL.md +10 -1
  104. package/pack/generated/dsh/runtime/cordis.patch.yml +28 -14
  105. package/pack/generated/dsh/skills/devrites-lib/reference/parallel-dispatch.md +41 -39
  106. package/pack/generated/dsh/skills/devrites-lib/reference/parallel-workspaces.md +46 -12
  107. package/pack/generated/dsh/skills/overhaul/SKILL.md +8 -4
  108. package/pack/generated/dsh/skills/overhaul/references/lifecycle.md +13 -6
  109. package/pack/generated/dsh/skills/overhaul/references/orchestration.md +32 -21
  110. package/pack/generated/dsh/skills/overhaul/references/records.md +23 -8
  111. package/pack/generated/dsh/skills/overhaul/references/scope-and-safety.md +7 -2
  112. package/pack/generated/dsh/skills/overhaul/references/scoring.md +6 -0
  113. package/pack/generated/dsh/skills/rite-autocomplete/SKILL.md +9 -10
  114. package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +8 -1
  115. package/pack/generated/dsh/skills/rite-build/reference/wright-dispatch.md +17 -17
  116. package/pack/generated/dsh/skills/rite-clarify/SKILL.md +25 -25
  117. package/pack/generated/dsh/skills/rite-prove/SKILL.md +15 -7
  118. package/pack/generated/dsh/skills/rite-review/SKILL.md +7 -0
  119. package/pack/generated/dsh/skills/rite-vet/SKILL.md +10 -1
  120. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +41 -39
  121. package/pack/generated/omp/skills/devrites-lib/reference/parallel-workspaces.md +46 -12
  122. package/pack/generated/omp/skills/overhaul/SKILL.md +8 -4
  123. package/pack/generated/omp/skills/overhaul/references/lifecycle.md +13 -6
  124. package/pack/generated/omp/skills/overhaul/references/orchestration.md +32 -21
  125. package/pack/generated/omp/skills/overhaul/references/records.md +23 -8
  126. package/pack/generated/omp/skills/overhaul/references/scope-and-safety.md +7 -2
  127. package/pack/generated/omp/skills/overhaul/references/scoring.md +7 -0
  128. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +9 -10
  129. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +8 -1
  130. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +17 -17
  131. package/pack/generated/omp/skills/rite-clarify/SKILL.md +25 -25
  132. package/pack/generated/omp/skills/rite-prove/SKILL.md +15 -7
  133. package/pack/generated/omp/skills/rite-review/SKILL.md +7 -0
  134. package/pack/generated/omp/skills/rite-vet/SKILL.md +10 -1
  135. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +41 -39
  136. package/pack/generated/pi/skills/devrites-lib/reference/parallel-workspaces.md +46 -12
  137. package/pack/generated/pi/skills/overhaul/SKILL.md +8 -4
  138. package/pack/generated/pi/skills/overhaul/references/lifecycle.md +13 -6
  139. package/pack/generated/pi/skills/overhaul/references/orchestration.md +32 -21
  140. package/pack/generated/pi/skills/overhaul/references/records.md +23 -8
  141. package/pack/generated/pi/skills/overhaul/references/scope-and-safety.md +7 -2
  142. package/pack/generated/pi/skills/overhaul/references/scoring.md +7 -0
  143. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +9 -10
  144. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +8 -1
  145. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +17 -17
  146. package/pack/generated/pi/skills/rite-clarify/SKILL.md +25 -25
  147. package/pack/generated/pi/skills/rite-prove/SKILL.md +15 -7
  148. package/pack/generated/pi/skills/rite-review/SKILL.md +7 -0
  149. package/pack/generated/pi/skills/rite-vet/SKILL.md +10 -1
  150. package/package.json +1 -1
  151. package/scripts/dsh-generate.py +1 -1
  152. package/scripts/install-lib.sh +29 -0
  153. package/uninstall.sh +1 -0
@@ -259,3 +259,10 @@ written. `G-THRESHOLDS` and `G-MANDATORY` are computed; `validate` rejects a
259
259
  scorecard whose `G-NO-CRITICAL-HIGH`, `G-NO-OPEN-SERIOUS-LEAD` or `G-COVERAGE` PASS
260
260
  contradicts `findings.json` or `coverage.json`, and a control recorded PASS while a
261
261
  linked finding is still open ([`records.md`](records.md#enforced-versus-review-only)).
262
+ `publish` and `validate` bind `scorecard.json.inputs.{rubric_sha256,results_sha256,gates_sha256}`
263
+ to the exact file bytes read by the calculator: `run.json.revisions.rubric.file`,
264
+ the selected generation's `results-candidate.json` when present (otherwise
265
+ `results-baseline.json`), and that generation's `gates.json`. Calculate from those
266
+ paths before publication. Missing or mismatched inputs reject the generation;
267
+ records never recalculate a card or replace its digests to make it current.
268
+
@@ -88,6 +88,9 @@ next sequence continuation through Vet in a second session, then stop.
88
88
 
89
89
  1. **Orient and parse.** Resolve source per [phase target binding](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding); when a workspace exists,
90
90
  require its `state.md` and read its cursor; a fresh idea starts empty at step 2.
91
+ Before phase-local cold recovery, execute the bounded
92
+ [global frontier pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier);
93
+ retain this source's return cursor and pending reviewer handles.
91
94
  Before honoring `blocked` with terminal `next_action`,
92
95
  reconcile retained consumptive evidence and fingerprint attempts from
93
96
  `drift.md`/`evidence.md`; a retained fingerprint below its cap resumes offline
@@ -118,16 +121,12 @@ next sequence continuation through Vet in a second session, then stop.
118
121
  `/rite-build` batch loop → `/rite-prove` → `/rite-polish` →
119
122
  `/rite-review` → `/rite-seal`. Read and execute each skill; durable files, not
120
123
  chat, carry state. Apply the mutable post-vet budget before first Build.
121
- Execute [`parallel-workspaces.md`](../devrites-lib/reference/parallel-workspaces.md):
122
- continuously scan the authorized recorded sequence across stages, preparing
123
- and re-Vetting future targets while writers run. Build queries the global
124
- pool with `parallel select --from-plan --slug <controller> --workspaces
125
- <controller,authorized-source,...> --cap N`; N is explicit `--parallel N`, else
126
- sentinel `max_parallel`, else 10 — one global writer cap, including explicit 1.
127
- Always pass resolved `--parallel N` to Build. Cap>1 uses an isolated first
128
- writer even when initially alone; refill globally per landing and planning/
129
- review return. Unsupported host stays serial. No local ready slice is not
130
- completion while authorized planning, repair/re-Vet or independent work remains.
124
+ Execute the shared [global frontier pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier)
125
+ at phase entry, before recovery, on returns and before native waits, not only
126
+ during Build or after Seal. Preserve source-local phase cursors; Autocomplete
127
+ retains repository scheduling. Apply its protected validation window before
128
+ landings/checkpoints and account admission. Pass resolved `--parallel N` to
129
+ Build under its one global cap and existing admission/isolation gates.
131
130
  **Completion:** loop reaches Seal GO or persists a valid stop before any later phase.
132
131
  5. **Apply stops.** At every gate use
133
132
  [stop-conditions.md](reference/stop-conditions.md). A `blocked` label alone is not a stop condition:
@@ -67,13 +67,20 @@ Workspace files, not chat, carry state. Read/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` global frontier | execute [shared controller workflow](../../devrites-lib/reference/parallel-workspaces.md); scan authorized stages and repair/re-Vet while writers run, refill per landing under one global cap; charge each source once per landed slice |
70
+ | 6 | `/rite-build` | execute shared controller selection/admission; charge each source once per landed slice |
71
71
  | 7 | `/rite-prove` | all slices built except deferred (`Satisfies: none`); 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 |
74
74
  | 10 | `/rite-seal` | GO/NO-GO; no Git |
75
75
  | 11 | `/rite-ship` | only after GO; `--ship` never authorizes Git; stop at literal-GO/native approval |
76
76
 
77
+ At every phase entry, before cold/local recovery, on reviewer/planning returns and
78
+ before native waits, Autocomplete executes the bounded
79
+ [global frontier pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
80
+ Keep source-local return cursors and pending handles; apply its protected
81
+ validation window before accepting accounts or landing work. This scheduling
82
+ precedes owner Seal and does not change ordered handoff below.
83
+
77
84
  Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
78
85
  pass evidence after source edits. Re-read the selected source before each phase per [phase target binding](../../devrites-lib/reference/parallel-workspaces.md#phase-target-binding). On a cold resume or
79
86
  new activation, run `devrites-engine check regression <slug>`: `BLOCKED` names a
@@ -99,26 +99,26 @@ Same-worktree multi-writer / root-emulated worktrees stay forbidden.
99
99
 
100
100
  ## Run
101
101
 
102
- Same-worktree (non-isolated) dispatch claims before writing: the `dispatch open`
103
- below adds `--claim-session <id>`, one `--claim <path>` per task path, and
104
- `--claim-ttl <minutes>` sized to the write; it runs the
105
- `claim check --session <id> <task-paths>` test, and a live foreign holder fails the
106
- open with no wave and no claim and stops the dispatch, per
107
- [`agents.md`](../../devrites-lib/reference/standards/agents.md). `.devrites/**`
108
- is never a task path; see [Workflow Artifact admission](../../devrites-lib/reference/standards/workflow-artifacts.md).
102
+ Before same-tree writing, `dispatch open` adds `--claim-session <id>`,
103
+ `--claim <path>` per task path, and `--claim-ttl <minutes>` sized to the write.
104
+ It runs `claim check --session <id> <task-paths>`. Live foreign or abandoned
105
+ unreleased/nonterminal claims (even same-session/expired) refuse without a wave
106
+ or new claim, per [`agents.md`](../../devrites-lib/reference/standards/agents.md).
107
+ `.devrites/**` is never a task path; see [Workflow Artifact admission](../../devrites-lib/reference/standards/workflow-artifacts.md).
109
108
  Render the contract with `devrites-engine packet <slug> --wave <wave> --phase build
110
109
  --role slice-wright --slice <SLICE-ID> [--checks <G-ID,...>] [--focus <file>]` (it
111
110
  writes the linted same-worktree `packets/<wave>.contract.md`; a native-worktree pilot
112
- writes its own contract with `Isolation`, `worktree_base`, and subject) and hand the wright that text verbatim. Reviewers read
113
- that file, so `--focus` rows state each defect to fix with its anchor, never a reviewer's verdict,
114
- count, or pass status ("code review is no-findings" voids the next review). Ask the host
115
- for the exact writer in fresh context; a repair round on the same slice whose
116
- returned wright the host can still continue goes to that wright on its existing
117
- handle instead, so it does not re-read the slice from scratch. Wait, and track it
118
- through the launch barrier — `devrites-engine dispatch <slug> open --phase build --wave
119
- <slice-id> --role slice-wright --slice <SLICE-ID> --contract <file>` (it refuses a
111
+ writes its own contract with `Isolation`, `worktree_base`, and subject). Give it
112
+ verbatim. Reviewers read it: `--focus` names defect + anchor, never a prior
113
+ verdict, count, or pass claim. Ask the exact writer in fresh context; a repair
114
+ may continue the returned wright's existing handle if the host supports it,
115
+ avoiding a reread. Track the launch barrier — `devrites-engine dispatch <slug> open --phase build --wave
116
+ <wave-id> --role slice-wright --slice <SLICE-ID> --contract <file>` (it refuses a
120
117
  contract that forbids writer-safe checks or names none), then `start` with the host handle
121
- (the last start seals the wave) and `return` on completion (auto-records dispatch/return metrics). Every 5 wright
118
+ (the last start seals the wave) and `return --wave <wave-id> --role slice-wright
119
+ --handle <id>` on completion (auto-records dispatch/return metrics). Every wave ID
120
+ is single-use: use a fresh ID for each repair or retry, even after abandonment;
121
+ the earlier wave keeps its handles, history, and any unreleased claim. Every 5 wright
122
122
  rounds on one slice, `open` blocks for a reslice review. First re-admit each
123
123
  finding still driving rounds under the Proportionality rule of
124
124
  [agents.md § Result admission](../../devrites-lib/reference/standards/agents.md#result-admission): one without a broken anchor or a reachable trigger becomes a
@@ -129,7 +129,7 @@ open findings move to the new slice owning their paths), or record
129
129
  `## <DRIFT-ID> — <SLICE-ID> reslice review` with why no smaller split exists and
130
130
  a spec trace of the slice's obligations (hardening no AC/INV/PROH requires moves to
131
131
  a sibling slice dependents do not need, still gated before Seal), and
132
- reopen with `--reslice-review <DRIFT-ID>`. Same-worktree stays one writer.
132
+ open a fresh wave with `--reslice-review <DRIFT-ID>`. Same-worktree stays one writer.
133
133
  Never run two writers in one worktree, mix isolated and same-worktree writers,
134
134
  or substitute a generic agent. Sanctioned parallel dispatch uses one exact
135
135
  wright per worktree, source-local `slice-wright.<SLICE-ID>` roles and starts
@@ -59,34 +59,34 @@ dispatch uses
59
59
  remains.
60
60
  5. **Write the verdict.** Write `Decision coverage: CLEAR` only after re-reading all inputs and confirming
61
61
  every material row has current evidence and an owner. Normal flow sets `phase=clarify` and
62
- `next_action=/rite-temper`. A low-stakes spec — the significance trigger temper itself
63
- skips (rite-temper step 1) — sets `next_action=/rite-define` instead. A contract-neutral later-phase return uses
64
- the native restore below; changed behavior or acceptance routes to
65
- `/rite-plan repair` instead. Stop without starting the next phase.
62
+ `next_action=/rite-temper`, or `/rite-define` for low-stakes specs temper skips.
63
+ Later-phase entries follow the ownership protocol below. Return inline verdicts
64
+ to the controlling caller; otherwise stop before starting the next phase.
66
65
 
67
66
  ## Native clarify cursor protocol
68
67
 
69
- The controlling root edits only cursor rows in `state.md`; it must preserve unrelated Markdown and the file's existing table/bullet presentation.
70
-
71
- - **Normal entry from Spec:** set `phase=clarify`, `status=running`, and
72
- `next_action=/rite-clarify <slug>`; omit both return fields.
73
- - **Already in Clarify:** no-op. Do not overwrite an existing valid return
74
- cursor.
75
- - **Later-phase entry:** only `temper`, `define`, `plan`, `vet`, `build`,
76
- `converge`, `prove`, `polish`, `review`, `seal`, or `ship` may return. First
77
- copy the current `phase` and non-empty `next_action` to `return_phase` and
78
- `return_next_action`; then set `phase=clarify`, `status=running`, and
79
- `next_action=/rite-clarify <slug>`. Missing/unknown cursor values fail closed
80
- before any write.
81
- - **Contract-neutral restore:** after a fresh `Decision coverage: CLEAR`, require
82
- `phase=clarify`, both return fields, a recognized later `return_phase`, and a
83
- non-empty `return_next_action`. Restore those values to `phase` and
84
- `next_action`, set `status=running`, and remove both return fields in the same
85
- rewrite. Re-read the cursor and confirm the return rows are absent.
86
- - **Contract changed:** do not restore the saved cursor. Record drift and route
87
- through `/rite-plan repair`, which owns the changed plan and next action.
88
-
89
- Never normalize or rewrite the rest of `state.md` while applying this protocol.
68
+ Edit only cursor rows; preserve unrelated Markdown and table/bullet presentation.
69
+
70
+ - **Validate before writes:** require no return fields or a complete pair:
71
+ recognized later `return_phase`, non-empty `return_next_action`. Invalid/half
72
+ pairs fail closed. Later phases: `temper`, `define`, `plan`, `vet`, `build`,
73
+ `converge`, `prove`, `polish`, `review`, `seal`, `ship`.
74
+ - **Spec entry:** set `phase=clarify`, `status=running`,
75
+ `next_action=/rite-clarify <slug>`; omit return fields.
76
+ - **Caller-owned pair:** pair with `phase!=clarify` requires a native
77
+ controlling caller; otherwise stop for ownership recovery. Run bounded Clarify
78
+ inline, preserve all cursor rows, and return its verdict to caller.
79
+ Contract changes require Plan repair and Vet before outer resume.
80
+ - **Clarify-owned pair:** standalone later-phase entry without a pair saves current
81
+ phase/non-empty next action as the pair, then sets `phase=clarify`,
82
+ `status=running`, `next_action=/rite-clarify <slug>`. Missing/unknown values
83
+ fail closed. `phase=clarify` resumes without writes; its pair belongs to
84
+ standalone Clarify, not a nested caller.
85
+ - **Restore:** after fresh `CLEAR`, only the owner restores its pair.
86
+ Contract-neutral standalone Clarify restores phase/next action, sets
87
+ `status=running`, atomically unsets both return fields, and re-reads to verify.
88
+ Contract changes retain the pair through Plan repair and Vet; only its owner
89
+ consumes it after readiness. Preserve caller pairs.
90
90
 
91
91
  ## Output
92
92
 
@@ -35,8 +35,9 @@ TTHW, and exact signal-bearing errors; never assert DX (trigger `devex`).
35
35
  grammar/hashing. Spec Drift Guard owns revealed contract drift.
36
36
  - Root runs vetted gates/browser and records immutable evidence; proof runner
37
37
  validates it. Only the bounded wright fixes product source/tests.
38
- - **Prove remains the controlling caller** during technical backtracking. Save
39
- its cursor; run Plan repair, Recovery Vet, remediation, and re-proof inline;
38
+ - **Prove remains the source-local controlling caller** during technical backtracking;
39
+ under Autocomplete, repository scheduling stays with Autocomplete. Save
40
+ Prove's cursor; run Plan repair, Recovery Vet, remediation, and re-proof inline;
40
41
  consume nested boundaries; resume the failed rung. A strategy is spent after
41
42
  three no-progress attempts on the exact same fingerprint; escalate it per the
42
43
  [retry contract](../devrites-lib/reference/standards/afk-hitl.md#retry-cap-no-progress-loops-and-self-resolve)
@@ -60,12 +61,15 @@ test changes.
60
61
  ## Workflow
61
62
 
62
63
  1. **Orient.** Read core, resolve source per [phase target binding](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding), require `state.md`, and read its
63
- cursor. On blocked Prove cold resume, reconcile retained consumptive evidence
64
- and no-progress corrections before accepting terminal none; a distinct
65
- fingerprint below cap resumes offline triage without another real action.
64
+ cursor. Under Autocomplete, return scheduling for its
65
+ [global frontier pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier)
66
+ before cold/local recovery; preserve Prove's source-local return cursor.
67
+ On blocked Prove cold resume, reconcile retained consumptive evidence and
68
+ no-progress corrections before accepting terminal none; a distinct fingerprint
69
+ below cap resumes offline triage without another real action.
66
70
  2. **Freeze scope.** Read spec, tasks, state, test plan, and full diff. Require
67
- every slice built except a [deferred slice](../rite-plan/reference/slicing.md#deferred-slice). Missing `test-plan.md` returns to Vet inline (Prove stays the controlling
68
- caller) and resumes here; it never authorizes ad hoc proof.
71
+ every slice built except a [deferred slice](../rite-plan/reference/slicing.md#deferred-slice). Missing `test-plan.md` returns to Vet inline (Prove stays the source-local
72
+ controlling caller) and resumes here; it never authorizes ad hoc proof.
69
73
  3. **Approve commands.** If absent, use
70
74
  [test-command-discovery](reference/test-command-discovery.md) over repository
71
75
  manifests/CI. Discovery is evidence only: `test-plan.md` is the sole approved runtime
@@ -119,6 +123,10 @@ test changes.
119
123
  7. **Independent validation.** Fresh read-only `devrites-proof-runner` and
120
124
  `devrites-spec-reviewer`, in one parallel wave, judge the same candidate/commands/evidence/acceptance map.
121
125
  Neither runs commands; reject missing/stale, invented-ID, label-only or self-attested reports.
126
+ Under Autocomplete, before native wait return scheduling to its global frontier
127
+ pass, retaining both validator handles. Standalone Prove stays source-local.
128
+ Apply the shared protected validation window and recheck identities before
129
+ admitting accounts.
122
130
  8. **Map proof.** Reconcile verdicts under [acceptance-proof.md](reference/acceptance-proof.md).
123
131
  Every criterion/scenario/interaction/key link needs discriminating evidence or a
124
132
  blocker, including critical-path, observability, developer and wiring branches.
@@ -62,6 +62,9 @@ Pull these via `Read` when the diff demands them:
62
62
  0. Read `.claude/skills/devrites-lib/reference/standards/core.md` first (the always-on operating rules); pull the
63
63
  on-demand rules above as the diff demands them.
64
64
  Resolve source per [phase target binding](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding) before loading workspace artifacts.
65
+ Under Autocomplete, return scheduling for its
66
+ [global frontier pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier)
67
+ before cold/local recovery, preserving Review's source-local return cursor.
65
68
  1. Read `spec.md`, `tasks.md`, `state.md`, `decisions.md`,
66
69
  `touched-files.md`, `.devrites/principles.md` (if present: the binding invariants to score
67
70
  the diff against), and the `git diff`. For "what would this change break"
@@ -127,6 +130,10 @@ Pull these via `Read` when the diff demands them:
127
130
  [[`agents.md`](../devrites-lib/reference/standards/agents.md) § Result admission](../devrites-lib/reference/standards/agents.md#result-admission).
128
131
  Either `Outcome: gap` stops Review; silence, failure, or malformed output never
129
132
  becomes an empty findings list.
133
+ Under Autocomplete, before native wait return scheduling to its global frontier
134
+ pass with cohort handles retained; standalone Review stays source-local. Apply
135
+ the shared protected validation window and identity recheck before account
136
+ admission.
130
137
  4. **Reconcile, don't re-review.** With the two parallel reports in hand, the inline
131
138
  lead reconciles. It does **not** re-run the code-review axes over correctness /
132
139
  readability / architecture / maintainability that `devrites-code-reviewer` already
@@ -78,6 +78,9 @@ plan declares a root-authored executable workflow file, read
78
78
  assumptions, and state. Require approved Plan and `Decision coverage: CLEAR`;
79
79
  otherwise stop for Define or Clarify. Check placement (`get_architecture`),
80
80
  blast radius (`trace_path`), and reuse (`search_graph`) per [`code-navigation.md`](../devrites-lib/reference/standards/code-navigation.md).
81
+ Under Autocomplete, return scheduling for its
82
+ [global frontier pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier)
83
+ before cold/local recovery; preserve Vet's source-local return cursor.
81
84
  1. **Select depth.** Apply `reference/depth.md` exactly; never skip. Initial passes
82
85
  record engineering verdict and test-plan coverage. Valid Recovery rechecks
83
86
  retain prior depth; enter 1b.
@@ -87,12 +90,18 @@ plan declares a root-authored executable workflow file, read
87
90
  parallel under `../devrites-lib/reference/parallel-dispatch.md`: independent
88
91
  read-only passes on one frozen candidate. Missing required account blocks.
89
92
  Meanwhile run root steps 2–4, including step 3 preflight commands, on that
90
- candidate; reconcile returned accounts.
93
+ candidate. Under Autocomplete, before native wait return scheduling to its
94
+ global frontier pass with reviewer handles retained; standalone Vet stays
95
+ source-local. Apply the shared protected validation window and identity
96
+ recheck before reconciling returned accounts.
91
97
  1b. **Recovery recheck.** Require valid return cursor, accepted prior finding,
92
98
  exact fingerprint/reproduction, repaired candidate identity, changed
93
99
  paths/criteria, affected drift/evidence, and the recorded delta self-check.
94
100
  Freeze that packet and dispatch each exact owning reviewer once,
95
101
  fresh/read-only, limited to it — all its open fingerprints in that dispatch.
102
+ Under Autocomplete, before native wait use the same controller pass and retained
103
+ handles as step 1a; standalone Vet stays source-local. Apply the same
104
+ protected-window account admission.
96
105
  Do not rerun broad inventory or unaffected reviewers. Close the prior
97
106
  fingerprint only with discriminating evidence plus an explicit
98
107
  correction-created regression verdict on the touched invariants (acyclic
@@ -55,28 +55,27 @@ If the candidate diff has no matching surfaces, record
55
55
  The `agents` dispatch contract needs no flag: `--role` auto-fires it
56
56
  (`auto=[agents]` in the output). The command prints `unselected=[...]`; an
57
57
  omitted applicable trigger is a gap, not a shortcut.
58
- 3. Enforce the launch barrier through the engine, not prose. Open the wave
59
- (`devrites-engine dispatch <slug> open --phase <p> --wave <w> --role <r>...`;
60
- a reviewer, auditor, or test-analyst wave adds `--packet <file>`, any one of the
61
- wave's rendered `packets/<w>.<role>.md` (hand each agent its own file unedited), and `open` refuses one that seeds a gate result, outcome,
62
- count, or "already passed" claim; a Build reviewer wave adds `--slice <SLICE-ID>`
63
- so its findings key on that slice; at Review and Seal it also needs the packet to
64
- name the frozen candidate diff and the manifest to cover every checkpointed path;
65
- a same-tree writer wave adds `--claim-session <id> --claim <path>...` per
66
- [`wright-dispatch.md`](../../rite-build/reference/wright-dispatch.md#run)), launch every native agent nonblocking through the host's own agent
67
- tool (never a shell-launched host CLI such as `omp -p` or `claude -p`: that is a
68
- dispatch bridge, its PID handle dies with the session, and its return is a `gap`),
69
- record each returned host handle
70
- (`dispatch ... start --wave <w> --role <r> --handle <id>`) — the last start
71
- seals the wave (an explicit `seal` is a no-op), which makes a
72
- serial launch-then-wait pattern impossible to record. Record each completion
73
- with `dispatch ... return`; a reviewer adds `--result <file>` holding its return verbatim (the engine stores it as `packets/<wave>-<role>.return.md`, derives the outcome from its head, and records its `Finding:` keys; a file already at that path is kept), or `--outcome <findings|no-findings|gap>` when the host cannot hand the return over as a file; `return` refuses before seal. `dispatch status`
74
- exits nonzero while the wave is open, sealed, or abandoned. `start`/`return`
75
- auto-record the dispatch/return metrics events — no separate ledger call. If
76
- an opened wave cannot obtain every handle or reach `seal`, run
77
- `devrites-engine dispatch <slug> abandon --wave <w> --reason <reason>` (with
78
- `--release` on a host-confirmed stop or refused launch) before
79
- recording the gap; never leave an open wave to block a retry.
58
+ 3. Open a single-use wave; every retry needs a fresh ID:
59
+ `devrites-engine dispatch <slug> open --phase <p> --wave <w> --role <r>...`.
60
+ Reviewer/auditor/test-analyst waves add `--packet <file>` naming any rendered
61
+ `packets/<w>.<role>.md`; give each agent its own packet unedited. `open` rejects
62
+ seeded gate results, outcomes, counts, or pass claims. Build reviewers add
63
+ `--slice <SLICE-ID>`; Review/Seal packets bind the frozen diff and a manifest
64
+ covering every checkpointed path. Same-tree writers add `--claim-session <id>
65
+ --claim <path>...` per [`wright-dispatch.md`](../../rite-build/reference/wright-dispatch.md#run).
66
+ Launch all native agents nonblocking through the host tool before waiting.
67
+ Never shell-launch host CLIs (`omp -p`, `claude -p`): that bridge's handle dies
68
+ with the session and its return is a gap. Record every host handle with
69
+ `dispatch ... start --wave <w> --role <r> --handle <id>`; the last seals the wave
70
+ (explicit `seal` then does nothing). Return only after seal, with the recorded
71
+ handle: `dispatch ... return --wave <w> --role <r> --handle <id>`.
72
+ Reviewers add `--result <file>`: retain it verbatim at
73
+ `packets/<wave>-<role>.return.md` (keep an existing file), derive outcome and
74
+ `Finding:` keys. If the host cannot provide a file, use explicit
75
+ `--outcome findings|no-findings|gap`. Status is nonzero for open/sealed/abandoned
76
+ waves; start/return record metrics. If handles/seal cannot be obtained,
77
+ `dispatch ... abandon --wave <w> --reason <reason>` before recording the gap;
78
+ add `--release` only after host-confirmed stop/refused launch.
80
79
  4. Ask for each exact named agent in fresh context; omit native syntax and
81
80
  `agent_type`/`task_name`/`fork_turns` from the instruction.
82
81
  5. Every dispatch reaches a terminal classification before reconciliation:
@@ -144,32 +143,35 @@ the client renames a field its mocked test still passes, and the verdict reads c
144
143
 
145
144
  ## Cancellation and terminal reconciliation
146
145
 
147
- Cancellation acknowledgement means the host accepted a request, not that the
148
- child stopped. A transport timeout likewise leaves execution unknown. Keep the
149
- child's handle, path/resource ownership and capacity reservation until the
150
- native host confirms a terminal state and returned work has been reconciled.
151
- Query or wait on that handle; do not replace the child, release its slot, or
152
- reuse its resources while it may still run. If terminal state cannot be
153
- established, record a gap and retain ownership; for a child launched by an earlier
154
- session, the claim proof below settles it. A result classification alone
155
- does not prove host termination.
146
+ Cancellation acknowledgement or timeout leaves execution unknown. Keep handles,
147
+ path/resource ownership, and capacity until the native host confirms termination
148
+ and returned work is reconciled. Query/wait; never replace children, release slots,
149
+ or reuse resources prematurely. If unproven, record a gap and retain ownership;
150
+ earlier-session claim proof follows. Outcome classification alone proves no death.
156
151
 
157
152
  On resume (compaction or a new session), run `devrites-engine dispatch <slug>
158
153
  status`, `parallel status`, and `claim list` before any dispatch. A read-only
159
154
  wave whose handles this session cannot query: `abandon` it, record each unreturned
160
- role `gap`, and re-dispatch fresh on the current digest; its late returns are
161
- `stale`. A writer keeps its claim and lease — no relaunch on those paths until the
162
- claim is released or its holder is proven terminal. For an unqueryable writer,
163
- `claim list` showing its claim `dead` (the engine proved the holding session
164
- exited on this host), or `claim list --all --session <id>` showing it `released`
165
- (bare `list` only counts released rows), is that proof: `abandon` the wave, record the
166
- role `gap`, claim the paths, and re-dispatch without waiting on the launching
167
- session. `live` or `expired` stays held. A wright that never returned an
155
+ role `gap`, and re-dispatch under a fresh wave ID on the current digest; its late
156
+ returns are `stale`. A writer retains claim/lease: no relaunch under a fresh wave,
157
+ same session, or expired TTL until release or proven termination. For an
158
+ unqueryable writer, `claim list` `dead` proves its holding session exited on this
159
+ host; `claim list --all --session <id>` shows `released` (bare `list` counts it).
160
+ After that proof, `dispatch <slug> abandon --wave <w> --release --reason <reason>`
161
+ stamps `terminal_at` even without a claim, not a return. Record `gap`, reclaim
162
+ paths, and re-dispatch. `live`/`expired` stays held; cancellation acknowledgement,
163
+ timeout, ordinary abandonment, or replacement cannot prove writer death.
164
+ A wright that never returned an
168
165
  admitted result leaves unadmitted bytes: task-path changes since its pre-dispatch
169
166
  `git diff --name-only` baseline are never cited as built nor discarded, and are
170
167
  named in the re-dispatch contract; changes outside task paths stop for the human
171
168
  (Converge side: [`rite-converge`](../../rite-converge/SKILL.md)).
172
169
 
170
+ Finalization settles every launched role, including proof/custom/writer roles.
171
+ Abandoned proof/reviewer replacement needs a newer settled account, same canonical
172
+ phase/role/exact unordered slice set, and distinct handle. Writer termination
173
+ admits no bytes and bypasses no candidate, admission, review or proof gate.
174
+
173
175
  ## Scale limits
174
176
 
175
177
  The role table bounds rosters. Use up to ten concurrent read-only reviewers,
@@ -69,6 +69,9 @@ incomplete, stale or human-blocked future work is a planning/repair/blocked
69
69
  opportunity, not a fatal pool failure. Retain every readiness reason: fixing stale
70
70
  bindings does not waive a coexisting human/access/safety gate. Re-Vet affected
71
71
  predecessor assumptions, then record current bindings; never auto-refresh a digest.
72
+ Read archived predecessors in place through the engine's referenced read-only
73
+ readiness lookup. Never copy an archive into live `work/` merely to read/hash it:
74
+ that can resurrect stale controller leases and claims.
72
75
 
73
76
  ## Recover avoidable serialization
74
77
 
@@ -106,13 +109,28 @@ reslicing unchanged work.
106
109
 
107
110
  ## Continuous global frontier
108
111
 
109
- At entry, each landing, planning/review return and before any wait or final reply:
112
+ Autocomplete executes this bounded pass at every phase entry (including cold
113
+ Prove/Vet/Review), before phase-local recovery, on each landing/planning/review
114
+ return, and immediately before a native wait or final reply. A nested phase
115
+ returns scheduling to Autocomplete; its source-local phase/recovery return cursor
116
+ and pending native reviewer handles remain intact. This is not a second phase
117
+ controller or a persistent frontier artifact.
110
118
 
111
119
  1. Re-read controller lease, per-source state/questions/readiness and authorized
112
- sequence. Scan all stages, not only the owner's next local slice. While writers
113
- run, root advances authorized Spec → Clarify → Temper → Define/Plan → Vet,
114
- including narrow repair/re-Vet of prepared targets, under unchanged approval
115
- and safety rules. Missing human authority blocks that target, not safe siblings.
120
+ sequence. Examine every recorded authorized source once per pass, not only
121
+ the owner's next local slice or first blocked child. Prepare absent targets
122
+ through authorized native Spec → Clarify → Temper → Define/Plan → Vet; repair
123
+ and re-Vet current readiness of prepared targets now, not after owner Seal.
124
+ Assess actual source gates, claims and explicit planning/Build restrictions
125
+ before routing. Owner-local red/human/access gates withhold that owner or its
126
+ actual consumers, not independent authorized planning; true whole-run safety,
127
+ access and claim constraints still bind. Retain concrete actions or blockers
128
+ in existing source artifacts under normal write authority.
129
+ Yield a child at its pending reviewer/phase boundary back to this controller;
130
+ never recursively wait for child completion while parent returns are pending.
131
+ Reconcile available parent returns before another pass. A native wait is
132
+ justified only after concrete authorized actions/blockers across the pool
133
+ have been examined; reading later phase skills is not pending Plan/Vet work.
116
134
  If an explicit/AFK capacity change differs from retained capacity, reconcile it
117
135
  before selection using `parallel add --root <repo> --slug <controller> --cap N --json -`
118
136
  with stdin `[]`. This changes capacity only, not workers or a complete lease's
@@ -137,11 +155,14 @@ At entry, each landing, planning/review return and before any wait or final repl
137
155
  Unsupported isolation uses truthful serial owner dispatch and ordinary ordered
138
156
  handoff, never early same-tree foreign Build or concurrent same-worktree writers.
139
157
  4. Launch every selected native writer before waiting on any; keep scheduling
140
- planning and independent review while they run. Land each individually green
141
- sibling through Build review/proof and `parallel integrate --slice <key>`;
142
- refill immediately from the whole authorized pool. A red sibling repairs in
143
- place and holds its slot/paths; it does not delay independent green landings.
144
- Never satisfy a producer edge on writer return or green-but-unlanded work.
158
+ planning and independent review while they run, including while the owner
159
+ awaits Prove/Vet/Review accounts. Apply the protected window below before any
160
+ landing: defer control mutations while frozen validation is pending. Outside
161
+ that window, land each individually green sibling through Build review/proof
162
+ and `parallel integrate --slice <key>`; refill immediately from the whole pool.
163
+ A red sibling repairs in place and holds its slot/paths; it does not delay
164
+ independent safe landings. Never satisfy a producer edge on writer return or
165
+ green-but-unlanded work.
145
166
  After worker-bound review/proof and source bookkeeping finish, prune only
146
167
  verified clean integrated checkouts with `parallel prune --root <repo>
147
168
  --slug <controller>`. Retain transfer refs/lease identities; dirty or ignored
@@ -182,8 +203,17 @@ controller bookkeeping nor sibling proof closes a child's acceptance.
182
203
 
183
204
  Prove/Polish/Review/Seal remain per workspace with fresh candidate bindings. Shared
184
205
  durable Polish outputs serialize; source changes invalidate affected evidence.
185
- Before any non-lease product correction, shared durable Polish write or control
186
- checkpoint, freeze new writer admissions, drain/reconcile retained writers, land
206
+ From candidate freeze/validator dispatch through account admission, preserve the
207
+ exact candidate, control tip and all consumed metadata/validator inputs. Independent
208
+ authorized planning and isolated writers may proceed only without changing those
209
+ inputs or shared runtime resources. Defer integration, checkpoints, cross-source
210
+ corrections and consumed-artifact edits until the window closes; retained green
211
+ workers keep their identities/slots. Recheck candidate, control-tip identity and
212
+ consumed inputs before accepting each account; drift invalidates affected accounts
213
+ and requires native fresh validation, never acceptance against a moving tip.
214
+ After any protected validation window closes, before a non-lease product correction,
215
+ shared durable Polish write or control checkpoint, freeze new writer admissions,
216
+ drain/reconcile retained writers, land
187
217
  safe green work and cleanup the lease. Preserve blocked work; never force-clean
188
218
  it merely to advance a phase. Perform phase-owned correction/proof/checkpoint,
189
219
  then resume the pool from new HEAD. Never accept unrelated commits as expected
@@ -192,6 +222,10 @@ ControlTip or invent phase slices. Read-only frozen proof/review and planning-on
192
222
  Normal ordered handoff reuses the same controller and prepared child cursor.
193
223
  Never archive controller/source while retained lease owns it; clean up owned
194
224
  workers first, preserving salvage and unknown outcomes.
225
+ Global scheduling is not global gating or ordered handoff. Unmet or abandoned
226
+ owner gates remain non-green: an owner request to defer obligations routes Spec
227
+ Drift Guard → Plan → affected Vet under existing authority, or retains the blocked
228
+ source. It never becomes Prove green or Seal GO merely to reach another source.
195
229
 
196
230
  Early child WIPs can interleave with parent WIPs. Parent-only Ship must not absorb
197
231
  those commits as if parent alone were sealed. Deferred release waits for every
@@ -143,10 +143,14 @@ deployment, or anything the user did not start with this command.
143
143
  reconfirmation otherwise), the re-hashed plan digest, the task closure, the current
144
144
  plan revision, no later stop, and for PR or branch scope a checked-out `HEAD` equal
145
145
  to the pinned head. Record it in `approval.json`.
146
- 2. Execute the approved DAG with [`overhaul-implementer`](../../../.codex/agents/overhaul-implementer.toml): one
147
- writer per path, independent frontend and backend tasks concurrently, TDD per
148
- [`references/repair-and-measurement.md`](references/repair-and-measurement.md).
149
- Admit patches only when observed changed paths equal the contract.
146
+ 2. Execute the approved DAG with [`overhaul-implementer`](../../../.codex/agents/overhaul-implementer.toml)
147
+ and TDD per [`references/repair-and-measurement.md`](references/repair-and-measurement.md).
148
+ Serialize shared-repository target writes, even for independent frontend/backend
149
+ tasks: whole-repository before-capture → target writer stops → full delta →
150
+ receipt admission, then start the next writer. Preserve one owner per physical
151
+ task path; admit only observed changes within the approved contract. Read-only
152
+ reviews and verification may overlap on immutable inputs when resources permit
153
+ ([observation windows](references/orchestration.md#single-writer-budgets-and-cancellation)).
150
154
  3. Verify each fix independently (`repair-verify`), test the assembled candidate,
151
155
  remeasure approved targets, rescore, publish, and follow the convergence table in
152
156
  [`references/lifecycle.md`](references/lifecycle.md) — continuing automatically
@@ -142,9 +142,13 @@ dispatched in task-ID order; a failed or blocked task keeps its dependents block
142
142
  Order correctness and security work before dependent performance or refactor work; keep dependency migrations separate from unrelated optimizations so gains stay
143
143
  attributable; give each shared physical file, generated source, lockfile or
144
144
  interface one write owner with explicit ordering; let a shared-contract change land
145
- only with evidence from both consumers. Independent frontend and backend tasks may
146
- run concurrently. A task like "improve architecture", "optimize queries" or "add
147
- tests" with no concrete failing case and acceptance evidence is not approvable.
145
+ only with evidence from both consumers. Serialize target-mutating attempts on one
146
+ repository, including independent frontend/backend tasks: whole-repository
147
+ before-capture → target writer stops → full delta → receipt admission, then dispatch
148
+ the next writer. Read-only reviews and verification may overlap on immutable inputs
149
+ when resources permit ([observation windows](orchestration.md#single-writer-budgets-and-cancellation)).
150
+ A task like "improve architecture", "optimize queries" or "add tests" with no concrete
151
+ failing case and acceptance evidence is not approvable.
148
152
  Each task names the oracle its kind requires
149
153
  ([`repair-and-measurement.md`](repair-and-measurement.md#oracles-by-finding-kind)).
150
154
  Rejected and deferred findings stay visible and keep failing their controls.
@@ -211,9 +215,12 @@ Dispatch only the deficient areas and their dependencies: frontend deficits to t
211
215
  frontend engineer plus relevant craft, performance, security or proof specialists;
212
216
  backend deficits to the backend engineer plus data, concurrency, security or proof
213
217
  specialists; boundary deficits to both producer and consumer owners. When both sides
214
- have deficits, dispatch them concurrently. When one side alone is affected, do not
215
- spawn an idle other-side repair to manufacture overlap; reuse unaffected evidence
216
- only after a recorded freshness check. Final cross-lane checks stay mandatory.
218
+ have deficits, dispatch independent read-only investigation and verification
219
+ concurrently on immutable inputs where resources permit; queue shared-repository
220
+ target writes through the exclusive capture → writer stop → delta → admission
221
+ windows above. When one side alone is affected, do not spawn an idle other-side
222
+ repair to manufacture overlap; reuse unaffected evidence only after a recorded
223
+ freshness check. Final cross-lane checks stay mandatory.
217
224
 
218
225
  Each new assignment carries the previous attempt's actual evidence, current deficit
219
226
  IDs, a falsifiable hypothesis or the exact missing observation, why the next action