devrites 6.9.6 → 7.0.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 (678) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +10 -5
  3. package/SECURITY.md +3 -3
  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 +21 -19
  8. package/docs/engine/commands.md +22 -15
  9. package/docs/skills.md +1 -1
  10. package/docs/usage.md +3 -3
  11. package/engine/commands.go +8 -3
  12. package/engine/help.go +43 -16
  13. package/engine/internal/acceptance/approve.go +46 -7
  14. package/engine/internal/acceptance/cli.go +102 -0
  15. package/engine/internal/acceptance/exec.go +8 -6
  16. package/engine/internal/acceptance/ledger.go +16 -1
  17. package/engine/internal/acceptance/lint.go +9 -1
  18. package/engine/internal/acceptance/preconditions.go +201 -0
  19. package/engine/internal/anchor/anchor.go +76 -0
  20. package/engine/internal/gate/drivers.go +144 -0
  21. package/engine/internal/gate/gate.go +49 -13
  22. package/engine/internal/gate/preconditions.go +121 -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 +48 -33
  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-browser-proof/SKILL.md +33 -13
  79. package/pack/.claude/skills/devrites-browser-proof/reference/browser-performance.md +2 -1
  80. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +1 -1
  81. package/pack/.claude/skills/devrites-doubt/SKILL.md +5 -5
  82. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  83. package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
  84. package/pack/.claude/skills/devrites-lib/SKILL.md +11 -6
  85. package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  86. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  87. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +2 -1
  88. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  89. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +43 -19
  90. package/pack/.claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  91. package/pack/.claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
  92. package/pack/.claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  93. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  94. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +14 -1
  95. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  96. package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +10 -1
  97. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +4 -0
  98. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +3 -1
  99. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
  100. package/pack/.claude/skills/devrites-lib/reference/standards/windows.md +3 -2
  101. package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  102. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  103. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
  104. package/pack/.claude/skills/overhaul/references/orchestration.md +3 -2
  105. package/pack/.claude/skills/rite/SKILL.md +1 -1
  106. package/pack/.claude/skills/rite-adopt/SKILL.md +1 -1
  107. package/pack/.claude/skills/rite-adopt/reference/adoption.md +1 -1
  108. package/pack/.claude/skills/rite-autocomplete/SKILL.md +5 -4
  109. package/pack/.claude/skills/rite-build/SKILL.md +4 -3
  110. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -0
  111. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  112. package/pack/.claude/skills/rite-build/reference/checkpoint.md +2 -0
  113. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  114. package/pack/.claude/skills/rite-build/reference/output.md +2 -0
  115. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +22 -12
  116. package/pack/.claude/skills/rite-build/reference/phase-contract.md +13 -3
  117. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +42 -25
  118. package/pack/.claude/skills/rite-clarify/SKILL.md +1 -1
  119. package/pack/.claude/skills/rite-converge/SKILL.md +4 -4
  120. package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
  121. package/pack/.claude/skills/rite-define/SKILL.md +10 -5
  122. package/pack/.claude/skills/rite-doctor/SKILL.md +17 -2
  123. package/pack/.claude/skills/rite-dogfood/SKILL.md +1 -1
  124. package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
  125. package/pack/.claude/skills/rite-explain/reference/intake.md +1 -1
  126. package/pack/.claude/skills/rite-fast/SKILL.md +1 -1
  127. package/pack/.claude/skills/rite-handoff/SKILL.md +3 -3
  128. package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +1 -1
  129. package/pack/.claude/skills/rite-harness/SKILL.md +2 -1
  130. package/pack/.claude/skills/rite-plan/SKILL.md +4 -4
  131. package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -2
  132. package/pack/.claude/skills/rite-polish/SKILL.md +6 -3
  133. package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +1 -1
  134. package/pack/.claude/skills/rite-prove/SKILL.md +1 -1
  135. package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +1 -1
  136. package/pack/.claude/skills/rite-prove/reference/proof-ladder.md +16 -5
  137. package/pack/.claude/skills/rite-quick/SKILL.md +1 -1
  138. package/pack/.claude/skills/rite-resolve/SKILL.md +1 -1
  139. package/pack/.claude/skills/rite-review/SKILL.md +4 -4
  140. package/pack/.claude/skills/rite-seal/SKILL.md +2 -2
  141. package/pack/.claude/skills/rite-ship/SKILL.md +1 -1
  142. package/pack/.claude/skills/rite-spec/SKILL.md +1 -1
  143. package/pack/.claude/skills/rite-spec/reference/investigation.md +5 -5
  144. package/pack/.claude/skills/rite-spec/reference/spec-template.md +1 -1
  145. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -4
  146. package/pack/.claude/skills/rite-status/SKILL.md +1 -1
  147. package/pack/.claude/skills/rite-temper/SKILL.md +1 -1
  148. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  149. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +2 -2
  150. package/pack/.claude/skills/rite-temper/reference/significance.md +2 -2
  151. package/pack/.claude/skills/rite-vet/SKILL.md +8 -4
  152. package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -3
  153. package/pack/.claude/skills/rite-vet/reference/depth.md +2 -2
  154. package/pack/.claude/skills/rite-vet/reference/review-axes.md +2 -2
  155. package/pack/.claude/skills/rite-zoom-out/SKILL.md +6 -6
  156. package/pack/generated/claude/agents/devrites-code-reviewer.md +9 -5
  157. package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -4
  158. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +4 -4
  159. package/pack/generated/claude/agents/devrites-evidence-scout.md +3 -2
  160. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +5 -4
  161. package/pack/generated/claude/agents/devrites-performance-reviewer.md +5 -5
  162. package/pack/generated/claude/agents/devrites-plan-drafter.md +4 -2
  163. package/pack/generated/claude/agents/devrites-plan-reviewer.md +5 -5
  164. package/pack/generated/claude/agents/devrites-proof-runner.md +1 -1
  165. package/pack/generated/claude/agents/devrites-retrospector.md +1 -1
  166. package/pack/generated/claude/agents/devrites-security-auditor.md +4 -4
  167. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +5 -4
  168. package/pack/generated/claude/agents/devrites-slice-wright.md +18 -9
  169. package/pack/generated/claude/agents/devrites-spec-reviewer.md +4 -4
  170. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +5 -6
  171. package/pack/generated/claude/agents/devrites-test-analyst.md +7 -4
  172. package/pack/generated/claude/agents/devrites-upgrade-planner.md +1 -1
  173. package/pack/generated/claude/agents/fast-builder.md +4 -2
  174. package/pack/generated/claude/agents/fast-checker.md +3 -2
  175. package/pack/generated/claude/agents/fast-critic.md +3 -2
  176. package/pack/generated/claude/agents/fast-planner.md +3 -3
  177. package/pack/generated/claude/agents/overhaul-recon.md +5 -4
  178. package/pack/generated/claude/settings.json +19 -7
  179. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -1
  180. package/pack/generated/claude/skills/devrites-audit/SKILL.md +1 -1
  181. package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +33 -13
  182. package/pack/generated/claude/skills/devrites-browser-proof/reference/browser-performance.md +2 -1
  183. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +1 -1
  184. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +5 -5
  185. package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  186. package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
  187. package/pack/generated/claude/skills/devrites-lib/SKILL.md +11 -6
  188. package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  189. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  190. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +2 -1
  191. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  192. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +43 -19
  193. package/pack/generated/claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  194. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
  195. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  196. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  197. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +14 -1
  198. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  199. package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +10 -1
  200. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +4 -0
  201. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +3 -1
  202. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
  203. package/pack/generated/claude/skills/devrites-lib/reference/standards/windows.md +3 -2
  204. package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  205. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  206. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
  207. package/pack/generated/claude/skills/overhaul/references/orchestration.md +3 -2
  208. package/pack/generated/claude/skills/rite/SKILL.md +1 -1
  209. package/pack/generated/claude/skills/rite-adopt/SKILL.md +1 -1
  210. package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +1 -1
  211. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +5 -4
  212. package/pack/generated/claude/skills/rite-build/SKILL.md +4 -3
  213. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -0
  214. package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  215. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +2 -0
  216. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  217. package/pack/generated/claude/skills/rite-build/reference/output.md +2 -0
  218. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +22 -12
  219. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +13 -3
  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-harness/SKILL.md +2 -1
  233. package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -4
  234. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -2
  235. package/pack/generated/claude/skills/rite-polish/SKILL.md +6 -3
  236. package/pack/generated/claude/skills/rite-polish/reference/harden-checklist.md +1 -1
  237. package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -1
  238. package/pack/generated/claude/skills/rite-prove/reference/anti-patterns.md +1 -1
  239. package/pack/generated/claude/skills/rite-prove/reference/proof-ladder.md +16 -5
  240. package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -1
  241. package/pack/generated/claude/skills/rite-resolve/SKILL.md +1 -1
  242. package/pack/generated/claude/skills/rite-review/SKILL.md +4 -4
  243. package/pack/generated/claude/skills/rite-seal/SKILL.md +2 -2
  244. package/pack/generated/claude/skills/rite-ship/SKILL.md +1 -1
  245. package/pack/generated/claude/skills/rite-spec/SKILL.md +1 -1
  246. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +5 -5
  247. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +1 -1
  248. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -4
  249. package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
  250. package/pack/generated/claude/skills/rite-temper/SKILL.md +1 -1
  251. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  252. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +2 -2
  253. package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -2
  254. package/pack/generated/claude/skills/rite-vet/SKILL.md +8 -4
  255. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -3
  256. package/pack/generated/claude/skills/rite-vet/reference/depth.md +2 -2
  257. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +2 -2
  258. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +6 -6
  259. package/pack/generated/codex/agents/devrites-code-reviewer.toml +8 -4
  260. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +4 -3
  261. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +3 -3
  262. package/pack/generated/codex/agents/devrites-evidence-scout.toml +2 -1
  263. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +4 -3
  264. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +4 -4
  265. package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -1
  266. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +4 -4
  267. package/pack/generated/codex/agents/devrites-security-auditor.toml +3 -3
  268. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +4 -3
  269. package/pack/generated/codex/agents/devrites-slice-wright.toml +17 -8
  270. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +3 -3
  271. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +4 -5
  272. package/pack/generated/codex/agents/devrites-test-analyst.toml +6 -3
  273. package/pack/generated/codex/agents/fast-builder.toml +3 -1
  274. package/pack/generated/codex/agents/fast-checker.toml +2 -1
  275. package/pack/generated/codex/agents/fast-critic.toml +2 -1
  276. package/pack/generated/codex/agents/fast-planner.toml +2 -2
  277. package/pack/generated/codex/agents/overhaul-recon.toml +5 -4
  278. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -1
  279. package/pack/generated/codex/skills/devrites-audit/SKILL.md +1 -1
  280. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +33 -13
  281. package/pack/generated/codex/skills/devrites-browser-proof/reference/browser-performance.md +2 -1
  282. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +1 -1
  283. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +5 -5
  284. package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  285. package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
  286. package/pack/generated/codex/skills/devrites-lib/SKILL.md +11 -6
  287. package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  288. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  289. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +2 -1
  290. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  291. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +43 -19
  292. package/pack/generated/codex/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  293. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-index.md +111 -0
  294. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  295. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  296. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +14 -1
  297. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  298. package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +10 -1
  299. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +4 -0
  300. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +3 -1
  301. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +9 -8
  302. package/pack/generated/codex/skills/devrites-lib/reference/standards/windows.md +3 -2
  303. package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  304. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  305. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
  306. package/pack/generated/codex/skills/overhaul/references/orchestration.md +3 -2
  307. package/pack/generated/codex/skills/rite/SKILL.md +1 -1
  308. package/pack/generated/codex/skills/rite-adopt/SKILL.md +1 -1
  309. package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +1 -1
  310. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +5 -4
  311. package/pack/generated/codex/skills/rite-build/SKILL.md +4 -3
  312. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -0
  313. package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  314. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +2 -0
  315. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +1 -1
  316. package/pack/generated/codex/skills/rite-build/reference/output.md +2 -0
  317. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +22 -12
  318. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +13 -3
  319. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +42 -25
  320. package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
  321. package/pack/generated/codex/skills/rite-converge/SKILL.md +4 -4
  322. package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +3 -3
  323. package/pack/generated/codex/skills/rite-define/SKILL.md +10 -5
  324. package/pack/generated/codex/skills/rite-doctor/SKILL.md +17 -2
  325. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +1 -1
  326. package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
  327. package/pack/generated/codex/skills/rite-explain/reference/intake.md +1 -1
  328. package/pack/generated/codex/skills/rite-fast/SKILL.md +1 -1
  329. package/pack/generated/codex/skills/rite-handoff/SKILL.md +3 -3
  330. package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +1 -1
  331. package/pack/generated/codex/skills/rite-harness/SKILL.md +2 -1
  332. package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -4
  333. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -2
  334. package/pack/generated/codex/skills/rite-polish/SKILL.md +6 -3
  335. package/pack/generated/codex/skills/rite-polish/reference/harden-checklist.md +1 -1
  336. package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
  337. package/pack/generated/codex/skills/rite-prove/reference/anti-patterns.md +1 -1
  338. package/pack/generated/codex/skills/rite-prove/reference/proof-ladder.md +16 -5
  339. package/pack/generated/codex/skills/rite-quick/SKILL.md +1 -1
  340. package/pack/generated/codex/skills/rite-resolve/SKILL.md +1 -1
  341. package/pack/generated/codex/skills/rite-review/SKILL.md +4 -4
  342. package/pack/generated/codex/skills/rite-seal/SKILL.md +2 -2
  343. package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
  344. package/pack/generated/codex/skills/rite-spec/SKILL.md +1 -1
  345. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +5 -5
  346. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +1 -1
  347. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -4
  348. package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
  349. package/pack/generated/codex/skills/rite-temper/SKILL.md +1 -1
  350. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +2 -2
  351. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +2 -2
  352. package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -2
  353. package/pack/generated/codex/skills/rite-vet/SKILL.md +8 -4
  354. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -3
  355. package/pack/generated/codex/skills/rite-vet/reference/depth.md +2 -2
  356. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +2 -2
  357. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +6 -6
  358. package/pack/generated/devin/agents/devrites-code-reviewer.md +8 -4
  359. package/pack/generated/devin/agents/devrites-devex-reviewer.md +4 -3
  360. package/pack/generated/devin/agents/devrites-doubt-reviewer.md +3 -3
  361. package/pack/generated/devin/agents/devrites-evidence-scout.md +2 -1
  362. package/pack/generated/devin/agents/devrites-frontend-reviewer.md +4 -3
  363. package/pack/generated/devin/agents/devrites-performance-reviewer.md +4 -4
  364. package/pack/generated/devin/agents/devrites-plan-drafter.md +3 -1
  365. package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -4
  366. package/pack/generated/devin/agents/devrites-security-auditor.md +3 -3
  367. package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +4 -3
  368. package/pack/generated/devin/agents/devrites-slice-wright.md +17 -8
  369. package/pack/generated/devin/agents/devrites-spec-reviewer.md +3 -3
  370. package/pack/generated/devin/agents/devrites-strategy-reviewer.md +4 -5
  371. package/pack/generated/devin/agents/devrites-test-analyst.md +6 -3
  372. package/pack/generated/devin/agents/fast-builder.md +3 -1
  373. package/pack/generated/devin/agents/fast-checker.md +2 -1
  374. package/pack/generated/devin/agents/fast-critic.md +2 -1
  375. package/pack/generated/devin/agents/fast-planner.md +2 -2
  376. package/pack/generated/devin/agents/overhaul-recon.md +5 -4
  377. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +1 -1
  378. package/pack/generated/devin/skills/devrites-audit/SKILL.md +1 -1
  379. package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +33 -13
  380. package/pack/generated/devin/skills/devrites-browser-proof/reference/browser-performance.md +2 -1
  381. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +1 -1
  382. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +5 -5
  383. package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  384. package/pack/generated/devin/skills/devrites-interview/SKILL.md +1 -1
  385. package/pack/generated/devin/skills/devrites-lib/SKILL.md +11 -6
  386. package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  387. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  388. package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +2 -1
  389. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  390. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +43 -19
  391. package/pack/generated/devin/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  392. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-index.md +111 -0
  393. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  394. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  395. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +14 -1
  396. package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  397. package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +10 -1
  398. package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +4 -0
  399. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +3 -1
  400. package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +9 -8
  401. package/pack/generated/devin/skills/devrites-lib/reference/standards/windows.md +3 -2
  402. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  403. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  404. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
  405. package/pack/generated/devin/skills/overhaul/references/orchestration.md +3 -2
  406. package/pack/generated/devin/skills/rite/SKILL.md +1 -1
  407. package/pack/generated/devin/skills/rite-adopt/SKILL.md +1 -1
  408. package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +1 -1
  409. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +5 -4
  410. package/pack/generated/devin/skills/rite-build/SKILL.md +4 -3
  411. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +2 -0
  412. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  413. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +2 -0
  414. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +1 -1
  415. package/pack/generated/devin/skills/rite-build/reference/output.md +2 -0
  416. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +22 -12
  417. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +13 -3
  418. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +42 -25
  419. package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
  420. package/pack/generated/devin/skills/rite-converge/SKILL.md +4 -4
  421. package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +3 -3
  422. package/pack/generated/devin/skills/rite-define/SKILL.md +10 -5
  423. package/pack/generated/devin/skills/rite-doctor/SKILL.md +17 -2
  424. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +1 -1
  425. package/pack/generated/devin/skills/rite-explain/SKILL.md +1 -1
  426. package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
  427. package/pack/generated/devin/skills/rite-fast/SKILL.md +1 -1
  428. package/pack/generated/devin/skills/rite-handoff/SKILL.md +3 -3
  429. package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +1 -1
  430. package/pack/generated/devin/skills/rite-harness/SKILL.md +2 -1
  431. package/pack/generated/devin/skills/rite-plan/SKILL.md +4 -4
  432. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -2
  433. package/pack/generated/devin/skills/rite-polish/SKILL.md +6 -3
  434. package/pack/generated/devin/skills/rite-polish/reference/harden-checklist.md +1 -1
  435. package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
  436. package/pack/generated/devin/skills/rite-prove/reference/anti-patterns.md +1 -1
  437. package/pack/generated/devin/skills/rite-prove/reference/proof-ladder.md +16 -5
  438. package/pack/generated/devin/skills/rite-quick/SKILL.md +1 -1
  439. package/pack/generated/devin/skills/rite-resolve/SKILL.md +1 -1
  440. package/pack/generated/devin/skills/rite-review/SKILL.md +4 -4
  441. package/pack/generated/devin/skills/rite-seal/SKILL.md +2 -2
  442. package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
  443. package/pack/generated/devin/skills/rite-spec/SKILL.md +1 -1
  444. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +5 -5
  445. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +1 -1
  446. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +6 -4
  447. package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
  448. package/pack/generated/devin/skills/rite-temper/SKILL.md +1 -1
  449. package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +2 -2
  450. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +2 -2
  451. package/pack/generated/devin/skills/rite-temper/reference/significance.md +2 -2
  452. package/pack/generated/devin/skills/rite-vet/SKILL.md +8 -4
  453. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +10 -3
  454. package/pack/generated/devin/skills/rite-vet/reference/depth.md +2 -2
  455. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
  456. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +6 -6
  457. package/pack/generated/omp/agents/devrites-code-reviewer.md +9 -5
  458. package/pack/generated/omp/agents/devrites-devex-reviewer.md +5 -4
  459. package/pack/generated/omp/agents/devrites-doubt-reviewer.md +4 -4
  460. package/pack/generated/omp/agents/devrites-evidence-scout.md +3 -2
  461. package/pack/generated/omp/agents/devrites-frontend-reviewer.md +5 -4
  462. package/pack/generated/omp/agents/devrites-performance-reviewer.md +5 -5
  463. package/pack/generated/omp/agents/devrites-plan-drafter.md +4 -2
  464. package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -5
  465. package/pack/generated/omp/agents/devrites-proof-runner.md +1 -1
  466. package/pack/generated/omp/agents/devrites-retrospector.md +1 -1
  467. package/pack/generated/omp/agents/devrites-security-auditor.md +4 -4
  468. package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +5 -4
  469. package/pack/generated/omp/agents/devrites-slice-wright.md +18 -9
  470. package/pack/generated/omp/agents/devrites-spec-reviewer.md +4 -4
  471. package/pack/generated/omp/agents/devrites-strategy-reviewer.md +5 -6
  472. package/pack/generated/omp/agents/devrites-test-analyst.md +7 -4
  473. package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
  474. package/pack/generated/omp/agents/fast-builder.md +4 -2
  475. package/pack/generated/omp/agents/fast-checker.md +3 -2
  476. package/pack/generated/omp/agents/fast-critic.md +3 -2
  477. package/pack/generated/omp/agents/fast-planner.md +3 -3
  478. package/pack/generated/omp/agents/overhaul-backend-engineer.md +1 -1
  479. package/pack/generated/omp/agents/overhaul-boundary.md +1 -1
  480. package/pack/generated/omp/agents/overhaul-craft.md +1 -1
  481. package/pack/generated/omp/agents/overhaul-frontend-engineer.md +1 -1
  482. package/pack/generated/omp/agents/overhaul-implementer.md +1 -1
  483. package/pack/generated/omp/agents/overhaul-recon.md +6 -5
  484. package/pack/generated/omp/agents/overhaul-specialist.md +1 -1
  485. package/pack/generated/omp/agents/overhaul-verifier.md +1 -1
  486. package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +1 -1
  487. package/pack/generated/omp/skills/devrites-audit/SKILL.md +1 -1
  488. package/pack/generated/omp/skills/devrites-browser-proof/SKILL.md +33 -13
  489. package/pack/generated/omp/skills/devrites-browser-proof/reference/browser-performance.md +2 -1
  490. package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +1 -1
  491. package/pack/generated/omp/skills/devrites-doubt/SKILL.md +5 -5
  492. package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  493. package/pack/generated/omp/skills/devrites-interview/SKILL.md +1 -1
  494. package/pack/generated/omp/skills/devrites-lib/SKILL.md +11 -6
  495. package/pack/generated/omp/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  496. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  497. package/pack/generated/omp/skills/devrites-lib/reference/standards/README.md +2 -1
  498. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  499. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +43 -19
  500. package/pack/generated/omp/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  501. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-index.md +111 -0
  502. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  503. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  504. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +14 -1
  505. package/pack/generated/omp/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  506. package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +10 -1
  507. package/pack/generated/omp/skills/devrites-lib/reference/standards/security.md +4 -0
  508. package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +3 -1
  509. package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +9 -8
  510. package/pack/generated/omp/skills/devrites-lib/reference/standards/windows.md +3 -2
  511. package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  512. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  513. package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +1 -1
  514. package/pack/generated/omp/skills/overhaul/references/orchestration.md +3 -2
  515. package/pack/generated/omp/skills/rite/SKILL.md +1 -1
  516. package/pack/generated/omp/skills/rite-adopt/SKILL.md +1 -1
  517. package/pack/generated/omp/skills/rite-adopt/reference/adoption.md +1 -1
  518. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +5 -4
  519. package/pack/generated/omp/skills/rite-build/SKILL.md +4 -3
  520. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +2 -0
  521. package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  522. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -0
  523. package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +1 -1
  524. package/pack/generated/omp/skills/rite-build/reference/output.md +2 -0
  525. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +22 -12
  526. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +13 -3
  527. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +42 -25
  528. package/pack/generated/omp/skills/rite-clarify/SKILL.md +1 -1
  529. package/pack/generated/omp/skills/rite-converge/SKILL.md +4 -4
  530. package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +3 -3
  531. package/pack/generated/omp/skills/rite-define/SKILL.md +10 -5
  532. package/pack/generated/omp/skills/rite-doctor/SKILL.md +17 -2
  533. package/pack/generated/omp/skills/rite-dogfood/SKILL.md +1 -1
  534. package/pack/generated/omp/skills/rite-explain/SKILL.md +1 -1
  535. package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
  536. package/pack/generated/omp/skills/rite-fast/SKILL.md +1 -1
  537. package/pack/generated/omp/skills/rite-handoff/SKILL.md +3 -3
  538. package/pack/generated/omp/skills/rite-handoff/reference/handoff-template.md +1 -1
  539. package/pack/generated/omp/skills/rite-harness/SKILL.md +2 -1
  540. package/pack/generated/omp/skills/rite-plan/SKILL.md +4 -4
  541. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +3 -2
  542. package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -3
  543. package/pack/generated/omp/skills/rite-polish/reference/harden-checklist.md +1 -1
  544. package/pack/generated/omp/skills/rite-prove/SKILL.md +1 -1
  545. package/pack/generated/omp/skills/rite-prove/reference/anti-patterns.md +1 -1
  546. package/pack/generated/omp/skills/rite-prove/reference/proof-ladder.md +16 -5
  547. package/pack/generated/omp/skills/rite-quick/SKILL.md +1 -1
  548. package/pack/generated/omp/skills/rite-resolve/SKILL.md +1 -1
  549. package/pack/generated/omp/skills/rite-review/SKILL.md +4 -4
  550. package/pack/generated/omp/skills/rite-seal/SKILL.md +2 -2
  551. package/pack/generated/omp/skills/rite-ship/SKILL.md +1 -1
  552. package/pack/generated/omp/skills/rite-spec/SKILL.md +1 -1
  553. package/pack/generated/omp/skills/rite-spec/reference/investigation.md +5 -5
  554. package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +1 -1
  555. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +6 -4
  556. package/pack/generated/omp/skills/rite-status/SKILL.md +1 -1
  557. package/pack/generated/omp/skills/rite-temper/SKILL.md +1 -1
  558. package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +2 -2
  559. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +2 -2
  560. package/pack/generated/omp/skills/rite-temper/reference/significance.md +2 -2
  561. package/pack/generated/omp/skills/rite-vet/SKILL.md +8 -4
  562. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +10 -3
  563. package/pack/generated/omp/skills/rite-vet/reference/depth.md +2 -2
  564. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +2 -2
  565. package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +6 -6
  566. package/pack/generated/pi/agents/devrites-code-reviewer.md +9 -5
  567. package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -4
  568. package/pack/generated/pi/agents/devrites-doubt-reviewer.md +4 -4
  569. package/pack/generated/pi/agents/devrites-evidence-scout.md +3 -2
  570. package/pack/generated/pi/agents/devrites-frontend-reviewer.md +5 -4
  571. package/pack/generated/pi/agents/devrites-performance-reviewer.md +5 -5
  572. package/pack/generated/pi/agents/devrites-plan-drafter.md +4 -2
  573. package/pack/generated/pi/agents/devrites-plan-reviewer.md +5 -5
  574. package/pack/generated/pi/agents/devrites-proof-runner.md +1 -1
  575. package/pack/generated/pi/agents/devrites-retrospector.md +1 -1
  576. package/pack/generated/pi/agents/devrites-security-auditor.md +4 -4
  577. package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +5 -4
  578. package/pack/generated/pi/agents/devrites-slice-wright.md +18 -9
  579. package/pack/generated/pi/agents/devrites-spec-reviewer.md +4 -4
  580. package/pack/generated/pi/agents/devrites-strategy-reviewer.md +5 -6
  581. package/pack/generated/pi/agents/devrites-test-analyst.md +7 -4
  582. package/pack/generated/pi/agents/devrites-upgrade-planner.md +1 -1
  583. package/pack/generated/pi/agents/fast-builder.md +4 -2
  584. package/pack/generated/pi/agents/fast-checker.md +3 -2
  585. package/pack/generated/pi/agents/fast-critic.md +3 -2
  586. package/pack/generated/pi/agents/fast-planner.md +3 -3
  587. package/pack/generated/pi/agents/overhaul-backend-engineer.md +1 -1
  588. package/pack/generated/pi/agents/overhaul-boundary.md +1 -1
  589. package/pack/generated/pi/agents/overhaul-craft.md +1 -1
  590. package/pack/generated/pi/agents/overhaul-frontend-engineer.md +1 -1
  591. package/pack/generated/pi/agents/overhaul-implementer.md +1 -1
  592. package/pack/generated/pi/agents/overhaul-recon.md +6 -5
  593. package/pack/generated/pi/agents/overhaul-specialist.md +1 -1
  594. package/pack/generated/pi/agents/overhaul-verifier.md +1 -1
  595. package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +1 -1
  596. package/pack/generated/pi/skills/devrites-audit/SKILL.md +1 -1
  597. package/pack/generated/pi/skills/devrites-browser-proof/SKILL.md +33 -13
  598. package/pack/generated/pi/skills/devrites-browser-proof/reference/browser-performance.md +2 -1
  599. package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +1 -1
  600. package/pack/generated/pi/skills/devrites-doubt/SKILL.md +5 -5
  601. package/pack/generated/pi/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  602. package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
  603. package/pack/generated/pi/skills/devrites-lib/SKILL.md +11 -6
  604. package/pack/generated/pi/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  605. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  606. package/pack/generated/pi/skills/devrites-lib/reference/standards/README.md +2 -1
  607. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  608. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +43 -19
  609. package/pack/generated/pi/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  610. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-index.md +111 -0
  611. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  612. package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  613. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +14 -1
  614. package/pack/generated/pi/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  615. package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +10 -1
  616. package/pack/generated/pi/skills/devrites-lib/reference/standards/security.md +4 -0
  617. package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +3 -1
  618. package/pack/generated/pi/skills/devrites-lib/reference/standards/tooling.md +9 -8
  619. package/pack/generated/pi/skills/devrites-lib/reference/standards/windows.md +3 -2
  620. package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  621. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  622. package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
  623. package/pack/generated/pi/skills/overhaul/references/orchestration.md +3 -2
  624. package/pack/generated/pi/skills/rite/SKILL.md +1 -1
  625. package/pack/generated/pi/skills/rite-adopt/SKILL.md +1 -1
  626. package/pack/generated/pi/skills/rite-adopt/reference/adoption.md +1 -1
  627. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +5 -4
  628. package/pack/generated/pi/skills/rite-build/SKILL.md +4 -3
  629. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +2 -0
  630. package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  631. package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +2 -0
  632. package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +1 -1
  633. package/pack/generated/pi/skills/rite-build/reference/output.md +2 -0
  634. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +22 -12
  635. package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +13 -3
  636. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +42 -25
  637. package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
  638. package/pack/generated/pi/skills/rite-converge/SKILL.md +4 -4
  639. package/pack/generated/pi/skills/rite-converge/reference/convergence-assessment.md +3 -3
  640. package/pack/generated/pi/skills/rite-define/SKILL.md +10 -5
  641. package/pack/generated/pi/skills/rite-doctor/SKILL.md +17 -2
  642. package/pack/generated/pi/skills/rite-dogfood/SKILL.md +1 -1
  643. package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
  644. package/pack/generated/pi/skills/rite-explain/reference/intake.md +1 -1
  645. package/pack/generated/pi/skills/rite-fast/SKILL.md +1 -1
  646. package/pack/generated/pi/skills/rite-handoff/SKILL.md +3 -3
  647. package/pack/generated/pi/skills/rite-handoff/reference/handoff-template.md +1 -1
  648. package/pack/generated/pi/skills/rite-harness/SKILL.md +2 -1
  649. package/pack/generated/pi/skills/rite-plan/SKILL.md +4 -4
  650. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -2
  651. package/pack/generated/pi/skills/rite-polish/SKILL.md +6 -3
  652. package/pack/generated/pi/skills/rite-polish/reference/harden-checklist.md +1 -1
  653. package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
  654. package/pack/generated/pi/skills/rite-prove/reference/anti-patterns.md +1 -1
  655. package/pack/generated/pi/skills/rite-prove/reference/proof-ladder.md +16 -5
  656. package/pack/generated/pi/skills/rite-quick/SKILL.md +1 -1
  657. package/pack/generated/pi/skills/rite-resolve/SKILL.md +1 -1
  658. package/pack/generated/pi/skills/rite-review/SKILL.md +4 -4
  659. package/pack/generated/pi/skills/rite-seal/SKILL.md +2 -2
  660. package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
  661. package/pack/generated/pi/skills/rite-spec/SKILL.md +1 -1
  662. package/pack/generated/pi/skills/rite-spec/reference/investigation.md +5 -5
  663. package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +1 -1
  664. package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +6 -4
  665. package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
  666. package/pack/generated/pi/skills/rite-temper/SKILL.md +1 -1
  667. package/pack/generated/pi/skills/rite-temper/reference/review-dimensions.md +2 -2
  668. package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +2 -2
  669. package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -2
  670. package/pack/generated/pi/skills/rite-vet/SKILL.md +8 -4
  671. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +10 -3
  672. package/pack/generated/pi/skills/rite-vet/reference/depth.md +2 -2
  673. package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +2 -2
  674. package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +6 -6
  675. package/package.json +1 -1
  676. package/scripts/build-host-artifacts.sh +5 -4
  677. package/scripts/omp-generate.sh +3 -12
  678. package/scripts/pi-generate.sh +5 -51
