devrites 6.10.0 → 7.0.1

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 (668) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +8 -4
  3. package/SECURITY.md +1 -1
  4. package/docs/adr/0038-engine-flags-unattributed-root-edits.md +67 -0
  5. package/docs/adr/README.md +2 -1
  6. package/docs/cli.md +19 -6
  7. package/docs/command-map.md +22 -20
  8. package/docs/engine/commands.md +22 -15
  9. package/docs/usage.md +10 -5
  10. package/engine/commands.go +8 -3
  11. package/engine/help.go +43 -16
  12. package/engine/internal/acceptance/approve.go +46 -7
  13. package/engine/internal/acceptance/cli.go +102 -0
  14. package/engine/internal/acceptance/exec.go +8 -6
  15. package/engine/internal/acceptance/ledger.go +16 -1
  16. package/engine/internal/acceptance/lint.go +9 -1
  17. package/engine/internal/acceptance/preconditions.go +201 -0
  18. package/engine/internal/anchor/anchor.go +76 -0
  19. package/engine/internal/gate/drivers.go +144 -0
  20. package/engine/internal/gate/gate.go +56 -13
  21. package/engine/internal/gate/preconditions.go +121 -0
  22. package/engine/internal/gate/predecessor.go +67 -0
  23. package/engine/internal/lib/anchors.go +270 -0
  24. package/engine/internal/lib/apply_bundle.go +2 -1
  25. package/engine/internal/lib/candidate.go +17 -8
  26. package/engine/internal/lib/claims.go +104 -39
  27. package/engine/internal/lib/context.go +337 -22
  28. package/engine/internal/lib/diffscope.go +201 -12
  29. package/engine/internal/lib/dispatch.go +393 -21
  30. package/engine/internal/lib/dispatch_contract.go +82 -2
  31. package/engine/internal/lib/dispatch_packet.go +224 -8
  32. package/engine/internal/lib/environment_report.go +2 -3
  33. package/engine/internal/lib/handoff.go +33 -3
  34. package/engine/internal/lib/metrics.go +119 -11
  35. package/engine/internal/lib/next.go +45 -5
  36. package/engine/internal/lib/observe_summary.go +2 -4
  37. package/engine/internal/lib/packet.go +319 -0
  38. package/engine/internal/lib/packet_freeze.go +227 -0
  39. package/engine/internal/lib/perturb.go +403 -0
  40. package/engine/internal/lib/questions_lint.go +99 -0
  41. package/engine/internal/lib/state_edit.go +396 -0
  42. package/engine/internal/lib/taskgraph.go +166 -0
  43. package/engine/internal/lib/treebaseline.go +331 -0
  44. package/engine/internal/lib/triggers.go +19 -0
  45. package/engine/internal/lib/windows.go +110 -5
  46. package/engine/internal/overhaul/admit/run.go +7 -30
  47. package/engine/internal/parallel/cli.go +27 -33
  48. package/engine/internal/parallel/git.go +10 -0
  49. package/engine/internal/parallel/select.go +36 -0
  50. package/engine/internal/state/budgets.go +60 -13
  51. package/engine/internal/state/observation.go +1 -1
  52. package/engine/main.go +61 -14
  53. package/pack/.claude/agents/devrites-code-reviewer.md +9 -5
  54. package/pack/.claude/agents/devrites-devex-reviewer.md +5 -4
  55. package/pack/.claude/agents/devrites-doubt-reviewer.md +4 -4
  56. package/pack/.claude/agents/devrites-evidence-scout.md +3 -2
  57. package/pack/.claude/agents/devrites-frontend-reviewer.md +5 -4
  58. package/pack/.claude/agents/devrites-performance-reviewer.md +5 -5
  59. package/pack/.claude/agents/devrites-plan-drafter.md +4 -2
  60. package/pack/.claude/agents/devrites-plan-reviewer.md +5 -5
  61. package/pack/.claude/agents/devrites-proof-runner.md +1 -1
  62. package/pack/.claude/agents/devrites-retrospector.md +1 -1
  63. package/pack/.claude/agents/devrites-security-auditor.md +4 -4
  64. package/pack/.claude/agents/devrites-simplifier-reviewer.md +5 -4
  65. package/pack/.claude/agents/devrites-slice-wright.md +18 -9
  66. package/pack/.claude/agents/devrites-spec-reviewer.md +4 -4
  67. package/pack/.claude/agents/devrites-strategy-reviewer.md +5 -6
  68. package/pack/.claude/agents/devrites-test-analyst.md +7 -4
  69. package/pack/.claude/agents/devrites-upgrade-planner.md +1 -1
  70. package/pack/.claude/agents/fast-builder.md +4 -2
  71. package/pack/.claude/agents/fast-checker.md +3 -2
  72. package/pack/.claude/agents/fast-critic.md +3 -2
  73. package/pack/.claude/agents/fast-planner.md +3 -3
  74. package/pack/.claude/agents/overhaul-recon.md +5 -4
  75. package/pack/.claude/settings.json +19 -7
  76. package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -1
  77. package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
  78. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +1 -1
  79. package/pack/.claude/skills/devrites-doubt/SKILL.md +5 -5
  80. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  81. package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
  82. package/pack/.claude/skills/devrites-lib/SKILL.md +11 -6
  83. package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  84. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  85. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +2 -1
  86. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  87. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +43 -19
  88. package/pack/.claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  89. package/pack/.claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
  90. package/pack/.claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  91. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  92. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +14 -1
  93. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  94. package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +10 -1
  95. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +14 -0
  96. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +4 -0
  97. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +3 -1
  98. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
  99. package/pack/.claude/skills/devrites-lib/reference/standards/windows.md +3 -2
  100. package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  101. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  102. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
  103. package/pack/.claude/skills/overhaul/references/orchestration.md +3 -2
  104. package/pack/.claude/skills/rite/SKILL.md +1 -1
  105. package/pack/.claude/skills/rite-adopt/SKILL.md +1 -1
  106. package/pack/.claude/skills/rite-adopt/reference/adoption.md +1 -1
  107. package/pack/.claude/skills/rite-autocomplete/SKILL.md +11 -6
  108. package/pack/.claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
  109. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -0
  110. package/pack/.claude/skills/rite-build/SKILL.md +4 -3
  111. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -0
  112. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  113. package/pack/.claude/skills/rite-build/reference/checkpoint.md +2 -0
  114. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  115. package/pack/.claude/skills/rite-build/reference/output.md +2 -0
  116. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +22 -12
  117. package/pack/.claude/skills/rite-build/reference/phase-contract.md +13 -3
  118. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
  119. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +42 -25
  120. package/pack/.claude/skills/rite-clarify/SKILL.md +1 -1
  121. package/pack/.claude/skills/rite-converge/SKILL.md +4 -4
  122. package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
  123. package/pack/.claude/skills/rite-define/SKILL.md +10 -5
  124. package/pack/.claude/skills/rite-doctor/SKILL.md +17 -2
  125. package/pack/.claude/skills/rite-dogfood/SKILL.md +1 -1
  126. package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
  127. package/pack/.claude/skills/rite-explain/reference/intake.md +1 -1
  128. package/pack/.claude/skills/rite-fast/SKILL.md +1 -1
  129. package/pack/.claude/skills/rite-handoff/SKILL.md +3 -3
  130. package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +1 -1
  131. package/pack/.claude/skills/rite-plan/SKILL.md +4 -4
  132. package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -2
  133. package/pack/.claude/skills/rite-polish/SKILL.md +6 -3
  134. package/pack/.claude/skills/rite-prove/SKILL.md +1 -1
  135. package/pack/.claude/skills/rite-quick/SKILL.md +1 -1
  136. package/pack/.claude/skills/rite-resolve/SKILL.md +1 -1
  137. package/pack/.claude/skills/rite-review/SKILL.md +4 -4
  138. package/pack/.claude/skills/rite-seal/SKILL.md +2 -2
  139. package/pack/.claude/skills/rite-ship/SKILL.md +1 -1
  140. package/pack/.claude/skills/rite-spec/SKILL.md +3 -2
  141. package/pack/.claude/skills/rite-spec/reference/investigation.md +5 -5
  142. package/pack/.claude/skills/rite-spec/reference/spec-template.md +1 -1
  143. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -4
  144. package/pack/.claude/skills/rite-status/SKILL.md +1 -1
  145. package/pack/.claude/skills/rite-temper/SKILL.md +1 -1
  146. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  147. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +2 -2
  148. package/pack/.claude/skills/rite-temper/reference/significance.md +2 -2
  149. package/pack/.claude/skills/rite-vet/SKILL.md +11 -5
  150. package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -3
  151. package/pack/.claude/skills/rite-vet/reference/depth.md +2 -2
  152. package/pack/.claude/skills/rite-vet/reference/review-axes.md +2 -2
  153. package/pack/.claude/skills/rite-zoom-out/SKILL.md +6 -6
  154. package/pack/generated/claude/agents/devrites-code-reviewer.md +9 -5
  155. package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -4
  156. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +4 -4
  157. package/pack/generated/claude/agents/devrites-evidence-scout.md +3 -2
  158. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +5 -4
  159. package/pack/generated/claude/agents/devrites-performance-reviewer.md +5 -5
  160. package/pack/generated/claude/agents/devrites-plan-drafter.md +4 -2
  161. package/pack/generated/claude/agents/devrites-plan-reviewer.md +5 -5
  162. package/pack/generated/claude/agents/devrites-proof-runner.md +1 -1
  163. package/pack/generated/claude/agents/devrites-retrospector.md +1 -1
  164. package/pack/generated/claude/agents/devrites-security-auditor.md +4 -4
  165. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +5 -4
  166. package/pack/generated/claude/agents/devrites-slice-wright.md +18 -9
  167. package/pack/generated/claude/agents/devrites-spec-reviewer.md +4 -4
  168. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +5 -6
  169. package/pack/generated/claude/agents/devrites-test-analyst.md +7 -4
  170. package/pack/generated/claude/agents/devrites-upgrade-planner.md +1 -1
  171. package/pack/generated/claude/agents/fast-builder.md +4 -2
  172. package/pack/generated/claude/agents/fast-checker.md +3 -2
  173. package/pack/generated/claude/agents/fast-critic.md +3 -2
  174. package/pack/generated/claude/agents/fast-planner.md +3 -3
  175. package/pack/generated/claude/agents/overhaul-recon.md +5 -4
  176. package/pack/generated/claude/settings.json +19 -7
  177. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -1
  178. package/pack/generated/claude/skills/devrites-audit/SKILL.md +1 -1
  179. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +1 -1
  180. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +5 -5
  181. package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  182. package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
  183. package/pack/generated/claude/skills/devrites-lib/SKILL.md +11 -6
  184. package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  185. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  186. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +2 -1
  187. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  188. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +43 -19
  189. package/pack/generated/claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  190. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
  191. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  192. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  193. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +14 -1
  194. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  195. package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +10 -1
  196. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +14 -0
  197. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +4 -0
  198. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +3 -1
  199. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
  200. package/pack/generated/claude/skills/devrites-lib/reference/standards/windows.md +3 -2
  201. package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  202. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  203. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
  204. package/pack/generated/claude/skills/overhaul/references/orchestration.md +3 -2
  205. package/pack/generated/claude/skills/rite/SKILL.md +1 -1
  206. package/pack/generated/claude/skills/rite-adopt/SKILL.md +1 -1
  207. package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +1 -1
  208. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +11 -6
  209. package/pack/generated/claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
  210. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -0
  211. package/pack/generated/claude/skills/rite-build/SKILL.md +4 -3
  212. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -0
  213. package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  214. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +2 -0
  215. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  216. package/pack/generated/claude/skills/rite-build/reference/output.md +2 -0
  217. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +22 -12
  218. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +13 -3
  219. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
  220. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +42 -25
  221. package/pack/generated/claude/skills/rite-clarify/SKILL.md +1 -1
  222. package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -4
  223. package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
  224. package/pack/generated/claude/skills/rite-define/SKILL.md +10 -5
  225. package/pack/generated/claude/skills/rite-doctor/SKILL.md +17 -2
  226. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +1 -1
  227. package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
  228. package/pack/generated/claude/skills/rite-explain/reference/intake.md +1 -1
  229. package/pack/generated/claude/skills/rite-fast/SKILL.md +1 -1
  230. package/pack/generated/claude/skills/rite-handoff/SKILL.md +3 -3
  231. package/pack/generated/claude/skills/rite-handoff/reference/handoff-template.md +1 -1
  232. package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -4
  233. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -2
  234. package/pack/generated/claude/skills/rite-polish/SKILL.md +6 -3
  235. package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -1
  236. package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -1
  237. package/pack/generated/claude/skills/rite-resolve/SKILL.md +1 -1
  238. package/pack/generated/claude/skills/rite-review/SKILL.md +4 -4
  239. package/pack/generated/claude/skills/rite-seal/SKILL.md +2 -2
  240. package/pack/generated/claude/skills/rite-ship/SKILL.md +1 -1
  241. package/pack/generated/claude/skills/rite-spec/SKILL.md +3 -2
  242. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +5 -5
  243. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +1 -1
  244. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -4
  245. package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
  246. package/pack/generated/claude/skills/rite-temper/SKILL.md +1 -1
  247. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  248. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +2 -2
  249. package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -2
  250. package/pack/generated/claude/skills/rite-vet/SKILL.md +11 -5
  251. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -3
  252. package/pack/generated/claude/skills/rite-vet/reference/depth.md +2 -2
  253. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +2 -2
  254. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +6 -6
  255. package/pack/generated/codex/agents/devrites-code-reviewer.toml +8 -4
  256. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +4 -3
  257. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +3 -3
  258. package/pack/generated/codex/agents/devrites-evidence-scout.toml +2 -1
  259. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +4 -3
  260. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +4 -4
  261. package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -1
  262. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +4 -4
  263. package/pack/generated/codex/agents/devrites-security-auditor.toml +3 -3
  264. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +4 -3
  265. package/pack/generated/codex/agents/devrites-slice-wright.toml +17 -8
  266. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +3 -3
  267. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +4 -5
  268. package/pack/generated/codex/agents/devrites-test-analyst.toml +6 -3
  269. package/pack/generated/codex/agents/fast-builder.toml +3 -1
  270. package/pack/generated/codex/agents/fast-checker.toml +2 -1
  271. package/pack/generated/codex/agents/fast-critic.toml +2 -1
  272. package/pack/generated/codex/agents/fast-planner.toml +2 -2
  273. package/pack/generated/codex/agents/overhaul-recon.toml +5 -4
  274. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -1
  275. package/pack/generated/codex/skills/devrites-audit/SKILL.md +1 -1
  276. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +1 -1
  277. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +5 -5
  278. package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  279. package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
  280. package/pack/generated/codex/skills/devrites-lib/SKILL.md +11 -6
  281. package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  282. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  283. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +2 -1
  284. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  285. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +43 -19
  286. package/pack/generated/codex/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  287. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-index.md +111 -0
  288. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  289. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  290. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +14 -1
  291. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  292. package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +10 -1
  293. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +14 -0
  294. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +4 -0
  295. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +3 -1
  296. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +9 -8
  297. package/pack/generated/codex/skills/devrites-lib/reference/standards/windows.md +3 -2
  298. package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  299. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  300. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
  301. package/pack/generated/codex/skills/overhaul/references/orchestration.md +3 -2
  302. package/pack/generated/codex/skills/rite/SKILL.md +1 -1
  303. package/pack/generated/codex/skills/rite-adopt/SKILL.md +1 -1
  304. package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +1 -1
  305. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +11 -6
  306. package/pack/generated/codex/skills/rite-autocomplete/reference/lookahead.md +50 -0
  307. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -0
  308. package/pack/generated/codex/skills/rite-build/SKILL.md +4 -3
  309. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -0
  310. package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  311. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +2 -0
  312. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +1 -1
  313. package/pack/generated/codex/skills/rite-build/reference/output.md +2 -0
  314. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +22 -12
  315. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +13 -3
  316. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +4 -0
  317. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +42 -25
  318. package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
  319. package/pack/generated/codex/skills/rite-converge/SKILL.md +4 -4
  320. package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +3 -3
  321. package/pack/generated/codex/skills/rite-define/SKILL.md +10 -5
  322. package/pack/generated/codex/skills/rite-doctor/SKILL.md +17 -2
  323. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +1 -1
  324. package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
  325. package/pack/generated/codex/skills/rite-explain/reference/intake.md +1 -1
  326. package/pack/generated/codex/skills/rite-fast/SKILL.md +1 -1
  327. package/pack/generated/codex/skills/rite-handoff/SKILL.md +3 -3
  328. package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +1 -1
  329. package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -4
  330. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -2
  331. package/pack/generated/codex/skills/rite-polish/SKILL.md +6 -3
  332. package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
  333. package/pack/generated/codex/skills/rite-quick/SKILL.md +1 -1
  334. package/pack/generated/codex/skills/rite-resolve/SKILL.md +1 -1
  335. package/pack/generated/codex/skills/rite-review/SKILL.md +4 -4
  336. package/pack/generated/codex/skills/rite-seal/SKILL.md +2 -2
  337. package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
  338. package/pack/generated/codex/skills/rite-spec/SKILL.md +3 -2
  339. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +5 -5
  340. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +1 -1
  341. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -4
  342. package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
  343. package/pack/generated/codex/skills/rite-temper/SKILL.md +1 -1
  344. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +2 -2
  345. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +2 -2
  346. package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -2
  347. package/pack/generated/codex/skills/rite-vet/SKILL.md +11 -5
  348. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -3
  349. package/pack/generated/codex/skills/rite-vet/reference/depth.md +2 -2
  350. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +2 -2
  351. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +6 -6
  352. package/pack/generated/devin/agents/devrites-code-reviewer.md +8 -4
  353. package/pack/generated/devin/agents/devrites-devex-reviewer.md +4 -3
  354. package/pack/generated/devin/agents/devrites-doubt-reviewer.md +3 -3
  355. package/pack/generated/devin/agents/devrites-evidence-scout.md +2 -1
  356. package/pack/generated/devin/agents/devrites-frontend-reviewer.md +4 -3
  357. package/pack/generated/devin/agents/devrites-performance-reviewer.md +4 -4
  358. package/pack/generated/devin/agents/devrites-plan-drafter.md +3 -1
  359. package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -4
  360. package/pack/generated/devin/agents/devrites-security-auditor.md +3 -3
  361. package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +4 -3
  362. package/pack/generated/devin/agents/devrites-slice-wright.md +17 -8
  363. package/pack/generated/devin/agents/devrites-spec-reviewer.md +3 -3
  364. package/pack/generated/devin/agents/devrites-strategy-reviewer.md +4 -5
  365. package/pack/generated/devin/agents/devrites-test-analyst.md +6 -3
  366. package/pack/generated/devin/agents/fast-builder.md +3 -1
  367. package/pack/generated/devin/agents/fast-checker.md +2 -1
  368. package/pack/generated/devin/agents/fast-critic.md +2 -1
  369. package/pack/generated/devin/agents/fast-planner.md +2 -2
  370. package/pack/generated/devin/agents/overhaul-recon.md +5 -4
  371. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +1 -1
  372. package/pack/generated/devin/skills/devrites-audit/SKILL.md +1 -1
  373. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +1 -1
  374. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +5 -5
  375. package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  376. package/pack/generated/devin/skills/devrites-interview/SKILL.md +1 -1
  377. package/pack/generated/devin/skills/devrites-lib/SKILL.md +11 -6
  378. package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  379. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  380. package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +2 -1
  381. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  382. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +43 -19
  383. package/pack/generated/devin/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  384. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-index.md +111 -0
  385. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  386. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  387. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +14 -1
  388. package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  389. package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +10 -1
  390. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +14 -0
  391. package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +4 -0
  392. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +3 -1
  393. package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +9 -8
  394. package/pack/generated/devin/skills/devrites-lib/reference/standards/windows.md +3 -2
  395. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  396. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  397. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
  398. package/pack/generated/devin/skills/overhaul/references/orchestration.md +3 -2
  399. package/pack/generated/devin/skills/rite/SKILL.md +1 -1
  400. package/pack/generated/devin/skills/rite-adopt/SKILL.md +1 -1
  401. package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +1 -1
  402. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +11 -6
  403. package/pack/generated/devin/skills/rite-autocomplete/reference/lookahead.md +50 -0
  404. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +7 -0
  405. package/pack/generated/devin/skills/rite-build/SKILL.md +4 -3
  406. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +2 -0
  407. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  408. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +2 -0
  409. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +1 -1
  410. package/pack/generated/devin/skills/rite-build/reference/output.md +2 -0
  411. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +22 -12
  412. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +13 -3
  413. package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +4 -0
  414. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +42 -25
  415. package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
  416. package/pack/generated/devin/skills/rite-converge/SKILL.md +4 -4
  417. package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +3 -3
  418. package/pack/generated/devin/skills/rite-define/SKILL.md +10 -5
  419. package/pack/generated/devin/skills/rite-doctor/SKILL.md +17 -2
  420. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +1 -1
  421. package/pack/generated/devin/skills/rite-explain/SKILL.md +1 -1
  422. package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
  423. package/pack/generated/devin/skills/rite-fast/SKILL.md +1 -1
  424. package/pack/generated/devin/skills/rite-handoff/SKILL.md +3 -3
  425. package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +1 -1
  426. package/pack/generated/devin/skills/rite-plan/SKILL.md +4 -4
  427. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -2
  428. package/pack/generated/devin/skills/rite-polish/SKILL.md +6 -3
  429. package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
  430. package/pack/generated/devin/skills/rite-quick/SKILL.md +1 -1
  431. package/pack/generated/devin/skills/rite-resolve/SKILL.md +1 -1
  432. package/pack/generated/devin/skills/rite-review/SKILL.md +4 -4
  433. package/pack/generated/devin/skills/rite-seal/SKILL.md +2 -2
  434. package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
  435. package/pack/generated/devin/skills/rite-spec/SKILL.md +3 -2
  436. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +5 -5
  437. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +1 -1
  438. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +6 -4
  439. package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
  440. package/pack/generated/devin/skills/rite-temper/SKILL.md +1 -1
  441. package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +2 -2
  442. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +2 -2
  443. package/pack/generated/devin/skills/rite-temper/reference/significance.md +2 -2
  444. package/pack/generated/devin/skills/rite-vet/SKILL.md +11 -5
  445. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +10 -3
  446. package/pack/generated/devin/skills/rite-vet/reference/depth.md +2 -2
  447. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
  448. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +6 -6
  449. package/pack/generated/omp/agents/devrites-code-reviewer.md +9 -5
  450. package/pack/generated/omp/agents/devrites-devex-reviewer.md +5 -4
  451. package/pack/generated/omp/agents/devrites-doubt-reviewer.md +4 -4
  452. package/pack/generated/omp/agents/devrites-evidence-scout.md +3 -2
  453. package/pack/generated/omp/agents/devrites-frontend-reviewer.md +5 -4
  454. package/pack/generated/omp/agents/devrites-performance-reviewer.md +5 -5
  455. package/pack/generated/omp/agents/devrites-plan-drafter.md +4 -2
  456. package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -5
  457. package/pack/generated/omp/agents/devrites-proof-runner.md +1 -1
  458. package/pack/generated/omp/agents/devrites-retrospector.md +1 -1
  459. package/pack/generated/omp/agents/devrites-security-auditor.md +4 -4
  460. package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +5 -4
  461. package/pack/generated/omp/agents/devrites-slice-wright.md +18 -9
  462. package/pack/generated/omp/agents/devrites-spec-reviewer.md +4 -4
  463. package/pack/generated/omp/agents/devrites-strategy-reviewer.md +5 -6
  464. package/pack/generated/omp/agents/devrites-test-analyst.md +7 -4
  465. package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
  466. package/pack/generated/omp/agents/fast-builder.md +4 -2
  467. package/pack/generated/omp/agents/fast-checker.md +3 -2
  468. package/pack/generated/omp/agents/fast-critic.md +3 -2
  469. package/pack/generated/omp/agents/fast-planner.md +3 -3
  470. package/pack/generated/omp/agents/overhaul-backend-engineer.md +1 -1
  471. package/pack/generated/omp/agents/overhaul-boundary.md +1 -1
  472. package/pack/generated/omp/agents/overhaul-craft.md +1 -1
  473. package/pack/generated/omp/agents/overhaul-frontend-engineer.md +1 -1
  474. package/pack/generated/omp/agents/overhaul-implementer.md +1 -1
  475. package/pack/generated/omp/agents/overhaul-recon.md +6 -5
  476. package/pack/generated/omp/agents/overhaul-specialist.md +1 -1
  477. package/pack/generated/omp/agents/overhaul-verifier.md +1 -1
  478. package/pack/generated/omp/commands/rite-autocomplete.md +1 -1
  479. package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +1 -1
  480. package/pack/generated/omp/skills/devrites-audit/SKILL.md +1 -1
  481. package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +1 -1
  482. package/pack/generated/omp/skills/devrites-doubt/SKILL.md +5 -5
  483. package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  484. package/pack/generated/omp/skills/devrites-interview/SKILL.md +1 -1
  485. package/pack/generated/omp/skills/devrites-lib/SKILL.md +11 -6
  486. package/pack/generated/omp/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  487. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  488. package/pack/generated/omp/skills/devrites-lib/reference/standards/README.md +2 -1
  489. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  490. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +43 -19
  491. package/pack/generated/omp/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  492. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-index.md +111 -0
  493. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  494. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  495. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +14 -1
  496. package/pack/generated/omp/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  497. package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +10 -1
  498. package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +14 -0
  499. package/pack/generated/omp/skills/devrites-lib/reference/standards/security.md +4 -0
  500. package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +3 -1
  501. package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +9 -8
  502. package/pack/generated/omp/skills/devrites-lib/reference/standards/windows.md +3 -2
  503. package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  504. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  505. package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +1 -1
  506. package/pack/generated/omp/skills/overhaul/references/orchestration.md +3 -2
  507. package/pack/generated/omp/skills/rite/SKILL.md +1 -1
  508. package/pack/generated/omp/skills/rite-adopt/SKILL.md +1 -1
  509. package/pack/generated/omp/skills/rite-adopt/reference/adoption.md +1 -1
  510. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +11 -6
  511. package/pack/generated/omp/skills/rite-autocomplete/reference/lookahead.md +50 -0
  512. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +7 -0
  513. package/pack/generated/omp/skills/rite-build/SKILL.md +4 -3
  514. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +2 -0
  515. package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  516. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -0
  517. package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +1 -1
  518. package/pack/generated/omp/skills/rite-build/reference/output.md +2 -0
  519. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +22 -12
  520. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +13 -3
  521. package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +4 -0
  522. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +42 -25
  523. package/pack/generated/omp/skills/rite-clarify/SKILL.md +1 -1
  524. package/pack/generated/omp/skills/rite-converge/SKILL.md +4 -4
  525. package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +3 -3
  526. package/pack/generated/omp/skills/rite-define/SKILL.md +10 -5
  527. package/pack/generated/omp/skills/rite-doctor/SKILL.md +17 -2
  528. package/pack/generated/omp/skills/rite-dogfood/SKILL.md +1 -1
  529. package/pack/generated/omp/skills/rite-explain/SKILL.md +1 -1
  530. package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
  531. package/pack/generated/omp/skills/rite-fast/SKILL.md +1 -1
  532. package/pack/generated/omp/skills/rite-handoff/SKILL.md +3 -3
  533. package/pack/generated/omp/skills/rite-handoff/reference/handoff-template.md +1 -1
  534. package/pack/generated/omp/skills/rite-plan/SKILL.md +4 -4
  535. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +3 -2
  536. package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -3
  537. package/pack/generated/omp/skills/rite-prove/SKILL.md +1 -1
  538. package/pack/generated/omp/skills/rite-quick/SKILL.md +1 -1
  539. package/pack/generated/omp/skills/rite-resolve/SKILL.md +1 -1
  540. package/pack/generated/omp/skills/rite-review/SKILL.md +4 -4
  541. package/pack/generated/omp/skills/rite-seal/SKILL.md +2 -2
  542. package/pack/generated/omp/skills/rite-ship/SKILL.md +1 -1
  543. package/pack/generated/omp/skills/rite-spec/SKILL.md +3 -2
  544. package/pack/generated/omp/skills/rite-spec/reference/investigation.md +5 -5
  545. package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +1 -1
  546. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +6 -4
  547. package/pack/generated/omp/skills/rite-status/SKILL.md +1 -1
  548. package/pack/generated/omp/skills/rite-temper/SKILL.md +1 -1
  549. package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +2 -2
  550. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +2 -2
  551. package/pack/generated/omp/skills/rite-temper/reference/significance.md +2 -2
  552. package/pack/generated/omp/skills/rite-vet/SKILL.md +11 -5
  553. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +10 -3
  554. package/pack/generated/omp/skills/rite-vet/reference/depth.md +2 -2
  555. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +2 -2
  556. package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +6 -6
  557. package/pack/generated/pi/agents/devrites-code-reviewer.md +9 -5
  558. package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -4
  559. package/pack/generated/pi/agents/devrites-doubt-reviewer.md +4 -4
  560. package/pack/generated/pi/agents/devrites-evidence-scout.md +3 -2
  561. package/pack/generated/pi/agents/devrites-frontend-reviewer.md +5 -4
  562. package/pack/generated/pi/agents/devrites-performance-reviewer.md +5 -5
  563. package/pack/generated/pi/agents/devrites-plan-drafter.md +4 -2
  564. package/pack/generated/pi/agents/devrites-plan-reviewer.md +5 -5
  565. package/pack/generated/pi/agents/devrites-proof-runner.md +1 -1
  566. package/pack/generated/pi/agents/devrites-retrospector.md +1 -1
  567. package/pack/generated/pi/agents/devrites-security-auditor.md +4 -4
  568. package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +5 -4
  569. package/pack/generated/pi/agents/devrites-slice-wright.md +18 -9
  570. package/pack/generated/pi/agents/devrites-spec-reviewer.md +4 -4
  571. package/pack/generated/pi/agents/devrites-strategy-reviewer.md +5 -6
  572. package/pack/generated/pi/agents/devrites-test-analyst.md +7 -4
  573. package/pack/generated/pi/agents/devrites-upgrade-planner.md +1 -1
  574. package/pack/generated/pi/agents/fast-builder.md +4 -2
  575. package/pack/generated/pi/agents/fast-checker.md +3 -2
  576. package/pack/generated/pi/agents/fast-critic.md +3 -2
  577. package/pack/generated/pi/agents/fast-planner.md +3 -3
  578. package/pack/generated/pi/agents/overhaul-backend-engineer.md +1 -1
  579. package/pack/generated/pi/agents/overhaul-boundary.md +1 -1
  580. package/pack/generated/pi/agents/overhaul-craft.md +1 -1
  581. package/pack/generated/pi/agents/overhaul-frontend-engineer.md +1 -1
  582. package/pack/generated/pi/agents/overhaul-implementer.md +1 -1
  583. package/pack/generated/pi/agents/overhaul-recon.md +6 -5
  584. package/pack/generated/pi/agents/overhaul-specialist.md +1 -1
  585. package/pack/generated/pi/agents/overhaul-verifier.md +1 -1
  586. package/pack/generated/pi/prompts/rite-autocomplete.md +1 -1
  587. package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +1 -1
  588. package/pack/generated/pi/skills/devrites-audit/SKILL.md +1 -1
  589. package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +1 -1
  590. package/pack/generated/pi/skills/devrites-doubt/SKILL.md +5 -5
  591. package/pack/generated/pi/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  592. package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
  593. package/pack/generated/pi/skills/devrites-lib/SKILL.md +11 -6
  594. package/pack/generated/pi/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  595. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  596. package/pack/generated/pi/skills/devrites-lib/reference/standards/README.md +2 -1
  597. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  598. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +43 -19
  599. package/pack/generated/pi/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  600. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-index.md +111 -0
  601. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  602. package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  603. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +14 -1
  604. package/pack/generated/pi/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  605. package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +10 -1
  606. package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +14 -0
  607. package/pack/generated/pi/skills/devrites-lib/reference/standards/security.md +4 -0
  608. package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +3 -1
  609. package/pack/generated/pi/skills/devrites-lib/reference/standards/tooling.md +9 -8
  610. package/pack/generated/pi/skills/devrites-lib/reference/standards/windows.md +3 -2
  611. package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  612. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  613. package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
  614. package/pack/generated/pi/skills/overhaul/references/orchestration.md +3 -2
  615. package/pack/generated/pi/skills/rite/SKILL.md +1 -1
  616. package/pack/generated/pi/skills/rite-adopt/SKILL.md +1 -1
  617. package/pack/generated/pi/skills/rite-adopt/reference/adoption.md +1 -1
  618. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +11 -6
  619. package/pack/generated/pi/skills/rite-autocomplete/reference/lookahead.md +50 -0
  620. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +7 -0
  621. package/pack/generated/pi/skills/rite-build/SKILL.md +4 -3
  622. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +2 -0
  623. package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  624. package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +2 -0
  625. package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +1 -1
  626. package/pack/generated/pi/skills/rite-build/reference/output.md +2 -0
  627. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +22 -12
  628. package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +13 -3
  629. package/pack/generated/pi/skills/rite-build/reference/spec-drift-guard.md +4 -0
  630. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +42 -25
  631. package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
  632. package/pack/generated/pi/skills/rite-converge/SKILL.md +4 -4
  633. package/pack/generated/pi/skills/rite-converge/reference/convergence-assessment.md +3 -3
  634. package/pack/generated/pi/skills/rite-define/SKILL.md +10 -5
  635. package/pack/generated/pi/skills/rite-doctor/SKILL.md +17 -2
  636. package/pack/generated/pi/skills/rite-dogfood/SKILL.md +1 -1
  637. package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
  638. package/pack/generated/pi/skills/rite-explain/reference/intake.md +1 -1
  639. package/pack/generated/pi/skills/rite-fast/SKILL.md +1 -1
  640. package/pack/generated/pi/skills/rite-handoff/SKILL.md +3 -3
  641. package/pack/generated/pi/skills/rite-handoff/reference/handoff-template.md +1 -1
  642. package/pack/generated/pi/skills/rite-plan/SKILL.md +4 -4
  643. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -2
  644. package/pack/generated/pi/skills/rite-polish/SKILL.md +6 -3
  645. package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
  646. package/pack/generated/pi/skills/rite-quick/SKILL.md +1 -1
  647. package/pack/generated/pi/skills/rite-resolve/SKILL.md +1 -1
  648. package/pack/generated/pi/skills/rite-review/SKILL.md +4 -4
  649. package/pack/generated/pi/skills/rite-seal/SKILL.md +2 -2
  650. package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
  651. package/pack/generated/pi/skills/rite-spec/SKILL.md +3 -2
  652. package/pack/generated/pi/skills/rite-spec/reference/investigation.md +5 -5
  653. package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +1 -1
  654. package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +6 -4
  655. package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
  656. package/pack/generated/pi/skills/rite-temper/SKILL.md +1 -1
  657. package/pack/generated/pi/skills/rite-temper/reference/review-dimensions.md +2 -2
  658. package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +2 -2
  659. package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -2
  660. package/pack/generated/pi/skills/rite-vet/SKILL.md +11 -5
  661. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +10 -3
  662. package/pack/generated/pi/skills/rite-vet/reference/depth.md +2 -2
  663. package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +2 -2
  664. package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +6 -6
  665. package/package.json +1 -1
  666. package/scripts/build-host-artifacts.sh +5 -4
  667. package/scripts/omp-generate.sh +3 -12
  668. package/scripts/pi-generate.sh +5 -51
