devrites 6.10.0 → 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 (641) hide show
  1. package/CHANGELOG.md +19 -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 +21 -19
  8. package/docs/engine/commands.md +22 -15
  9. package/docs/usage.md +3 -3
  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 +49 -13
  21. package/engine/internal/gate/preconditions.go +121 -0
  22. package/engine/internal/lib/anchors.go +270 -0
  23. package/engine/internal/lib/apply_bundle.go +2 -1
  24. package/engine/internal/lib/candidate.go +17 -8
  25. package/engine/internal/lib/claims.go +48 -33
  26. package/engine/internal/lib/context.go +337 -22
  27. package/engine/internal/lib/diffscope.go +201 -12
  28. package/engine/internal/lib/dispatch.go +393 -21
  29. package/engine/internal/lib/dispatch_contract.go +82 -2
  30. package/engine/internal/lib/dispatch_packet.go +224 -8
  31. package/engine/internal/lib/environment_report.go +2 -3
  32. package/engine/internal/lib/handoff.go +33 -3
  33. package/engine/internal/lib/metrics.go +119 -11
  34. package/engine/internal/lib/next.go +45 -5
  35. package/engine/internal/lib/observe_summary.go +2 -4
  36. package/engine/internal/lib/packet.go +319 -0
  37. package/engine/internal/lib/packet_freeze.go +227 -0
  38. package/engine/internal/lib/perturb.go +403 -0
  39. package/engine/internal/lib/questions_lint.go +99 -0
  40. package/engine/internal/lib/state_edit.go +396 -0
  41. package/engine/internal/lib/taskgraph.go +166 -0
  42. package/engine/internal/lib/treebaseline.go +331 -0
  43. package/engine/internal/lib/triggers.go +19 -0
  44. package/engine/internal/lib/windows.go +110 -5
  45. package/engine/internal/overhaul/admit/run.go +7 -30
  46. package/engine/internal/parallel/cli.go +27 -33
  47. package/engine/internal/parallel/git.go +10 -0
  48. package/engine/internal/parallel/select.go +36 -0
  49. package/engine/internal/state/budgets.go +60 -13
  50. package/engine/internal/state/observation.go +1 -1
  51. package/engine/main.go +61 -14
  52. package/pack/.claude/agents/devrites-code-reviewer.md +9 -5
  53. package/pack/.claude/agents/devrites-devex-reviewer.md +5 -4
  54. package/pack/.claude/agents/devrites-doubt-reviewer.md +4 -4
  55. package/pack/.claude/agents/devrites-evidence-scout.md +3 -2
  56. package/pack/.claude/agents/devrites-frontend-reviewer.md +5 -4
  57. package/pack/.claude/agents/devrites-performance-reviewer.md +5 -5
  58. package/pack/.claude/agents/devrites-plan-drafter.md +4 -2
  59. package/pack/.claude/agents/devrites-plan-reviewer.md +5 -5
  60. package/pack/.claude/agents/devrites-proof-runner.md +1 -1
  61. package/pack/.claude/agents/devrites-retrospector.md +1 -1
  62. package/pack/.claude/agents/devrites-security-auditor.md +4 -4
  63. package/pack/.claude/agents/devrites-simplifier-reviewer.md +5 -4
  64. package/pack/.claude/agents/devrites-slice-wright.md +18 -9
  65. package/pack/.claude/agents/devrites-spec-reviewer.md +4 -4
  66. package/pack/.claude/agents/devrites-strategy-reviewer.md +5 -6
  67. package/pack/.claude/agents/devrites-test-analyst.md +7 -4
  68. package/pack/.claude/agents/devrites-upgrade-planner.md +1 -1
  69. package/pack/.claude/agents/fast-builder.md +4 -2
  70. package/pack/.claude/agents/fast-checker.md +3 -2
  71. package/pack/.claude/agents/fast-critic.md +3 -2
  72. package/pack/.claude/agents/fast-planner.md +3 -3
  73. package/pack/.claude/agents/overhaul-recon.md +5 -4
  74. package/pack/.claude/settings.json +19 -7
  75. package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -1
  76. package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
  77. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +1 -1
  78. package/pack/.claude/skills/devrites-doubt/SKILL.md +5 -5
  79. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  80. package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
  81. package/pack/.claude/skills/devrites-lib/SKILL.md +11 -6
  82. package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  83. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  84. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +2 -1
  85. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  86. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +43 -19
  87. package/pack/.claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  88. package/pack/.claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
  89. package/pack/.claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  90. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  91. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +14 -1
  92. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  93. package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +10 -1
  94. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +4 -0
  95. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +3 -1
  96. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
  97. package/pack/.claude/skills/devrites-lib/reference/standards/windows.md +3 -2
  98. package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  99. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  100. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
  101. package/pack/.claude/skills/overhaul/references/orchestration.md +3 -2
  102. package/pack/.claude/skills/rite/SKILL.md +1 -1
  103. package/pack/.claude/skills/rite-adopt/SKILL.md +1 -1
  104. package/pack/.claude/skills/rite-adopt/reference/adoption.md +1 -1
  105. package/pack/.claude/skills/rite-autocomplete/SKILL.md +5 -4
  106. package/pack/.claude/skills/rite-build/SKILL.md +4 -3
  107. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -0
  108. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  109. package/pack/.claude/skills/rite-build/reference/checkpoint.md +2 -0
  110. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  111. package/pack/.claude/skills/rite-build/reference/output.md +2 -0
  112. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +22 -12
  113. package/pack/.claude/skills/rite-build/reference/phase-contract.md +13 -3
  114. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +42 -25
  115. package/pack/.claude/skills/rite-clarify/SKILL.md +1 -1
  116. package/pack/.claude/skills/rite-converge/SKILL.md +4 -4
  117. package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
  118. package/pack/.claude/skills/rite-define/SKILL.md +10 -5
  119. package/pack/.claude/skills/rite-doctor/SKILL.md +17 -2
  120. package/pack/.claude/skills/rite-dogfood/SKILL.md +1 -1
  121. package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
  122. package/pack/.claude/skills/rite-explain/reference/intake.md +1 -1
  123. package/pack/.claude/skills/rite-fast/SKILL.md +1 -1
  124. package/pack/.claude/skills/rite-handoff/SKILL.md +3 -3
  125. package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +1 -1
  126. package/pack/.claude/skills/rite-plan/SKILL.md +4 -4
  127. package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -2
  128. package/pack/.claude/skills/rite-polish/SKILL.md +6 -3
  129. package/pack/.claude/skills/rite-prove/SKILL.md +1 -1
  130. package/pack/.claude/skills/rite-quick/SKILL.md +1 -1
  131. package/pack/.claude/skills/rite-resolve/SKILL.md +1 -1
  132. package/pack/.claude/skills/rite-review/SKILL.md +4 -4
  133. package/pack/.claude/skills/rite-seal/SKILL.md +2 -2
  134. package/pack/.claude/skills/rite-ship/SKILL.md +1 -1
  135. package/pack/.claude/skills/rite-spec/SKILL.md +1 -1
  136. package/pack/.claude/skills/rite-spec/reference/investigation.md +5 -5
  137. package/pack/.claude/skills/rite-spec/reference/spec-template.md +1 -1
  138. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -4
  139. package/pack/.claude/skills/rite-status/SKILL.md +1 -1
  140. package/pack/.claude/skills/rite-temper/SKILL.md +1 -1
  141. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  142. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +2 -2
  143. package/pack/.claude/skills/rite-temper/reference/significance.md +2 -2
  144. package/pack/.claude/skills/rite-vet/SKILL.md +8 -4
  145. package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -3
  146. package/pack/.claude/skills/rite-vet/reference/depth.md +2 -2
  147. package/pack/.claude/skills/rite-vet/reference/review-axes.md +2 -2
  148. package/pack/.claude/skills/rite-zoom-out/SKILL.md +6 -6
  149. package/pack/generated/claude/agents/devrites-code-reviewer.md +9 -5
  150. package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -4
  151. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +4 -4
  152. package/pack/generated/claude/agents/devrites-evidence-scout.md +3 -2
  153. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +5 -4
  154. package/pack/generated/claude/agents/devrites-performance-reviewer.md +5 -5
  155. package/pack/generated/claude/agents/devrites-plan-drafter.md +4 -2
  156. package/pack/generated/claude/agents/devrites-plan-reviewer.md +5 -5
  157. package/pack/generated/claude/agents/devrites-proof-runner.md +1 -1
  158. package/pack/generated/claude/agents/devrites-retrospector.md +1 -1
  159. package/pack/generated/claude/agents/devrites-security-auditor.md +4 -4
  160. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +5 -4
  161. package/pack/generated/claude/agents/devrites-slice-wright.md +18 -9
  162. package/pack/generated/claude/agents/devrites-spec-reviewer.md +4 -4
  163. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +5 -6
  164. package/pack/generated/claude/agents/devrites-test-analyst.md +7 -4
  165. package/pack/generated/claude/agents/devrites-upgrade-planner.md +1 -1
  166. package/pack/generated/claude/agents/fast-builder.md +4 -2
  167. package/pack/generated/claude/agents/fast-checker.md +3 -2
  168. package/pack/generated/claude/agents/fast-critic.md +3 -2
  169. package/pack/generated/claude/agents/fast-planner.md +3 -3
  170. package/pack/generated/claude/agents/overhaul-recon.md +5 -4
  171. package/pack/generated/claude/settings.json +19 -7
  172. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -1
  173. package/pack/generated/claude/skills/devrites-audit/SKILL.md +1 -1
  174. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +1 -1
  175. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +5 -5
  176. package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  177. package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
  178. package/pack/generated/claude/skills/devrites-lib/SKILL.md +11 -6
  179. package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  180. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  181. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +2 -1
  182. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  183. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +43 -19
  184. package/pack/generated/claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  185. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
  186. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  187. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  188. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +14 -1
  189. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  190. package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +10 -1
  191. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +4 -0
  192. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +3 -1
  193. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
  194. package/pack/generated/claude/skills/devrites-lib/reference/standards/windows.md +3 -2
  195. package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  196. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  197. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
  198. package/pack/generated/claude/skills/overhaul/references/orchestration.md +3 -2
  199. package/pack/generated/claude/skills/rite/SKILL.md +1 -1
  200. package/pack/generated/claude/skills/rite-adopt/SKILL.md +1 -1
  201. package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +1 -1
  202. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +5 -4
  203. package/pack/generated/claude/skills/rite-build/SKILL.md +4 -3
  204. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -0
  205. package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  206. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +2 -0
  207. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  208. package/pack/generated/claude/skills/rite-build/reference/output.md +2 -0
  209. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +22 -12
  210. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +13 -3
  211. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +42 -25
  212. package/pack/generated/claude/skills/rite-clarify/SKILL.md +1 -1
  213. package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -4
  214. package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
  215. package/pack/generated/claude/skills/rite-define/SKILL.md +10 -5
  216. package/pack/generated/claude/skills/rite-doctor/SKILL.md +17 -2
  217. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +1 -1
  218. package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
  219. package/pack/generated/claude/skills/rite-explain/reference/intake.md +1 -1
  220. package/pack/generated/claude/skills/rite-fast/SKILL.md +1 -1
  221. package/pack/generated/claude/skills/rite-handoff/SKILL.md +3 -3
  222. package/pack/generated/claude/skills/rite-handoff/reference/handoff-template.md +1 -1
  223. package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -4
  224. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -2
  225. package/pack/generated/claude/skills/rite-polish/SKILL.md +6 -3
  226. package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -1
  227. package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -1
  228. package/pack/generated/claude/skills/rite-resolve/SKILL.md +1 -1
  229. package/pack/generated/claude/skills/rite-review/SKILL.md +4 -4
  230. package/pack/generated/claude/skills/rite-seal/SKILL.md +2 -2
  231. package/pack/generated/claude/skills/rite-ship/SKILL.md +1 -1
  232. package/pack/generated/claude/skills/rite-spec/SKILL.md +1 -1
  233. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +5 -5
  234. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +1 -1
  235. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -4
  236. package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
  237. package/pack/generated/claude/skills/rite-temper/SKILL.md +1 -1
  238. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  239. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +2 -2
  240. package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -2
  241. package/pack/generated/claude/skills/rite-vet/SKILL.md +8 -4
  242. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -3
  243. package/pack/generated/claude/skills/rite-vet/reference/depth.md +2 -2
  244. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +2 -2
  245. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +6 -6
  246. package/pack/generated/codex/agents/devrites-code-reviewer.toml +8 -4
  247. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +4 -3
  248. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +3 -3
  249. package/pack/generated/codex/agents/devrites-evidence-scout.toml +2 -1
  250. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +4 -3
  251. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +4 -4
  252. package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -1
  253. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +4 -4
  254. package/pack/generated/codex/agents/devrites-security-auditor.toml +3 -3
  255. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +4 -3
  256. package/pack/generated/codex/agents/devrites-slice-wright.toml +17 -8
  257. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +3 -3
  258. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +4 -5
  259. package/pack/generated/codex/agents/devrites-test-analyst.toml +6 -3
  260. package/pack/generated/codex/agents/fast-builder.toml +3 -1
  261. package/pack/generated/codex/agents/fast-checker.toml +2 -1
  262. package/pack/generated/codex/agents/fast-critic.toml +2 -1
  263. package/pack/generated/codex/agents/fast-planner.toml +2 -2
  264. package/pack/generated/codex/agents/overhaul-recon.toml +5 -4
  265. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -1
  266. package/pack/generated/codex/skills/devrites-audit/SKILL.md +1 -1
  267. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +1 -1
  268. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +5 -5
  269. package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  270. package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
  271. package/pack/generated/codex/skills/devrites-lib/SKILL.md +11 -6
  272. package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  273. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  274. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +2 -1
  275. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  276. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +43 -19
  277. package/pack/generated/codex/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  278. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-index.md +111 -0
  279. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  280. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  281. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +14 -1
  282. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  283. package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +10 -1
  284. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +4 -0
  285. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +3 -1
  286. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +9 -8
  287. package/pack/generated/codex/skills/devrites-lib/reference/standards/windows.md +3 -2
  288. package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  289. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  290. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
  291. package/pack/generated/codex/skills/overhaul/references/orchestration.md +3 -2
  292. package/pack/generated/codex/skills/rite/SKILL.md +1 -1
  293. package/pack/generated/codex/skills/rite-adopt/SKILL.md +1 -1
  294. package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +1 -1
  295. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +5 -4
  296. package/pack/generated/codex/skills/rite-build/SKILL.md +4 -3
  297. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -0
  298. package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  299. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +2 -0
  300. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +1 -1
  301. package/pack/generated/codex/skills/rite-build/reference/output.md +2 -0
  302. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +22 -12
  303. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +13 -3
  304. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +42 -25
  305. package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
  306. package/pack/generated/codex/skills/rite-converge/SKILL.md +4 -4
  307. package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +3 -3
  308. package/pack/generated/codex/skills/rite-define/SKILL.md +10 -5
  309. package/pack/generated/codex/skills/rite-doctor/SKILL.md +17 -2
  310. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +1 -1
  311. package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
  312. package/pack/generated/codex/skills/rite-explain/reference/intake.md +1 -1
  313. package/pack/generated/codex/skills/rite-fast/SKILL.md +1 -1
  314. package/pack/generated/codex/skills/rite-handoff/SKILL.md +3 -3
  315. package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +1 -1
  316. package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -4
  317. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -2
  318. package/pack/generated/codex/skills/rite-polish/SKILL.md +6 -3
  319. package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
  320. package/pack/generated/codex/skills/rite-quick/SKILL.md +1 -1
  321. package/pack/generated/codex/skills/rite-resolve/SKILL.md +1 -1
  322. package/pack/generated/codex/skills/rite-review/SKILL.md +4 -4
  323. package/pack/generated/codex/skills/rite-seal/SKILL.md +2 -2
  324. package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
  325. package/pack/generated/codex/skills/rite-spec/SKILL.md +1 -1
  326. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +5 -5
  327. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +1 -1
  328. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -4
  329. package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
  330. package/pack/generated/codex/skills/rite-temper/SKILL.md +1 -1
  331. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +2 -2
  332. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +2 -2
  333. package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -2
  334. package/pack/generated/codex/skills/rite-vet/SKILL.md +8 -4
  335. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -3
  336. package/pack/generated/codex/skills/rite-vet/reference/depth.md +2 -2
  337. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +2 -2
  338. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +6 -6
  339. package/pack/generated/devin/agents/devrites-code-reviewer.md +8 -4
  340. package/pack/generated/devin/agents/devrites-devex-reviewer.md +4 -3
  341. package/pack/generated/devin/agents/devrites-doubt-reviewer.md +3 -3
  342. package/pack/generated/devin/agents/devrites-evidence-scout.md +2 -1
  343. package/pack/generated/devin/agents/devrites-frontend-reviewer.md +4 -3
  344. package/pack/generated/devin/agents/devrites-performance-reviewer.md +4 -4
  345. package/pack/generated/devin/agents/devrites-plan-drafter.md +3 -1
  346. package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -4
  347. package/pack/generated/devin/agents/devrites-security-auditor.md +3 -3
  348. package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +4 -3
  349. package/pack/generated/devin/agents/devrites-slice-wright.md +17 -8
  350. package/pack/generated/devin/agents/devrites-spec-reviewer.md +3 -3
  351. package/pack/generated/devin/agents/devrites-strategy-reviewer.md +4 -5
  352. package/pack/generated/devin/agents/devrites-test-analyst.md +6 -3
  353. package/pack/generated/devin/agents/fast-builder.md +3 -1
  354. package/pack/generated/devin/agents/fast-checker.md +2 -1
  355. package/pack/generated/devin/agents/fast-critic.md +2 -1
  356. package/pack/generated/devin/agents/fast-planner.md +2 -2
  357. package/pack/generated/devin/agents/overhaul-recon.md +5 -4
  358. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +1 -1
  359. package/pack/generated/devin/skills/devrites-audit/SKILL.md +1 -1
  360. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +1 -1
  361. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +5 -5
  362. package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  363. package/pack/generated/devin/skills/devrites-interview/SKILL.md +1 -1
  364. package/pack/generated/devin/skills/devrites-lib/SKILL.md +11 -6
  365. package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  366. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  367. package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +2 -1
  368. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  369. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +43 -19
  370. package/pack/generated/devin/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  371. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-index.md +111 -0
  372. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  373. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  374. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +14 -1
  375. package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  376. package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +10 -1
  377. package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +4 -0
  378. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +3 -1
  379. package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +9 -8
  380. package/pack/generated/devin/skills/devrites-lib/reference/standards/windows.md +3 -2
  381. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  382. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  383. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
  384. package/pack/generated/devin/skills/overhaul/references/orchestration.md +3 -2
  385. package/pack/generated/devin/skills/rite/SKILL.md +1 -1
  386. package/pack/generated/devin/skills/rite-adopt/SKILL.md +1 -1
  387. package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +1 -1
  388. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +5 -4
  389. package/pack/generated/devin/skills/rite-build/SKILL.md +4 -3
  390. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +2 -0
  391. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  392. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +2 -0
  393. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +1 -1
  394. package/pack/generated/devin/skills/rite-build/reference/output.md +2 -0
  395. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +22 -12
  396. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +13 -3
  397. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +42 -25
  398. package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
  399. package/pack/generated/devin/skills/rite-converge/SKILL.md +4 -4
  400. package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +3 -3
  401. package/pack/generated/devin/skills/rite-define/SKILL.md +10 -5
  402. package/pack/generated/devin/skills/rite-doctor/SKILL.md +17 -2
  403. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +1 -1
  404. package/pack/generated/devin/skills/rite-explain/SKILL.md +1 -1
  405. package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
  406. package/pack/generated/devin/skills/rite-fast/SKILL.md +1 -1
  407. package/pack/generated/devin/skills/rite-handoff/SKILL.md +3 -3
  408. package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +1 -1
  409. package/pack/generated/devin/skills/rite-plan/SKILL.md +4 -4
  410. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -2
  411. package/pack/generated/devin/skills/rite-polish/SKILL.md +6 -3
  412. package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
  413. package/pack/generated/devin/skills/rite-quick/SKILL.md +1 -1
  414. package/pack/generated/devin/skills/rite-resolve/SKILL.md +1 -1
  415. package/pack/generated/devin/skills/rite-review/SKILL.md +4 -4
  416. package/pack/generated/devin/skills/rite-seal/SKILL.md +2 -2
  417. package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
  418. package/pack/generated/devin/skills/rite-spec/SKILL.md +1 -1
  419. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +5 -5
  420. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +1 -1
  421. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +6 -4
  422. package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
  423. package/pack/generated/devin/skills/rite-temper/SKILL.md +1 -1
  424. package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +2 -2
  425. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +2 -2
  426. package/pack/generated/devin/skills/rite-temper/reference/significance.md +2 -2
  427. package/pack/generated/devin/skills/rite-vet/SKILL.md +8 -4
  428. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +10 -3
  429. package/pack/generated/devin/skills/rite-vet/reference/depth.md +2 -2
  430. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
  431. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +6 -6
  432. package/pack/generated/omp/agents/devrites-code-reviewer.md +9 -5
  433. package/pack/generated/omp/agents/devrites-devex-reviewer.md +5 -4
  434. package/pack/generated/omp/agents/devrites-doubt-reviewer.md +4 -4
  435. package/pack/generated/omp/agents/devrites-evidence-scout.md +3 -2
  436. package/pack/generated/omp/agents/devrites-frontend-reviewer.md +5 -4
  437. package/pack/generated/omp/agents/devrites-performance-reviewer.md +5 -5
  438. package/pack/generated/omp/agents/devrites-plan-drafter.md +4 -2
  439. package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -5
  440. package/pack/generated/omp/agents/devrites-proof-runner.md +1 -1
  441. package/pack/generated/omp/agents/devrites-retrospector.md +1 -1
  442. package/pack/generated/omp/agents/devrites-security-auditor.md +4 -4
  443. package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +5 -4
  444. package/pack/generated/omp/agents/devrites-slice-wright.md +18 -9
  445. package/pack/generated/omp/agents/devrites-spec-reviewer.md +4 -4
  446. package/pack/generated/omp/agents/devrites-strategy-reviewer.md +5 -6
  447. package/pack/generated/omp/agents/devrites-test-analyst.md +7 -4
  448. package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
  449. package/pack/generated/omp/agents/fast-builder.md +4 -2
  450. package/pack/generated/omp/agents/fast-checker.md +3 -2
  451. package/pack/generated/omp/agents/fast-critic.md +3 -2
  452. package/pack/generated/omp/agents/fast-planner.md +3 -3
  453. package/pack/generated/omp/agents/overhaul-backend-engineer.md +1 -1
  454. package/pack/generated/omp/agents/overhaul-boundary.md +1 -1
  455. package/pack/generated/omp/agents/overhaul-craft.md +1 -1
  456. package/pack/generated/omp/agents/overhaul-frontend-engineer.md +1 -1
  457. package/pack/generated/omp/agents/overhaul-implementer.md +1 -1
  458. package/pack/generated/omp/agents/overhaul-recon.md +6 -5
  459. package/pack/generated/omp/agents/overhaul-specialist.md +1 -1
  460. package/pack/generated/omp/agents/overhaul-verifier.md +1 -1
  461. package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +1 -1
  462. package/pack/generated/omp/skills/devrites-audit/SKILL.md +1 -1
  463. package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +1 -1
  464. package/pack/generated/omp/skills/devrites-doubt/SKILL.md +5 -5
  465. package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  466. package/pack/generated/omp/skills/devrites-interview/SKILL.md +1 -1
  467. package/pack/generated/omp/skills/devrites-lib/SKILL.md +11 -6
  468. package/pack/generated/omp/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  469. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  470. package/pack/generated/omp/skills/devrites-lib/reference/standards/README.md +2 -1
  471. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  472. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +43 -19
  473. package/pack/generated/omp/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  474. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-index.md +111 -0
  475. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  476. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  477. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +14 -1
  478. package/pack/generated/omp/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  479. package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +10 -1
  480. package/pack/generated/omp/skills/devrites-lib/reference/standards/security.md +4 -0
  481. package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +3 -1
  482. package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +9 -8
  483. package/pack/generated/omp/skills/devrites-lib/reference/standards/windows.md +3 -2
  484. package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  485. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  486. package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +1 -1
  487. package/pack/generated/omp/skills/overhaul/references/orchestration.md +3 -2
  488. package/pack/generated/omp/skills/rite/SKILL.md +1 -1
  489. package/pack/generated/omp/skills/rite-adopt/SKILL.md +1 -1
  490. package/pack/generated/omp/skills/rite-adopt/reference/adoption.md +1 -1
  491. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +5 -4
  492. package/pack/generated/omp/skills/rite-build/SKILL.md +4 -3
  493. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +2 -0
  494. package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  495. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -0
  496. package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +1 -1
  497. package/pack/generated/omp/skills/rite-build/reference/output.md +2 -0
  498. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +22 -12
  499. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +13 -3
  500. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +42 -25
  501. package/pack/generated/omp/skills/rite-clarify/SKILL.md +1 -1
  502. package/pack/generated/omp/skills/rite-converge/SKILL.md +4 -4
  503. package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +3 -3
  504. package/pack/generated/omp/skills/rite-define/SKILL.md +10 -5
  505. package/pack/generated/omp/skills/rite-doctor/SKILL.md +17 -2
  506. package/pack/generated/omp/skills/rite-dogfood/SKILL.md +1 -1
  507. package/pack/generated/omp/skills/rite-explain/SKILL.md +1 -1
  508. package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
  509. package/pack/generated/omp/skills/rite-fast/SKILL.md +1 -1
  510. package/pack/generated/omp/skills/rite-handoff/SKILL.md +3 -3
  511. package/pack/generated/omp/skills/rite-handoff/reference/handoff-template.md +1 -1
  512. package/pack/generated/omp/skills/rite-plan/SKILL.md +4 -4
  513. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +3 -2
  514. package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -3
  515. package/pack/generated/omp/skills/rite-prove/SKILL.md +1 -1
  516. package/pack/generated/omp/skills/rite-quick/SKILL.md +1 -1
  517. package/pack/generated/omp/skills/rite-resolve/SKILL.md +1 -1
  518. package/pack/generated/omp/skills/rite-review/SKILL.md +4 -4
  519. package/pack/generated/omp/skills/rite-seal/SKILL.md +2 -2
  520. package/pack/generated/omp/skills/rite-ship/SKILL.md +1 -1
  521. package/pack/generated/omp/skills/rite-spec/SKILL.md +1 -1
  522. package/pack/generated/omp/skills/rite-spec/reference/investigation.md +5 -5
  523. package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +1 -1
  524. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +6 -4
  525. package/pack/generated/omp/skills/rite-status/SKILL.md +1 -1
  526. package/pack/generated/omp/skills/rite-temper/SKILL.md +1 -1
  527. package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +2 -2
  528. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +2 -2
  529. package/pack/generated/omp/skills/rite-temper/reference/significance.md +2 -2
  530. package/pack/generated/omp/skills/rite-vet/SKILL.md +8 -4
  531. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +10 -3
  532. package/pack/generated/omp/skills/rite-vet/reference/depth.md +2 -2
  533. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +2 -2
  534. package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +6 -6
  535. package/pack/generated/pi/agents/devrites-code-reviewer.md +9 -5
  536. package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -4
  537. package/pack/generated/pi/agents/devrites-doubt-reviewer.md +4 -4
  538. package/pack/generated/pi/agents/devrites-evidence-scout.md +3 -2
  539. package/pack/generated/pi/agents/devrites-frontend-reviewer.md +5 -4
  540. package/pack/generated/pi/agents/devrites-performance-reviewer.md +5 -5
  541. package/pack/generated/pi/agents/devrites-plan-drafter.md +4 -2
  542. package/pack/generated/pi/agents/devrites-plan-reviewer.md +5 -5
  543. package/pack/generated/pi/agents/devrites-proof-runner.md +1 -1
  544. package/pack/generated/pi/agents/devrites-retrospector.md +1 -1
  545. package/pack/generated/pi/agents/devrites-security-auditor.md +4 -4
  546. package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +5 -4
  547. package/pack/generated/pi/agents/devrites-slice-wright.md +18 -9
  548. package/pack/generated/pi/agents/devrites-spec-reviewer.md +4 -4
  549. package/pack/generated/pi/agents/devrites-strategy-reviewer.md +5 -6
  550. package/pack/generated/pi/agents/devrites-test-analyst.md +7 -4
  551. package/pack/generated/pi/agents/devrites-upgrade-planner.md +1 -1
  552. package/pack/generated/pi/agents/fast-builder.md +4 -2
  553. package/pack/generated/pi/agents/fast-checker.md +3 -2
  554. package/pack/generated/pi/agents/fast-critic.md +3 -2
  555. package/pack/generated/pi/agents/fast-planner.md +3 -3
  556. package/pack/generated/pi/agents/overhaul-backend-engineer.md +1 -1
  557. package/pack/generated/pi/agents/overhaul-boundary.md +1 -1
  558. package/pack/generated/pi/agents/overhaul-craft.md +1 -1
  559. package/pack/generated/pi/agents/overhaul-frontend-engineer.md +1 -1
  560. package/pack/generated/pi/agents/overhaul-implementer.md +1 -1
  561. package/pack/generated/pi/agents/overhaul-recon.md +6 -5
  562. package/pack/generated/pi/agents/overhaul-specialist.md +1 -1
  563. package/pack/generated/pi/agents/overhaul-verifier.md +1 -1
  564. package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +1 -1
  565. package/pack/generated/pi/skills/devrites-audit/SKILL.md +1 -1
  566. package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +1 -1
  567. package/pack/generated/pi/skills/devrites-doubt/SKILL.md +5 -5
  568. package/pack/generated/pi/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  569. package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
  570. package/pack/generated/pi/skills/devrites-lib/SKILL.md +11 -6
  571. package/pack/generated/pi/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  572. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  573. package/pack/generated/pi/skills/devrites-lib/reference/standards/README.md +2 -1
  574. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  575. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +43 -19
  576. package/pack/generated/pi/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  577. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-index.md +111 -0
  578. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  579. package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  580. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +14 -1
  581. package/pack/generated/pi/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  582. package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +10 -1
  583. package/pack/generated/pi/skills/devrites-lib/reference/standards/security.md +4 -0
  584. package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +3 -1
  585. package/pack/generated/pi/skills/devrites-lib/reference/standards/tooling.md +9 -8
  586. package/pack/generated/pi/skills/devrites-lib/reference/standards/windows.md +3 -2
  587. package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  588. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  589. package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
  590. package/pack/generated/pi/skills/overhaul/references/orchestration.md +3 -2
  591. package/pack/generated/pi/skills/rite/SKILL.md +1 -1
  592. package/pack/generated/pi/skills/rite-adopt/SKILL.md +1 -1
  593. package/pack/generated/pi/skills/rite-adopt/reference/adoption.md +1 -1
  594. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +5 -4
  595. package/pack/generated/pi/skills/rite-build/SKILL.md +4 -3
  596. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +2 -0
  597. package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  598. package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +2 -0
  599. package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +1 -1
  600. package/pack/generated/pi/skills/rite-build/reference/output.md +2 -0
  601. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +22 -12
  602. package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +13 -3
  603. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +42 -25
  604. package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
  605. package/pack/generated/pi/skills/rite-converge/SKILL.md +4 -4
  606. package/pack/generated/pi/skills/rite-converge/reference/convergence-assessment.md +3 -3
  607. package/pack/generated/pi/skills/rite-define/SKILL.md +10 -5
  608. package/pack/generated/pi/skills/rite-doctor/SKILL.md +17 -2
  609. package/pack/generated/pi/skills/rite-dogfood/SKILL.md +1 -1
  610. package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
  611. package/pack/generated/pi/skills/rite-explain/reference/intake.md +1 -1
  612. package/pack/generated/pi/skills/rite-fast/SKILL.md +1 -1
  613. package/pack/generated/pi/skills/rite-handoff/SKILL.md +3 -3
  614. package/pack/generated/pi/skills/rite-handoff/reference/handoff-template.md +1 -1
  615. package/pack/generated/pi/skills/rite-plan/SKILL.md +4 -4
  616. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -2
  617. package/pack/generated/pi/skills/rite-polish/SKILL.md +6 -3
  618. package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
  619. package/pack/generated/pi/skills/rite-quick/SKILL.md +1 -1
  620. package/pack/generated/pi/skills/rite-resolve/SKILL.md +1 -1
  621. package/pack/generated/pi/skills/rite-review/SKILL.md +4 -4
  622. package/pack/generated/pi/skills/rite-seal/SKILL.md +2 -2
  623. package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
  624. package/pack/generated/pi/skills/rite-spec/SKILL.md +1 -1
  625. package/pack/generated/pi/skills/rite-spec/reference/investigation.md +5 -5
  626. package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +1 -1
  627. package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +6 -4
  628. package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
  629. package/pack/generated/pi/skills/rite-temper/SKILL.md +1 -1
  630. package/pack/generated/pi/skills/rite-temper/reference/review-dimensions.md +2 -2
  631. package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +2 -2
  632. package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -2
  633. package/pack/generated/pi/skills/rite-vet/SKILL.md +8 -4
  634. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +10 -3
  635. package/pack/generated/pi/skills/rite-vet/reference/depth.md +2 -2
  636. package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +2 -2
  637. package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +6 -6
  638. package/package.json +1 -1
  639. package/scripts/build-host-artifacts.sh +5 -4
  640. package/scripts/omp-generate.sh +3 -12
  641. package/scripts/pi-generate.sh +5 -51