@@ -1,9 +1,13 @@
1
1
  package lib
2
2
 
3
3
  import (
4
+ "errors"
4
5
  "fmt"
6
+ "os"
5
7
  "regexp"
6
8
  "strings"
9
+
10
+ "github.com/devrites/devrites/internal/acceptance"
7
11
  )
8
12
 
9
13
  // maxContractBytes bounds a wright contract read; packets stay <= 64 KiB.
@@ -22,11 +26,43 @@ var (
22
26
  // allowedAfterRE marks a forbid match that is about not weakening tests,
23
27
  // not about skipping their execution ("no tests weakened or deleted").
24
28
  allowedAfterRE = regexp.MustCompile(`(?i)^[\s/,a-z-]{0,24}\b(?:weaken|delet|remov|disabl|skipp|xfail|loosen)`)
29
+ // agentContractRE names an installed DevRites role contract on any host.
30
+ agentContractRE = regexp.MustCompile(`[\w./~-]*agents/devrites-[a-z0-9-]+\.(?:md|toml)\b`)
31
+ // readWordRE is a read instruction ("Read first", "read:"), not "read-only".
32
+ readWordRE = regexp.MustCompile(`(?i)\bread(?:\s|:|$)`)
33
+ // blankLineRE ends the `Writer-safe checks:` block.
34
+ blankLineRE = regexp.MustCompile(`\n[ \t]*\r?\n`)
35
+ // sectionHeadRE is a Markdown heading or a "Label:" line opening a list.
36
+ sectionHeadRE = regexp.MustCompile(`^\s*(?:#{1,6}\s.*|[^:]*:[\s*]*)$`)
25
37
  )