@@ -1,18 +1,24 @@
1
1
  package lib
2
2
 
3
3
  import (
4
+ "cmp"
4
5
  "encoding/json"
6
+ "errors"
5
7
  "fmt"
6
8
  "io"
9
+ "io/fs"
7
10
  "os"
8
11
  "path/filepath"
9
12
  "regexp"
10
13
  "slices"
11
14
  "sort"
15
+ "strconv"
12
16
  "strings"
13
17
  "time"
14
18
 
15
19
  "github.com/devrites/devrites/internal/devritespaths"
20
+ "github.com/devrites/devrites/internal/markdowntext"
21
+ "github.com/devrites/devrites/internal/parallel"
16
22
  "github.com/devrites/devrites/internal/state"
17
23
  )
18
24
 
@@ -21,20 +27,53 @@ import (
21
27
  // fan-out cannot silently degrade to serial (open -> every role started ->
22
28
  // seal -> returns -> complete). start/return also auto-record metrics events.
23
29
  //
24
- // devrites-engine dispatch <slug> <sub> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>] [--contract <file>] [--packet <file>]
30
+ // devrites-engine dispatch <slug> <sub> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>] [--contract <file>] [--packet <file>] [--outcome findings|no-findings|gap] [--result <file>] [--all] [--claim-session <id> --claim <path>... [--claim-ttl <minutes>]] [--release] [--path <path>...]
25
31
 
26
- const dispatchUsage = `usage: devrites-engine dispatch <slug> <open|start|seal|return|status|abandon> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>] [--contract <file>] [--packet <file>]
32
+ const dispatchUsage = `usage: devrites-engine dispatch <slug> <open|start|seal|return|status|abandon|attribute> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>] [--contract <file>] [--packet <file>] [--outcome findings|no-findings|gap] [--result <file>] [--all] [--claim-session <id> --claim <path>... [--claim-ttl <minutes>]] [--release] [--path <path>...]
27
33
 
