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,330 @@
1
+ package lib
2
+
3
+ import (
4
+ "errors"
5
+ "fmt"
6
+ "os"
7
+ "path/filepath"
8
+ "strings"
9
+
10
+ "github.com/devrites/devrites/internal/devritespaths"
11
+ "github.com/devrites/devrites/internal/gate"
12
+ "github.com/devrites/devrites/internal/markdowntext"
13
+ "github.com/devrites/devrites/internal/parallel"
14
+ "github.com/devrites/devrites/internal/state"
15
+ )
16
+
17
+ // WorkspaceReady admits only the controller or its recorded forward continuation.
18
+ // Notices describe withheld work without removing other workspaces from the pool.
19
+ func WorkspaceReady(repoRoot, controller, target string) ([]parallel.SlicePaths, []string, error) {
20
+ root := filepath.Join(repoRoot, devritespaths.DevritesRootName)
21
+ if !devritespaths.ValidSlug(controller) || !devritespaths.ValidSlug(target) {
22
+ return nil, nil, fmt.Errorf("invalid controller or target workspace slug")
23
+ }
24
+ if _, err := devritespaths.WorkspaceOverrideChecked(root, target); err != nil {
25
+ return nil, []string{fmt.Sprintf("%s: global workspace admission preserves DEVRITES_WORKSPACE scope: %v; unset DEVRITES_WORKSPACE to query the global pool", target, err)}, nil
26
+ }
27
+ if _, err := devritespaths.ExistingFeatureDirChecked(root, controller); err != nil {
28
+ return nil, nil, fmt.Errorf("controller %s: %w", controller, err)
29
+ }
30
+ observation, err := state.ObserveWorkspace(root, target)
31
+ if err != nil {
32
+ return nil, []string{fmt.Sprintf("%s: state unavailable: %v; repair workspace and rerun /rite-vet", target, err)}, nil
33
+ }
34
+ cursor, _ := observation.Fact(state.LedgerFile)
35
+ cursorBytes := cursor.Bytes()
36
+ if target != controller {
37
+ if err := forwardWorkspace(root, controller, target, cursorBytes); err != nil {
38
+ return nil, []string{fmt.Sprintf("%s: %v", target, err)}, nil
39
+ }
40
+ }
41
+ result, err := gate.CheckObserved(gate.Readiness, root, observation)
42
+ if err != nil {
43
+ return nil, []string{fmt.Sprintf("%s: readiness unavailable: %v; repair workspace and rerun /rite-vet", target, err)}, nil
44
+ }
45
+ structuralCursor, _ := markdowntext.Structural(cursorBytes)
46
+ status, _ := state.CursorField(strings.Split(string(structuralCursor), "\n"), state.CursorStatus)
47
+ var notices []string
48
+ if result.Phase != state.PhaseVet && result.Phase != state.PhaseBuild {
49
+ notices = append(notices, fmt.Sprintf("%s: phase %s is not Build entry; native Plan/Vet must prepare this workspace before admission", target, result.Phase))
50
+ }
51
+ if result.Phase == state.PhaseVet && status != "ready" {
52
+ notices = append(notices, fmt.Sprintf("%s: Vet is not ready; native Plan/Vet must complete before admission", target))
53
+ }
54
+ switch status {
55
+ case "awaiting_human", "blocked", "shipped", "done", "archived":
56
+ notices = append(notices, fmt.Sprintf("%s: status %s withholds writer admission; native controller must resolve this state", target, status))
57
+ }
58
+ if result.Blocked {
59
+ for _, line := range strings.Split(strings.TrimSpace(result.Render()), "\n") {
60
+ notices = append(notices, target+": "+line)
61
+ }
62
+ }
63
+ if len(notices) > 0 {
64
+ return nil, notices, nil
65
+ }
66
+ ready, notices, err := workspacePlanReady(root, target, target != controller, func(name string) ([]byte, error) {
67
+ fact, ok := observation.Fact(state.ArtifactPath(name))
68
+ if !ok || fact.State() == state.ArtifactAbsent {
69
+ return nil, os.ErrNotExist
70
+ }
71
+ if fact.State() != state.ArtifactPresent && fact.State() != state.ArtifactEmpty {
72
+ return nil, fmt.Errorf("%s: retained artifact is %s", name, fact.State())
73
+ }
74
+ return fact.Bytes(), nil
75
+ })
76
+ if err != nil {
77
+ return nil, notices, err
78
+ }
79
+ if target != controller {
80
+ for i := range ready {
81
+ ready[i].Workspace = target
82
+ }
83
+ }
84
+ return ready, notices, nil
85
+ }
86
+
87
+ // readSequenceArtifact permits archived predecessors, never an archived writer.
88
+ func readSequenceArtifact(root, slug, name string) ([]byte, error) {
89
+ dir, err := devritespaths.ExistingCanonicalFeatureDirChecked(root, slug)
90
+ if errors.Is(err, os.ErrNotExist) {
91
+ dir, err = devritespaths.ExistingArchivedFeatureDirChecked(root, slug)
92
+ }
93
+ if err != nil {
94
+ return nil, err
95
+ }
96
+ return readBoundedRegularFile(filepath.Join(dir, name), workspaceArtifactLimit)
97
+ }
98
+
99
+ func forwardWorkspace(root, controller, target string, targetState []byte) error {
100
+ seen := map[string]bool{}
101
+ current := target
102
+ found := false
103
+ for range maxSequenceChain {
104
+ if seen[current] {
105
+ return fmt.Errorf("sequence_parent cycle at %s; repair native sequence cursor", current)
106
+ }
107
+ seen[current] = true
108
+ found = found || current == controller
109
+ // Target is already retained from its live workspace observation.
110
+ raw := targetState
111
+ if current != target {
112
+ var err error
113
+ raw, err = readSequenceArtifact(root, current, "state.md")
114
+ if err != nil {
115
+ return fmt.Errorf("sequence_parent %s unavailable: %w", current, err)
116
+ }
117
+ }
118
+ structural, err := markdowntext.Structural(raw)
119
+ if err != nil {
120
+ return fmt.Errorf("sequence_parent %s state.md is invalid Markdown", current)
121
+ }
122
+ parent, _ := state.CursorField(strings.Split(string(structural), "\n"), state.CursorSequenceParent)
123
+ if parent == "" {
124
+ if found {
125
+ return nil
126
+ }
127
+ return fmt.Errorf("not a recorded forward continuation of %s; native sequence authorization required", controller)
128
+ }
129
+ if !devritespaths.ValidSlug(parent) {
130
+ return fmt.Errorf("sequence_parent %q is not a workspace slug", parent)
131
+ }
132
+ current = parent
133
+ }
134
+ return fmt.Errorf("sequence_parent chain exceeds %d workspaces", maxSequenceChain)
135
+ }
136
+
137
+ type workspaceProducer struct {
138
+ workspace string
139
+ id string
140
+ }
141
+
142
+ type workspacePlan struct {
143
+ raw []byte
144
+ graph TaskGraphResult
145
+ built map[string]bool
146
+ }
147
+
148
+ type workspaceDependencies struct {
149
+ root string
150
+ plans map[string]*workspacePlan
151
+ }
152
+
153
+ func (d *workspaceDependencies) load(slug string) (*workspacePlan, error) {
154
+ if plan := d.plans[slug]; plan != nil {
155
+ return plan, nil
156
+ }
157
+ raw, err := readSequenceArtifact(d.root, slug, "tasks.md")
158
+ if err != nil {
159
+ return nil, fmt.Errorf("producer %s tasks.md: %w", slug, err)
160
+ }
161
+ graph := ParseTaskGraph(raw)
162
+ if len(graph.Problems) > 0 {
163
+ return nil, fmt.Errorf("producer %s tasks.md: %s", slug, strings.Join(graph.Problems, "; "))
164
+ }
165
+ built, err := builtSlicesFrom(func(name string) ([]byte, error) {
166
+ return readSequenceArtifact(d.root, slug, name)
167
+ })
168
+ if err != nil {
169
+ return nil, fmt.Errorf("producer %s checkpoints: %w", slug, err)
170
+ }
171
+ plan := &workspacePlan{raw: raw, graph: graph, built: built}
172
+ d.plans[slug] = plan
173
+ return plan, nil
174
+ }
175
+
176
+ func declaredWorkspaceDependencies(block string) ([]workspaceProducer, bool, error) {
177
+ structural, err := markdowntext.Structural([]byte(block))
178
+ if err != nil {
179
+ return nil, false, fmt.Errorf("workspace dependencies cannot be read from invalid Markdown")
180
+ }
181
+ block = string(structural)
182
+ fields := sliceFields(block)
183
+ value, declared := fieldValue(fields, "workspace dependencies")
184
+ count := 0
185
+ for _, field := range sliceFieldRe.FindAllStringSubmatch(block, -1) {
186
+ if strings.EqualFold(strings.TrimSpace(field[1]), "workspace dependencies") {
187
+ count++
188
+ }
189
+ }
190
+ if count > 1 {
191
+ return nil, true, fmt.Errorf("duplicate Workspace dependencies; rerun native Plan/Vet")
192
+ }
193
+ if !declared || value == "none" {
194
+ return nil, declared, nil
195
+ }
196
+ var refs []workspaceProducer
197
+ seen := map[string]bool{}
198
+ for token := range strings.SplitSeq(value, ",") {
199
+ token = strings.TrimSpace(token)
200
+ slug, id, ok := strings.Cut(token, "/")
201
+ if !ok || !devritespaths.ValidSlug(slug) || !state.ValidSliceID(id) {
202
+ return nil, true, fmt.Errorf("malformed Workspace dependencies reference %q; use none or <slug>/SLICE-### and rerun native Plan/Vet", token)
203
+ }
204
+ if seen[token] {
205
+ return nil, true, fmt.Errorf("duplicate Workspace dependencies reference %q", token)
206
+ }
207
+ seen[token] = true
208
+ refs = append(refs, workspaceProducer{workspace: slug, id: id})
209
+ }
210
+ return refs, true, nil
211
+ }
212
+
213
+ // validate follows local and workspace edges even across built nodes: a recorded
214
+ // checkpoint cannot make an unknown reference or a cyclic plan graph valid.
215
+ func (d *workspaceDependencies) validate(ref workspaceProducer, visiting, valid map[string]bool) error {
216
+ key := parallel.SliceKey(ref.workspace, ref.id)
217
+ if visiting[key] {
218
+ return fmt.Errorf("workspace dependencies cycle at %s; repair native Plan/Vet", key)
219
+ }
220
+ if valid[key] {
221
+ return nil
222
+ }
223
+ if len(visiting)+len(valid) >= 4096 {
224
+ return fmt.Errorf("workspace dependencies graph exceeds 4096 slices")
225
+ }
226
+ plan, err := d.load(ref.workspace)
227
+ if err != nil {
228
+ return err
229
+ }
230
+ var node *TaskSlice
231
+ for i := range plan.graph.Slices {
232
+ if plan.graph.Slices[i].ID == ref.id {
233
+ node = &plan.graph.Slices[i]
234
+ break
235
+ }
236
+ }
237
+ if node == nil {
238
+ return fmt.Errorf("unknown Workspace dependencies producer %s", key)
239
+ }
240
+ block, _ := state.ExtractTaskSlice(plan.raw, ref.id)
241
+ refs, _, err := declaredWorkspaceDependencies(block)
242
+ if err != nil {
243
+ return fmt.Errorf("%s: %w", key, err)
244
+ }
245
+ for _, id := range node.Dependencies {
246
+ refs = append(refs, workspaceProducer{workspace: ref.workspace, id: id})
247
+ }
248
+ visiting[key] = true
249
+ defer delete(visiting, key)
250
+ for _, dependency := range refs {
251
+ if err := d.validate(dependency, visiting, valid); err != nil {
252
+ return err
253
+ }
254
+ }
255
+ valid[key] = true
256
+ return nil
257
+ }
258
+
259
+ func workspacePlanReady(root, slug string, requireDeclaration bool, read func(string) ([]byte, error)) ([]parallel.SlicePaths, []string, error) {
260
+ raw, err := read("tasks.md")
261
+ if err != nil {
262
+ return nil, nil, err
263
+ }
264
+ graph := ParseTaskGraph(raw)
265
+ if len(graph.Problems) > 0 {
266
+ return nil, nil, fmt.Errorf("tasks.md: %s", strings.Join(graph.Problems, "; "))
267
+ }
268
+ built, err := builtSlicesFrom(read)
269
+ if err != nil {
270
+ return nil, nil, err
271
+ }
272
+ deps := workspaceDependencies{root: root, plans: map[string]*workspacePlan{
273
+ slug: {raw: raw, graph: graph, built: built},
274
+ }}
275
+ paths, _ := sliceWritePaths(raw, graph)
276
+ var ready []parallel.SlicePaths
277
+ var notices []string
278
+ valid := map[string]bool{}
279
+ for _, node := range graph.Slices {
280
+ block, _ := state.ExtractTaskSlice(raw, node.ID)
281
+ if satisfies, _ := fieldValue(sliceFields(block), "satisfies"); strings.EqualFold(satisfies, "none") {
282
+ continue
283
+ }
284
+ if built[sliceNumber(node.ID)] || slicesUnbuilt(node.Dependencies, built) {
285
+ continue
286
+ }
287
+ key := parallel.SliceKey(slug, node.ID)
288
+ refs, declared, problem := declaredWorkspaceDependencies(block)
289
+ if problem == nil && requireDeclaration && !declared {
290
+ problem = fmt.Errorf("missing Workspace dependencies; native Plan/Vet must bind none or explicit producers before foreign admission")
291
+ }
292
+ if problem == nil {
293
+ problem = deps.validate(workspaceProducer{workspace: slug, id: node.ID}, map[string]bool{}, valid)
294
+ }
295
+ if problem != nil {
296
+ notices = append(notices, key+": "+problem.Error())
297
+ continue
298
+ }
299
+ waiting := false
300
+ for _, ref := range refs {
301
+ producer := deps.plans[ref.workspace] // validate loaded every referenced graph.
302
+ if !producer.built[sliceNumber(ref.id)] {
303
+ notices = append(notices, fmt.Sprintf("%s: waiting for durable BUILT/integrated producer %s", key, parallel.SliceKey(ref.workspace, ref.id)))
304
+ waiting = true
305
+ }
306
+ }
307
+ if waiting {
308
+ continue
309
+ }
310
+ if len(paths[node.ID]) == 0 {
311
+ if requireDeclaration {
312
+ notices = append(notices, key+": no Writer allowlist or Files likely touched; repair native Plan/Vet")
313
+ continue
314
+ }
315
+ return nil, notices, fmt.Errorf("%s has no Writer allowlist or Files likely touched", node.ID)
316
+ }
317
+ external, _ := fieldValue(sliceFields(block), "external dependencies")
318
+ ready = append(ready, parallel.SlicePaths{ID: node.ID, Paths: withManifests(filepath.Dir(root), paths[node.ID], external)})
319
+ }
320
+ return ready, notices, nil
321
+ }
322
+
323
+ func slicesUnbuilt(ids []string, built map[string]bool) bool {
324
+ for _, id := range ids {
325
+ if !built[sliceNumber(id)] {
326
+ return true
327
+ }
328
+ }
329
+ return false
330
+ }