26
38
 
39
+ // lintContractRead refuses a packet line that tells the agent to read an
40
+ // installed role contract, on the line itself or under a "Read ..." heading or
41
+ // label: a named agent already has it as its system prompt. Canonical sources
42
+ // under pack/ are reviewable files, not the agent's own contract.
43
+ func lintContractRead(kind, path string, raw []byte) error {
44
+ inRead := false
45
+ for i, line := range strings.Split(string(raw), "\n") {
46
+ if sectionHeadRE.MatchString(line) {
47
+ inRead = readWordRE.MatchString(line)
48
+ }
49
+ if !inRead && !readWordRE.MatchString(line) {
50
+ continue
51
+ }
52
+ for _, ref := range agentContractRE.FindAllString(line, -1) {
53
+ if !strings.Contains(ref, "pack/") {
54
+ return fmt.Errorf("%s %s:%d tells the agent to read a role contract (%q); a named agent already has its contract as its system prompt, and context --role names it in the bundle — drop the line",
55
+ kind, path, i+1, ref)
56
+ }
57
+ }
58
+ }
59
+ return nil
60
+ }
61
+
27
62
  // lintWrightContract refuses a build wright contract that forbids the wright's
28
- // own writer-safe verification or names none, so a blind round is rejected
29
- // before launch rather than discovered after the wright returns.
63
+ // own writer-safe verification, names none, or tells the wright to read its
64
+ // installed role contract, so a blind round is rejected before launch rather
65
+ // than discovered after the wright returns.
30
66
  func lintWrightContract(path string) error {
31
67
  if path == "" {
32
68
  return fmt.Errorf("a build wright wave needs --contract <file> holding the exact wright contract (with a `Writer-safe checks:` line)")
@@ -44,8 +80,52 @@ func lintWrightContract(path string) error {
44
80
  path, i+1, strings.TrimSpace(line[loc[0]:loc[1]]))
45
81
  }
46
82
  }
