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
package/CHANGELOG.md CHANGED
@@ -2,6 +2,38 @@
2
2
 
3
3
  All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
4
4
 
5
+ ## [7.3.0](https://github.com/ViktorsBaikers/DevRites/compare/v7.2.8...v7.3.0) (2026-11-01)
6
+
7
+ ### Added
8
+
9
+ * **devrites:** improve parallel throughput and proof integrity ([#203](https://github.com/ViktorsBaikers/DevRites/issues/203)) ([ac9c404](https://github.com/ViktorsBaikers/DevRites/commit/ac9c404908f3b709bfb76205aae0574e89bfcfe3))
10
+
11
+ ## Unreleased
12
+
13
+ ### Added
14
+
15
+ - Pool independent, currently vetted continuation slices under one repository-wide
16
+ parallel controller, with rolling landings and refills across workspace sources.
17
+ - Prune clean integrated worker checkouts without discarding transfer branches,
18
+ proof identities, retained lease rows, or running siblings.
19
+
20
+ ### Fixed
21
+
22
+ - Recover exact recorded parallel landings after interrupted lease persistence;
23
+ preserve late worker edits, ignored data, extra commits, and missing-checkout
24
+ Git metadata during cleanup.
25
+ - Exclude explicitly deferred slices from runnable work; stop inventing integration
26
+ suites from language manifests alone.
27
+ - Verify cached context bytes and frozen review diffs, publish complete artifacts
28
+ atomically, and isolate concurrent freeze/render attempts.
29
+ - Recover missing executed gate transcripts without rerunning valid scoped proof;
30
+ redact sensitive transcript metadata as well as command output.
31
+ - Keep timed-out tests failed even when graceful termination exits successfully.
32
+ - Support drive-qualified Windows paths in reviewer diff bindings.
33
+ - Audit underfilled parallel frontiers through acceptance-preserving Plan/Vet;
34
+ separate independently provable capabilities without dropping producer, proof
35
+ or authority gates.
36
+
5
37
  ## [7.2.8](https://github.com/ViktorsBaikers/DevRites/compare/v7.2.7...v7.2.8) (2026-10-31)
6
38
 
7
39
  ### Fixed
package/README.md CHANGED
@@ -31,7 +31,7 @@ history can't lose it. After you clear the conversation, switch hosts, or hand
31
31
  the feature to another engineer, the next session reads the same plan,
32
32
  decisions, and evidence before it continues.
33
33
 
34
- **Status:** [`v7.2.8`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.2.8): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
34
+ **Status:** [`v7.3.0`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.3.0): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
35
35
 
36
36
  This is the latest published release; `main` may contain unreleased work.
37
37
 
@@ -116,6 +116,16 @@ Candidate and Seal. A mismatch stops; it is never reinterpreted as equivalent.
116
116
  Fresh literal `GO` and native host approval remain required for each disclosed
117
117
  Git attempt.
118
118
 
119
+ ## Concurrent workspaces
120
+
121
+ Mixed-workspace execution shares a controller, not a candidate or proof ledger.
122
+ Every landing uses `WIP(<source>):` and updates only that source's manifest and
123
+ evidence. Interleaved child checkpoints do not authorize parent-only Ship to
124
+ absorb unfinished child work. The deferred release waits for participating
125
+ workspaces' final proof/Review/Seal, generates the recorded sequence's union
126
+ manifest, and checks exact staged bytes and scope under fresh literal `GO`.
127
+ Retained controller/source leases must be cleaned before archival.
128
+
119
129
  ## Older workspaces
120
130
 
121
131
  Released v1/v2/v3 unfinished workspaces use read-only `/rite-upgrade`. A missing
package/docs/cli.md CHANGED
@@ -304,7 +304,7 @@ selection exits `2`; a malformed/unsafe manifest or candidate mismatch prints
304
304
  - Atomic state operations retain their documented operation-specific nonzero
305
305
  results.
306
306
  - `state close` exits `4` for usage or a missing workspace.
307
- - `state close` exits `3` for a schema refusal.
307
+ - `state close` exits `3` for a schema refusal or a retained controller/source lease.
308
308
  - `state close` exits `5` when an archive already exists.
309
309
  - `state close` exits `1` for an invalid workspace, archive directory, or ACTIVE cursor.
310
310
 
@@ -313,6 +313,12 @@ selection exits `2`; a malformed/unsafe manifest or candidate mismatch prints
313
313
  `DEVRITES_ROOT` selects a project root or `.devrites/` directory.
314
314
  `DEVRITES_WORKSPACE` may select one explicit contained workspace. Mutating
315
315
  commands refuse ambiguous, escaped, symlinked, or otherwise unsafe roots.
316
+ Explicit producer dependencies resolve safely within the selected `DEVRITES_ROOT`
317
+ without changing or redirecting the consumer's workspace override.
318
+ Global controller queries use explicit source slugs in a per-invocation environment
319
+ without a worker's `DEVRITES_WORKSPACE`; conflicting overrides fail closed rather
320
+ than redirecting another workspace's reads. Workspace parallelism keeps one
321
+ controller lease and global writer capacity; it does not broaden Ship approval.
316
322
 
317
323
  Install, update application, and uninstall remain manifest-owned local
318
324
  operations. Direct engine update, shell, and npm may acquire a release candidate;
@@ -248,8 +248,11 @@ See [`flow.md`](flow.md) for the Mermaid diagrams. The text form is:
248
248
  only the exact-plan Ship approval boundary and never authorizes Git.
249
249
  ```
250
250
 
251
- - Every phase **reads the active workspace first**; if none, it stops and tells
252
- the user to run `/rite-spec <feature>`.
251
+ - Every phase resolves its explicit source workspace before the ACTIVE default.
252
+ Autocomplete keeps ACTIVE on the ordered lifecycle owner while preparing or
253
+ building authorized independent future slices through one global controller.
254
+ Existing `--parallel N` spans those workspaces; no second feature flag is needed.
255
+ See [cross-workspace admission](../pack/.claude/skills/devrites-lib/reference/parallel-workspaces.md).
253
256
  - **Spec Drift Guard** lives in build/prove/polish/review/seal: on drift, stop,
254
257
  record in `drift.md`, and classify. Objective implementation and tool defects
255
258
  use bounded recovery; a wrong durable plan uses `/rite-plan repair`; only a
@@ -17,8 +17,8 @@ workflow strategy.
17
17
  | `check preconditions <slug> [--slice SLICE-###] [--timeout N]` | Run the `test-plan.md` Build-entry preflight rows whose optional `Run at` cell is `vet` (with `--slice`, `pre-dispatch <SLICE>`); `action` rows and rows without the cell never run. Writes one candidate-bound transcript per row under `references/gates/preflight-*/`; a row passes on exit 0. A `pre-dispatch` row whose newest transcript passed is kept, not re-run: it is a pre-edit baseline, so a re-dispatch never runs it against the slice's own edits; changing its command or cwd retires the pass. Exit `3` on any failure or an invalid `Run at` value. |
18
18
  | `check seal <slug>` | Check files required by target Phase `seal`, open human gates, the `tasks.md` slice graph, canonical `AC-###` presence when `tasks.md`/`test-plan.md` are required, the stable Build-input binding, and exact candidate bindings. `check readiness` and `check seal` also block a `scripts/` test driver that a tasks.md Writer allowlist plans or touched-files.md lists when no gates.md `CHECK` runs it and no `Driver waiver: <path> — DEC-### <reason>` line cites a recorded decision; waived drivers print as `note: unexecuted driver (waived by DEC-###): <path>` lines, on pass or block. |
19
19
  | `check path-disjoint [--root <dir>] [<json-file> | -]` | Verify slice path sets are pairwise disjoint. |
20
- | `parallel select --cap <1-10> [--root <dir>] [--slug <slug>] [--from-plan \| <json-file> \| -]` | Choose the greedy path-disjoint subset ≤ cap from supplied ready slices, or with `--from-plan` (needs `--slug`) from the plan: tasks.md slices whose dependencies are built (state.md checkbox, or an evidence.md heading that says that slice was checkpointed plus a `Checkpoint: <sha>` line), with Writer allowlist (else Files likely touched) paths plus the nearest manifest/lockfile when `External dependencies:` names a package (module path, npm scope, backticked name, or a non-toolchain version). With `--slug` and a running lease, the lease's not-yet-landed slices hold cap slots and paths, slices it names are never picked, and only new picks print. |
21
- | `parallel <create\|add\|integrate\|cleanup\|status\|abort\|lease-read\|lease-write\|lease-clear\|record-green>` | Deterministic parallel worktree leases, integration, and cleanup for parallel writer batches. A lease is a pipeline: `integrate --slice <id> --apply-to-control` lands one green sibling onto control (refusing if anything but this lease moved control), and `add` starts new path-disjoint siblings from the current control tip while others still run. |
20
+ | `parallel select --cap <1-10> [--root <dir>] [--slug <controller>] [--from-plan [--workspaces <slug,...>] \| <json-file> \| -]` | Choose a plan-order path-disjoint ready subset, seeded by all retained repository-controller slots and paths. `--from-plan` uses canonical built checkpoints, local and declared workspace producer dependencies, exact write sets and required dependency manifests. The internal `--workspaces` data-source parameter pools recorded forward continuations with current readiness and explicit native-vetted per-slice declarations; blocked/stale/missing candidates print scoped notices without hiding other ready work. Foreign identities print `<workspace>/<slice>`. |
21
+ | `parallel <create\|add\|integrate\|prune\|cleanup\|status\|abort\|lease-read\|lease-write\|lease-clear\|record-green>` | One repository controller owns isolated workers across source workspaces. `create` accepts a single initial worker; `create`/`add --cap N` persist the global admission capacity. Explicit `add --cap N --json -` with stdin `[]` updates capacity only; lowering below active count refuses without canceling workers. A completed retained lease can refill at unchanged control tip. `record-green` and per-slice `integrate --slice <workspace/id> --apply-to-control` target source-qualified lanes (bare IDs mean controller lanes); integration keeps exact ancestry/path/dirty-work checks and lands `WIP(<source>):`. `prune` removes only verified clean integrated checkouts, retaining branches, proof identities, lease rows and controller. Status exposes the retained controller and pending landing; cleanup preserves salvage/unknown work. |
22
22
  | `check task-graph <slug>` | Validate `tasks.md` slice dependency graph for cycles, unknown deps, malformed tokens, duplicate IDs, missing `Dependencies`, and `depends_on` mismatch. Prints a non-blocking `ADVISORY size:` line (and records a `size-advisory` metric) for each slice with 12+ Writer allowlist files and no `Size rationale:`. A `Dependencies` ID may carry a `(via <interface>)` suffix (empty or unclosed is a malformed token); prints a non-blocking `ADVISORY edge:` line (and records an `edge-advisory` metric) for each edge with no via, or whose via text is not a case-insensitive substring of the dependency's `Consumes / Produces:`. Prints `schedule: <n> slices in <r> build rounds at cap 10` (the `/rite-build` batch selection replayed over each slice's Writer allowlist, else Files likely touched, plus the manifest parallel select reserves; omitted when a slice has no path) and a non-blocking `ADVISORY hub:` line (top five; records a `hub-advisory` metric) for each path, compared case-folded, that three or more slices without `Serial rationale:` write. Advisories print only when the graph is valid. |
23
23
  | `check regression <slug> [--update]` | Compare the workspace's structural progress facts (phase ordinal, checked ACs, met/abandoned gates, done slices, resolved questions, present artifacts) against the recorded `regression-baseline.json` high-water mark; `--update` ratchets the baseline forward under the feature lock and prints each blessed regression. |
24
24
  | `check continuation [slug]` | Print whether an armed AFK run must invoke its cursor instead of replying. `continuation: required` plus `invoke: <next_action>` when `.devrites/AFK` is a regular file, `status` is `running`, `question_id` is empty, no blocking or escalating question is open, and `next_action` is an internal phase command (`/rite-spec` through `/rite-seal`, including `/rite-plan`, not `/rite-ship` or `/rite-autocomplete`). Otherwise `continuation: clear` with a one-line `reason`. Exit `0` either way. `handoff` prints the same lines. |
@@ -45,7 +45,7 @@ workflow strategy.
45
45
  | `metrics summary [slug] [--by-slice]` | Reduce `metrics.jsonl` into a per-phase roll-up. `--by-slice` reads `dispatch.json` instead: per slice, build wright rounds, slice-bound Vet rechecks, and agent-minutes (role start to `returned_at`; abandoned waves excluded). When the ledger has `resume` events it adds `resumes count=N minutes_to_dispatch=...` (each resume timed to the next `dispatch` event; `none` when another resume came first, `open` when none followed). |
46
46
  | `claim <add\|release\|list\|check>` | Advisory session-scoped file claims in `.devrites/claims.jsonl` (append-only). `add` records intent to write a path set with a TTL (1–240 min, default 30); a live claim by another session exits `3` and names the holder. `release` appends a release event owned by the claiming session. `list` shows every unreleased claim (live, expired, dead) plus one `N released (use --all)` count; `--all` includes released rows; a claim whose holding session has provably exited on this host shows `dead` and no longer conflicts. `check` is the read-only preflight for a path set. Coordination aid only — never a substitute for one-writer-per-worktree. |
47
47
  | `note <add\|list\|check\|rm> <slug> ...` | Anchored workspace notes in `notes.md`: `add <slug> <subject> <quote> <title> [body]` binds a note to a verbatim quote in one repository file and assigns `NOTE-###`; `list` and `check` regrade each anchor `exact`/`moved`/`stale`/`ambiguous`/`lost` by searching the repo for the quote (dependency and workspace trees excluded); `check --repair` rewrites a `moved` subject to its new file; `rm` deletes by ID. `check seal` refuses a malformed `notes.md` and any non-`exact` anchor. |
48
- | `gates <scaffold\|status\|run\|reverify\|lint\|precheck\|attest\|abandon> <slug>` | Operate the `gates.md` acceptance ledger: seed per-AC gates, execute runnable gates bound to `test-plan.md` preflight rows, attest manual gates, and reduce to `all-met`/`not-met`/`handoff`/`malformed`. A gate with `INPUTS:` records its files' content digest and is reused by `run` and `reverify` while they are unchanged. `run`/`reverify --transcripts` writes a redacted, candidate-bound transcript per executed or reused gate under `references/gates/<gate-id>/`. `precheck <slug> --worktree <path> [--slice <SLICE-ID>]` runs every `RUN: writer` gate and `check windows` against the wright's worktree (with `--slice`, it prints `SKIP <gate-id>` for a gate whose id only other unbuilt slices name in `tasks.md`, since gate ids reuse `AC-###` ids; a gate no slice names still runs), prints PASS/FAIL per gate id, exits `3` on any FAIL or on a malformed ledger, and writes no ledger, EVIDENCE line or transcript (`check windows` still appends its metric event); its output is never evidence. |
48
+ | `gates <scaffold\|status\|run\|reverify\|lint\|precheck\|attest\|abandon> <slug>` | Operate the `gates.md` acceptance ledger: seed per-AC gates, execute runnable gates bound to `test-plan.md` preflight rows, attest manual gates, and reduce to `all-met`/`not-met`/`handoff`/`malformed`. A gate with `INPUTS:` records its files' content digest and is reused by `run` and `reverify` while they are unchanged. `run`/`reverify --transcripts` atomically publishes a private redacted v2 executed transcript, or returns its verified originating record unchanged, under `references/gates/<gate-id>/`; legacy v1/reuse-only logs cannot authorize reuse. `precheck <slug> --worktree <path> [--slice <SLICE-ID>]` runs every `RUN: writer` gate and `check windows` against the wright's worktree (with `--slice`, it prints `SKIP <gate-id>` for a gate whose id only other unbuilt slices name in `tasks.md`, since gate ids reuse `AC-###` ids; a gate no slice names still runs), prints PASS/FAIL per gate id, exits `3` on any FAIL or on a malformed ledger, and writes no ledger, EVIDENCE line or transcript (`check windows` still appends its metric event); its output is never evidence. |
49
49
  | `state resolve <qid> "<answer>"` | Resolve an open question and update `questions.md` plus `state.md` atomically. |
50
50
  | `state merge-manifest <slug> [pred...]` | Fold the recorded predecessor chain's manifests into the release candidate manifest. |
51
51
  | `state set <slug> <key>=<value>... [--unset <key>]...` | Write `state.md` cursor fields all-or-nothing under the feature lock. Refuses an unknown `phase`, the engine-owned `schema` row, a pipe or line break in a value, and an overwrite of a saved `return_phase`/`return_next_action`. Setting `status=awaiting_human` under `.devrites/AFK` prints each open question the sentinel's `allow_gates` auto-picks. |
@@ -54,7 +54,7 @@ workflow strategy.
54
54
  | `migrate <slug> [--dry-run] [--answer id=choice]` | Normalize a pre-v5 workspace to the current schema; fail-closed, one-shot. |
55
55
  | `secret-scan [--staged] [--stdin] [slug]` | Scan exact staged blobs, stdin, or touched regular files for credential material. |
56
56
  | `open-visual <path-or-name> [--slug <slug>] [--no-open]` | Resolve a local visual HTML file, optionally open it in the OS browser, warn if the sibling outline is missing or inventory ids are absent from HTML, and print agent path tips. No network. |
57
- | `detect commands [--root <dir>] [--json]` | Resolve the repository's own test/lint/vet/build commands: explicit Makefile targets first, then `package.json` scripts, then language-manifest fallbacks, plus the lockfile-derived package manager. Read-only, no installs, no execution. |
57
+ | `detect commands [--root <dir>] [--json]` | Resolve the repository's own test/lint/vet/build commands: explicit Makefile targets first, then `package.json` scripts, then language-manifest fallbacks, plus the lockfile-derived package manager. Integration stays unresolved without an explicit repository target or script; a language manifest does not prove a separate integration suite. Read-only, no installs, no execution. |
58
58
  | `overhaul <records\|admit\|snapshot\|score\|bench\|render> ...` | Deterministic tools behind the standalone `/overhaul` skill: run-record generations and cross-record validation, worker-receipt admission and quote anchoring, index-safe baseline snapshots and per-attempt deltas, exact-rational readiness scoring, benchmark ratio intervals, and escaped offline review/report views. Operates only on explicit run-area and repository paths. See [Overhaul tools](#overhaul-tools). |
59
59
  | `version` | Print the engine version. |
60
60
 
@@ -87,6 +87,30 @@ command namespace.
87
87
  invalidate earlier passes if later checks move their inputs.
88
88
  Missing or changed inputs cannot certify a pass. Execution, discarded-result,
89
89
  or evidence-write failures exit `3`, even if an older ledger still reads met.
90
+ - Parallel integration records exact landing intent before control FF. A matching
91
+ retry reconciles that landing once; external HEAD/ref movement still blocks.
92
+ Pending intent cannot be replaced or cleared through raw lease commands.
93
+ `prune` and normal/forced cleanup preserve late edits, ignored/untracked data,
94
+ unexpected worker tips and unknown checkouts rather than forcing their removal.
95
+ Missing registered checkouts retain their Git index and metadata; completed
96
+ cleanup releases the lease and reports recovery rather than discarding them.
97
+ - Context cache reuse verifies the actual regular bundle bytes and private mode,
98
+ not the digest sidecar alone. Workspace sources are bounded and acquired once
99
+ per invocation; unsafe reads fail instead of becoming omitted guidance.
100
+ Managed output stays confined; explicit external `--out` remains supported.
101
+ Windows cannot prove POSIX owner-only mode through Go's `FileMode`; repeat
102
+ context requests rebuild instead of falsely certifying a private cache hit.
103
+ - Frozen diff bytes must match their recorded SHA-256 at packet and dispatch
104
+ validation. Manually authored final reviewer packets may still name `.diff`
105
+ or `.patch` files, but must include `diff <64hex> <path>` binding rows.
106
+ Binding paths use `/` on every host, including drive-qualified Windows paths.
107
+ Same-wave freeze publication is serialized; each renderer owns its lint draft.
108
+ - `gates run`/`reverify --transcripts` reuse only a complete passing executed
109
+ origin matching the gate definition, recorded output identity and declared
110
+ inputs. Missing origin reruns only affected approved checks; missing approval
111
+ blocks instead of borrowing an old checkbox. Valid redacted/truncated origins
112
+ remain reusable, with their historical candidate identity. Transcript metadata
113
+ and output are redacted; publication is atomic and private.
90
114
 
91
115
  ## Check boundary
92
116
 
@@ -141,19 +141,32 @@ base before native transfer, then re-proves the reconciled candidate. Missing tr
141
141
  conflict, extra paths, moved base, or cleanup failure stops with worktree evidence
142
142
  preserved. No ad hoc copy/cherry-pick/merge occurs from the read-only root.
143
143
 
144
- Isolation does not authorize same-worktree throughput. Parallel writers are allowed
145
- **only** under the `/rite-build` batch path when path-disjoint eligibility, abort-batch,
146
- and a control `parallel-lease.md` apply. `--parallel N` on `/rite-autocomplete`
147
- or `/rite-build` is the batch cap for that run and wins over leftover sentinel
148
- `max_parallel`; `/rite-autocomplete --parallel N` also writes or replaces only
149
- that field. Absent the flag, the sentinel (default cap 10 under
150
- `/rite-autocomplete`) is a **cap**: the run fills it
151
- with the largest eligible set, lands each sibling as soon as its review and proof are
152
- green, refills the freed slot (`parallel add`), and repeats until no pending slice
153
- remains; a one-slice round is serial for that round only (see
154
- [`parallel-batch.md`](../pack/.claude/skills/rite-build/reference/parallel-batch.md)).
155
- Same-worktree multi-writer and root-emulated worktrees remain forbidden; default
156
- `/rite-build` stays one writer across linked worktrees.
144
+ Parallel writers use the `/rite-build` worktree lifecycle: independently vetted
145
+ contracts, disjoint declared/hidden write surfaces, one retained controller lease,
146
+ and per-sibling review/proof before serialized integration. `--parallel N` on
147
+ Autocomplete is one global active-writer cap across authorized sequence workspaces;
148
+ without the flag it uses AFK `max_parallel`, retained lease capacity on resume,
149
+ else 10. No additional user flag is needed. Standalone Build remains scoped to
150
+ its requested workspace.
151
+
152
+ While a writer runs, Autocomplete prepares or re-Vets recorded continuations and
153
+ refills from the whole eligible pool. A future slice needs an explicit, current
154
+ Plan/Vet `Workspace dependencies` declaration; absent or stale declarations never
155
+ become independence merely because files differ. Only durable integrated producer
156
+ checkpoints release dependent work. Human/access/safety gates retain their scope.
157
+
158
+ Each worker keeps its source workspace identity, isolated cwd, candidate, proof,
159
+ state and `WIP(<source>):` checkpoint. Even a lone initial writer is isolated when
160
+ using a parallel-capable controller, so later work can refill without creating
161
+ same-tree co-writers. Explicit `--parallel 1` remains one writer total. Unsupported
162
+ host isolation falls back truthfully to serial execution.
163
+
164
+ The controller drains and cleans its lease before non-lease product corrections,
165
+ shared Polish writes or checkpoints; unrelated control commits are never blessed
166
+ as a new expected tip. Final per-workspace proof/Seal and exact release-union Ship
167
+ approval remain mandatory. See the
168
+ [controller workflow](../pack/.claude/skills/devrites-lib/reference/parallel-workspaces.md)
169
+ and [worktree lifecycle](../pack/.claude/skills/rite-build/reference/parallel-batch.md).
157
170
 
158
171
  ## Engine boundary
159
172
 
package/docs/skills.md CHANGED
@@ -194,6 +194,11 @@ and `Shipped`. Utility commands keep the same compact labels and one-next-action
194
194
  | [`devrites-api-interface`](../pack/.claude/skills/devrites-api-interface/SKILL.md) | Design stable API / interface contracts: REST/GraphQL, module boundaries, type contracts, FE/BE split. | A slice crosses a boundary or defines a public interface. |
195
195
  | [`devrites-debug-recovery`](../pack/.claude/skills/devrites-debug-recovery/SKILL.md) | Reproduce → ranked hypotheses → instrument → fix in scope → regression-test. Caller and recovery count at most three failures per causal fingerprint from context and Dead ends/evidence. | Tests, builds, or runtime checks fail. |
196
196
 
197
+ Under Autocomplete, existing parallel capacity spans authorized sequence
198
+ workspaces. It overlaps future planning/re-Vet with isolated, independently
199
+ admitted writers; standalone Build stays scoped. See the
200
+ [global controller](../pack/.claude/skills/devrites-lib/reference/parallel-workspaces.md).
201
+
197
202
  ### Prove: collect evidence, including browser evidence
198
203
 
199
204
  | Skill | What It Does | Use When |
@@ -27,11 +27,13 @@ Subcommands:
27
27
  scaffold <slug> Create gates.md from spec.md AC ids (only when absent)
28
28
  status <slug> Reduce the ledger without executing; exit 3 unless ALL MET
29
29
  run <slug> [--timeout N] [--transcripts]
30
- Execute unmet runnable gates and record evidence
30
+ Execute unmet gates; reuse unchanged INPUTS evidence
31
31
  reverify <slug> [--timeout N] [--transcripts]
32
- Re-execute every runnable gate, demoting stale passes
33
- (--transcripts writes one redacted, candidate-bound
34
- file per gate under references/gates/<gate-id>/)
32
+ Re-run runnable gates except valid unchanged INPUTS proof
33
+ --transcripts requires current approval and complete
34
+ passing executed origins for reuse; recover missing
35
+ origins by executing only affected approved gates.
36
+ New private redacted records: references/gates/<gate-id>/
35
37
  lint <slug> [--strict] Audit oracle quality without executing
36
38
  precheck <slug> --worktree <path> [--slice <SLICE-ID>]
37
39
  Run every RUN: writer gate, then check windows, in
@@ -263,12 +265,6 @@ func cmdRun(root string, args []string, reverify bool, stdout, stderr io.Writer)
263
265
  fmt.Fprintf(stderr, "gates %s: %v\n", verb, err)
264
266
  return ExitBlocked
265
267
  }
266
- before := ""
267
- if transcripts {
268
- before = candidateLabel(root, slug)
269
- }
270
- var ran []GateResult
271
- var ranDoc *Document
272
268
  attemptFailed := false
273
269
 
274
270
  // The gates lock serializes check execution; the feature lock is held only
@@ -293,18 +289,33 @@ func cmdRun(root string, args []string, reverify bool, stdout, stderr io.Writer)
293
289
  }
294
290
  return nil
295
291
  }