28
34
  Wave barrier for parallel agent dispatch: seal fails until every declared
29
- role has a distinct handle; return fails before seal. status --wave exits
30
- nonzero until that wave is complete; bare status lists every wave and exits
31
- nonzero while any wave is open or sealed (abandoned waves are listed only).
32
- A complete wave cannot be abandoned.
35
+ role has a distinct handle; return fails before seal. The start that gives
36
+ the last role its handle seals the wave; seal on a sealed wave is a no-op.
37
+ open --claim-session --claim records one file claim for the wave and fails,
38
+ creating no wave, while a live foreign session holds a path; the return that
39
+ completes the wave releases it, and abandon keeps it unless --release (any
40
+ host-confirmed terminal path without a completing return, such as a stop or a
41
+ refused launch). Re-opening an abandoned wave keeps or replaces its claim.
42
+ status --wave exits
43
+ nonzero until that wave is complete; bare status lists every open, sealed,
44
+ or abandoned wave, folds complete waves into one count line (--all lists
45
+ them too), and exits nonzero while any wave is open or sealed (abandoned
46
+ waves are listed only).
47
+ A complete wave cannot be abandoned. return --outcome records the role's
48
+ Outcome line in metrics.jsonl, so metrics summary reports reviewer yield.
49
+ For a reviewer role, return --result <file> stores the return verbatim as
50
+ packets/<wave>-<role>.return.md (never overwritten), derives the outcome
51
+ from its Outcome/Counts head (malformed records gap), refuses an --outcome
52
+ that disagrees, and records its Finding: keys for metrics summary.
33
53
 