83
+ if err := lintContractRead("wright contract", path, raw); err != nil {
84
+ return err
85
+ }
47
86
  if !writerSafeLineRE.Match(raw) {
48
87
  return fmt.Errorf("wright contract %s names no `Writer-safe checks:` line; list the syntax/type/lint, unit/self-check and narrow smoke commands the wright runs before returning", path)
49
88
  }
50
89
  return nil
51
90
  }
91
+
92
+ // lintWrightContractFor is lintWrightContract plus the feature's gates.md: when
93
+ // the ledger has a live `RUN: writer` row, the contract's `Writer-safe checks:`
94
+ // block must name `gates precheck`, so the wright runs those rows and `check
95
+ // windows` before returning instead of a repair round finding them after. An
96
+ // absent gates.md requires nothing.
97
+ func lintWrightContractFor(root, slug, path string) error {
98
+ if err := lintWrightContract(path); err != nil {
99
+ return err
100
+ }
101
+ ledger, err := readWorkspaceArtifact(root, slug, acceptance.GatesFile)
102
+ if errors.Is(err, os.ErrNotExist) {
103
+ return nil
104
+ }
105
+ if err != nil {
106
+ return fmt.Errorf("wright contract %s: %w", path, err)
107
+ }
108
+ writers := acceptance.ParseLedger(string(ledger)).WriterGates()
109
+ if len(writers) == 0 {
110
+ return nil
111
+ }
112
+ raw, err := readBoundedRegularFile(path, maxContractBytes)
113
+ if err != nil {
114
+ return fmt.Errorf("wright contract %s: %w", path, err)
115
+ }
116
+ // The block runs from the `Writer-safe checks:` line to the first blank
117
+ // line after its first listed check.
118
+ loc := writerSafeLineRE.FindIndex(raw)
119
+ if loc == nil {
120
+ return fmt.Errorf("wright contract %s changed while it was linted", path)
121
+ }
122
+ block := raw[loc[0]:]
123
+ if end := blankLineRE.FindIndex(block[loc[1]-1-loc[0]:]); end != nil {
124
+ block = block[:loc[1]-1-loc[0]+end[0]]
125
+ }
126
+ if !strings.Contains(string(block), "gates precheck") {
127
+ return fmt.Errorf("wright contract %s: %s marks %s `RUN: writer`, so its `Writer-safe checks:` must include `devrites-engine gates precheck %s --worktree <path>`; the wright runs those rows and `check windows` and fixes failures before returning",
128
+ path, acceptance.GatesFile, writers[0].ID, slug)
129
+ }
130
+ return nil
131
+ }
@@ -1,9 +1,16 @@
1
1
  package lib