296
- ran, ranDoc = RunGates(context.Background(), project, ledgerPath, doc, approved, reverify, timeout, featureLock), doc
297
- for _, result := range ran {
298
- if result.Ran && !result.Passed || result.Discarded || result.WriteErr != nil {
292
+ options := &RunOptions{WriteLock: featureLock}
293
+ before := ""
294
+ if transcripts {
295
+ options.TranscriptWork = work
296
+ before = candidateLabel(root, slug)
297
+ }
298
+ ran := RunGates(context.Background(), project, ledgerPath, doc, approved, reverify, timeout, options)
299
+ for i, result := range ran {
300
+ if result.Ran && !result.Passed || result.Discarded || result.WriteErr != nil || transcripts && doc.Gates[i].Check != "" && !result.Passed {
299
301
  attemptFailed = true
300
302
  }
301
303
  switch {
302
304
  case !result.Ran:
303
- fmt.Fprintf(stdout, "gate %s: skipped (%s)\n", result.ID, result.Detail)
305
+ fmt.Fprintf(stdout, "gate %s: skipped (%s)\n", transcriptMetadata(result.ID), transcriptMetadata(result.Detail))
304
306
  case result.Passed && !result.Discarded && result.WriteErr == nil:
305
- fmt.Fprintf(stdout, "gate %s: pass\n", result.ID)
307
+ fmt.Fprintf(stdout, "gate %s: pass\n", transcriptMetadata(result.ID))
306
308
  default:
307
- fmt.Fprintf(stdout, "gate %s: fail (%s)\n", result.ID, result.Detail)
309
+ fmt.Fprintf(stdout, "gate %s: fail (%s)\n", transcriptMetadata(result.ID), transcriptMetadata(result.Detail))
310
+ }
311
+ }
312
+ if transcripts {
313
+ paths, err := writeTranscripts(work, doc, ran, before, candidateLabel(root, slug))
314
+ for _, path := range paths {
315
+ fmt.Fprintf(stdout, "transcript: %s\n", path)
316
+ }
317
+ if err != nil {
318
+ return fmt.Errorf("transcript: %w", err)
308
319
  }
309
320
  }
310
321
  return nil
@@ -313,16 +324,6 @@ func cmdRun(root string, args []string, reverify bool, stdout, stderr io.Writer)
313
324
  fmt.Fprintf(stderr, "gates %s: %v\n", verb, lockErr)
314
325
  return ExitBlocked
315
326
  }
316
- if transcripts && ranDoc != nil {
317
- paths, err := writeTranscripts(work, ranDoc, ran, before, candidateLabel(root, slug))
318
- for _, path := range paths {
319
- fmt.Fprintf(stdout, "transcript: %s\n", path)
320
- }
321
- if err != nil {
322
- fmt.Fprintf(stderr, "gates %s: transcript: %v\n", verb, err)
323
- return ExitBlocked
324
- }
325
- }
326
327
  fmt.Fprintln(stdout, "---")
327
328
  return reportStatus(slug, ledgerPath, testPlanPath, attemptFailed, stdout, stderr)
328
329
  }
