devrites 7.2.8 → 7.3.0

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 (330) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +1 -1
  3. package/docs/candidate-integrity.md +10 -0
  4. package/docs/cli.md +7 -1
  5. package/docs/command-map.md +5 -2
  6. package/docs/engine/commands.md +28 -4
  7. package/docs/orchestration.md +26 -13
  8. package/docs/skills.md +5 -0
  9. package/engine/internal/acceptance/cli.go +27 -26
  10. package/engine/internal/acceptance/preconditions.go +1 -1
  11. package/engine/internal/acceptance/run.go +42 -16
  12. package/engine/internal/acceptance/transcript.go +236 -45
  13. package/engine/internal/devritespaths/paths.go +16 -3
  14. package/engine/internal/gate/gate.go +6 -0
  15. package/engine/internal/lib/candidate.go +20 -7
  16. package/engine/internal/lib/candidate_coverage.go +2 -19
  17. package/engine/internal/lib/closeout.go +16 -4
  18. package/engine/internal/lib/context.go +64 -45
  19. package/engine/internal/lib/context_io.go +171 -0
  20. package/engine/internal/lib/detect.go +8 -8
  21. package/engine/internal/lib/dispatch.go +2 -0
  22. package/engine/internal/lib/packet.go +37 -7
  23. package/engine/internal/lib/packet_freeze.go +60 -12
  24. package/engine/internal/lib/packet_integrity.go +179 -0
  25. package/engine/internal/lib/perturb.go +3 -3
  26. package/engine/internal/lib/slicecheck.go +7 -1
  27. package/engine/internal/lib/taskgraph.go +20 -36
  28. package/engine/internal/lib/triggers.go +28 -29
  29. package/engine/internal/lib/workspace_pool.go +330 -0
  30. package/engine/internal/parallel/cli.go +190 -49
  31. package/engine/internal/parallel/git.go +47 -14
  32. package/engine/internal/parallel/landing.go +232 -0
  33. package/engine/internal/parallel/lease.go +97 -18
  34. package/engine/internal/parallel/ops.go +312 -155
  35. package/engine/internal/parallel/pathdisjoint.go +48 -4
  36. package/engine/internal/parallel/prune.go +133 -0
  37. package/engine/internal/parallel/repository.go +239 -0
  38. package/engine/internal/parallel/select.go +64 -42
  39. package/engine/main.go +2 -1
  40. package/pack/.claude/agents/devrites-proof-runner.md +16 -9
  41. package/pack/.claude/skills/devrites-lib/SKILL.md +2 -0
  42. package/pack/.claude/skills/devrites-lib/reference/candidate-integrity.md +7 -3
  43. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +3 -0
  44. package/pack/.claude/skills/devrites-lib/reference/parallel-workspaces.md +202 -0
  45. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +9 -12
  46. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +1 -1
  47. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +1 -1
  48. package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +18 -9
  49. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -0
  50. package/pack/.claude/skills/rite-autocomplete/SKILL.md +13 -10
  51. package/pack/.claude/skills/rite-autocomplete/reference/lookahead.md +4 -4
  52. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +13 -9
  53. package/pack/.claude/skills/rite-build/SKILL.md +13 -10
  54. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +1 -1
  55. package/pack/.claude/skills/rite-build/reference/checkpoint.md +1 -1
  56. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +57 -36
  57. package/pack/.claude/skills/rite-build/reference/phase-contract.md +8 -5
  58. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +7 -7
  59. package/pack/.claude/skills/rite-clarify/SKILL.md +2 -2
  60. package/pack/.claude/skills/rite-converge/SKILL.md +4 -4
  61. package/pack/.claude/skills/rite-define/SKILL.md +7 -3
  62. package/pack/.claude/skills/rite-define/reference/plan-template.md +4 -2
  63. package/pack/.claude/skills/rite-plan/SKILL.md +11 -8
  64. package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +9 -2
  65. package/pack/.claude/skills/rite-plan/reference/slicing.md +2 -0
  66. package/pack/.claude/skills/rite-polish/SKILL.md +3 -3
  67. package/pack/.claude/skills/rite-prove/SKILL.md +9 -5
  68. package/pack/.claude/skills/rite-resolve/SKILL.md +3 -3
  69. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +2 -0
  70. package/pack/.claude/skills/rite-review/SKILL.md +4 -3
  71. package/pack/.claude/skills/rite-review/reference/feature-scoped-review.md +2 -2
  72. package/pack/.claude/skills/rite-seal/SKILL.md +1 -1
  73. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +1 -1
  74. package/pack/.claude/skills/rite-ship/SKILL.md +2 -2
  75. package/pack/.claude/skills/rite-ship/reference/git-ship.md +2 -2
  76. package/pack/.claude/skills/rite-spec/SKILL.md +8 -5
  77. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +5 -0
  78. package/pack/.claude/skills/rite-temper/SKILL.md +3 -3
  79. package/pack/.claude/skills/rite-vet/SKILL.md +9 -5
  80. package/pack/.claude/skills/rite-vet/reference/review-axes.md +12 -5
  81. package/pack/generated/claude/agents/devrites-proof-runner.md +16 -9
  82. package/pack/generated/claude/skills/devrites-lib/SKILL.md +2 -0
  83. package/pack/generated/claude/skills/devrites-lib/reference/candidate-integrity.md +7 -3
  84. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +3 -0
  85. package/pack/generated/claude/skills/devrites-lib/reference/parallel-workspaces.md +202 -0
  86. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +9 -12
  87. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +1 -1
  88. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +1 -1
  89. package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +18 -9
  90. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -0
  91. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +13 -10
  92. package/pack/generated/claude/skills/rite-autocomplete/reference/lookahead.md +4 -4
  93. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +13 -9
  94. package/pack/generated/claude/skills/rite-build/SKILL.md +13 -10
  95. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +1 -1
  96. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +1 -1
  97. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +57 -36
  98. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +8 -5
  99. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +7 -7
  100. package/pack/generated/claude/skills/rite-clarify/SKILL.md +2 -2
  101. package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -4
  102. package/pack/generated/claude/skills/rite-define/SKILL.md +7 -3
  103. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +4 -2
  104. package/pack/generated/claude/skills/rite-plan/SKILL.md +11 -8
  105. package/pack/generated/claude/skills/rite-plan/reference/dependency-graph.md +9 -2
  106. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +2 -0
  107. package/pack/generated/claude/skills/rite-polish/SKILL.md +3 -3
  108. package/pack/generated/claude/skills/rite-prove/SKILL.md +9 -5
  109. package/pack/generated/claude/skills/rite-resolve/SKILL.md +3 -3
  110. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +2 -0
  111. package/pack/generated/claude/skills/rite-review/SKILL.md +4 -3
  112. package/pack/generated/claude/skills/rite-review/reference/feature-scoped-review.md +2 -2
  113. package/pack/generated/claude/skills/rite-seal/SKILL.md +1 -1
  114. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +1 -1
  115. package/pack/generated/claude/skills/rite-ship/SKILL.md +2 -2
  116. package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +2 -2
  117. package/pack/generated/claude/skills/rite-spec/SKILL.md +8 -5
  118. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +5 -0
  119. package/pack/generated/claude/skills/rite-temper/SKILL.md +3 -3
  120. package/pack/generated/claude/skills/rite-vet/SKILL.md +9 -5
  121. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +12 -5
  122. package/pack/generated/codex/agents/devrites-proof-runner.toml +16 -9
  123. package/pack/generated/codex/skills/devrites-lib/SKILL.md +2 -0
  124. package/pack/generated/codex/skills/devrites-lib/reference/candidate-integrity.md +7 -3
  125. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +3 -0
  126. package/pack/generated/codex/skills/devrites-lib/reference/parallel-workspaces.md +202 -0
  127. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +9 -12
  128. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +1 -1
  129. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +1 -1
  130. package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +18 -9
  131. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -0
  132. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +13 -10
  133. package/pack/generated/codex/skills/rite-autocomplete/reference/lookahead.md +4 -4
  134. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +13 -9
  135. package/pack/generated/codex/skills/rite-build/SKILL.md +13 -10
  136. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +1 -1
  137. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +1 -1
  138. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +57 -36
  139. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +8 -5
  140. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +7 -7
  141. package/pack/generated/codex/skills/rite-clarify/SKILL.md +2 -2
  142. package/pack/generated/codex/skills/rite-converge/SKILL.md +4 -4
  143. package/pack/generated/codex/skills/rite-define/SKILL.md +7 -3
  144. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +4 -2
  145. package/pack/generated/codex/skills/rite-plan/SKILL.md +11 -8
  146. package/pack/generated/codex/skills/rite-plan/reference/dependency-graph.md +9 -2
  147. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +2 -0
  148. package/pack/generated/codex/skills/rite-polish/SKILL.md +3 -3
  149. package/pack/generated/codex/skills/rite-prove/SKILL.md +9 -5
  150. package/pack/generated/codex/skills/rite-resolve/SKILL.md +3 -3
  151. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +2 -0
  152. package/pack/generated/codex/skills/rite-review/SKILL.md +4 -3
  153. package/pack/generated/codex/skills/rite-review/reference/feature-scoped-review.md +2 -2
  154. package/pack/generated/codex/skills/rite-seal/SKILL.md +1 -1
  155. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +1 -1
  156. package/pack/generated/codex/skills/rite-ship/SKILL.md +2 -2
  157. package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +2 -2
  158. package/pack/generated/codex/skills/rite-spec/SKILL.md +8 -5
  159. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +5 -0
  160. package/pack/generated/codex/skills/rite-temper/SKILL.md +3 -3
  161. package/pack/generated/codex/skills/rite-vet/SKILL.md +9 -5
  162. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +12 -5
  163. package/pack/generated/devin/agents/devrites-proof-runner.md +16 -9
  164. package/pack/generated/devin/skills/devrites-lib/SKILL.md +2 -0
  165. package/pack/generated/devin/skills/devrites-lib/reference/candidate-integrity.md +7 -3
  166. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +3 -0
  167. package/pack/generated/devin/skills/devrites-lib/reference/parallel-workspaces.md +202 -0
  168. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +9 -12
  169. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +1 -1
  170. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +1 -1
  171. package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +18 -9
  172. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -0
  173. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +13 -10
  174. package/pack/generated/devin/skills/rite-autocomplete/reference/lookahead.md +4 -4
  175. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +13 -9
  176. package/pack/generated/devin/skills/rite-build/SKILL.md +13 -10
  177. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +1 -1
  178. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +1 -1
  179. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +57 -36
  180. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +8 -5
  181. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +7 -7
  182. package/pack/generated/devin/skills/rite-clarify/SKILL.md +2 -2
  183. package/pack/generated/devin/skills/rite-converge/SKILL.md +4 -4
  184. package/pack/generated/devin/skills/rite-define/SKILL.md +7 -3
  185. package/pack/generated/devin/skills/rite-define/reference/plan-template.md +4 -2
  186. package/pack/generated/devin/skills/rite-plan/SKILL.md +11 -8
  187. package/pack/generated/devin/skills/rite-plan/reference/dependency-graph.md +9 -2
  188. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +2 -0
  189. package/pack/generated/devin/skills/rite-polish/SKILL.md +3 -3
  190. package/pack/generated/devin/skills/rite-prove/SKILL.md +9 -5
  191. package/pack/generated/devin/skills/rite-resolve/SKILL.md +3 -3
  192. package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +2 -0
  193. package/pack/generated/devin/skills/rite-review/SKILL.md +4 -3
  194. package/pack/generated/devin/skills/rite-review/reference/feature-scoped-review.md +2 -2
  195. package/pack/generated/devin/skills/rite-seal/SKILL.md +1 -1
  196. package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +1 -1
  197. package/pack/generated/devin/skills/rite-ship/SKILL.md +2 -2
  198. package/pack/generated/devin/skills/rite-ship/reference/git-ship.md +2 -2
  199. package/pack/generated/devin/skills/rite-spec/SKILL.md +8 -5
  200. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +5 -0
  201. package/pack/generated/devin/skills/rite-temper/SKILL.md +3 -3
  202. package/pack/generated/devin/skills/rite-vet/SKILL.md +9 -5
  203. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +12 -5
  204. package/pack/generated/dsh/agents/devrites-proof-runner.md +16 -9
  205. package/pack/generated/dsh/runtime/cordis.patch.yml +1 -1
  206. package/pack/generated/dsh/skills/devrites-lib/SKILL.md +2 -0
  207. package/pack/generated/dsh/skills/devrites-lib/reference/candidate-integrity.md +7 -3
  208. package/pack/generated/dsh/skills/devrites-lib/reference/parallel-dispatch.md +3 -0
  209. package/pack/generated/dsh/skills/devrites-lib/reference/parallel-workspaces.md +202 -0
  210. package/pack/generated/dsh/skills/devrites-lib/reference/standards/afk-hitl.md +9 -12
  211. package/pack/generated/dsh/skills/devrites-lib/reference/standards/agents.md +1 -1
  212. package/pack/generated/dsh/skills/devrites-lib/reference/standards/context-hygiene.md +1 -1
  213. package/pack/generated/dsh/skills/devrites-lib/reference/standards/gates.md +18 -9
  214. package/pack/generated/dsh/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -0
  215. package/pack/generated/dsh/skills/rite-autocomplete/SKILL.md +13 -10
  216. package/pack/generated/dsh/skills/rite-autocomplete/reference/lookahead.md +4 -4
  217. package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +13 -9
  218. package/pack/generated/dsh/skills/rite-build/SKILL.md +13 -10
  219. package/pack/generated/dsh/skills/rite-build/reference/afk-discipline.md +1 -1
  220. package/pack/generated/dsh/skills/rite-build/reference/checkpoint.md +1 -1
  221. package/pack/generated/dsh/skills/rite-build/reference/parallel-batch.md +57 -36
  222. package/pack/generated/dsh/skills/rite-build/reference/phase-contract.md +8 -5
  223. package/pack/generated/dsh/skills/rite-build/reference/wright-dispatch.md +7 -7
  224. package/pack/generated/dsh/skills/rite-clarify/SKILL.md +2 -2
  225. package/pack/generated/dsh/skills/rite-converge/SKILL.md +4 -4
  226. package/pack/generated/dsh/skills/rite-define/SKILL.md +7 -3
  227. package/pack/generated/dsh/skills/rite-define/reference/plan-template.md +4 -2
  228. package/pack/generated/dsh/skills/rite-plan/SKILL.md +11 -8
  229. package/pack/generated/dsh/skills/rite-plan/reference/dependency-graph.md +9 -2
  230. package/pack/generated/dsh/skills/rite-plan/reference/slicing.md +2 -0
  231. package/pack/generated/dsh/skills/rite-polish/SKILL.md +3 -3
  232. package/pack/generated/dsh/skills/rite-prove/SKILL.md +9 -5
  233. package/pack/generated/dsh/skills/rite-resolve/SKILL.md +3 -3
  234. package/pack/generated/dsh/skills/rite-resolve/reference/answer-protocol.md +2 -0
  235. package/pack/generated/dsh/skills/rite-review/SKILL.md +4 -3
  236. package/pack/generated/dsh/skills/rite-review/reference/feature-scoped-review.md +2 -2
  237. package/pack/generated/dsh/skills/rite-seal/SKILL.md +1 -1
  238. package/pack/generated/dsh/skills/rite-seal/reference/phase-contract.md +1 -1
  239. package/pack/generated/dsh/skills/rite-ship/SKILL.md +2 -2
  240. package/pack/generated/dsh/skills/rite-ship/reference/git-ship.md +2 -2
  241. package/pack/generated/dsh/skills/rite-spec/SKILL.md +8 -5
  242. package/pack/generated/dsh/skills/rite-spec/reference/state-workspace.md +5 -0
  243. package/pack/generated/dsh/skills/rite-temper/SKILL.md +3 -3
  244. package/pack/generated/dsh/skills/rite-vet/SKILL.md +9 -5
  245. package/pack/generated/dsh/skills/rite-vet/reference/review-axes.md +12 -5
  246. package/pack/generated/omp/agents/devrites-proof-runner.md +16 -9
  247. package/pack/generated/omp/commands/rite-build.md +1 -1
  248. package/pack/generated/omp/skills/devrites-lib/SKILL.md +2 -0
  249. package/pack/generated/omp/skills/devrites-lib/reference/candidate-integrity.md +7 -3
  250. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +3 -0
  251. package/pack/generated/omp/skills/devrites-lib/reference/parallel-workspaces.md +202 -0
  252. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +9 -12
  253. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +1 -1
  254. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +1 -1
  255. package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +18 -9
  256. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -0
  257. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +13 -10
  258. package/pack/generated/omp/skills/rite-autocomplete/reference/lookahead.md +4 -4
  259. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +13 -9
  260. package/pack/generated/omp/skills/rite-build/SKILL.md +13 -10
  261. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +1 -1
  262. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +1 -1
  263. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +57 -36
  264. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +8 -5
  265. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +7 -7
  266. package/pack/generated/omp/skills/rite-clarify/SKILL.md +2 -2
  267. package/pack/generated/omp/skills/rite-converge/SKILL.md +4 -4
  268. package/pack/generated/omp/skills/rite-define/SKILL.md +7 -3
  269. package/pack/generated/omp/skills/rite-define/reference/plan-template.md +4 -2
  270. package/pack/generated/omp/skills/rite-plan/SKILL.md +11 -8
  271. package/pack/generated/omp/skills/rite-plan/reference/dependency-graph.md +9 -2
  272. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +2 -0
  273. package/pack/generated/omp/skills/rite-polish/SKILL.md +3 -3
  274. package/pack/generated/omp/skills/rite-prove/SKILL.md +9 -5
  275. package/pack/generated/omp/skills/rite-resolve/SKILL.md +3 -3
  276. package/pack/generated/omp/skills/rite-resolve/reference/answer-protocol.md +2 -0
  277. package/pack/generated/omp/skills/rite-review/SKILL.md +4 -3
  278. package/pack/generated/omp/skills/rite-review/reference/feature-scoped-review.md +2 -2
  279. package/pack/generated/omp/skills/rite-seal/SKILL.md +1 -1
  280. package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +1 -1
  281. package/pack/generated/omp/skills/rite-ship/SKILL.md +2 -2
  282. package/pack/generated/omp/skills/rite-ship/reference/git-ship.md +2 -2
  283. package/pack/generated/omp/skills/rite-spec/SKILL.md +8 -5
  284. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +5 -0
  285. package/pack/generated/omp/skills/rite-temper/SKILL.md +3 -3
  286. package/pack/generated/omp/skills/rite-vet/SKILL.md +9 -5
  287. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +12 -5
  288. package/pack/generated/pi/agents/devrites-proof-runner.md +16 -9
  289. package/pack/generated/pi/prompts/rite-build.md +1 -1
  290. package/pack/generated/pi/skills/devrites-lib/SKILL.md +2 -0
  291. package/pack/generated/pi/skills/devrites-lib/reference/candidate-integrity.md +7 -3
  292. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +3 -0
  293. package/pack/generated/pi/skills/devrites-lib/reference/parallel-workspaces.md +202 -0
  294. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +9 -12
  295. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +1 -1
  296. package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +1 -1
  297. package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +18 -9
  298. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -0
  299. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +13 -10
  300. package/pack/generated/pi/skills/rite-autocomplete/reference/lookahead.md +4 -4
  301. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +13 -9
  302. package/pack/generated/pi/skills/rite-build/SKILL.md +13 -10
  303. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +1 -1
  304. package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +1 -1
  305. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +57 -36
  306. package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +8 -5
  307. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +7 -7
  308. package/pack/generated/pi/skills/rite-clarify/SKILL.md +2 -2
  309. package/pack/generated/pi/skills/rite-converge/SKILL.md +4 -4
  310. package/pack/generated/pi/skills/rite-define/SKILL.md +7 -3
  311. package/pack/generated/pi/skills/rite-define/reference/plan-template.md +4 -2
  312. package/pack/generated/pi/skills/rite-plan/SKILL.md +11 -8
  313. package/pack/generated/pi/skills/rite-plan/reference/dependency-graph.md +9 -2
  314. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +2 -0
  315. package/pack/generated/pi/skills/rite-polish/SKILL.md +3 -3
  316. package/pack/generated/pi/skills/rite-prove/SKILL.md +9 -5
  317. package/pack/generated/pi/skills/rite-resolve/SKILL.md +3 -3
  318. package/pack/generated/pi/skills/rite-resolve/reference/answer-protocol.md +2 -0
  319. package/pack/generated/pi/skills/rite-review/SKILL.md +4 -3
  320. package/pack/generated/pi/skills/rite-review/reference/feature-scoped-review.md +2 -2
  321. package/pack/generated/pi/skills/rite-seal/SKILL.md +1 -1
  322. package/pack/generated/pi/skills/rite-seal/reference/phase-contract.md +1 -1
  323. package/pack/generated/pi/skills/rite-ship/SKILL.md +2 -2
  324. package/pack/generated/pi/skills/rite-ship/reference/git-ship.md +2 -2
  325. package/pack/generated/pi/skills/rite-spec/SKILL.md +8 -5
  326. package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +5 -0
  327. package/pack/generated/pi/skills/rite-temper/SKILL.md +3 -3
  328. package/pack/generated/pi/skills/rite-vet/SKILL.md +9 -5
  329. package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +12 -5
  330. package/package.json +1 -1