2
2
 
3
3
  import (
4
+ "errors"
4
5
  "fmt"
6
+ "os"
7
+ "path/filepath"
5
8
  "regexp"
9
+ "slices"
10
+ "strconv"
6
11
  "strings"
12
+
13
+ "github.com/devrites/devrites/internal/devritespaths"
7
14
  )
8
15
 
9
16
  // seedingRE matches packet text that hands a reviewer a conclusion instead of
@@ -12,20 +19,105 @@ import (
12
19
  var seedingRE = regexp.MustCompile(`\b[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+-PASS\b` +
13
20
  `|(?i:\bno-findings\b)` +
14
21
  `|(?i:^\s*(?:outcome|counts|verdict)\s*:\s*[^<\s])` +
15
- `|(?i:\b(?:already|previously)\s+(?:passed|passes|green|printed|verified|approved|clean)\b)` +
16
- `|(?i:\b(?:critical|important)\s*[:=]?\s*0\b)`)
22
+ `|(?i:\b(?:already|previously)\s+(?:passed|passes|green|printed|verified|approved|clean|fixed|closed|resolved)\b)` +
23
+ `|(?i:\b(?:critical|important)\s*[:=]?\s*0\b)` +
24
+ // Phrasings observed in voided reviews: a parent/sibling report, a passed
25
+ // check, a returned severity or finding, a green outcome, a return file.
26
+ `|(?i:\b(?:parent|root|sibling|drafter|wright|implementer)(?:\s+self-attack)?\s+(?:observed|reports?|reported|concluded|confirmed|exposes|exposed)\b)` +
27
+ `|(?i:\b(?:check|gate|scope|tests?)\s+passed\b)` +
28
+ `|(?i:\breturned\s+(?:critical|important|minor|findings|no-findings)\b)` +
29
+ `|(?i:\b(?:critical|important|minor)\s+F\d+\b)` +
30
+ `|(?i:\bclosed\s+by\b)` +
31
+ `|(?i:\b(?:makes|made|turned|went)\s+[\w/-]*\s*green\b)` +
32
+ `|packets/\S+\.return\.md`)
33
+
34
+ // roleTagRE matches a role-tagged finding fingerprint ("Plan F1", "DevEx S2").
35
+ // The tag is a reviewer role's leading word: Perf for performance-reviewer.
36
+ var roleTagRE = regexp.MustCompile(`\b(Plan|Doubt|Code|DevEx|Test|Security|Spec|Strategy|Perf|Frontend|Simplifier)\s+[FS]\d+\b`)
37
+
38
+ // countsTemplateRE matches a Counts line whose every value is a placeholder
39
+ // (the return template), which names keys but no conclusion.
40
+ var countsTemplateRE = regexp.MustCompile(`(?i)^\s*counts\s*:(?:\s+[a-z]+=<[^<>]*>)+\s*$`)
41
+
42
+ // roleBase is the canonical role a --role names: an optional "devrites-"
43
+ // agent-name prefix and ".lane" suffix dropped.
44
+ func roleBase(role string) string {
45
+ base, _, _ := strings.Cut(strings.TrimPrefix(role, "devrites-"), ".")
46
+ return base
47
+ }
17
48
 