@@ -49,7 +49,7 @@ func PreflightRowsPassed(root, slug string, rows []PreflightRow) (bool, error) {
49
49
  // candidate but the lookup does not compare it: Vet writes workspace artifacts
50
50
  // after the run, and only a change to the row's command or cwd retires a pass.
51
51
  func PreflightPassed(work string, row PreflightRow) bool {
52
- dir := filepath.Join(work, "references", "gates", unsafeNameRE.ReplaceAllString(PreflightGateID(row), "_"))
52
+ dir := filepath.Join(work, "references", "gates", transcriptGateName(PreflightGateID(row)))
53
53
  entries, err := os.ReadDir(dir)
54
54
  if err != nil {
55
55
  return false
@@ -30,8 +30,9 @@ type GateResult struct {
30
30
  Detail string // exit/match/timeout/approval diagnostic
31
31
  Discarded bool // result dropped: bound oracle or inputs changed during the run
32
32
  WriteErr error // evidence writeback failed for a reason other than drift
33
- Reused bool // met gate kept because its INPUTS are unchanged
33
+ Reused bool // met gate kept under the selected reuse policy
34
34
  Inputs string // INPUTS content digest at run time, when declared
35
+ Origin string // complete executed transcript retained when proof is reused
35
36
  // Outcome, Started and Ended describe the execution this result judged;
36
37
  // they are zero when the gate did not execute.
37
38
  Outcome RunOutcome
@@ -63,19 +64,33 @@ func ReadLedgerFile(ledgerPath string) (string, error) {
63
64
  return string(raw), nil
64
65
  }
65
66
 
66
- // RunGates executes the runnable gates of ledgerPath. reverify re-runs every
67
- // runnable gate including already-met ones; the normal mode runs only unmet
68
- // runnable gates. approved is the vetted command set from test-plan.md; a
67
+ // RunOptions controls evidence reuse and short ledger writeback locking.
68
+ // TranscriptWork requires a usable executed origin before a met gate can skip.
69
+ // The caller holds the gates execution lock through transcript publication.
70
+ type RunOptions struct {
71
+ WriteLock func(func() error) error
72
+ TranscriptWork string
73
+ }
74
+
75
+ // RunGates executes the runnable gates of ledgerPath. reverify also runs met
76
+ // gates without INPUTS; met gates with unchanged INPUTS reuse their proof in
77
+ // either mode, subject to options.TranscriptWork's executed-origin requirement.
78
+ // approved is the vetted command set from test-plan.md; a
69
79
  // CHECK outside it never executes, and neither does one outside a surface that
70
80
  // could not be determined — an absent preflight is a refusal, not permission.
71
81
  // Each pass writes definition-bound evidence; each failure clears the box and
72
82
  // restores EVIDENCE: pending.
73
83
  //
74
84
  // Gates sharing one CHECK and CWD execute once per call; each matches its own
75
- // EXPECT against that shared output. writeLock, when non-nil, wraps every
85
+ // EXPECT against that shared output. options.WriteLock, when non-nil, wraps every
76
86
  // ledger writeback so the caller need not hold the feature lock while checks
77
87
  // execute; writeResult re-verifies the gate's oracle before it writes.
78
- func RunGates(ctx context.Context, root, ledgerPath string, doc *Document, approved []ApprovedCommand, reverify bool, timeout time.Duration, writeLock func(func() error) error) []GateResult {
88
+ func RunGates(ctx context.Context, root, ledgerPath string, doc *Document, approved []ApprovedCommand, reverify bool, timeout time.Duration, options *RunOptions) []GateResult {
89
+ var writeLock func(func() error) error
90
+ transcriptWork := ""
91
+ if options != nil {
92
+ writeLock, transcriptWork = options.WriteLock, options.TranscriptWork
93
+ }
79
94
  var results []GateResult
80
95
  executions := map[string]struct {
81
96
  ran bool
@@ -105,24 +120,35 @@ func RunGates(ctx context.Context, root, ledgerPath string, doc *Document, appro
105
120
  results = append(results, GateResult{ID: gate.ID, Detail: "manual gate; evidence is judged, not executed"})
106
121
  continue
107
122
  }
123
+ isApproved := Approved(gate.Check, gate.Cwd, approved)
124
+ if transcriptWork != "" && !isApproved {
125
+ results = append(results, GateResult{ID: gate.ID, Detail: "CHECK/CWD is not an approved test-plan.md preflight row; not executed"})
126
+ continue
127
+ }
108
128
  inputs := ""
109
129
  if GateState(gate, doc) == StateMet {
110
- if gate.Inputs == "" && !reverify {
111
- results = append(results, GateResult{ID: gate.ID, Passed: true, Detail: "already met"})
112
- continue
113
- }
130
+ canReuse := gate.Inputs == "" && !reverify
114
131
  if gate.Inputs != "" {
115
132
  // An unreadable or unmatched spec never matches recorded evidence.
116
133
  inputs, _ = InputsDigest(root, gate.Inputs)
134
+ canReuse = inputs != "" && inputs == recordedInputs(gate)
117
135
  }
118
- // A gate that declares INPUTS is reused, under run and reverify alike,
119
- // exactly while the files it depends on are byte-identical; any change re-executes it.
120
- if inputs != "" && inputs == recordedInputs(gate) {
121
- results = append(results, GateResult{ID: gate.ID, Passed: true, Reused: true, Inputs: inputs, Detail: "reused: inputs unchanged"})
122
- continue
136
+ if canReuse {
137
+ origin := ""
138
+ if transcriptWork != "" {
139
+ origin = passingOrigin(transcriptWork, gate)
140
+ }
141
+ if transcriptWork == "" || origin != "" {
142
+ detail := "already met"
143
+ if gate.Inputs != "" {
144
+ detail = "reused: inputs unchanged"
145
+ }
146
+ results = append(results, GateResult{ID: gate.ID, Passed: true, Reused: gate.Inputs != "" || origin != "", Inputs: inputs, Origin: origin, Detail: detail})
147
+ continue
148
+ }
123
149
  }
124
150
  }
125
- if !Approved(gate.Check, gate.Cwd, approved) {
151
+ if !isApproved {
126
152
  results = append(results, GateResult{ID: gate.ID, Detail: "CHECK/CWD is not an approved test-plan.md preflight row; not executed"})
127
153
  continue
128
154
  }