@@ -0,0 +1,202 @@
1
+ # One controller, multiple workspace sources
2
+
3
+ > Root-only: not inlined in --role bundles. Every phase uses target binding below;
4
+ > Autocomplete owns the global workflow. Standalone Build stays source-local.
5
+
6
+ ## Phase target binding
7
+
8
+ For every lifecycle phase and cold handoff, resolve the existing explicit target
9
+ or caller-supplied SOURCE slug first; use `.devrites/ACTIVE` only when neither is
10
+ supplied. All workspace context, cursor, questions, artifact reads/writes, approval,
11
+ candidate bindings and proof belong to that source. A missing source artifact
12
+ routes its prerequisite; it never falls back to another workspace's artifacts.
13
+ An explicit valid workspace does not require ACTIVE to name it or to exist.
14
+
15
+ Carry that source through Spec → Clarify → Temper → Define/Plan → Vet and later
16
+ Build/Converge/Prove/Polish/Review/Seal/Ship entrypoints. Use existing slug arguments
17
+ where supported, including `context <source>` and `handoff <source> --resume`.
18
+ For qid-only `state resolve` (including `--drop`/`--batch`), keep its existing argv
19
+ and bind the call with `DEVRITES_ROOT=<absolute-control>/.devrites` and
20
+ `DEVRITES_WORKSPACE=<absolute-control>/.devrites/work/<source>`. The override is a
21
+ workspace path, not a slug. Apply this environment only to that invocation;
22
+ neither a fabricated resolver slug argument nor process-global environment
23
+ mutation is routing. Use the same source binding for nested recommended answers.
24
+
25
+ Preparing or running an admitted future source preserves the ordered owner's
26
+ ACTIVE and retained writer/controller. Ordinary standalone Spec still sets ACTIVE;
27
+ explicit `--lookahead` still stops at planning/Vet and never becomes a Build root.
28
+ Target binding changes neither phase approval nor Ship authority.
29
+
30
+ ## Authority and admission
31
+
32
+ Resolve one controlling root and ordered lifecycle owner. `.devrites/ACTIVE` stays
33
+ on that owner until normal sequence handoff; scheduling a future slice does not
34
+ advance ACTIVE or create a second Build root. One repository-global lease owns
35
+ control-tip mutations. Resume its controller, source identities and retained
36
+ handles before admitting more work; status queried via ACTIVE/source reports the
37
+ actual retained controller even after ordered handoff. Another retained
38
+ controller is not bypassable; no extra cursor pointer is needed.
39
+
40
+ The existing `--parallel N` is one global active-writer cap across all sources:
41
+ explicit invocation value, else AFK `max_parallel`, else retained lease capacity
42
+ on resume, else 10. Explicit 1 means one writer, not one writer per workspace.
43
+ Review queues obey host capacity and existing reviewer caps separately; they never
44
+ erase required specialist accounts.
45
+
46
+ Discover only recorded forward sequence continuations through `sequence_parent`
47
+ and the parent's recorded objectives. Honor `continue_sequence: false`, opening
48
+ budget and human bounded requests. Charge each opening once; reuse prepared
49
+ children and their cursor rather than re-specifying or charging them again.
50
+ An unrelated directory or user-mentioned slug is not automatic enrollment.
51
+ Respect workspace claims: a live lookahead owner retains its artifacts until
52
+ release/terminal reconciliation. Root alone writes workspace artifacts; leaves
53
+ never write `.devrites/**`.
54
+
55
+ For each future slice, native Plan/Vet must have CURRENT approved readiness,
56
+ a complete bound contract and explicit `Workspace dependencies` under
57
+ [canonical slice grammar](workspace-artifact-schema.md#canonical-slice-grammar).
58
+ Plan/Vet checks assumptions, consumed interfaces, shared runtime resources and
59
+ independent slice proof. `none` is a native declaration, never an inference from
60
+ path disjointness, local `Dependencies: none`, planning digests or a green branch.
61
+ Only durably BUILT/integrated producer checkpoints satisfy qualified dependencies;
62
+ validate each producer reference and graph, including safely archived predecessors.
63
+ Cycles, unknown/malformed references and shared unisolated runtime withhold unsafe
64
+ candidates. A waiting producer withholds only its consumers, not unrelated work.
65
+
66
+ Missing declarations in legacy future plans need narrow Plan repair + affected
67
+ Vet before early admission; existing local/standalone plans remain valid. Absent,
68
+ incomplete, stale or human-blocked future work is a planning/repair/blocked
69
+ opportunity, not a fatal pool failure. Retain every readiness reason: fixing stale
70
+ bindings does not waive a coexisting human/access/safety gate. Re-Vet affected
71
+ predecessor assumptions, then record current bindings; never auto-refresh a digest.
72
+
73
+ ## Recover avoidable serialization
74
+
75
+ At native Plan/Vet, and when a full global scan leaves writer capacity unused,
76
+ audit the remaining frontier before treating serialization as irreducible:
77
+
78
+ 1. Name what each edge consumes: product/interface, integration evidence, shared
79
+ writable path, runtime resource or explicit authority. Sequence/release order
80
+ alone is not a product dependency; current recorded prohibitions still bind.
81
+ 2. Recut unstarted work only where an accepted vertical capability is functional,
82
+ independently provable and rollbackable against an already real contract.
83
+ Keep producer edges on actual consumers and dependent integration/proof.
84
+ Consolidate hub edits in their real producer; worktrees alone do not isolate
85
+ shared files, databases, ports, credentials or measurement windows.
86
+ 3. Root routes a concrete opportunity through native Plan and the canonical
87
+ [Reslice classifier](standards/acceptance-preserving-reslice.md), preserving
88
+ every acceptance meaning, prohibition, semantic link and proof obligation.
89
+ Carry the blocked edge/resource and proposed independent cut into the drafter
90
+ packet. Invalidate readiness, obtain affected Vet, then reselect; a proposed
91
+ split or green branch is not admission authority.
92
+ 4. Freeze admissions to affected sources during repair. Preserve built and leased
93
+ slice identities/contracts; drain/reconcile affected workers before publishing
94
+ a repair that changes their inputs. Unrelated source planning/writers continue.
95
+ 5. Preserve human/safety/access/resource gates and explicit planning-only bounds.
96
+ Classify any authority change through its owning decision; never replace an
97
+ explicit prohibition with inferred permission or create placeholder slices.
98
+
99
+ Completion: either admit a currently approved independent cut, or retain
100
+ `Serial rationale: <consumed contract/resource/authority; next unblock event>`
101
+ in affected `tasks.md` slice blocks only when normal Plan write authority permits; otherwise
102
+ report the existing blocker without planning writes. Revisit after relevant
103
+ inputs change, not merely because capacity remains unused. Target width never
104
+ justifies extra architecture, acceptance loss, premature proof or repeatedly
105
+ reslicing unchanged work.
106
+
107
+ ## Continuous global frontier
108
+
109
+ At entry, each landing, planning/review return and before any wait or final reply:
110
+
111
+ 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.
116
+ If an explicit/AFK capacity change differs from retained capacity, reconcile it
117
+ before selection using `parallel add --root <repo> --slug <controller> --cap N --json -`
118
+ with stdin `[]`. This changes capacity only, not workers or a complete lease's
119
+ status. A decrease below active count refuses: pause admissions and drain to
120
+ the requested count, then retry; never cancel workers to meet a lower cap.
121
+ A pending landing is recovery, not free capacity: retry the exact recorded
122
+ integrate before admission; unrelated HEAD/ref movement remains blocked.
123
+ 2. Query the mixed pool in stable sequence order, controller first (the ordered
124
+ ACTIVE owner may now differ):
125
+ `devrites-engine parallel select --root <repo> --slug <controller> --from-plan --workspaces <controller,authorized-source,...> --cap N`.
126
+ `--workspaces` is an internal data-source parameter, not a user feature flag.
127
+ Read all notices and route repair/waits to their source. Existing running slots
128
+ and paths seed selection globally. Zero new picks with live writers means keep
129
+ planning/reviewing or wait, not Prove for those unfinished sources.
130
+ 3. Preflight selected slices against their SOURCE workspace with Build's normal
131
+ slice/readiness/precondition, exact-path and runtime-isolation gates. Early
132
+ foreign Build always uses isolated workers. For cap>1 on a capable host,
133
+ isolate even the first lone local writer, so later sources can refill. Persist
134
+ `--cap N` on create/add. With a retained lease, add even one pick; a complete
135
+ retained lease can reopen only at unchanged control tip. After cleanup,
136
+ create a new batch from current control. Never start another controller.
137
+ Unsupported isolation uses truthful serial owner dispatch and ordinary ordered
138
+ handoff, never early same-tree foreign Build or concurrent same-worktree writers.
139
+ 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.
145
+ After worker-bound review/proof and source bookkeeping finish, prune only
146
+ verified clean integrated checkouts with `parallel prune --root <repo>
147
+ --slug <controller>`. Retain transfer refs/lease identities; dirty or ignored
148
+ data stays with its reported recovery path and does not justify forced deletion.
149
+
150
+ ## Identity, dispatch and proof
151
+
152
+ Mixed JSON uses `{"slices":[{"id":"SLICE-001","paths":["src/child.go"],"workspace":"child"}]}`.
153
+ Omitted workspace means controller; explicit controller normalizes to that lane.
154
+ Lease targeting uses bare `SLICE-001` only for controller, `child/SLICE-001` for
155
+ foreign sources. Duplicate local IDs across sources remain distinct typed keys.
156
+ Use the lease's worktree/branch paths, not hand-built namespaces.
157
+
158
+ Controller slug owns `parallel create/add/status/record-green/integrate/prune/cleanup`.
159
+ SOURCE slug owns `context`, `packet`, `dispatch open/start/return`, slice checks,
160
+ candidate freeze, proof, repair, evidence and bookkeeping. Open source-local waves
161
+ with local roles `slice-wright.<SLICE-ID>` and local `--slice <SLICE-ID>`; no slash
162
+ in a dispatch role. Start every source wave before first wait. Root explicitly
163
+ supplies source slug, absolute worktree cwd, base and exact native profile to every
164
+ writer/reviewer. Writer profile is `devrites-slice-wright`, never a suffixed or
165
+ generic profile; reviewers use exact workflow-named `devrites-*` profiles in fresh
166
+ read-only context. Labels/handles are not proof of native profile selection.
167
+ Linked worktrees use `DEVRITES_ROOT=<control>/.devrites` for metadata, not source cwd.
168
+
169
+ Run controller/global commands in a per-invocation environment without inherited
170
+ worker `DEVRITES_WORKSPACE`; source calls use explicit source slug and control
171
+ `DEVRITES_ROOT` in a source-bound environment, never another source's override.
172
+ Never mutate process-global environment or ACTIVE to route a call.
173
+
174
+ Freeze/review/prove each source slice in its own worktree/candidate window under
175
+ Build's full required inventory, affected rechecks and repair rules. After landing,
176
+ write `WIP(<source>):` with human summary, union only that source's paths into its
177
+ manifest, persist checked BUILT/evidence and charge once there. Run source-local
178
+ regression checks on resume and ratchet only after durable green advance. Neither
179
+ controller bookkeeping nor sibling proof closes a child's acceptance.
180
+
181
+ ## Lifecycle closeout and Ship
182
+
183
+ Prove/Polish/Review/Seal remain per workspace with fresh candidate bindings. Shared
184
+ 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
187
+ safe green work and cleanup the lease. Preserve blocked work; never force-clean
188
+ it merely to advance a phase. Perform phase-owned correction/proof/checkpoint,
189
+ then resume the pool from new HEAD. Never accept unrelated commits as expected
190
+ ControlTip or invent phase slices. Read-only frozen proof/review and planning-only
191
+ `.devrites` repair may overlap writers; none may mutate the leased product/control tip.
192
+ Normal ordered handoff reuses the same controller and prepared child cursor.
193
+ Never archive controller/source while retained lease owns it; clean up owned
194
+ workers first, preserving salvage and unknown outcomes.
195
+
196
+ Early child WIPs can interleave with parent WIPs. Parent-only Ship must not absorb
197
+ those commits as if parent alone were sealed. Deferred release waits for every
198
+ participating sequence member's final proof/Review/Seal, uses engine-generated
199
+ release union manifest and re-proves affected cross-workspace acceptance. Disclose
200
+ all participating checkpoints in the exact Git plan, verify unchanged candidate
201
+ and staged bytes, then require fresh literal `GO` plus native approval. Parallelism
202
+ grants no push/tag/deploy authority and never broadens an earlier Ship approval.
@@ -118,18 +118,15 @@ candidate manifest to cover the whole recorded chain — run
118
118
  `/rite-autocomplete` recovers agent-owned Seal `NO-GO` per
119
119
  [stop-conditions.md](../../../rite-autocomplete/reference/stop-conditions.md), not a handoff.
120
120
 
121
- `max_parallel` is the unattended default batch cap only when this invocation does
122
- not contain `--parallel N`; `1` forces the serial cycle only in that default
123
- case. An exact `--parallel N` on `/rite-autocomplete` or `/rite-build` is the
124
- batch cap for this run: do not consult leftover sentinel `max_parallel`, and do
125
- not treat `max_parallel: 1` as serial. `/rite-autocomplete --parallel N` writes
126
- or replaces only that field so later ticks keep the cap; `/rite-build --parallel N`
127
- wins for that invocation without rewriting the sentinel. Never write `max_slices`
128
- from `--max-slices`. **Failing case:** `/rite-autocomplete --parallel 5` honors a
129
- leftover `max_parallel: 1` and stays serial.
130
- Unattended runs take the largest eligible set ≤ that cap and recompute after
131
- every completed round (serial slice or parallel integrate)
132
- ([parallel-batch.md § Dynamic selection and re-batching](../../../rite-build/reference/parallel-batch.md#dynamic-selection-and-re-batching)).
121
+ `max_parallel` is the unattended default writer cap when this invocation omits
122
+ `--parallel N`; explicit N wins and Autocomplete writes/replaces only that field.
123
+ Build's explicit flag wins without rewriting the sentinel. Never write
124
+ `max_slices` from `--max-slices`. Autocomplete uses one cap across all authorized
125
+ sources, including explicit 1, under the shared root-only
126
+ [`workspace controller`](../parallel-workspaces.md); standalone Build stays local.
127
+ Unattended runs recompute after each landing and planning/review return, not only
128
+ after a batch completes. **Failing case:** `/rite-autocomplete --parallel 5`
129
+ honors leftover `max_parallel: 1`, or grants five writers per workspace.
133
130
 
134
131
  ## Unattended resource envelope
135
132
 
@@ -72,7 +72,7 @@ Only that bounded writer may edit its exact project-relative source/test paths;
72
72
  workspace writes, scope widening, or second writer. Root remains source/test nonwriter.
73
73
  This exception grants no additional tools, permissions, phase, agent-launch, or Git authority.
74
74
 
75
- Isolated-worktree pilot only under [`wright-dispatch.md`](../../../rite-build/reference/wright-dispatch.md#isolated-writer-worktree-pilot): one writer, committed/clean baseline, non-submodule parent, exact transfer commit, candidate reconciliation — never parallel writers nor weaker exact-path admission. Root may materialize only exact Vet-ready workflow-artifact paths per [`workflow-artifacts.md`](workflow-artifacts.md) — not a writer dispatch or candidate mutation.
75
+ Isolated-worktree pilot follows [`wright-dispatch.md`](../../../rite-build/reference/wright-dispatch.md#isolated-writer-worktree-pilot); sanctioned parallel work follows [`parallel-batch.md`](../../../rite-build/reference/parallel-batch.md) and Autocomplete's shared [`workspace controller`](../parallel-workspaces.md), never same-tree co-writers or weaker exact-path admission. Root may materialize only exact Vet-ready workflow-artifact paths per [`workflow-artifacts.md`](workflow-artifacts.md) — not a writer dispatch or candidate mutation.
76
76
 
77
77
  Each job gets objective/exclusions, exact paths/immutable candidate, rubric/result shape, a **stop condition** (when to return), and the exact result shape; a dispatch missing them is malformed and re-issued. Briefs MUST NOT seed verdict/severity cap/conclusion/suppression. Results state status/scope, outcome, commands/escalation; wright adds paths, changed files, gates, stood decisions; results never widen scope.
78
78
 
@@ -47,7 +47,7 @@ Required review rosters and final proof remain. Preserve protected history uncha
47
47
  a compact current view references originals without omitting active requirements.
48
48
 
49
49
  **Compaction fallback:** after compaction or a resumed session, always run
50
- `devrites-engine handoff [slug] --resume` first (slug from `.devrites/ACTIVE`) — one
50
+ `devrites-engine handoff <source> --resume` first for the selected source per [phase target binding](../parallel-workspaces.md#phase-target-binding) — one
51
51
  deterministic resume record reduced from durable artifacts (cursor, `awaiting_human`,
52
52
  open `questions.md` gates, the `gates.md` reduction with unmet/stale ids,
53
53
  `decisions.md` dead ends, in-flight dispatch waves, and the read-next order over
@@ -65,11 +65,18 @@ their optional `Run at` cell, writing the same transcripts.
65
65
  Execution contract: the command runs through the platform shell in the named
66
66
  directory with a bounded timeout; pass requires exit 0 **and** output matching
67
67
  EXPECT. Without `--transcripts`, output is captured but never persisted, only its
68
- digest. `--transcripts` writes one file per executed or reused gate under
69
- `references/gates/<gate-id>/`. Each file holds the command, cwd, attempt, times,
70
- exit, EXPECT verdict, the candidate digest read before and after the run, and the
71
- output with known credential shapes masked and capped at 1 MiB. Its
72
- `OUTPUT_SHA256` equals the ledger evidence digest.
68
+ digest. `--transcripts` atomically writes a private v2 executed record under
69
+ `references/gates/<gate-id>/`, or returns a verified original record for reuse
70
+ without rewriting its historical candidate labels. Metadata and output mask
71
+ known credential shapes; output is capped at 1 MiB. `DEFINITION_SHA256` binds the
72
+ oracle, `OUTPUT_SHA256`/`OUTPUT_BYTES` describe original output, and the final
73
+ `TRANSCRIPT_SHA256` hashes all preceding record bytes for drift detection.
74
+ Do not rehash redacted/truncated output as though it were original output.
75
+ Reuse requires a complete passing executed origin matching current definition,
76
+ output identity and declared inputs, plus current command approval. Missing,
77
+ corrupt, legacy v1 or reuse-only records rerun only affected approved checks;
78
+ missing approval blocks even when an old checkbox remains met. A record checksum
79
+ detects drift; it is not a signature or proof of honest execution.
73
80
 
74
81
  After Vet READY the runnable set is fixed: converting a runnable gate to manual,
75
82
  loosening EXPECT, changing CHECK or CWD, adding or narrowing INPUTS, or removing
@@ -115,10 +122,12 @@ devrites-engine gates attest <slug> <id> <note> record human evidence on a man
115
122
  devrites-engine gates abandon <slug> <id> <why> record a terminal ABANDON handoff
116
123
  ```
117
124
 
118
- Run/reverify hold the feature lock, re-read the ledger before writeback, and
119
- discard a result whose gate definition moved mid-run. Reverify is the
120
- suspicion-killer: when any doubt exists about prior passes, rerun it rather
121
- than trusting recorded evidence.
125
+ Run/reverify serialize execution, origin lookup and transcript publication under
126
+ the gates lock; the feature lock is held only for input acquisition and ledger
127
+ writeback. Results whose gate definition moved are discarded. Unchanged declared
128
+ inputs may reuse proof even under reverify; a reused result is never execution.
129
+ If non-file prerequisites changed or proof is doubtful, invalidate affected
130
+ automatic evidence through the single-writer protocol before approved rerun.
122
131
 
123
132
  ## Oracle quality (`gates lint`)
124
133
 
@@ -223,6 +223,7 @@ SLA: <15m | 4h | 24h | none>
223
223
  Checkpoint: <question + why it needs unavailable pre-code evidence or action-time approval | none>
224
224
  Dependencies: <SLICE-### (via <interface it consumes>) list | none>
225
225
  depends_on: [<SLICE-### IDs>]
226
+ Workspace dependencies: <none | comma-separated <workspace-slug>/SLICE-### producer refs>
226
227
  Consumes / Produces: <interfaces read and exposed>
227
228
  Known-Gotchas: <ordering hazards and framework footguns | none>
228
229
  Prior-slice learnings: <constraints learned earlier | none>
@@ -245,6 +246,15 @@ Done condition: <checkable, exhaustive completion criterion>
245
246
 
246
247
  `depends_on` is the machine-readable mirror of `Dependencies`; keep the sets
247
248
  identical and cycle-free. Each dependency names what crosses it (`check task-graph` advises).
249
+ `Workspace dependencies` records cross-workspace producer prerequisites, separate
250
+ from local `Dependencies`/`depends_on`. Define/Plan writes it after native interface,
251
+ assumption, runtime-resource and proof-independence review; Vet approves the current
252
+ bound declaration. `none` is explicit, not inferred from paths or local edges.
253
+ Only durably BUILT/integrated producer checkpoints satisfy refs, including valid
254
+ archived predecessors; unknown/malformed refs or cycles withhold unsafe work.
255
+ Missing field on a legacy future plan requires narrow Plan/Vet repair before
256
+ early admission, not rejection of existing local/standalone execution. The global
257
+ controller procedure lives only in [`parallel-workspaces.md`](parallel-workspaces.md).
248
258
  Define and `/rite-plan` repair write `Prior-slice learnings`, folding Build's
249
259
  `decisions.md` carry-forward constraints; Build never edits `tasks.md`. `Gate`, `SLA`, and `Checkpoint` are required for HITL
250
260
  slices; use `none` when they do not apply. Complexity above 3 triggers reslicing
@@ -5,7 +5,7 @@ argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full]
5
5
  user-invocable: true
6
6
  ---
7
7
 
8
- <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"],"lookahead":["rite-autocomplete/reference/lookahead.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md","rite-autocomplete/reference/lookahead.md"]} -->
8
+ <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/parallel-workspaces.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"],"lookahead":["rite-autocomplete/reference/lookahead.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/parallel-workspaces.md","devrites-lib/reference/standards/workflow-artifacts.md","rite-autocomplete/reference/lookahead.md"]} -->
9
9
  > Read-set manifest: `devrites-engine context --skills-root .pi/skills <slug> --phase autocomplete` 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
 
@@ -86,7 +86,7 @@ With `--lookahead` (trigger `lookahead`), follow
86
86
  [`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
87
87
  next sequence continuation through Vet in a second session, then stop.
88
88
 
89
- 1. **Orient and parse.** Resolve the explicit or active slug; when a workspace exists,
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
91
  Before honoring `blocked` with terminal `next_action`,
92
92
  reconcile retained consumptive evidence and fingerprint attempts from
@@ -96,7 +96,7 @@ next sequence continuation through Vet in a second session, then stop.
96
96
  Reconstruct a missing return cursor only from
97
97
  the current phase and exact approved action in `test-plan.md`/evidence, never
98
98
  from chat. After compaction or a resumed session, always run `devrites-engine
99
- handoff <slug> --resume` first (slug from `.devrites/ACTIVE`) and open only the
99
+ handoff <source> --resume` first for that selected source and open only the
100
100
  `read_next` artifacts it names, per [`context-hygiene.md`](../devrites-lib/reference/standards/context-hygiene.md) § Compaction fallback.
101
101
  Normalize current arguments to idea, `ship_preflight: yes|no`,
102
102
  `max_slices: unlimited`, `parallel: N|default`, `profile: standard|full`,
@@ -118,13 +118,16 @@ next sequence continuation through Vet in a second session, then stop.
118
118
  `/rite-build` batch loop → `/rite-prove` → `/rite-polish` →
119
119
  `/rite-review` → `/rite-seal`. Read and execute each skill; durable files, not
120
120
  chat, carry state. Apply the mutable post-vet budget before first Build.
121
- Build uses `parallel select --from-plan` (cap: explicit `--parallel N`, else
122
- sentinel `max_parallel`, else 10), refilling per landing until none pending;
123
- a one-slice round is serial for that round only; reselect afterward. Host
124
- isolation may force serial. If `--parallel N` is explicit,
125
- pass it into `/rite-build` and ignore leftover sentinel `max_parallel`.
126
- Otherwise pass the resolved sentinel/default cap into `/rite-build` as
127
- `--parallel N`, never bare `/rite-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.
128
131
  **Completion:** loop reaches Seal GO or persists a valid stop before any later phase.
129
132
  5. **Apply stops.** At every gate use
130
133
  [stop-conditions.md](reference/stop-conditions.md). A `blocked` label alone is not a stop condition:
@@ -19,15 +19,15 @@ Exit 3: held, stop. Re-add the same session each phase. Release with `devrites-e
19
19
 
20
20
  ## Rules
21
21
 
22
- - Never read or write `.devrites/ACTIVE`. Pass the slug to `/rite-spec <target> "<objective>"` and `devrites-engine handoff <target> --resume`.
22
+ - Preserve the ordered owner's `.devrites/ACTIVE`; bind every phase and handoff to the target per shared [phase target binding](../../devrites-lib/reference/parallel-workspaces.md#phase-target-binding).
23
23
  - After the workspace exists, run `devrites-engine state set <target> sequence_lookahead=yes`.
24
24
  - Run Spec → Clarify → Temper → Define → Plan → Vet. Define and Plan read the predecessor tree and plan. Record one assumption per predecessor interface used.
25
25
  - At Vet record `Predecessor readiness: <active-slug> <digest>` in `eng-review.md` (the `--emit-binding` hex). A later planning change blocks `DRV-GATE-READINESS-STALE`; re-vet before Build.
26
- - Predecessor still in Build or later forbids only Build, product source, tests, commits, and `.devrites/AFK`. It does not skip Define, Plan, or Vet, and is not `awaiting_human`. Acceptance, scope, and irreversible risk still stop.
26
+ - This explicit second session stays planning-only: no Build, product source/tests, commits or `.devrites/AFK` writes, even after predecessor Seal. Main controller may later consume the prepared target under [`parallel-workspaces.md`](../../devrites-lib/reference/parallel-workspaces.md); its sanctioned isolated Build is not a second same-tree writer. Acceptance, scope and irreversible risk still stop.
27
27
  - No spawn tool is not gate `access` or `awaiting_human`. Root writes Define and Plan. No Vet `READY` until those roles are admitted; else stop `running`, `next_action: /rite-vet`.
28
28
  - On every entry, re-read `state.md` and `questions.md`. Do not report a stop from chat. `continuation: clear` with `awaiting_human` is not done: fold resolved decisions into the spec, then continue. An except-principle or change-the-spec question complies: change the spec and resolve it. Ask only when the approved objective cannot comply.
29
- - Stop at Vet `READY` with `next_action: build after predecessor Seal GO`, at a real human gate, or when the lease is lost.
29
+ - Stop at Vet `READY` with `next_action: /rite-build <target>` as a cursor for the main controller (not permission for this lookahead session to Build), at a real human gate, or when the lease is lost. Release the planning claim so the main controller can recheck/admit it.
30
30
 
31
- **Failing case:** Vet then Build while the predecessor is still sealing, so two sessions write one tree. Or Define, Plan, and Vet skipped because the predecessor is still Build, or a missing strategy-reviewer spawn recorded as gate `access`.
31
+ **Failing case:** lookahead session starts Build; main controller is blanket-blocked until predecessor Seal despite current native independent admission; or Define/Plan/Vet are skipped because predecessor is still Build. Missing strategy-reviewer spawn is not gate `access`.
32
32
 
33
33
  **Failing case:** stops to except a principle the spec can avoid.
@@ -16,7 +16,7 @@ allow_gates: [advisory, validating]
16
16
  # max_slices / max_agents / max_minutes / max_review_queue omitted: unlimited
17
17
  # continue_sequence: false # opt out; default chains after Seal GO
18
18
  # max_workspaces: 5 # sequence budget when chaining
19
- # max_parallel: 10 # default cap when this invocation omits `--parallel N`; `--parallel N` wins and rewrites only this field
19
+ # max_parallel: 10 # fresh-run default; preserve retained lease capacity on cold resume; explicit `--parallel N` rewrites only this field
20
20
  # max_tokens: <N>
21
21
  # max_cost_usd: <amount>
22
22
  # notify: "<cmd>"
@@ -28,7 +28,10 @@ when this invocation contains `--parallel N`: then write or replace only
28
28
  malformed. Do not stop because it names `max_slices` / `max_agents` /
29
29
  `max_minutes` / `max_review_queue` or only `[advisory]`. If absent, write it
30
30
  once after clarity, and include `max_parallel: N` when that flag is present.
31
- Never write `max_slices` from `--max-slices`. It is otherwise read-only: never rewrite it after Vet or reset it on resume. Leftover `expires_at` is ignored
31
+ Without the flag, seed a newly created sentinel from retained global lease capacity
32
+ when present; otherwise use fresh-run default 10. Never replace a valid existing
33
+ sentinel's capacity from lease/default. Never write `max_slices` from `--max-slices`.
34
+ It is otherwise read-only: never rewrite it after Vet or reset it on resume. Leftover `expires_at` is ignored
32
35
  and never rewritten. **Failing case:** leftover `max_parallel: 1` keeps the run
33
36
  serial after `--parallel 5`.
34
37
 
@@ -64,7 +67,7 @@ Workspace files, not chat, carry state. Read/execute each phase skill:
64
67
  | 3 | `/rite-temper` | harden or reduce; `expand` and extra acceptance stop for a human; irreversible risk still pauses |
65
68
  | 4 | `/rite-define` | approved plan/tasks/traceability |
66
69
  | 5 | `/rite-vet` | every plan; derive mutable budget after READY |
67
- | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; serial if <2 eligible); refill per landing; charge once per landed slice |
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 |
68
71
  | 7 | `/rite-prove` | all slices built except deferred (`Satisfies: none`); approved proof; recovery on red |
69
72
  | 8 | `/rite-polish` | re-prove after code edits |
70
73
  | 9 | `/rite-review` | in-scope correction then fresh proof |
@@ -72,7 +75,7 @@ Workspace files, not chat, carry state. Read/execute each phase skill:
72
75
  | 11 | `/rite-ship` | only after GO; `--ship` never authorizes Git; stop at literal-GO/native approval |
73
76
 
74
77
  Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
75
- pass evidence after source edits. Re-read active workspace before each phase. On a cold resume or
78
+ 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
76
79
  new activation, run `devrites-engine check regression <slug>`: `BLOCKED` names a
77
80
  durable fact lost since the last checkpoint — restore or route it through its
78
81
  owning phase before continuing; `unproven` does not block. After each phase's
@@ -89,11 +92,12 @@ step 10 does not end the run: leave the sealed workspace unshipped with its
89
92
  (`/rite-spec <parent>-<n> "<objective>"` from the parent's `decisions.md` sequence)
90
93
  and re-enter step 1. Spend one workspace per opened continuation.
91
94
 
92
- For a child already planned by [lookahead](lookahead.md), do not re-specify.
93
- Wait while `devrites-engine claim check --workspace <child>` exits 3 (live
94
- lookahead), then set `.devrites/ACTIVE` to the child and resume its cursor at
95
- step 1. A predecessor replan since its Vet blocks child readiness with
96
- `DRV-GATE-READINESS-STALE`; route to `/rite-vet` before Build.
95
+ For an already prepared child, do not re-specify. Follow
96
+ [`parallel-workspaces.md`](../../devrites-lib/reference/parallel-workspaces.md)
97
+ while the owner is still running: honor claims, repair/re-Vet stale readiness,
98
+ and admit only explicitly independent/dependency-satisfied isolated work.
99
+ ACTIVE changes to the child only at normal ordered handoff after the owner Seal;
100
+ resume its durable cursor without a second controller or another opening charge.
97
101
 
98
102
  Before invoking a continuation, require durable `state.md`
99
103
  `sequence_workspaces_remaining > 0`; if absent, first write
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: rite-build
3
- description: Build the next approved vertical slice with evidence. HITL one-slice default; AFK/autocomplete chain serially or in eligible path-disjoint batches (dynamic size, cap 10); `--parallel N` caps a batch.
3
+ description: Build the next approved vertical slice with evidence. HITL one-slice default; AFK/autocomplete refill eligible isolated work under --parallel N, one global writer cap under Autocomplete.
4
4
  argument-hint: "[--parallel N] [slice number or name]"
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/standards/code-index.md","devrites-lib/reference/standards/agents.md","rite-build/reference/phase-contract.md","rite-build/reference/one-slice-cycle.md","rite-build/reference/wright-dispatch.md","rite-build/reference/checkpoint.md","rite-build/reference/spec-drift-guard.md","rite-build/reference/output.md","rite-build/reference/anti-patterns.md"],"rootOnly":["devrites-lib/reference/standards/code-index.md","rite-build/reference/phase-contract.md","rite-build/reference/wright-dispatch.md","rite-build/reference/checkpoint.md","rite-build/reference/output.md","rite-build/reference/afk-discipline.md","rite-build/reference/checkpoint-protocol.md","rite-build/reference/parallel-batch.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/workflow-artifacts.md"],"triggers":{"afk":["rite-build/reference/afk-discipline.md","devrites-lib/reference/standards/afk-hitl.md","rite-build/reference/checkpoint-protocol.md"],"applicability":["devrites-lib/reference/standards/repository-topology.md","devrites-lib/reference/standards/data-integrity.md","devrites-lib/reference/standards/integration-reliability.md"],"coding":["devrites-lib/reference/standards/coding-style.md"],"debug-recovery":["devrites-lib/reference/standards/debug-recovery.md"],"dod":["devrites-lib/reference/standards/definition-of-done.md"],"errors":["devrites-lib/reference/standards/error-handling.md"],"frontend":["rite-build/reference/frontend-trigger.md"],"parallel":["rite-build/reference/parallel-batch.md"],"patterns":["devrites-lib/reference/standards/patterns.md"],"principles":["devrites-lib/reference/standards/principles.md"],"security":["devrites-lib/reference/standards/security.md"],"tdd":["rite-build/reference/tdd.md","devrites-lib/reference/standards/testing.md"],"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"]},"workspace":["brief.md","spec.md","state.md","decisions.md","assumptions.md","questions.md","decision-coverage.md","architecture.md","plan.md","tasks.md","traceability.md","eng-review.md","test-plan.md","gates.md","strategy.md"],"workspaceByRole":{"code-reviewer":["spec.md","plan.md","tasks.md","test-plan.md","architecture.md","decisions.md","state.md"],"doubt-reviewer":["spec.md","plan.md","tasks.md","state.md","decisions.md"],"slice-wright":["brief.md","spec.md","architecture.md","plan.md","tasks.md","test-plan.md","state.md","decisions.md","assumptions.md","questions.md"],"test-analyst":["spec.md","tasks.md","test-plan.md","state.md"]}} -->
8
+ <!-- loads: {"always":["devrites-lib/reference/parallel-workspaces.md","devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/code-navigation.md","devrites-lib/reference/standards/code-index.md","devrites-lib/reference/standards/agents.md","rite-build/reference/phase-contract.md","rite-build/reference/one-slice-cycle.md","rite-build/reference/wright-dispatch.md","rite-build/reference/checkpoint.md","rite-build/reference/spec-drift-guard.md","rite-build/reference/output.md","rite-build/reference/anti-patterns.md"],"rootOnly":["devrites-lib/reference/standards/code-index.md","devrites-lib/reference/parallel-workspaces.md","rite-build/reference/phase-contract.md","rite-build/reference/wright-dispatch.md","rite-build/reference/checkpoint.md","rite-build/reference/output.md","rite-build/reference/afk-discipline.md","rite-build/reference/checkpoint-protocol.md","rite-build/reference/parallel-batch.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/workflow-artifacts.md"],"triggers":{"afk":["rite-build/reference/afk-discipline.md","devrites-lib/reference/standards/afk-hitl.md","rite-build/reference/checkpoint-protocol.md"],"applicability":["devrites-lib/reference/standards/repository-topology.md","devrites-lib/reference/standards/data-integrity.md","devrites-lib/reference/standards/integration-reliability.md"],"coding":["devrites-lib/reference/standards/coding-style.md"],"debug-recovery":["devrites-lib/reference/standards/debug-recovery.md"],"dod":["devrites-lib/reference/standards/definition-of-done.md"],"errors":["devrites-lib/reference/standards/error-handling.md"],"frontend":["rite-build/reference/frontend-trigger.md"],"parallel":["rite-build/reference/parallel-batch.md","devrites-lib/reference/parallel-workspaces.md"],"patterns":["devrites-lib/reference/standards/patterns.md"],"principles":["devrites-lib/reference/standards/principles.md"],"security":["devrites-lib/reference/standards/security.md"],"tdd":["rite-build/reference/tdd.md","devrites-lib/reference/standards/testing.md"],"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"]},"workspace":["brief.md","spec.md","state.md","decisions.md","assumptions.md","questions.md","decision-coverage.md","architecture.md","plan.md","tasks.md","traceability.md","eng-review.md","test-plan.md","gates.md","strategy.md"],"workspaceByRole":{"code-reviewer":["spec.md","plan.md","tasks.md","test-plan.md","architecture.md","decisions.md","state.md"],"doubt-reviewer":["spec.md","plan.md","tasks.md","state.md","decisions.md"],"slice-wright":["brief.md","spec.md","architecture.md","plan.md","tasks.md","test-plan.md","state.md","decisions.md","assumptions.md","questions.md"],"test-analyst":["spec.md","tasks.md","test-plan.md","state.md"]}} -->
9
9
  > Read-set manifest: `devrites-engine context --skills-root .pi/skills <slug> --phase build` 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
 
@@ -80,12 +80,14 @@ Wright applies anti-slop; root verifies returns and never patches source. Refuse
80
80
  <!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"Vet-ready admitted bytes require root authorship outside product wright","action":"ROOT_TRANSACTION; root writes only admitted .devrites/** targets","return":"saved Build slice cursor; wright product allowlist unchanged"} -->
81
81
  ## `--parallel N` (opt-in)
82
82
 
83
- HITL default/explicit `1` ≡ serial; AFK inherits cap.
84
- `2`–`10` is a **cap** — the root runs an eligible
85
- path-disjoint set it can start now (`N_eff`, from `parallel select --from-plan`), takes fewer when the cap cannot be
86
- filled, and refills a slot per landing (serial slice or one sibling) until
87
- no pending slice remains
88
- ([`parallel-batch.md` § Dynamic selection](reference/parallel-batch.md#dynamic-selection-and-re-batching)).
83
+ Standalone HITL default/explicit `1` ≡ serial; AFK inherits cap. Under
84
+ Autocomplete, read and execute shared root-only
85
+ [`parallel-workspaces.md`](../devrites-lib/reference/parallel-workspaces.md)
86
+ (trigger `parallel`, including global cap 1): controller/source routing,
87
+ authorized pool, isolated first writer and continuous repair/re-Vet/refill.
88
+ Standalone Build remains local. `2`–`10` is a cap, not a quota; eligible
89
+ path-disjoint work refills after each landing
90
+ ([`parallel-batch.md`](reference/parallel-batch.md#dynamic-selection-and-re-batching)).
89
91
  Unattended runs (`/rite-autocomplete`, `.devrites/AFK` `max_parallel`) refill
90
92
  inside the same run; HITL stops after each landing. This invocation's `--parallel N`
91
93
  is the cap: leftover sentinel `max_parallel` is not consulted. Autocomplete with
@@ -102,8 +104,9 @@ a human `Fix`. Exhausted repair blocks and preserves everything;
102
104
  `cleanup --force` salvages slice branches before removing worktrees —
103
105
  human-gated to abandon a batch, orchestrator-emitted only as the salvage
104
106
  step of an automatic frozen-lease re-batch.
105
- AFK charges per landed sibling only. Running lease blocks another
106
- `/rite-build`. Details: `parallel-batch.md`.
107
+ AFK charges per landed sibling only. A retained lease resumes through its
108
+ controller; it blocks a competing Build root, not controller-owned source dispatch.
109
+ Details: `parallel-batch.md`.
107
110
 
108
111
  ## Execute and reply
109
112
 
@@ -110,7 +110,7 @@ the hook receives:
110
110
  | `DEVRITES_QID` | the new qid (e.g. `q-2026-05-28-001`) |
111
111
  | `DEVRITES_GATE` | `advisory` / `validating` / `blocking` / `escalating` |
112
112
  | `DEVRITES_SLICE` | `<N — name>` |
113
- | `DEVRITES_SLUG` | active feature slug |
113
+ | `DEVRITES_SLUG` | source feature slug |
114
114
  | `DEVRITES_QUESTION` | the checkpoint text |
115
115
  | `DEVRITES_PROPOSED` | the proposed answer |
116
116
 
@@ -70,7 +70,7 @@ After a crash, a fresh session may read the last `WIP(<slug>)` body as crash con
70
70
  Authoritative state remains in `.devrites/`: validate the body against that workspace;
71
71
  never reconstruct or advance state from the commit body. Reload per
72
72
  [`context-hygiene.md`](../../devrites-lib/reference/standards/context-hygiene.md)
73
- (`.devrites/ACTIVE`, `state.md`, `questions.md`, `decisions.md`, `test-plan.md`/`evidence.md`).
73
+ (source-local `state.md`, `questions.md`, `decisions.md`, `test-plan.md`/`evidence.md`).
74
74
 
75
75
  ## Collapse at ship
76
76
  WIP commits are scratch and never reach shared history. `/rite-ship` folds them into the