18
49
  // isReviewerRole reports whether role is an independent read-only reviewer:
19
- // a *-reviewer, *-auditor, or test-analyst, with an optional ".lane" suffix.
50
+ // a *-reviewer, *-auditor, or test-analyst.
20
51
  func isReviewerRole(role string) bool {
21
- base, _, _ := strings.Cut(role, ".")
52
+ base := roleBase(role)
22
53
  return strings.HasSuffix(base, "-reviewer") || strings.HasSuffix(base, "-auditor") || base == "test-analyst"
23
54
  }
24
55
 
25
- // lintReviewerPacket refuses a reviewer packet that seeds a conclusion, so a
26
- // voided review is rejected before launch rather than discovered after it.
56
+ // lintKnownRoles refuses a --role that names no pack agent, so a free-form
57
+ // label ("test-analyst-022-r5") cannot skip the reviewer lints. The agent path
58
+ // resolves as context --role does: the phase skill's loads manifest, else the
59
+ // devrites-<role> convention, in any project-level host install; a Codex
60
+ // install keeps role agents at .codex/agents/<name>.toml.
61
+ // shortcut: only project-level installs are checked (a global-only install or
62
+ // none skips the check); check the user install too if free-form roles recur there.
63
+ func lintKnownRoles(root, phase string, roles []string) error {
64
+ project := filepath.Dir(root)
65
+ var skillsRoots []string
66
+ if dir, err := resolveSkillsRoot(root, ""); err == nil {
67
+ if rel, err := filepath.Rel(project, dir); err == nil && rel != ".." && !strings.HasPrefix(rel, ".."+string(filepath.Separator)) {
68
+ skillsRoots = append(skillsRoots, dir)
69
+ }
70
+ }
71
+ for _, rel := range []string{".omp/skills", ".agents/skills", ".pi/skills", ".devin/skills"} {
72
+ dir := filepath.Join(project, filepath.FromSlash(rel))
73
+ if info, err := os.Stat(filepath.Join(dir, "devrites-lib")); err == nil && info.IsDir() {
74
+ skillsRoots = append(skillsRoots, dir)
75
+ }
76
+ }
77
+ manifests := make([]loadsManifest, len(skillsRoots))
78
+ for i, dir := range skillsRoots {
79
+ if raw, err := os.ReadFile(filepath.Join(dir, "rite-"+strings.ToLower(phase), "SKILL.md")); err == nil { // #nosec G304 -- resolved under a project skills root
80
+ manifests[i], _, _ = parseLoadsManifest(string(raw))
81
+ }
82
+ }
83
+ isRegular := func(path string) bool {
84
+ info, err := os.Stat(path)
85
+ return err == nil && info.Mode().IsRegular()
86
+ }
87
+ for _, role := range roles {
88
+ base := roleBase(role)
89
+ known := len(skillsRoots) == 0
90
+ for i, dir := range skillsRoots {
91
+ if !devritespaths.ValidSlug(base) {
92
+ break
93
+ }
94
+ rel := filepath.FromSlash(roleAgentPath(manifests[i], base))
95
+ if isRegular(filepath.Join(dir, "..", "agents", rel)) ||
96
+ isRegular(filepath.Join(project, ".codex", "agents", strings.TrimSuffix(filepath.Base(rel), ".md")+".toml")) {
97
+ known = true
98
+ break
99
+ }
100
+ }
101
+ if !known {
102
+ return fmt.Errorf("role %q names no pack agent; use a canonical role, optionally with a .<lane> suffix", role)
103
+ }
104
+ }
105
+ return nil
106
+ }
107
+
108
+ // lintReviewerPacket refuses a reviewer packet that seeds a conclusion or
109
+ // tells the reviewer to read its installed role contract, so a voided review
110
+ // is rejected before launch rather than discovered after it.
27
111
  // Placeholder text inside <...> (an output template) is not a conclusion.