34
54
  A build wave with a wright role must name its slice(s) with --slice; a vet
35
- wave may (slice-bound recheck). Every 5 rounds of one kind on one slice, the
55
+ wave may (slice-bound recheck), and so may a reviewer-only wave (uncapped),
56
+ which keys its --result findings on that slice. A --result file may already
57
+ be the packets/ path; it is then kept as the stored return. Every 5 rounds of one kind on one slice, the
36
58
  next open is blocked until --reslice-review names a drift.md
37
- "## <DRIFT-ID>" heading for that slice.
59
+ "## <DRIFT-ID>" heading for that slice. Under .devrites/AFK max_parallel >= 2,
60
+ a first-round build wright wave narrower than the parallel select --from-plan
61
+ batch is blocked until evidence.md records "serial: <skipped ids> — <reason>";
62
+ repair rounds and lease siblings are never blocked.
63
+
64
+ Root-edit tripwire (ADR-0038): the first open records tree-baseline.json
65
+ (dirty product paths outside .devrites/ and .scratch/, accepted as user work);
66
+ the return that completes a wright wave (any phase) takes in its slice write
67
+ sets and claim paths. open is BLOCKED while a dirty product path changed since
68
+ that baseline with no live claim or in-flight wright wave (any phase) covering
69
+ it, unless the new wright wave (any phase) takes the path on (--claim or a
70
+ slice write set). attribute --reason <evidence> --path <path>... records owner
71
+ work, gate output, a standalone wright, or a sanctioned root write for flagged
72
+ paths. The engine never reverts a file.
73
+
74
+ A build wright wave open in a git project records the work tree as a tree
75
+ object (tree in dispatch.json); check windows --since-dispatch <wave> diffs
76
+ against it to catch tests that lost assertions between same-tree rounds.
38
77
  `
39
78
 
40
79
  // wrightRoundsPerReview is how many build wright rounds (or slice-bound Vet
@@ -55,6 +94,17 @@ type dispatchWave struct {
55
94
  Slices []string `json:"slices,omitempty"`
56
95
  ResliceReview string `json:"reslice_review,omitempty"`
57
96
  ResliceReviewed []string `json:"reslice_reviewed,omitempty"`
97
+ Claim string `json:"claim,omitempty"`
98
+ ClaimSession string `json:"claim_session,omitempty"`
99
+ Tree string `json:"tree,omitempty"` // work tree at a build wright open, for check windows --since-dispatch
100
+ }
101
+
102
+ // dispatchClaim carries the wave-claim flags; ttl 0 means unset.
103
+ type dispatchClaim struct {
104
+ session string
105
+ paths []string
106
+ ttl int
107
+ release bool
58
108
  }
59
109
 
60
110
  func waveStarted(w *dispatchWave) bool {
@@ -117,9 +167,12 @@ func nowStamp() string { return time.Now().UTC().Format(time.RFC3339) }
117
167
 
118
168
  // RunDispatch implements the dispatch wave state machine.
119
169
  func RunDispatch(root string, args []string, stdout, stderr io.Writer) int {
120
- var slug, sub, phase, wave, role, handle, reason, review, contract, packet string
170
+ var slug, sub, phase, wave, role, handle, reason, review, contract, packet, outcome, result string
121
171
  var roles, sliceIDs []string
122
172
  var positional []string
173
+ all := false
174
+ var claim dispatchClaim
175
+ var attributed []string
123
176
  for i := 0; i < len(args); i++ {
124
177
  value := argAt(args, i+1)
125
178
  switch args[i] {
@@ -142,6 +195,29 @@ func RunDispatch(root string, args []string, stdout, stderr io.Writer) int {
142
195
  contract = value
143
196
  case "--packet":
144
197
  packet = value
198
+ case "--outcome":
199
+ outcome = value
200
+ case "--result":
201
+ result = value
202
+ case "--claim-session":
203
+ claim.session = value
204
+ case "--claim":
205
+ claim.paths = append(claim.paths, value)
206
+ case "--path":
207
+ attributed = append(attributed, value)
208
+ case "--claim-ttl":
209
+ n, err := strconv.Atoi(value)
210
+ if err != nil {
211
+ fmt.Fprintf(stderr, "dispatch: --claim-ttl expects minutes, got %q\n", value)
212
+ return 2
213
+ }
214
+ claim.ttl = min(max(n, claimMinTTL), claimMaxTTL)
215
+ case "--release":
216
+ claim.release = true
217
+ continue
218
+ case "--all":
219
+ all = true
220
+ continue
145
221
  default:
146
222
  if strings.HasPrefix(args[i], "-") {
147
223
  fmt.Fprintf(stderr, "dispatch: unknown flag %q\n", args[i])
@@ -157,15 +233,30 @@ func RunDispatch(root string, args []string, stdout, stderr io.Writer) int {
157
233
  return 2
158
234
  }
159
235
  slug, sub = positional[0], positional[1]
236
+ if sub != "open" && (claim.session != "" || len(claim.paths) > 0 || claim.ttl != 0) {
237
+ fmt.Fprintln(stderr, "dispatch: --claim-session, --claim, and --claim-ttl apply to open only")
238
+ return 2
239
+ }
240
+ if sub != "abandon" && claim.release {
241
+ fmt.Fprintln(stderr, "dispatch: --release applies to abandon only")
242
+ return 2
243
+ }
244
+ if sub != "attribute" && len(attributed) > 0 {
245
+ fmt.Fprintln(stderr, "dispatch: --path applies to attribute only")
246
+ return 2
247
+ }
160
248
  if _, err := devritespaths.ExistingFeatureDirChecked(root, slug); err != nil {
161
249
  fmt.Fprintf(stderr, "dispatch: %v\n", err)
162
250
  return 2
163
251
  }
252
+ if sub == "attribute" {
253
+ return attributeEdits(root, slug, reason, attributed, stdout, stderr)
254
+ }
164
255
  // Serialize load-modify-save so concurrent start/return calls never lose
165
256
  // an update and strand the wave short of complete.
166
257
  code := 0
167
258
  if err := state.WithFeatureLock(root, slug, func() error {
168
- code = dispatchLocked(root, slug, sub, phase, wave, role, handle, reason, roles, sliceIDs, review, contract, packet, stdout, stderr)
259
+ code = dispatchLocked(root, slug, sub, phase, wave, role, handle, reason, roles, sliceIDs, review, contract, packet, outcome, result, all, claim, stdout, stderr)
169
260
  return nil
170
261
  }); err != nil {
171
262
  fmt.Fprintf(stderr, "dispatch: %v\n", err)
@@ -174,7 +265,7 @@ func RunDispatch(root string, args []string, stdout, stderr io.Writer) int {
174
265
  return code
175
266
  }
176
267
 
177
- func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, roles, sliceIDs []string, review, contract, packet string, stdout, stderr io.Writer) int {
268
+ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, roles, sliceIDs []string, review, contract, packet, outcome, result string, all bool, claim dispatchClaim, stdout, stderr io.Writer) int {
178
269
  f, path, err := loadDispatch(root, slug)
179
270
  if err != nil {
180
271
  fmt.Fprintf(stderr, "dispatch: %v\n", err)
@@ -199,8 +290,9 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
199
290
  fmt.Fprint(stderr, dispatchUsage)
200
291
  return 2
201
292
  }
202
- if w := getWave(); w != nil && w.State != "abandoned" {
203
- return fail("wave %q already exists (state %s)", wave, w.State)
293
+ prev := getWave()
294
+ if prev != nil && prev.State != "abandoned" {
295
+ return fail("wave %q already exists (state %s)", wave, prev.State)
204
296
  }
205
297
  w := &dispatchWave{Phase: phase, State: "open", Roles: map[string]*dispatchRole{}, Slices: sliceIDs}
206
298
  for _, r := range roles {
@@ -209,18 +301,21 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
209
301
  }
210
302
  w.Roles[r] = &dispatchRole{}
211
303
  }
304
+ if err := lintKnownRoles(root, phase, roles); err != nil {
305
+ return fail("BLOCKED: %v", err)
306
+ }
212
307
  rounds, code := admitWrightRounds(root, slug, f, w, review, stderr)
213
308
  if code != 0 {
214
309
  return code
215
310
  }
216
311
  if isBuildWrightWave(w) {
217
- if err := lintWrightContract(contract); err != nil {
312
+ if err := lintWrightContractFor(root, slug, contract); err != nil {
218
313
  return fail("BLOCKED: %v", err)
219
314
  }
220
315
  }
221
316
  for _, r := range roles {
222
317
  if isReviewerRole(r) {
223
- if err := lintReviewerPacket(packet); err != nil {
318
+ if err := lintReviewerWavePacket(packet, roles); err != nil {
224
319
  return fail("BLOCKED: %v", err)
225
320
  }
226
321
  if strings.EqualFold(phase, "review") || strings.EqualFold(phase, "seal") {
@@ -231,11 +326,48 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
231
326
  break
232
327
  }
233
328
  }
329
+ if err := openTripwire(root, slug, w, claim.paths); err != nil {
330
+ return fail("BLOCKED: %v", err)
331
+ }
332
+ if claim.session != "" || len(claim.paths) > 0 || claim.ttl != 0 {
333
+ if claim.session == "" || len(claim.paths) == 0 {
334
+ fmt.Fprintln(stderr, "dispatch: --claim-session and --claim go together (--claim-ttl needs both)")
335
+ return 2
336
+ }
337
+ // The claim goes last so a refused open never leaves one behind.
338
+ id, code := addClaim(root, claim.session, "dispatch wave "+wave, cmp.Or(claim.ttl, claimDefaultTTL), claim.paths, stdout, stderr)
339
+ if code != 0 {
340
+ return code
341
+ }
342
+ w.Claim, w.ClaimSession = id, claim.session
343
+ } else if prev != nil {
344
+ // Inherit the abandoned wave's kept claim so the completing return releases it.
345
+ w.Claim, w.ClaimSession = prev.Claim, prev.ClaimSession
346
+ }
347
+ if project, _, ok := treeProject(root); ok && isBuildWrightWave(w) {
348
+ // Uncommitted rounds look like additions against HEAD; this snapshot
349
+ // is the round's own base. A failed snapshot never blocks the open.
350
+ if tree, err := worktreeTree(project); err != nil {
351
+ fmt.Fprintf(stderr, "dispatch: WARNING: wave %s tree snapshot not recorded: %v\n", wave, err)
352
+ } else {
353
+ w.Tree = tree
354
+ }
355
+ }
356
+ superseded := prev != nil && prev.Claim != "" && prev.Claim != w.Claim
234
357
  f.Waves[wave] = w
235
358
  if err := saveDispatch(path, f); err != nil {
359
+ if w.Claim != "" && (prev == nil || w.Claim != prev.Claim) {
360
+ _, _ = releaseClaim(root, w.ClaimSession, w.Claim)
361
+ }
236
362
  return fail("%v", err)
237
363
  }
238
364
  fmt.Fprintf(stdout, "dispatch: wave %s open, %d roles declared\n", wave, len(roles))
365
+ if err := ensureTreeBaseline(root, slug, stdout); err != nil {
366
+ fmt.Fprintf(stderr, "dispatch: WARNING: %s not recorded: %v\n", treeBaselineFile, err)
367
+ }
368
+ if superseded {
369
+ releaseWaveClaim(root, wave, prev, stdout, stderr)
370
+ }
239
371
  for _, line := range rounds {
240
372
  fmt.Fprintln(stdout, line)
241
373
  }
@@ -263,15 +395,32 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
263
395
  }
264
396
  r.Handle = handle
265
397
  r.StartedAt = nowStamp()
398
+ // Handles are distinct (checked above), so the last start seals at launch.
399
+ sealed := true
400
+ for _, o := range w.Roles {
401
+ if o.Handle == "" {
402
+ sealed = false
403
+ }
404
+ }
405
+ if sealed {
406
+ w.State = "sealed"
407
+ }
266
408
  if err := saveDispatch(path, f); err != nil {
267
409
  return fail("%v", err)
268
410
  }
269
411
  recordMetric(root, slug, w.Phase, "dispatch", role, 0)
270
412
  fmt.Fprintf(stdout, "dispatch: %s started (handle %s)\n", role, handle)
413
+ if sealed {
414
+ fmt.Fprintf(stdout, "dispatch: wave %s sealed (%d roles)\n", wave, len(w.Roles))
415
+ }
271
416
  return 0
272
417
 
273
418
  case "seal":
274
419
  w := getWave()
420
+ if w != nil && w.State == "sealed" {
421
+ fmt.Fprintf(stdout, "dispatch: wave %s already sealed (%d roles)\n", wave, len(w.Roles))
422
+ return 0
423
+ }
275
424
  if w == nil || w.State != "open" {
276
425
  return fail("wave %q is not open (state %s)", wave, waveState(w))
277
426
  }
@@ -304,6 +453,20 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
304
453
  if r.Returned {
305
454
  return fail("role %q already returned", role)
306
455
  }
456
+ if outcome != "" && !slices.Contains([]string{"findings", "no-findings", "gap"}, outcome) {
457
+ return fail("--outcome %q is not findings, no-findings, or gap", outcome)
458
+ }
459
+ note := ""
460
+ if outcome != "" {
461
+ note = "outcome=" + outcome
462
+ }
463
+ stored, created := "", false
464
+ if result != "" {
465
+ var err error
466
+ if note, stored, created, err = storeReturnResult(root, slug, wave, role, w.Slices, result, outcome, stderr); err != nil {
467
+ return fail("%v", err)
468
+ }
469
+ }
307
470
  r.Returned, r.ReturnedAt = true, nowStamp()
308
471
  all := true
309
472
  for _, o := range w.Roles {
@@ -315,17 +478,35 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
315
478
  w.State = "complete"
316
479
  }
317
480
  if err := saveDispatch(path, f); err != nil {
481
+ if created {
482
+ _ = os.Remove(stored) // the return is unrecorded, so a retry may store it again
483
+ }
318
484
  return fail("%v", err)
319
485
  }
320
- recordMetric(root, slug, w.Phase, "return", role, 0)
486
+ recordMetricNote(root, slug, w.Phase, "return", role, note)
321
487
  fmt.Fprintf(stdout, "dispatch: %s returned (wave %s %s)\n", role, wave, w.State)
488
+ if all {
489
+ absorbWave(root, slug, w, stderr)
490
+ }
491
+ if all && w.Claim != "" {
492
+ releaseWaveClaim(root, wave, w, stdout, stderr)
493
+ }
494
+ if stored != "" {
495
+ head, _, _ := strings.Cut(note, " slice=")
496
+ fmt.Fprintf(stdout, "dispatch: stored %s (%s)\n", "packets/"+filepath.Base(stored), head)
497
+ }
322
498
  return 0
323
499
 
324
500
  case "status":
325
501
  if wave == "" {
326
502
  var incomplete []string
503
+ complete := 0
327
504
  for _, name := range sortedKeys(f.Waves) {
328
505
  w := f.Waves[name]
506
+ if w.State == "complete" && !all {
507
+ complete++
508
+ continue
509
+ }
329
510
  fmt.Fprintf(stdout, "dispatch: wave %s state=%s roles=%d\n", name, w.State, len(w.Roles))
330
511
  if w.State == "open" || w.State == "sealed" {
331
512
  incomplete = append(incomplete, name)
@@ -334,6 +515,9 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
334
515
  if len(f.Waves) == 0 {
335
516
  fmt.Fprintln(stdout, "dispatch: no waves")
336
517
  }
518
+ if complete > 0 {
519
+ fmt.Fprintf(stdout, "dispatch: %d complete wave(s) (use --all)\n", complete)
520
+ }
337
521
  if len(incomplete) > 0 {
338
522
  return fail("waves not complete: %s", strings.Join(incomplete, ","))
339
523
  }
@@ -374,11 +558,25 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
374
558
  if strings.TrimSpace(reason) == "" {
375
559
  return fail("--reason is required (non-empty, recorded in dispatch.json)")
376
560
  }
561
+ already := w.State == "abandoned"
377
562
  w.State = "abandoned"
378
563
  w.Reason = reason
564
+ // A timeout or unknown outcome keeps the claim; --release is for any
565
+ // host-confirmed terminal path without a completing return (a stop or a
566
+ // refused launch), including a re-run once a timed-out child is confirmed.
567
+ if claim.release {
568
+ if w.Claim == "" {
569
+ fmt.Fprintf(stderr, "dispatch: --release: wave %s holds no claim\n", wave)
570
+ } else if releaseWaveClaim(root, wave, w, stdout, stderr) {
571
+ w.Claim, w.ClaimSession = "", ""
572
+ }
573
+ }
379
574
  if err := saveDispatch(path, f); err != nil {
380
575
  return fail("%v", err)
381
576
  }
577
+ if !already {
578
+ recordMetricNote(root, slug, w.Phase, "abandon", "", reason)
579
+ }
382
580
  fmt.Fprintf(stdout, "dispatch: wave %s abandoned: %s\n", wave, reason)
383
581
  return fail("wave %q is abandoned — HANDOFF REQUIRED: %s", wave, reason)
384
582
  }
@@ -386,6 +584,106 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
386
584
  return 2
387
585
  }
388
586
 
587
+ // releaseWaveClaim releases w's claim and reports whether it did. A failure
588
+ // only warns: the wave state change does not depend on it.
589
+ func releaseWaveClaim(root, wave string, w *dispatchWave, stdout, stderr io.Writer) bool {
590
+ n, err := releaseClaim(root, w.ClaimSession, w.Claim)
591
+ if err != nil {
592
+ fmt.Fprintf(stderr, "dispatch: WARNING: wave %s claim not released: %v\n", wave, err)
593
+ return false
594
+ }
595
+ fmt.Fprintf(stdout, "dispatch: wave %s released claim %s (%d path(s))\n", wave, w.Claim, n)
596
+ return true
597
+ }
598
+
599
+ // maxReturnBytes bounds one stored reviewer return.
600
+ const maxReturnBytes = 1 << 20
601
+
602
+ // storeReturnResult copies a reviewer's return verbatim to
603
+ // packets/<wave>-<role>.return.md, refusing to overwrite one, and builds the
604
+ // return's metrics note: outcome, counts or head=malformed, slice, Late: line
605
+ // count, and one finding= key per Finding: row. A malformed head records
606
+ // outcome=gap, never no-findings. An explicit --outcome that disagrees with
607
+ // the head is refused before anything is written. created is false when
608
+ // result already is the stored file, so a failed save must not remove it.
609
+ func storeReturnResult(root, slug, wave, role string, sliceIDs []string, result, typed string, stderr io.Writer) (note, stored string, created bool, err error) {
610
+ if !isReviewerRole(role) {
611
+ return "", "", false, fmt.Errorf("--result applies to reviewer, auditor, and test-analyst roles, not %q", role)
612
+ }
613
+ if !devritespaths.ValidSlug(wave) || !devritespaths.ValidSlug(role) {
614
+ return "", "", false, fmt.Errorf("--result needs a wave and role that are single path elements (wave %q, role %q)", wave, role)
615
+ }
616
+ raw, err := readBoundedRegularFile(result, maxReturnBytes)
617
+ if err != nil {
618
+ return "", "", false, fmt.Errorf("--result %s: %w", result, err)
619
+ }
620
+ outcome, counts, headErr := parseReturnHead(role, string(raw))
621
+ if headErr != nil {
622
+ outcome = "gap"
623
+ }
624
+ if typed != "" && typed != outcome {
625
+ reason := "its head says " + outcome
626
+ if headErr != nil {
627
+ reason = "its head is malformed (" + headErr.Error() + "), which records gap"
628
+ }
629
+ return "", "", false, fmt.Errorf("--outcome %s disagrees with the return in %s: %s; fix the account or drop --outcome", typed, result, reason)
630
+ }
631
+ dir, err := devritespaths.ExistingFeatureDirChecked(root, slug)
632
+ if err != nil {
633
+ return "", "", false, err
634
+ }
635
+ if err := os.MkdirAll(filepath.Join(dir, "packets"), 0o755); err != nil {
636
+ return "", "", false, err
637
+ }
638
+ stored = filepath.Join(dir, "packets", wave+"-"+role+".return.md")
639
+ if !sameFile(stored, result) {
640
+ out, err := os.OpenFile(stored, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0o600) // #nosec G304 -- validated workspace dir and single-element names
641
+ if errors.Is(err, fs.ErrExist) {
642
+ return "", "", false, fmt.Errorf("%s already exists; a stored return is never overwritten", "packets/"+filepath.Base(stored))
643
+ }
644
+ if err != nil {
645
+ return "", "", false, err
646
+ }
647
+ _, werr := out.Write(raw)
648
+ if cerr := out.Close(); werr == nil {
649
+ werr = cerr
650
+ }
651
+ if werr != nil {
652
+ _ = os.Remove(stored)
653
+ return "", "", false, werr
654
+ }
655
+ created = true
656
+ }
657
+ parts := []string{"outcome=" + outcome}
658
+ if headErr != nil {
659
+ parts = append(parts, "head=malformed")
660
+ fmt.Fprintf(stderr, "dispatch: WARNING: %s return head is malformed (%v); recorded outcome=gap, never no-findings — follow the gap path in agents.md § Result admission\n", role, headErr)
661
+ } else {
662
+ parts = append(parts, "counts="+counts)
663
+ }
664
+ slice := "-"
665
+ if len(sliceIDs) > 0 {
666
+ slice = strings.Join(sliceIDs, "+")
667
+ }
668
+ keys, late := findingKeys(role, slice, string(raw))
669
+ parts = append(parts, "slice="+slice, fmt.Sprintf("late=%d", late))
670
+ for _, key := range keys {
671
+ parts = append(parts, "finding="+key)
672
+ }
673
+ return strings.Join(parts, " "), stored, created, nil
674
+ }
675
+
676
+ // sameFile reports whether stored already is the result file (the root wrote
677
+ // the account straight to packets/), so storing it again is a no-op.
678
+ func sameFile(stored, result string) bool {
679
+ a, err := os.Lstat(stored)
680
+ if err != nil || !a.Mode().IsRegular() {
681
+ return false
682
+ }
683
+ b, err := os.Stat(result)
684
+ return err == nil && os.SameFile(a, b)
685
+ }
686
+
389
687
  // roundKind names the capped loop a wave belongs to: build wright rounds or
390
688
  // slice-bound Vet rechecks. Other waves are uncapped.
391
689
  func roundKind(w *dispatchWave) string {
@@ -399,9 +697,11 @@ func roundKind(w *dispatchWave) string {
399
697
  }
400
698
 
401
699
  func isBuildWrightWave(w *dispatchWave) bool {
402
- if !strings.EqualFold(w.Phase, "build") {
403
- return false
404
- }
700
+ return strings.EqualFold(w.Phase, "build") && isWrightWave(w)
701
+ }
702
+
703
+ // isWrightWave reports whether any role of the wave, in any phase, is a wright.
704
+ func isWrightWave(w *dispatchWave) bool {
405
705
  for r := range w.Roles {
406
706
  if strings.Contains(r, "wright") {
407
707
  return true
@@ -418,10 +718,17 @@ func isBuildWrightWave(w *dispatchWave) bool {
418
718
  func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, review string, stderr io.Writer) ([]string, int) {
419
719
  kind := roundKind(w)
420
720
  if kind == "" {
421
- if review != "" || (len(w.Slices) > 0 && !strings.EqualFold(w.Phase, "vet")) {
422
- fmt.Fprintln(stderr, "dispatch: --slice/--reslice-review apply only to build wright waves and slice-bound vet waves")
721
+ if review != "" || (len(w.Slices) > 0 && !strings.EqualFold(w.Phase, "vet") && !reviewerOnlyWave(w)) {
722
+ fmt.Fprintln(stderr, "dispatch: --reslice-review applies only to build wright waves and slice-bound vet waves; --slice also to reviewer-only waves")
423
723
  return nil, 2
424
724
  }
725
+ // A reviewer-only wave names its slice for resolution metrics, uncapped.
726
+ for _, id := range w.Slices {
727
+ if !state.ValidSliceID(id) {
728
+ fmt.Fprintf(stderr, "dispatch: %q is not a SLICE-### id\n", id)
729
+ return nil, 2
730
+ }
731
+ }
425
732
  return nil, 0
426
733
  }
427
734
  if len(w.Slices) == 0 {
@@ -435,6 +742,7 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
435
742
  }
436
743
  }
437
744
  var lines, overCap []string
745
+ firstRound := true
438
746
  for _, id := range w.Slices {
439
747
  prior, reviews := 0, 0
440
748
  var unreturned []string
@@ -454,6 +762,7 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
454
762
  }
455
763
  }
456
764
  round := prior + 1
765
+ firstRound = firstRound && prior == 0
457
766
  if round > wrightRoundsPerReview*(1+reviews) {
458
767
  overCap = append(overCap, id)
459
768
  }
@@ -471,6 +780,12 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
471
780
  fmt.Fprintf(stderr, "dispatch: --reslice-review given but no slice has reached its %d-round cap\n", wrightRoundsPerReview)
472
781
  return nil, 2
473
782
  }
783
+ if kind == "wright" && firstRound {
784
+ if refusal := widerBatchRefusal(root, slug, w.Slices); refusal != "" {
785
+ fmt.Fprintln(stderr, refusal)
786
+ return nil, 3
787
+ }
788
+ }
474
789
  return lines, 0
475
790
  }
476
791
  if review == "" {
@@ -500,6 +815,63 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
500
815
  return lines, 0
501
816
  }
502
817
 
818
+ // serialRecordRe matches an evidence.md `serial: <ids> — <reason>` record
819
+ // (the reason may open with a code span, never be empty); group 1 holds the ids.
820
+ var serialRecordRe = regexp.MustCompile("(?mi)^[ \\t]*(?:[-*][ \\t]+)?`?serial:([^\\n]*?)(?:[ \\t]*[—–]|[ \\t]+--?[ \\t])[ \\t]*(?:[^\\s`]|`[^\\s`])")
821
+
822
+ var sliceTokenRe = regexp.MustCompile(`(?i)\bSLICE-\d+\b`)
823
+
824
+ // widerBatchRefusal refuses a first-round AFK build wright wave when
825
+ // `parallel select --from-plan` picks more slices than the wave holds and
826
+ // evidence.md has no `serial:` record naming each skipped pick. HITL runs,
827
+ // lease siblings, slices the plan does not list as eligible, and selection
828
+ // errors are never refused: the check widens batches, it never stops a build.
829
+ func widerBatchRefusal(root, slug string, wave []string) string {
830
+ capN := min(afkMaxParallel(root), parallel.MaxParallelSlices)
831
+ if capN < 2 {
832
+ return ""
833
+ }
834
+ eligible, batch, err := planBatch(root, slug, capN)
835
+ if err != nil || len(batch) <= len(wave) {
836
+ return ""
837
+ }
838
+ for _, id := range wave {
839
+ if !containsSlice(eligible, id) {
840
+ return ""
841
+ }
842
+ }
843
+ var recorded []string
844
+ if raw, err := readWorkspaceArtifact(root, slug, "evidence.md"); err == nil {
845
+ if visible, err := markdowntext.Structural(raw); err == nil {
846
+ raw = visible
847
+ }
848
+ for _, m := range serialRecordRe.FindAllStringSubmatch(string(raw), -1) {
849
+ recorded = append(recorded, sliceTokenRe.FindAllString(m[1], -1)...)
850
+ }
851
+ }
852
+ var missing []string
853
+ for _, id := range batch {
854
+ if !containsSlice(wave, id) && !containsSlice(recorded, id) {
855
+ missing = append(missing, id)
856
+ }
857
+ }
858
+ if len(missing) == 0 {
859
+ return ""
860
+ }
861
+ return fmt.Sprintf("dispatch: BLOCKED: AFK max_parallel %d: `%s` picks %s, wider than this wave (%s); run that batch per rite-build/reference/parallel-batch.md (`parallel create`, then one wave with a --slice per sibling), or record `serial: %s — <shared surface or reason>` in evidence.md",
862
+ capN, planSelectCommand(filepath.Dir(root), slug, capN), strings.Join(batch, ","), strings.Join(wave, ","), strings.Join(missing, ","))
863
+ }
864
+
865
+ // reviewerOnlyWave reports whether every role in w is a reviewer role.
866
+ func reviewerOnlyWave(w *dispatchWave) bool {
867
+ for r := range w.Roles {
868
+ if !isReviewerRole(r) {
869
+ return false
870
+ }
871
+ }
872
+ return len(w.Roles) > 0
873
+ }
874
+
503
875
  // containsSlice reports whether ids names the same slice as id, ignoring
504
876
  // zero padding (SLICE-1 == SLICE-001) so a respelling cannot reset the cap.
505
877
  func containsSlice(ids []string, id string) bool {