@@ -0,0 +1,403 @@
1
+ package lib
2
+
3
+ import (
4
+ "bytes"
5
+ "cmp"
6
+ "context"
7
+ "crypto/sha256"
8
+ "errors"
9
+ "fmt"
10
+ "io"
11
+ "os"
12
+ "path/filepath"
13
+ "regexp"
14
+ "strconv"
15
+ "strings"
16
+ "time"
17
+
18
+ "github.com/devrites/devrites/internal/acceptance"
19
+ "github.com/devrites/devrites/internal/devritespaths"
20
+ "github.com/devrites/devrites/internal/parallel"
21
+ "github.com/devrites/devrites/internal/secretpattern"
22
+ )
23
+
24
+ // PerturbUsage is the help and usage-error text for `check perturb`.
25
+ const PerturbUsage = `usage: devrites-engine check perturb <slug> --patch <file> --expect <test-name> --gate <G-ID> [--timeout N]
26
+
27
+ Runs one safe-perturbation probe without touching the checkout. It copies the
28
+ current candidate (HEAD plus every touched-files.md manifest row) into a
29
+ detached temporary worktree, requires the copy to hash to the check candidate
30
+ digest, and applies the wright-supplied mutant --patch (project-relative or
31
+ absolute). It runs the gate's CHECK only when it is an approved test-plan.md
32
+ preflight row. RED counts only when a runner FAIL line (go test, pytest, cargo
33
+ test, jest/vitest) names --expect; a build or setup failure, a timeout, exit 0
34
+ (the mutant survived), or a RED naming only other tests is cannot_verify. It
35
+ then reverts the patch, requires the copy back at the candidate digest and the
36
+ gate GREEN (exit 0 plus EXPECT), and requires the checkout candidate unchanged.
37
+ The transcript is written under evidence/perturb/. Exit 0 verified; exit 3
38
+ cannot_verify or refused.
39
+ `
40
+
41
+ const perturbOutputTail = 64 << 10
42
+
43
+ var (
44
+ perturbNameRE = regexp.MustCompile(`[^A-Za-z0-9._-]`)
45
+ // perturbFailREs capture the failed test name from one runner FAIL line.
46
+ perturbFailREs = []*regexp.Regexp{
47
+ regexp.MustCompile(`^\s*--- FAIL: (\S+)`), // go test
48
+ regexp.MustCompile(`^FAILED (\S+)`), // pytest short summary
49
+ regexp.MustCompile(`^test (\S+) \.\.\. FAILED$`), // cargo test
50
+ regexp.MustCompile(`^\s*[✕×] (.+?)(?:\s+\(?\d+(?:\.\d+)?\s?m?s\)?)?\s*$`), // jest / vitest
51
+ }
52
+ )
53
+
54
+ // perturbProbe is one probe's record: everything the transcript binds.
55
+ type perturbProbe struct {
56
+ patchFiles string
57
+ copyStart, copyRestored string
58
+ red, green *acceptance.RunOutcome
59
+ redMatch string
60
+ redFailed []string
61
+ greenMet bool
62
+ reason string // "" when verified
63
+ }
64
+
65
+ // RunCheckPerturb implements `check perturb`: an engine-run, candidate-bound
66
+ // safe-perturbation probe (testing.md § Safe perturbation).
67
+ func RunCheckPerturb(root string, args []string, stdout, stderr io.Writer) int {
68
+ var patchArg, expect, gateID string
69
+ var positional []string
70
+ timeout := acceptance.DefaultTimeout
71
+ for i := 0; i < len(args); i++ {
72
+ value := argAt(args, i+1)
73
+ switch args[i] {
74
+ case "--patch":
75
+ patchArg = value
76
+ case "--expect":
77
+ expect = strings.TrimSpace(value)
78
+ case "--gate":
79
+ gateID = value
80
+ case "--timeout":
81
+ n, err := strconv.Atoi(value)
82
+ if err != nil || n <= 0 {
83
+ fmt.Fprint(stderr, PerturbUsage)
84
+ return 2
85
+ }
86
+ timeout = time.Duration(n) * time.Second
87
+ default:
88
+ if strings.HasPrefix(args[i], "-") {
89
+ fmt.Fprintf(stderr, "check perturb: unknown flag %q\n", args[i])
90
+ return 2
91
+ }
92
+ positional = append(positional, args[i])
93
+ continue
94
+ }
95
+ i++
96
+ }
97
+ if len(positional) != 1 || patchArg == "" || expect == "" || gateID == "" {
98
+ fmt.Fprint(stderr, PerturbUsage)
99
+ return 2
100
+ }
101
+ slug := positional[0]
102
+ refuse := func(err error) int {
103
+ fmt.Fprintf(stderr, "check perturb: refused: %v\n", err)
104
+ return 3
105
+ }
106
+ workspace, err := devritespaths.ExistingFeatureDirChecked(root, slug)
107
+ if err != nil {
108
+ return refuse(err)
109
+ }
110
+ identity, err := loadCandidateIdentity(root, slug)
111
+ if err != nil {
112
+ return refuse(err)
113
+ }
114
+ gate, err := perturbGate(root, slug, gateID)
115
+ if err != nil {
116
+ return refuse(err)
117
+ }
118
+ project := projectDir(root)
119
+ patchPath := patchArg
120
+ if !filepath.IsAbs(patchPath) {
121
+ patchPath = filepath.Join(project, filepath.FromSlash(patchPath))
122
+ }
123
+ patch, err := readBoundedRegularFile(patchPath, maxCandidateArtifactBytes)
124
+ if err != nil {
125
+ return refuse(fmt.Errorf("--patch %s: %w", patchArg, err))
126
+ }
127
+ if len(bytes.TrimSpace(patch)) == 0 {
128
+ return refuse(fmt.Errorf("--patch %s is empty", patchArg))
129
+ }
130
+
131
+ probe := runPerturbProbe(project, identity, gate, patch, expect, timeout)
132
+ after := "unavailable"
133
+ if current, err := loadCandidateIdentity(root, slug); err != nil {
134
+ after += ": " + oneLine(err.Error())
135
+ } else {
136
+ after = current.digest
137
+ }
138
+ if probe.reason == "" && after != identity.digest {
139
+ probe.reason = "the checkout candidate changed during the probe"
140
+ }
141
+ transcript, err := writePerturbTranscript(workspace, gate, expect, patchArg, patch, identity.digest, after, probe)
142
+ if err != nil {
143
+ fmt.Fprintf(stderr, "check perturb: transcript: %v\n", err)
144
+ return 3
145
+ }
146
+ rel := workspaceRel(root, filepath.Dir(transcript)) + "/" + filepath.Base(transcript)
147
+ if probe.reason != "" {
148
+ fmt.Fprintf(stdout, "check perturb: cannot_verify: %s\ntranscript: %s\n", probe.reason, rel)
149
+ return 3
150
+ }
151
+ fmt.Fprintf(stdout, "check perturb: verified: %s RED named %s, restored copy GREEN, candidate %s unchanged\ntranscript: %s\n", gate.ID, expect, identity.digest, rel)
152
+ return 0
153
+ }
154
+
155
+ // perturbGate returns the live runnable gate id, refusing a CHECK/CWD that is
156
+ // not an approved test-plan.md preflight row: a probe never runs unvetted code.
157
+ func perturbGate(root, slug, id string) (*acceptance.Gate, error) {
158
+ raw, err := readWorkspaceArtifact(root, slug, acceptance.GatesFile)
159
+ if err != nil {
160
+ return nil, err
161
+ }
162
+ doc := acceptance.ParseLedger(string(raw))
163
+ if len(doc.Errors) > 0 {
164
+ return nil, fmt.Errorf("%s: %s", acceptance.GatesFile, doc.Errors[0])
165
+ }
166
+ for _, gate := range doc.Gates {
167
+ if gate.ID != id {
168
+ continue
169
+ }
170
+ if _, abandoned := doc.Abandoned[id]; abandoned {
171
+ return nil, fmt.Errorf("gate %s is abandoned", id)
172
+ }
173
+ if gate.Check == "" {
174
+ return nil, fmt.Errorf("gate %s is a manual gate with no CHECK", id)
175
+ }
176
+ plan, _ := readWorkspaceArtifact(root, slug, "test-plan.md") // unreadable approves nothing
177
+ if !acceptance.Approved(gate.Check, gate.Cwd, acceptance.ApprovedCommands(plan)) {
178
+ return nil, fmt.Errorf("gate %s CHECK/CWD is not an approved test-plan.md preflight row", id)
179
+ }
180
+ return gate, nil
181
+ }
182
+ return nil, fmt.Errorf("%s has no gate %s", acceptance.GatesFile, id)
183
+ }
184
+
185
+ // runPerturbProbe builds the isolated candidate copy, runs the mutant (RED)
186
+ // and restored (GREEN) gate there, and removes the copy. The checkout is only
187
+ // read.
188
+ func runPerturbProbe(project string, identity candidateIdentity, gate *acceptance.Gate, patch []byte, expect string, timeout time.Duration) perturbProbe {
189
+ var probe perturbProbe
190
+ tmp, err := os.MkdirTemp("", "devrites-perturb-")
191
+ if err != nil {
192
+ probe.reason = "isolation unavailable: " + oneLine(err.Error())
193
+ return probe
194
+ }
195
+ defer func() { _ = os.RemoveAll(tmp) }()
196
+ dir := filepath.Join(tmp, "copy")
197
+ if err := parallel.AddDetachedWorktree(project, dir, "HEAD"); err != nil {
198
+ probe.reason = "isolation unavailable: " + oneLine(err.Error())
199
+ return probe
200
+ }
201
+ defer func() { _ = parallel.RemoveWorktree(project, dir) }()
202
+ // Manifest rows and gate CWD are project-relative; the project may sit
203
+ // below the git toplevel. Patches stay toplevel-relative, so git apply runs at dir.
204
+ prefix, err := runGitCommand(project, nil, "rev-parse", "--show-prefix")
205
+ if err != nil {
206
+ probe.reason = "isolation unavailable: " + oneLine(err.Error())
207
+ return probe
208
+ }
209
+ base := filepath.Join(dir, filepath.FromSlash(strings.TrimSpace(string(prefix))))
210
+ rows, err := overlayCandidate(project, base, identity.rows)
211
+ if err != nil {
212
+ probe.reason = "candidate copy failed: " + oneLine(err.Error())
213
+ return probe
214
+ }
215
+ if probe.copyStart, err = hashCandidate(base, rows); err != nil || probe.copyStart != identity.digest {
216
+ probe.reason = "the isolated copy does not hash to the candidate digest"
217
+ return probe
218
+ }
219
+ if stat, err := runGitCommandIO(dir, nil, patch, nil, "apply", "--numstat", "-"); err == nil {
220
+ probe.patchFiles = perturbPatchFiles(stat)
221
+ }
222
+ if _, err := runGitCommandIO(dir, nil, patch, nil, "apply", "-"); err != nil {
223
+ probe.reason = "the mutant patch does not apply to the candidate copy: " + oneLine(err.Error())
224
+ return probe
225
+ }
226
+ cwd := filepath.Join(base, filepath.FromSlash(gate.Cwd))
227
+ red := acceptance.Execute(context.Background(), gate.Check, cwd, timeout)
228
+ probe.red = &red
229
+ probe.redMatch, probe.redFailed, probe.reason = classifyPerturbRed(red, expect)
230
+ if probe.reason != "" {
231
+ return probe
232
+ }
233
+ if _, err := runGitCommandIO(dir, nil, patch, nil, "apply", "-R", "-"); err != nil {
234
+ probe.reason = "the mutant patch does not revert: " + oneLine(err.Error())
235
+ return probe
236
+ }
237
+ if err := validateCandidateRows(base, rows); err == nil {
238
+ probe.copyRestored, _ = hashCandidate(base, rows)
239
+ }
240
+ if probe.copyRestored != identity.digest {
241
+ probe.reason = "the reverted copy does not hash to the candidate digest"
242
+ return probe
243
+ }
244
+ green := acceptance.Execute(context.Background(), gate.Check, cwd, timeout)
245
+ probe.green = &green
246
+ expectation, err := acceptance.CompileExpect(gate.Expect)
247
+ probe.greenMet = err == nil && green.Err == nil && green.ExitCode == 0 && expectation.Matches(green.Output)
248
+ if !probe.greenMet {
249
+ probe.reason = "the restored copy is not GREEN (exit 0 plus EXPECT)"
250
+ }
251
+ return probe
252
+ }
253
+
254
+ // overlayCandidate writes every manifest row onto the HEAD worktree at dir
255
+ // (copying present files, deleting deleted ones) and returns rows validated
256
+ // against the copy, ready for hashCandidate.
257
+ func overlayCandidate(project, dir string, rows []candidateRow) ([]candidateRow, error) {
258
+ copied := make([]candidateRow, len(rows))
259
+ for i, row := range rows {
260
+ copied[i] = candidateRow{state: row.state, path: row.path, slice: row.slice, reason: row.reason}
261
+ // A symlinked parent in the HEAD tree would redirect the write out of the copy.
262
+ if _, _, err := candidatePathInfo(dir, row.path); err != nil {
263
+ return nil, fmt.Errorf("%s: %w", row.path, err)
264
+ }
265
+ target := filepath.Join(dir, filepath.FromSlash(row.path))
266
+ if row.state == "deleted" {
267
+ if err := os.Remove(target); err != nil && !errors.Is(err, os.ErrNotExist) {
268
+ return nil, err
269
+ }
270
+ continue
271
+ }
272
+ content, err := readBoundedRegularFile(filepath.Join(project, filepath.FromSlash(row.path)), maxCandidateFileBytes)
273
+ if err != nil {
274
+ return nil, fmt.Errorf("%s: %w", row.path, err)
275
+ }
276
+ mode := os.FileMode(0o644)
277
+ if row.executable {
278
+ mode = 0o755
279
+ }
280
+ if err := os.MkdirAll(filepath.Dir(target), 0o755); err != nil {
281
+ return nil, err
282
+ }
283
+ if err := os.WriteFile(target, content, mode); err != nil {
284
+ return nil, err
285
+ }
286
+ if err := os.Chmod(target, mode); err != nil { // WriteFile keeps an existing file's mode
287
+ return nil, err
288
+ }
289
+ }
290
+ if err := validateCandidateRows(dir, copied); err != nil {
291
+ return nil, err
292
+ }
293
+ return copied, nil
294
+ }
295
+
296
+ // classifyPerturbRed accepts the mutant run as RED only when a runner FAIL
297
+ // line names expect; otherwise reason says why it is cannot_verify.
298
+ func classifyPerturbRed(outcome acceptance.RunOutcome, expect string) (match string, failed []string, reason string) {
299
+ if outcome.Err != nil {
300
+ return "", nil, "the mutant run did not complete: " + oneLine(outcome.Err.Error())
301
+ }
302
+ if outcome.ExitCode == 0 {
303
+ return "", nil, "the mutant survived: the gate exited 0"
304
+ }
305
+ for _, line := range strings.Split(outcome.Output, "\n") {
306
+ line = strings.TrimRight(line, "\r")
307
+ for _, re := range perturbFailREs {
308
+ m := re.FindStringSubmatch(line)
309
+ if m == nil {
310
+ continue
311
+ }
312
+ failed = append(failed, m[1])
313
+ if match == "" && perturbNames(m[1], expect) {
314
+ match = strings.TrimSpace(line)
315
+ }
316
+ break
317
+ }
318
+ }
319
+ switch {
320
+ case match != "":
321
+ return match, failed, ""
322
+ case len(failed) == 0:
323
+ return "", nil, fmt.Sprintf("exit %d with no runner FAIL line naming a test (build, setup, or unrecognized runner failure)", outcome.ExitCode)
324
+ }
325
+ return "", failed, fmt.Sprintf("the RED names other tests (%s), not %s", strings.Join(failed, ", "), expect)
326
+ }
327
+
328
+ // perturbNames reports whether a runner's failed-test name is expect: exact,
329
+ // or its last pytest/cargo `::` or vitest ` > ` segment.
330
+ func perturbNames(name, expect string) bool {
331
+ return name == expect || strings.HasSuffix(name, "::"+expect) || strings.HasSuffix(name, " > "+expect)
332
+ }
333
+
334
+ func perturbPatchFiles(numstat []byte) string {
335
+ var files []string
336
+ for _, line := range strings.Split(strings.TrimSpace(string(numstat)), "\n") {
337
+ if fields := strings.SplitN(line, "\t", 3); len(fields) == 3 {
338
+ files = append(files, fields[2])
339
+ }
340
+ }
341
+ return strings.Join(files, ", ")
342
+ }
343
+
344
+ // writePerturbTranscript records one immutable probe file under
345
+ // <work>/evidence/perturb/, binding the patch, command, both runs, the copy
346
+ // digests, and the checkout candidate before and after.
347
+ func writePerturbTranscript(workspace string, gate *acceptance.Gate, expect, patchArg string, patch []byte, before, after string, probe perturbProbe) (string, error) {
348
+ dir := filepath.Join(workspace, "evidence", "perturb")
349
+ if err := os.MkdirAll(dir, 0o755); err != nil {
350
+ return "", err
351
+ }
352
+ prefix := perturbNameRE.ReplaceAllString(gate.ID, "_") + "-" + before[:12]
353
+ attempt := 1
354
+ if entries, err := os.ReadDir(dir); err == nil {
355
+ for _, entry := range entries {
356
+ if strings.HasPrefix(entry.Name(), prefix+"-a") {
357
+ attempt++
358
+ }
359
+ }
360
+ }
361
+ verdict, reason := "verified", "none"
362
+ if probe.reason != "" {
363
+ verdict, reason = "cannot_verify", probe.reason
364
+ }
365
+ var body strings.Builder
366
+ fmt.Fprintf(&body, "DEVRITES-PERTURB-TRANSCRIPT v1\nGATE: %s\nCOMMAND: %s\nCWD: %s\nEXPECT_TEST: %s\n", gate.ID, gate.Check, cmp.Or(gate.Cwd, "."), expect)
367
+ fmt.Fprintf(&body, "PATCH: %s\nPATCH_SHA256: %x\nPATCH_FILES: %s\n", patchArg, sha256.Sum256(patch), cmp.Or(probe.patchFiles, "unknown"))
368
+ fmt.Fprintf(&body, "CANDIDATE_BEFORE: %s\nCOPY_START: %s\nCOPY_RESTORED: %s\nCANDIDATE_AFTER: %s\n", before, cmp.Or(probe.copyStart, "none"), cmp.Or(probe.copyRestored, "none"), after)
369
+ fmt.Fprintf(&body, "RED_EXIT: %s\nRED_MATCH: %s\nRED_FAILED: %s\n", perturbExit(probe.red), cmp.Or(probe.redMatch, "none"), cmp.Or(strings.Join(probe.redFailed, ", "), "none"))
370
+ fmt.Fprintf(&body, "GREEN_EXIT: %s\nGREEN_EXPECT: %s\nGREEN_MET: %t\nVERDICT: %s\nREASON: %s\n", perturbExit(probe.green), gate.Expect, probe.greenMet, verdict, reason)
371
+ redacted, _ := secretpattern.Redact(string(patch))
372
+ fmt.Fprintf(&body, "--- PATCH ---\n%s\n--- END PATCH ---\n", strings.TrimRight(redacted, "\n"))
373
+ for _, run := range []struct {
374
+ name string
375
+ outcome *acceptance.RunOutcome
376
+ }{{"RED", probe.red}, {"GREEN", probe.green}} {
377
+ if run.outcome == nil {
378
+ continue
379
+ }
380
+ output, _ := secretpattern.Redact(run.outcome.Output)
381
+ if len(output) > perturbOutputTail {
382
+ output = output[len(output)-perturbOutputTail:]
383
+ }
384
+ fmt.Fprintf(&body, "--- %s OUTPUT (tail) ---\n%s\n--- END %s OUTPUT ---\n", run.name, output, run.name)
385
+ }
386
+ file := filepath.Join(dir, fmt.Sprintf("%s-a%d.log", prefix, attempt))
387
+ if err := os.WriteFile(file, []byte(body.String()), 0o644); err != nil {
388
+ return "", err
389
+ }
390
+ return file, nil
391
+ }
392
+
393
+ func perturbExit(outcome *acceptance.RunOutcome) string {
394
+ switch {
395
+ case outcome == nil:
396
+ return "not run"
397
+ case outcome.TimedOut:
398
+ return "timeout"
399
+ case outcome.Err != nil:
400
+ return "error: " + oneLine(outcome.Err.Error())
401
+ }
402
+ return strconv.Itoa(outcome.ExitCode)
403
+ }
@@ -0,0 +1,99 @@
1
+ package lib
2
+
3
+ import (
4
+ "fmt"
5
+ "regexp"
6
+ "slices"
7
+ "strings"
8
+ "time"
9
+ )
10
+
11
+ const (
12
+ questionLineAdvisory = 300
13
+ questionEntryAdvisory = 2500
14
+ )
15
+
16
+ var (
17
+ questionIDPattern = regexp.MustCompile(`^q-[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{3}$`)
18
+ questionKeyPattern = regexp.MustCompile(`^([a-z_]+):(.*)$`)
19
+ questionItemPattern = regexp.MustCompile(`^\s*[0-9]+\.\s+(.*)$`)
20
+ questionGates = []string{"advisory", "validating", "blocking", "escalating"}
21
+ )
22
+
23
+ // lintQuestionEntry checks a new questions.md `## q-...` entry against the
24
+ // afk-hitl.md schema. Problems block the append; advisories only warn. A
25
+ // recommendation stays optional: without one, proposed: must be absent so the
26
+ // AFK auto-pick never reads a non-recommendation as an answer.
27
+ func lintQuestionEntry(heading string, bodyLines []string, bodySize int) (problems, advisories []string) {
28
+ if id := headingID(heading); !questionIDPattern.MatchString(id) {
29
+ problems = append(problems, fmt.Sprintf("heading %q is not q-YYYY-MM-DD-NNN", heading))
30
+ }
31
+ values := map[string][]string{}
32
+ var options []string
33
+ inOptions := false
34
+ for _, line := range bodyLines {
35
+ if m := questionKeyPattern.FindStringSubmatch(line); m != nil {
36
+ values[m[1]] = append(values[m[1]], strings.TrimSpace(m[2]))
37
+ inOptions = m[1] == "options"
38
+ continue
39
+ }
40
+ if m := questionItemPattern.FindStringSubmatch(line); inOptions && m != nil {
41
+ options = append(options, strings.TrimSpace(m[1]))
42
+ }
43
+ }
44
+ one := func(key string) (string, bool) {
45
+ if len(values[key]) != 1 {
46
+ problems = append(problems, fmt.Sprintf("needs exactly one %s: line", key))
47
+ return "", false
48
+ }
49
+ return values[key][0], true
50
+ }
51
+ if v, ok := one("status"); ok && v != "open" {
52
+ problems = append(problems, "status must be open (state resolve answers or drops it)")
53
+ }
54
+ if v, ok := one("slice"); ok && v == "" {
55
+ problems = append(problems, "slice is empty")
56
+ }
57
+ if v, ok := one("gate"); ok && !slices.Contains(questionGates, v) {
58
+ problems = append(problems, "gate must be "+strings.Join(questionGates, "|"))
59
+ }
60
+ if v, ok := one("question"); ok {
61
+ if v == "" {
62
+ problems = append(problems, "question is empty")
63
+ } else if n := len([]rune(v)); n > questionLineAdvisory {
64
+ advisories = append(advisories, fmt.Sprintf("question line is %d chars; aim for one crisp sentence under %d", n, questionLineAdvisory))
65
+ }
66
+ }
67
+ if v, ok := one("raised_at"); ok {
68
+ if _, err := time.Parse(time.RFC3339, v); err != nil {
69
+ problems = append(problems, fmt.Sprintf("raised_at %q is not a full RFC 3339 timestamp such as 2026-10-19T08:17:08Z", v))
70
+ }
71
+ }
72
+ if _, ok := one("options"); ok {
73
+ if len(options) < 3 || len(options) > 5 {
74
+ problems = append(problems, fmt.Sprintf("options has %d numbered items; want 2-4 concrete options plus the escape hatch", len(options)))
75
+ } else if !strings.HasPrefix(strings.ToLower(options[len(options)-1]), "something else") {
76
+ problems = append(problems, "the last option must be the escape hatch \"Something else — describe it\"")
77
+ }
78
+ }
79
+ recommended := -1
80
+ for i, opt := range options {
81
+ if strings.Contains(strings.ToLower(opt), "(recommended)") {
82
+ if recommended >= 0 || i != 0 {
83
+ problems = append(problems, "only option 1 may carry (Recommended)")
84
+ break
85
+ }
86
+ recommended = i
87
+ }
88
+ }
89
+ switch proposed := values["proposed"]; {
90
+ case recommended == 0 && (len(proposed) != 1 || proposed[0] == ""):
91
+ problems = append(problems, "option 1 is (Recommended), so add one proposed: line restating it")
92
+ case recommended < 0 && len(proposed) > 0:
93
+ problems = append(problems, "proposed: is the AFK auto-pick; omit it when no option is (Recommended)")
94
+ }
95
+ if bodySize > questionEntryAdvisory {
96
+ advisories = append(advisories, fmt.Sprintf("entry is %d bytes; keep impact and evidence, trim repetition below %d", bodySize, questionEntryAdvisory))
97
+ }
98
+ return problems, advisories
99
+ }