112
+ // With no wave roles, every role-tagged fingerprint is refused.
28
113
  func lintReviewerPacket(path string) error {
114
+ return lintReviewerWavePacket(path, nil)
115
+ }
116
+
117
+ // lintReviewerWavePacket is lintReviewerPacket for a wave: a role-tagged
118
+ // fingerprint passes only when roles hold exactly one reviewer role and the
119
+ // tag names it.
120
+ func lintReviewerWavePacket(path string, roles []string) error {
29
121
  if path == "" {
30
122
  return fmt.Errorf("a reviewer wave needs --packet <file> holding the exact packet the reviewers receive")
31
123
  }
@@ -33,19 +125,143 @@ func lintReviewerPacket(path string) error {
33
125
  if err != nil {
34
126
  return fmt.Errorf("reviewer packet %s: %w", path, err)
35
127
  }
128
+ var reviewers []string
129
+ for _, role := range roles {
130
+ if base := roleBase(role); isReviewerRole(base) && !slices.Contains(reviewers, base) {
131
+ reviewers = append(reviewers, base)
132
+ }
133
+ }
36
134
  for i, line := range strings.Split(string(raw), "\n") {
135
+ if countsTemplateRE.MatchString(line) {
136
+ continue
137
+ }
37
138
  for _, loc := range seedingRE.FindAllStringIndex(line, -1) {
38
139
  if insidePlaceholder(line, loc[0], loc[1]) {
39
140
  continue
40
141
  }
41
- return fmt.Errorf("reviewer packet %s:%d seeds a conclusion (%q); a packet carries scope, paths, diff and rubric only — never a gate result, a reviewer outcome or count, or a claim that something already passed. Weigh root proof at reconciliation instead",
142
+ return fmt.Errorf("reviewer packet %s:%d seeds a conclusion (%q); a packet carries scope, paths, diff and rubric only — never a gate result, a reviewer outcome or count, or a claim that something already passed (agents.md § Independence). Weigh root proof at reconciliation instead",
42
143
  path, i+1, strings.TrimSpace(line[loc[0]:loc[1]]))
43
144
  }
145
+ for _, m := range roleTagRE.FindAllStringSubmatchIndex(line, -1) {
146
+ tag := strings.ToLower(line[m[2]:m[3]])
147
+ if insidePlaceholder(line, m[0], m[1]) || (len(reviewers) == 1 && strings.HasPrefix(reviewers[0], tag)) {
148
+ continue
149
+ }
150
+ return fmt.Errorf("reviewer packet %s:%d carries fingerprint %q from another role; a recheck packet lists only fingerprints that same role raised, so send it to that role's recheck alone (agents.md § Independence)",
151
+ path, i+1, line[m[0]:m[1]])
152
+ }
44
153
  }
45
- return nil
154
+ return lintContractRead("reviewer packet", path, raw)
46
155
  }
47
156
 
48
157
  func insidePlaceholder(line string, start, end int) bool {
49
158
  open := strings.LastIndex(line[:start], "<")
50
159
  return open >= 0 && open > strings.LastIndex(line[:start], ">") && strings.Contains(line[end:], ">")
51
160
  }
161
+
162
+ // severityCountKeys is the Counts vocabulary of a reviewer role that
163
+ // returnCountKeys does not list.
164
+ var severityCountKeys = []string{"critical", "important", "suggestion", "nit", "fyi", "gap"}
165
+
166
+ // returnCountKeys is the closed, ordered Counts vocabulary of the reviewer
167
+ // roles that differ from severityCountKeys. The agent-template head test reads
168
+ // this table, so the engine and the templates share one source.
169
+ var returnCountKeys = map[string][]string{
170
+ "plan-reviewer": {"critical", "important", "suggestion", "nit", "fyi", "gap", "contract", "mechanism"},
171
+ "simplifier-reviewer": {"suggestion", "nit", "fyi", "gap"},
172
+ }
173
+
174
+ func countKeys(role string) []string {
175
+ if keys, ok := returnCountKeys[roleBase(role)]; ok {
176
+ return keys
177
+ }
178
+ return severityCountKeys
179
+ }
180
+
181
+ var countRE = regexp.MustCompile(`^([a-z]+)=([0-9]{1,6})$`)
182
+
183
+ // parseReturnHead reads a reviewer return's strict head: line 1
184
+ // "Outcome: findings|no-findings|gap", line 2 "Counts: key=N ..." with keys
185
+ // from the role's vocabulary. findings needs a non-gap count above 0 and
186
+ // no-findings needs every count at 0. It returns the outcome and the counts as
187
+ // "key=N,key=N"; an error means the head is malformed.
188
+ func parseReturnHead(role, text string) (outcome, counts string, err error) {
189
+ lines := strings.SplitN(strings.TrimLeft(text, "\r\n"), "\n", 3)
190
+ if len(lines) < 2 {
191
+ return "", "", errors.New("no Outcome/Counts head on lines 1-2")
192
+ }
193
+ outcome, ok := strings.CutPrefix(strings.TrimSpace(lines[0]), "Outcome: ")
194
+ if !ok || (outcome != "findings" && outcome != "no-findings" && outcome != "gap") {
195
+ return "", "", fmt.Errorf("line 1 is not \"Outcome: findings|no-findings|gap\": %q", strings.TrimSpace(lines[0]))
196
+ }
197
+ rest, ok := strings.CutPrefix(strings.TrimSpace(lines[1]), "Counts:")
198
+ fields := strings.Fields(rest)
199
+ if !ok || len(fields) == 0 {
200
+ return "", "", fmt.Errorf("line 2 is not \"Counts: key=N ...\": %q", strings.TrimSpace(lines[1]))
201
+ }
202
+ allowed := countKeys(role)
203
+ seen := map[string]bool{}
204
+ total, nonGap := 0, 0
205
+ for _, field := range fields {
206
+ m := countRE.FindStringSubmatch(field)
207
+ if m == nil || !slices.Contains(allowed, m[1]) || seen[m[1]] {
208
+ return "", "", fmt.Errorf("line 2 has Counts entry %q, which is not a distinct key=N with key in %s", field, strings.Join(allowed, ","))
209
+ }
210
+ seen[m[1]] = true
211
+ n, _ := strconv.Atoi(m[2])
212
+ total += n
213
+ if m[1] != "gap" {
214
+ nonGap += n
215
+ }
216
+ }
217
+ if outcome == "findings" && nonGap == 0 {
218
+ return "", "", errors.New("line 1 says findings but no non-gap count is above 0")
219
+ }
220
+ if outcome == "no-findings" && total > 0 {
221
+ return "", "", errors.New("line 1 says no-findings but a count is above 0")
222
+ }
223
+ return outcome, strings.Join(fields, ","), nil
224
+ }
225
+
226
+ var siteLineRE = regexp.MustCompile(`(?::[0-9]+)+(?:-[0-9]+)?$`)
227
+
228
+ // findingKeys returns one role|slice|file|section|severity key per "Finding:"
229
+ // row and the number of "Late:" lines. The site drops its line number so a
230
+ // re-raise after an edit still matches, and spaces become "_" so each key is
231
+ // one note token.
232
+ // shortcut: cells split on every "|", so a quoted "|" shifts the cells; parse
233
+ // the quote if keys come out wrong.
234
+ func findingKeys(role, slice, text string) (keys []string, late int) {
235
+ for _, line := range strings.Split(text, "\n") {
236
+ line = strings.TrimSpace(line)
237
+ if strings.HasPrefix(line, "Late:") {
238
+ late++
239
+ continue
240
+ }
241
+ row, ok := strings.CutPrefix(line, "Finding:")
242
+ if !ok {
243
+ continue
244
+ }
245
+ cells := strings.Split(row, "|")
246
+ file, section := "", ""
247
+ if len(cells) > 1 {
248
+ file = siteLineRE.ReplaceAllString(strings.TrimSpace(cells[1]), "")
249
+ }
250
+ for _, cell := range cells[min(2, len(cells)):] {
251
+ if cited, ok := strings.CutPrefix(strings.TrimSpace(cell), "breaks "); ok {
252
+ section, _, _ = strings.Cut(cited, `"`)
253
+ break
254
+ }
255
+ }
256
+ severity, _, _ := strings.Cut(strings.TrimSpace(cells[0]), " ")
257
+ keys = append(keys, strings.Join([]string{role, slice, keyToken(file), keyToken(section), keyToken(strings.ToLower(severity))}, "|"))
258
+ }
259
+ return keys, late
260
+ }
261
+
262
+ func keyToken(s string) string {
263
+ if fields := strings.Fields(s); len(fields) > 0 {
264
+ return strings.Join(fields, "_")
265
+ }
266
+ return "-"
267
+ }
@@ -59,11 +59,10 @@ func EnvironmentReportFor(devritesRoot, projectRoot string) (EnvironmentReport,
59
59
  EngineVersion: version.Version,
60
60
  ProjectRoot: abs,
61
61
  Manifest: probePath(abs, devritespaths.ManifestName),
62
+ // codebase-memory-mcp keeps its index in a central store; only its
63
+ // optional persisted artifact lives in the repository.
62
64
  Indexes: []PathProbe{
63
- probePath(abs, ".codegraph"),
64
- probePath(abs, ".code-review-graph"),
65
65
  probePath(abs, ".codebase-memory"),
66
- probePath(abs, "graph.json"),
67
66
  },
68
67
  }
69
68
  if devritesRoot != "" {
@@ -5,6 +5,7 @@ import (
5
5
  "io"
6
6
  "os"
7
7
  "path/filepath"
8
+ "slices"
8
9
  "strings"
9
10
 
10
11
  "github.com/devrites/devrites/internal/acceptance"
@@ -32,10 +33,14 @@ var readNextOrder = []string{
32
33
 
33
34
  // RunHandoff emits the deterministic resume record for one feature workspace:
34
35
  // cursor fields, blocking question gates, the acceptance-ledger reduction,
35
- // recorded dead ends, and the canonical read-next order. It never writes; the
36
- // record is a faithful reduction of durable artifacts so a fresh agent (or a
37
- // handoff writer) does not depend on transcript memory to resume.
36
+ // recorded dead ends, in-flight dispatch waves, and the canonical read-next
37
+ // order. The record is a faithful reduction of durable artifacts so a fresh
38
+ // agent (or a handoff writer) does not depend on transcript memory to resume.
39
+ // It writes nothing unless --resume is given: then it appends one resume
40
+ // metric so `metrics summary` can time each resume to the next dispatch.
38
41
  func RunHandoff(root string, args []string, stdout, stderr io.Writer) int {
42
+ resume := slices.Contains(args, "--resume")
43
+ args = slices.DeleteFunc(slices.Clone(args), func(a string) bool { return a == "--resume" })
39
44
  slug, code, err := ActiveSlug(root, args)
40
45
  if err != nil {
41
46
  fmt.Fprintf(stderr, "handoff: %v\n", err)
@@ -76,6 +81,7 @@ func RunHandoff(root string, args []string, stdout, stderr io.Writer) int {
76
81
  writeHandoffQuestions(featureDir, stdout)
77
82
  writeHandoffLedger(featureDir, stdout)
78
83
  writeHandoffDeadEnds(featureDir, stdout)
84
+ writeHandoffWaves(root, slug, stdout)
79
85
 
80
86
  if report.Complete() {
81
87
  fmt.Fprintln(stdout, "missing_required: none")
@@ -83,6 +89,9 @@ func RunHandoff(root string, args []string, stdout, stderr io.Writer) int {
83
89
  fmt.Fprintf(stdout, "missing_required: %s\n", strings.Join(report.MissingFiles, ", "))
84
90
  }
85
91
  fmt.Fprintf(stdout, "read_next: %s\n", strings.Join(readNext(featureDir), ", "))
92
+ if resume {
93
+ recordMetric(root, slug, string(report.Phase), "resume", "root", 0)
94
+ }
86
95
  return 0
87
96
  }
88
97
 
@@ -161,6 +170,27 @@ func writeHandoffDeadEnds(featureDir string, stdout io.Writer) {
161
170
  }
162
171
  }
163
172
 
173
+ // writeHandoffWaves lists dispatch waves whose agents have not all returned,
174
+ // with the reduction observe uses, so a resume reconciles a running cohort
175
+ // instead of re-dispatching it.
176
+ func writeHandoffWaves(root, slug string, stdout io.Writer) {
177
+ f, _, err := loadDispatch(root, slug)
178
+ if err != nil {
179
+ fmt.Fprintf(stdout, "inflight_waves: unreadable (%v)\n", err)
180
+ return
181
+ }
182
+ waves := inflightWaves(f)
183
+ if len(waves) == 0 {
184
+ fmt.Fprintln(stdout, "inflight_waves: none")
185
+ return
186
+ }
187
+ fmt.Fprintf(stdout, "inflight_waves: %d\n", len(waves))
188
+ for _, w := range waves {
189
+ fmt.Fprintf(stdout, "inflight_wave: %s phase=%s state=%s pending=%s slices=%s\n",
190
+ w.Wave, w.Phase, w.State, orDash(strings.Join(w.Pending, ",")), orDash(strings.Join(w.Slices, ",")))
191
+ }
192
+ }
193
+
164
194
  func deadEnds(data []byte) []string {
165
195
  var ends []string
166
196
  inSection := false
@@ -127,17 +127,21 @@ func metricsRecord(root string, args []string, stdout, stderr io.Writer) int {
127
127
  // bundle emission). It never fails the caller: a metrics write is observability,
128
128
  // not a gate.
129
129
  func recordMetric(root, slug, phase, event, role string, bytes int64) {
130
+ appendMetric(root, slug, metricEvent{Phase: phase, Event: event, Role: role, Bytes: bytes})
131
+ }
132
+
133
+ // recordMetricNote is recordMetric for an event that carries a note, such as a
134
+ // return's reviewer outcome or an abandon reason.
135
+ func recordMetricNote(root, slug, phase, event, role, note string) {
136
+ appendMetric(root, slug, metricEvent{Phase: phase, Event: event, Role: role, Note: note})
137
+ }
138
+
139
+ func appendMetric(root, slug string, entry metricEvent) {
130
140
  dir, err := devritespaths.ExistingFeatureDirChecked(root, slug)
131
141
  if err != nil {
132
142
  return
133
143
  }
134
- entry := metricEvent{
135
- TS: time.Now().UTC().Format(time.RFC3339),
136
- Phase: phase,
137
- Event: event,
138
- Role: role,
139
- Bytes: bytes,
140
- }
144
+ entry.TS = time.Now().UTC().Format(time.RFC3339)
141
145
  line, err := json.Marshal(entry)
142
146
  if err != nil {
143
147
  return
@@ -197,14 +201,20 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
197
201
  byKind map[string]int
198
202
  }
199
203
  type roleAgg struct {
200
- events int
201
- bytes int64
204
+ events int
205
+ bytes int64
206
+ outcomes map[string]int
207
+ returns []storedReturn
202
208
  }
203
209
  phases := map[string]*phaseAgg{}
204
210
  roles := map[string]*roleAgg{}
205
211
  totalBytes := int64(0)
206
212
  totalEvents := 0
207
213
  bad := 0
214
+ // Each resume's minutes to the next dispatch, in ledger (append) order:
215
+ // "none" when another resume came first, "open" when no dispatch followed.
216
+ var resumeGaps []string
217
+ var pendingResume *time.Time
208
218
  // A reader, not a Scanner: one event line carries an unbounded --note. A
209
219
  // final line without a newline is handled, then the next read is ("", EOF).
210
220
  reader := bufio.NewReader(f)
@@ -234,14 +244,36 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
234
244
  agg.events++
235
245
  agg.bytes += ev.Bytes
236
246
  agg.byKind[ev.Event]++
247
+ if ts, err := time.Parse(time.RFC3339, ev.TS); err == nil && (ev.Event == "resume" || ev.Event == "dispatch") {
248
+ if ev.Event == "resume" {
249
+ if pendingResume != nil {
250
+ resumeGaps = append(resumeGaps, "none")
251
+ }
252
+ pendingResume = &ts
253
+ } else if pendingResume != nil {
254
+ resumeGaps = append(resumeGaps, strconv.FormatFloat(ts.Sub(*pendingResume).Minutes(), 'f', 0, 64))
255
+ pendingResume = nil
256
+ }
257
+ }
237
258
  if ev.Role != "" {
238
259
  ragg, ok := roles[ev.Role]
239
260
  if !ok {
240
- ragg = &roleAgg{}
261
+ ragg = &roleAgg{outcomes: map[string]int{}}
241
262
  roles[ev.Role] = ragg
242
263
  }
243
264
  ragg.events++
244
265
  ragg.bytes += ev.Bytes
266
+ if ev.Event == "return" {
267
+ fields := strings.Fields(ev.Note)
268
+ if len(fields) > 0 {
269
+ if outcome, ok := strings.CutPrefix(fields[0], "outcome="); ok {
270
+ ragg.outcomes[outcome]++
271
+ }
272
+ }
273
+ if rec, ok := parseStoredReturn(fields); ok {
274
+ ragg.returns = append(ragg.returns, rec)
275
+ }
276
+ }
245
277
  }
246
278
  totalEvents++
247
279
  totalBytes += ev.Bytes
@@ -274,9 +306,28 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
274
306
  fmt.Fprintln(stdout, " roles:")
275
307
  for _, role := range orderedRoles {
276
308
  agg := roles[role]
277
- fmt.Fprintf(stdout, " %-24s events=%d bytes=%d\n", role, agg.events, agg.bytes)
309
+ fmt.Fprintf(stdout, " %-24s events=%d bytes=%d", role, agg.events, agg.bytes)
310
+ if len(agg.outcomes) > 0 {
311
+ tally := make([]string, 0, len(agg.outcomes))
312
+ for outcome, n := range agg.outcomes {
313
+ tally = append(tally, fmt.Sprintf("%s=%d", outcome, n))
314
+ }
315
+ sort.Strings(tally)
316
+ fmt.Fprintf(stdout, " outcomes: %s", strings.Join(tally, " "))
317
+ }
318
+ if len(agg.returns) > 0 {
319
+ resolved, reraised, open, late := findingResolution(agg.returns)
320
+ fmt.Fprintf(stdout, " resolution: resolved=%d re-raised=%d open=%d late=%d", resolved, reraised, open, late)
321
+ }
322
+ fmt.Fprintln(stdout)
278
323
  }
279
324
  }
325
+ if pendingResume != nil {
326
+ resumeGaps = append(resumeGaps, "open")
327
+ }
328
+ if len(resumeGaps) > 0 {
329
+ fmt.Fprintf(stdout, " resumes count=%d minutes_to_dispatch=%s\n", len(resumeGaps), strings.Join(resumeGaps, ","))
330
+ }
280
331
  fmt.Fprintf(stdout, " total events=%d bytes=%d", totalEvents, totalBytes)
281
332
  if bad > 0 {
282
333
  fmt.Fprintf(stdout, " unparsed=%d", bad)
@@ -285,6 +336,63 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
285
336
  return 0
286
337
  }
287
338
 
339
+ // storedReturn is one return recorded with dispatch return --result: its
340
+ // slice, Finding: keys, and Late: line count.
341
+ type storedReturn struct {
342
+ slice string
343
+ keys []string
344
+ late int
345
+ }
346
+
347
+ // parseStoredReturn reads the slice=, late= and finding= tokens of a return
348
+ // note; a note without slice= was not recorded with --result.
349
+ func parseStoredReturn(fields []string) (storedReturn, bool) {
350
+ var rec storedReturn
351
+ found := false
352
+ for _, field := range fields {
353
+ if v, ok := strings.CutPrefix(field, "slice="); ok {
354
+ rec.slice, found = v, true
355
+ } else if v, ok := strings.CutPrefix(field, "late="); ok {
356
+ rec.late, _ = strconv.Atoi(v)
357
+ } else if v, ok := strings.CutPrefix(field, "finding="); ok {
358
+ rec.keys = append(rec.keys, v)
359
+ }
360
+ }
361
+ return rec, found
362
+ }
363
+
364
+ // findingResolution classifies each raised finding key of one role, in ledger
365
+ // order: re-raised when a later return on the same slice raises it again,
366
+ // resolved when a later return on that slice does not, open when no later
367
+ // return on that slice exists yet.
368
+ func findingResolution(returns []storedReturn) (resolved, reraised, open, late int) {
369
+ for i, rec := range returns {
370
+ late += rec.late
371
+ for _, key := range rec.keys {
372
+ rechecked, again := false, false
373
+ for _, next := range returns[i+1:] {
374
+ if next.slice != rec.slice {
375
+ continue
376
+ }
377
+ rechecked = true
378
+ if slices.Contains(next.keys, key) {
379
+ again = true
380
+ break
381
+ }
382
+ }
383
+ switch {
384
+ case again:
385
+ reraised++
386
+ case rechecked:
387
+ resolved++
388
+ default:
389
+ open++
390
+ }
391
+ }
392
+ }
393
+ return resolved, reraised, open, late
394
+ }
395
+
288
396
  // sliceCostSummary reports, per slice named on dispatch waves, the build wright
289
397
  // rounds, slice-bound Vet rechecks, and agent-minutes (role start to return; a
290
398
  // wave naming several slices splits its minutes evenly). Abandoned waves are