devrites 6.10.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (668) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +8 -4
  3. package/SECURITY.md +1 -1
  4. package/docs/adr/0038-engine-flags-unattributed-root-edits.md +67 -0
  5. package/docs/adr/README.md +2 -1
  6. package/docs/cli.md +19 -6
  7. package/docs/command-map.md +22 -20
  8. package/docs/engine/commands.md +22 -15
  9. package/docs/usage.md +10 -5
  10. package/engine/commands.go +8 -3
  11. package/engine/help.go +43 -16
  12. package/engine/internal/acceptance/approve.go +46 -7
  13. package/engine/internal/acceptance/cli.go +102 -0
  14. package/engine/internal/acceptance/exec.go +8 -6
  15. package/engine/internal/acceptance/ledger.go +16 -1
  16. package/engine/internal/acceptance/lint.go +9 -1
  17. package/engine/internal/acceptance/preconditions.go +201 -0
  18. package/engine/internal/anchor/anchor.go +76 -0
  19. package/engine/internal/gate/drivers.go +144 -0
  20. package/engine/internal/gate/gate.go +56 -13
  21. package/engine/internal/gate/preconditions.go +121 -0
  22. package/engine/internal/gate/predecessor.go +67 -0
  23. package/engine/internal/lib/anchors.go +270 -0
  24. package/engine/internal/lib/apply_bundle.go +2 -1
  25. package/engine/internal/lib/candidate.go +17 -8
  26. package/engine/internal/lib/claims.go +104 -39
  27. package/engine/internal/lib/context.go +337 -22
  28. package/engine/internal/lib/diffscope.go +201 -12
  29. package/engine/internal/lib/dispatch.go +393 -21
  30. package/engine/internal/lib/dispatch_contract.go +82 -2
  31. package/engine/internal/lib/dispatch_packet.go +224 -8
  32. package/engine/internal/lib/environment_report.go +2 -3
  33. package/engine/internal/lib/handoff.go +33 -3
  34. package/engine/internal/lib/metrics.go +119 -11
  35. package/engine/internal/lib/next.go +45 -5
  36. package/engine/internal/lib/observe_summary.go +2 -4
  37. package/engine/internal/lib/packet.go +319 -0
  38. package/engine/internal/lib/packet_freeze.go +227 -0
  39. package/engine/internal/lib/perturb.go +403 -0
  40. package/engine/internal/lib/questions_lint.go +99 -0
  41. package/engine/internal/lib/state_edit.go +396 -0
  42. package/engine/internal/lib/taskgraph.go +166 -0
  43. package/engine/internal/lib/treebaseline.go +331 -0
  44. package/engine/internal/lib/triggers.go +19 -0
  45. package/engine/internal/lib/windows.go +110 -5
  46. package/engine/internal/overhaul/admit/run.go +7 -30
  47. package/engine/internal/parallel/cli.go +27 -33
  48. package/engine/internal/parallel/git.go +10 -0
  49. package/engine/internal/parallel/select.go +36 -0
  50. package/engine/internal/state/budgets.go +60 -13
  51. package/engine/internal/state/observation.go +1 -1
  52. package/engine/main.go +61 -14
  53. package/pack/.claude/agents/devrites-code-reviewer.md +9 -5
  54. package/pack/.claude/agents/devrites-devex-reviewer.md +5 -4
  55. package/pack/.claude/agents/devrites-doubt-reviewer.md +4 -4
  56. package/pack/.claude/agents/devrites-evidence-scout.md +3 -2
  57. package/pack/.claude/agents/devrites-frontend-reviewer.md +5 -4
  58. package/pack/.claude/agents/devrites-performance-reviewer.md +5 -5
  59. package/pack/.claude/agents/devrites-plan-drafter.md +4 -2
  60. package/pack/.claude/agents/devrites-plan-reviewer.md +5 -5
  61. package/pack/.claude/agents/devrites-proof-runner.md +1 -1
  62. package/pack/.claude/agents/devrites-retrospector.md +1 -1
  63. package/pack/.claude/agents/devrites-security-auditor.md +4 -4
  64. package/pack/.claude/agents/devrites-simplifier-reviewer.md +5 -4
  65. package/pack/.claude/agents/devrites-slice-wright.md +18 -9
  66. package/pack/.claude/agents/devrites-spec-reviewer.md +4 -4
  67. package/pack/.claude/agents/devrites-strategy-reviewer.md +5 -6
  68. package/pack/.claude/agents/devrites-test-analyst.md +7 -4
  69. package/pack/.claude/agents/devrites-upgrade-planner.md +1 -1
  70. package/pack/.claude/agents/fast-builder.md +4 -2
  71. package/pack/.claude/agents/fast-checker.md +3 -2
  72. package/pack/.claude/agents/fast-critic.md +3 -2
  73. package/pack/.claude/agents/fast-planner.md +3 -3
  74. package/pack/.claude/agents/overhaul-recon.md +5 -4
  75. package/pack/.claude/settings.json +19 -7
  76. package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -1
  77. package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
  78. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +1 -1
  79. package/pack/.claude/skills/devrites-doubt/SKILL.md +5 -5
  80. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  81. package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
  82. package/pack/.claude/skills/devrites-lib/SKILL.md +11 -6
  83. package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  84. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  85. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +2 -1
  86. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  87. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +43 -19
  88. package/pack/.claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  89. package/pack/.claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
  90. package/pack/.claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  91. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  92. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +14 -1
  93. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  94. package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +10 -1
  95. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +14 -0
  96. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +4 -0
  97. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +3 -1
  98. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
  99. package/pack/.claude/skills/devrites-lib/reference/standards/windows.md +3 -2
  100. package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  101. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  102. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
  103. package/pack/.claude/skills/overhaul/references/orchestration.md +3 -2
  104. package/pack/.claude/skills/rite/SKILL.md +1 -1
  105. package/pack/.claude/skills/rite-adopt/SKILL.md +1 -1
  106. package/pack/.claude/skills/rite-adopt/reference/adoption.md +1 -1
  107. package/pack/.claude/skills/rite-autocomplete/SKILL.md +11 -6
  108. package/pack/.claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
  109. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -0
  110. package/pack/.claude/skills/rite-build/SKILL.md +4 -3
  111. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -0
  112. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  113. package/pack/.claude/skills/rite-build/reference/checkpoint.md +2 -0
  114. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  115. package/pack/.claude/skills/rite-build/reference/output.md +2 -0
  116. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +22 -12
  117. package/pack/.claude/skills/rite-build/reference/phase-contract.md +13 -3
  118. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
  119. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +42 -25
  120. package/pack/.claude/skills/rite-clarify/SKILL.md +1 -1
  121. package/pack/.claude/skills/rite-converge/SKILL.md +4 -4
  122. package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
  123. package/pack/.claude/skills/rite-define/SKILL.md +10 -5
  124. package/pack/.claude/skills/rite-doctor/SKILL.md +17 -2
  125. package/pack/.claude/skills/rite-dogfood/SKILL.md +1 -1
  126. package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
  127. package/pack/.claude/skills/rite-explain/reference/intake.md +1 -1
  128. package/pack/.claude/skills/rite-fast/SKILL.md +1 -1
  129. package/pack/.claude/skills/rite-handoff/SKILL.md +3 -3
  130. package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +1 -1
  131. package/pack/.claude/skills/rite-plan/SKILL.md +4 -4
  132. package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -2
  133. package/pack/.claude/skills/rite-polish/SKILL.md +6 -3
  134. package/pack/.claude/skills/rite-prove/SKILL.md +1 -1
  135. package/pack/.claude/skills/rite-quick/SKILL.md +1 -1
  136. package/pack/.claude/skills/rite-resolve/SKILL.md +1 -1
  137. package/pack/.claude/skills/rite-review/SKILL.md +4 -4
  138. package/pack/.claude/skills/rite-seal/SKILL.md +2 -2
  139. package/pack/.claude/skills/rite-ship/SKILL.md +1 -1
  140. package/pack/.claude/skills/rite-spec/SKILL.md +3 -2
  141. package/pack/.claude/skills/rite-spec/reference/investigation.md +5 -5
  142. package/pack/.claude/skills/rite-spec/reference/spec-template.md +1 -1
  143. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -4
  144. package/pack/.claude/skills/rite-status/SKILL.md +1 -1
  145. package/pack/.claude/skills/rite-temper/SKILL.md +1 -1
  146. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  147. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +2 -2
  148. package/pack/.claude/skills/rite-temper/reference/significance.md +2 -2
  149. package/pack/.claude/skills/rite-vet/SKILL.md +11 -5
  150. package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -3
  151. package/pack/.claude/skills/rite-vet/reference/depth.md +2 -2
  152. package/pack/.claude/skills/rite-vet/reference/review-axes.md +2 -2
  153. package/pack/.claude/skills/rite-zoom-out/SKILL.md +6 -6
  154. package/pack/generated/claude/agents/devrites-code-reviewer.md +9 -5
  155. package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -4
  156. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +4 -4
  157. package/pack/generated/claude/agents/devrites-evidence-scout.md +3 -2
  158. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +5 -4
  159. package/pack/generated/claude/agents/devrites-performance-reviewer.md +5 -5
  160. package/pack/generated/claude/agents/devrites-plan-drafter.md +4 -2
  161. package/pack/generated/claude/agents/devrites-plan-reviewer.md +5 -5
  162. package/pack/generated/claude/agents/devrites-proof-runner.md +1 -1
  163. package/pack/generated/claude/agents/devrites-retrospector.md +1 -1
  164. package/pack/generated/claude/agents/devrites-security-auditor.md +4 -4
  165. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +5 -4
  166. package/pack/generated/claude/agents/devrites-slice-wright.md +18 -9
  167. package/pack/generated/claude/agents/devrites-spec-reviewer.md +4 -4
  168. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +5 -6
  169. package/pack/generated/claude/agents/devrites-test-analyst.md +7 -4
  170. package/pack/generated/claude/agents/devrites-upgrade-planner.md +1 -1
  171. package/pack/generated/claude/agents/fast-builder.md +4 -2
  172. package/pack/generated/claude/agents/fast-checker.md +3 -2
  173. package/pack/generated/claude/agents/fast-critic.md +3 -2
  174. package/pack/generated/claude/agents/fast-planner.md +3 -3
  175. package/pack/generated/claude/agents/overhaul-recon.md +5 -4
  176. package/pack/generated/claude/settings.json +19 -7
  177. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -1
  178. package/pack/generated/claude/skills/devrites-audit/SKILL.md +1 -1
  179. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +1 -1
  180. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +5 -5
  181. package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  182. package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
  183. package/pack/generated/claude/skills/devrites-lib/SKILL.md +11 -6
  184. package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  185. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  186. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +2 -1
  187. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  188. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +43 -19
  189. package/pack/generated/claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  190. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
  191. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  192. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  193. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +14 -1
  194. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  195. package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +10 -1
  196. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +14 -0
  197. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +4 -0
  198. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +3 -1
  199. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
  200. package/pack/generated/claude/skills/devrites-lib/reference/standards/windows.md +3 -2
  201. package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  202. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  203. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
  204. package/pack/generated/claude/skills/overhaul/references/orchestration.md +3 -2
  205. package/pack/generated/claude/skills/rite/SKILL.md +1 -1
  206. package/pack/generated/claude/skills/rite-adopt/SKILL.md +1 -1
  207. package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +1 -1
  208. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +11 -6
  209. package/pack/generated/claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
  210. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -0
  211. package/pack/generated/claude/skills/rite-build/SKILL.md +4 -3
  212. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -0
  213. package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  214. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +2 -0
  215. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  216. package/pack/generated/claude/skills/rite-build/reference/output.md +2 -0
  217. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +22 -12
  218. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +13 -3
  219. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
  220. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +42 -25
  221. package/pack/generated/claude/skills/rite-clarify/SKILL.md +1 -1
  222. package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -4
  223. package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
  224. package/pack/generated/claude/skills/rite-define/SKILL.md +10 -5
  225. package/pack/generated/claude/skills/rite-doctor/SKILL.md +17 -2
  226. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +1 -1
  227. package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
  228. package/pack/generated/claude/skills/rite-explain/reference/intake.md +1 -1
  229. package/pack/generated/claude/skills/rite-fast/SKILL.md +1 -1
  230. package/pack/generated/claude/skills/rite-handoff/SKILL.md +3 -3
  231. package/pack/generated/claude/skills/rite-handoff/reference/handoff-template.md +1 -1
  232. package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -4
  233. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -2
  234. package/pack/generated/claude/skills/rite-polish/SKILL.md +6 -3
  235. package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -1
  236. package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -1
  237. package/pack/generated/claude/skills/rite-resolve/SKILL.md +1 -1
  238. package/pack/generated/claude/skills/rite-review/SKILL.md +4 -4
  239. package/pack/generated/claude/skills/rite-seal/SKILL.md +2 -2
  240. package/pack/generated/claude/skills/rite-ship/SKILL.md +1 -1
  241. package/pack/generated/claude/skills/rite-spec/SKILL.md +3 -2
  242. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +5 -5
  243. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +1 -1
  244. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -4
  245. package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
  246. package/pack/generated/claude/skills/rite-temper/SKILL.md +1 -1
  247. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  248. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +2 -2
  249. package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -2
  250. package/pack/generated/claude/skills/rite-vet/SKILL.md +11 -5
  251. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -3
  252. package/pack/generated/claude/skills/rite-vet/reference/depth.md +2 -2
  253. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +2 -2
  254. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +6 -6
  255. package/pack/generated/codex/agents/devrites-code-reviewer.toml +8 -4
  256. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +4 -3
  257. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +3 -3
  258. package/pack/generated/codex/agents/devrites-evidence-scout.toml +2 -1
  259. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +4 -3
  260. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +4 -4
  261. package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -1
  262. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +4 -4
  263. package/pack/generated/codex/agents/devrites-security-auditor.toml +3 -3
  264. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +4 -3
  265. package/pack/generated/codex/agents/devrites-slice-wright.toml +17 -8
  266. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +3 -3
  267. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +4 -5
  268. package/pack/generated/codex/agents/devrites-test-analyst.toml +6 -3
  269. package/pack/generated/codex/agents/fast-builder.toml +3 -1
  270. package/pack/generated/codex/agents/fast-checker.toml +2 -1
  271. package/pack/generated/codex/agents/fast-critic.toml +2 -1
  272. package/pack/generated/codex/agents/fast-planner.toml +2 -2
  273. package/pack/generated/codex/agents/overhaul-recon.toml +5 -4
  274. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -1
  275. package/pack/generated/codex/skills/devrites-audit/SKILL.md +1 -1
  276. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +1 -1
  277. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +5 -5
  278. package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  279. package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
  280. package/pack/generated/codex/skills/devrites-lib/SKILL.md +11 -6
  281. package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  282. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  283. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +2 -1
  284. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  285. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +43 -19
  286. package/pack/generated/codex/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  287. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-index.md +111 -0
  288. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  289. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  290. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +14 -1
  291. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  292. package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +10 -1
  293. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +14 -0
  294. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +4 -0
  295. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +3 -1
  296. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +9 -8
  297. package/pack/generated/codex/skills/devrites-lib/reference/standards/windows.md +3 -2
  298. package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  299. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  300. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
  301. package/pack/generated/codex/skills/overhaul/references/orchestration.md +3 -2
  302. package/pack/generated/codex/skills/rite/SKILL.md +1 -1
  303. package/pack/generated/codex/skills/rite-adopt/SKILL.md +1 -1
  304. package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +1 -1
  305. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +11 -6
  306. package/pack/generated/codex/skills/rite-autocomplete/reference/lookahead.md +50 -0
  307. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -0
  308. package/pack/generated/codex/skills/rite-build/SKILL.md +4 -3
  309. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -0
  310. package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  311. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +2 -0
  312. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +1 -1
  313. package/pack/generated/codex/skills/rite-build/reference/output.md +2 -0
  314. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +22 -12
  315. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +13 -3
  316. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +4 -0
  317. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +42 -25
  318. package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
  319. package/pack/generated/codex/skills/rite-converge/SKILL.md +4 -4
  320. package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +3 -3
  321. package/pack/generated/codex/skills/rite-define/SKILL.md +10 -5
  322. package/pack/generated/codex/skills/rite-doctor/SKILL.md +17 -2
  323. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +1 -1
  324. package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
  325. package/pack/generated/codex/skills/rite-explain/reference/intake.md +1 -1
  326. package/pack/generated/codex/skills/rite-fast/SKILL.md +1 -1
  327. package/pack/generated/codex/skills/rite-handoff/SKILL.md +3 -3
  328. package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +1 -1
  329. package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -4
  330. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -2
  331. package/pack/generated/codex/skills/rite-polish/SKILL.md +6 -3
  332. package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
  333. package/pack/generated/codex/skills/rite-quick/SKILL.md +1 -1
  334. package/pack/generated/codex/skills/rite-resolve/SKILL.md +1 -1
  335. package/pack/generated/codex/skills/rite-review/SKILL.md +4 -4
  336. package/pack/generated/codex/skills/rite-seal/SKILL.md +2 -2
  337. package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
  338. package/pack/generated/codex/skills/rite-spec/SKILL.md +3 -2
  339. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +5 -5
  340. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +1 -1
  341. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -4
  342. package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
  343. package/pack/generated/codex/skills/rite-temper/SKILL.md +1 -1
  344. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +2 -2
  345. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +2 -2
  346. package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -2
  347. package/pack/generated/codex/skills/rite-vet/SKILL.md +11 -5
  348. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -3
  349. package/pack/generated/codex/skills/rite-vet/reference/depth.md +2 -2
  350. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +2 -2
  351. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +6 -6
  352. package/pack/generated/devin/agents/devrites-code-reviewer.md +8 -4
  353. package/pack/generated/devin/agents/devrites-devex-reviewer.md +4 -3
  354. package/pack/generated/devin/agents/devrites-doubt-reviewer.md +3 -3
  355. package/pack/generated/devin/agents/devrites-evidence-scout.md +2 -1
  356. package/pack/generated/devin/agents/devrites-frontend-reviewer.md +4 -3
  357. package/pack/generated/devin/agents/devrites-performance-reviewer.md +4 -4
  358. package/pack/generated/devin/agents/devrites-plan-drafter.md +3 -1
  359. package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -4
  360. package/pack/generated/devin/agents/devrites-security-auditor.md +3 -3
  361. package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +4 -3
  362. package/pack/generated/devin/agents/devrites-slice-wright.md +17 -8
  363. package/pack/generated/devin/agents/devrites-spec-reviewer.md +3 -3
  364. package/pack/generated/devin/agents/devrites-strategy-reviewer.md +4 -5
  365. package/pack/generated/devin/agents/devrites-test-analyst.md +6 -3
  366. package/pack/generated/devin/agents/fast-builder.md +3 -1
  367. package/pack/generated/devin/agents/fast-checker.md +2 -1
  368. package/pack/generated/devin/agents/fast-critic.md +2 -1
  369. package/pack/generated/devin/agents/fast-planner.md +2 -2
  370. package/pack/generated/devin/agents/overhaul-recon.md +5 -4
  371. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +1 -1
  372. package/pack/generated/devin/skills/devrites-audit/SKILL.md +1 -1
  373. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +1 -1
  374. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +5 -5
  375. package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  376. package/pack/generated/devin/skills/devrites-interview/SKILL.md +1 -1
  377. package/pack/generated/devin/skills/devrites-lib/SKILL.md +11 -6
  378. package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  379. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  380. package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +2 -1
  381. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  382. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +43 -19
  383. package/pack/generated/devin/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  384. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-index.md +111 -0
  385. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  386. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  387. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +14 -1
  388. package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  389. package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +10 -1
  390. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +14 -0
  391. package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +4 -0
  392. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +3 -1
  393. package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +9 -8
  394. package/pack/generated/devin/skills/devrites-lib/reference/standards/windows.md +3 -2
  395. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  396. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  397. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
  398. package/pack/generated/devin/skills/overhaul/references/orchestration.md +3 -2
  399. package/pack/generated/devin/skills/rite/SKILL.md +1 -1
  400. package/pack/generated/devin/skills/rite-adopt/SKILL.md +1 -1
  401. package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +1 -1
  402. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +11 -6
  403. package/pack/generated/devin/skills/rite-autocomplete/reference/lookahead.md +50 -0
  404. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +7 -0
  405. package/pack/generated/devin/skills/rite-build/SKILL.md +4 -3
  406. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +2 -0
  407. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  408. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +2 -0
  409. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +1 -1
  410. package/pack/generated/devin/skills/rite-build/reference/output.md +2 -0
  411. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +22 -12
  412. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +13 -3
  413. package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +4 -0
  414. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +42 -25
  415. package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
  416. package/pack/generated/devin/skills/rite-converge/SKILL.md +4 -4
  417. package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +3 -3
  418. package/pack/generated/devin/skills/rite-define/SKILL.md +10 -5
  419. package/pack/generated/devin/skills/rite-doctor/SKILL.md +17 -2
  420. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +1 -1
  421. package/pack/generated/devin/skills/rite-explain/SKILL.md +1 -1
  422. package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
  423. package/pack/generated/devin/skills/rite-fast/SKILL.md +1 -1
  424. package/pack/generated/devin/skills/rite-handoff/SKILL.md +3 -3
  425. package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +1 -1
  426. package/pack/generated/devin/skills/rite-plan/SKILL.md +4 -4
  427. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -2
  428. package/pack/generated/devin/skills/rite-polish/SKILL.md +6 -3
  429. package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
  430. package/pack/generated/devin/skills/rite-quick/SKILL.md +1 -1
  431. package/pack/generated/devin/skills/rite-resolve/SKILL.md +1 -1
  432. package/pack/generated/devin/skills/rite-review/SKILL.md +4 -4
  433. package/pack/generated/devin/skills/rite-seal/SKILL.md +2 -2
  434. package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
  435. package/pack/generated/devin/skills/rite-spec/SKILL.md +3 -2
  436. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +5 -5
  437. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +1 -1
  438. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +6 -4
  439. package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
  440. package/pack/generated/devin/skills/rite-temper/SKILL.md +1 -1
  441. package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +2 -2
  442. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +2 -2
  443. package/pack/generated/devin/skills/rite-temper/reference/significance.md +2 -2
  444. package/pack/generated/devin/skills/rite-vet/SKILL.md +11 -5
  445. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +10 -3
  446. package/pack/generated/devin/skills/rite-vet/reference/depth.md +2 -2
  447. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
  448. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +6 -6
  449. package/pack/generated/omp/agents/devrites-code-reviewer.md +9 -5
  450. package/pack/generated/omp/agents/devrites-devex-reviewer.md +5 -4
  451. package/pack/generated/omp/agents/devrites-doubt-reviewer.md +4 -4
  452. package/pack/generated/omp/agents/devrites-evidence-scout.md +3 -2
  453. package/pack/generated/omp/agents/devrites-frontend-reviewer.md +5 -4
  454. package/pack/generated/omp/agents/devrites-performance-reviewer.md +5 -5
  455. package/pack/generated/omp/agents/devrites-plan-drafter.md +4 -2
  456. package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -5
  457. package/pack/generated/omp/agents/devrites-proof-runner.md +1 -1
  458. package/pack/generated/omp/agents/devrites-retrospector.md +1 -1
  459. package/pack/generated/omp/agents/devrites-security-auditor.md +4 -4
  460. package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +5 -4
  461. package/pack/generated/omp/agents/devrites-slice-wright.md +18 -9
  462. package/pack/generated/omp/agents/devrites-spec-reviewer.md +4 -4
  463. package/pack/generated/omp/agents/devrites-strategy-reviewer.md +5 -6
  464. package/pack/generated/omp/agents/devrites-test-analyst.md +7 -4
  465. package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
  466. package/pack/generated/omp/agents/fast-builder.md +4 -2
  467. package/pack/generated/omp/agents/fast-checker.md +3 -2
  468. package/pack/generated/omp/agents/fast-critic.md +3 -2
  469. package/pack/generated/omp/agents/fast-planner.md +3 -3
  470. package/pack/generated/omp/agents/overhaul-backend-engineer.md +1 -1
  471. package/pack/generated/omp/agents/overhaul-boundary.md +1 -1
  472. package/pack/generated/omp/agents/overhaul-craft.md +1 -1
  473. package/pack/generated/omp/agents/overhaul-frontend-engineer.md +1 -1
  474. package/pack/generated/omp/agents/overhaul-implementer.md +1 -1
  475. package/pack/generated/omp/agents/overhaul-recon.md +6 -5
  476. package/pack/generated/omp/agents/overhaul-specialist.md +1 -1
  477. package/pack/generated/omp/agents/overhaul-verifier.md +1 -1
  478. package/pack/generated/omp/commands/rite-autocomplete.md +1 -1
  479. package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +1 -1
  480. package/pack/generated/omp/skills/devrites-audit/SKILL.md +1 -1
  481. package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +1 -1
  482. package/pack/generated/omp/skills/devrites-doubt/SKILL.md +5 -5
  483. package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  484. package/pack/generated/omp/skills/devrites-interview/SKILL.md +1 -1
  485. package/pack/generated/omp/skills/devrites-lib/SKILL.md +11 -6
  486. package/pack/generated/omp/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  487. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  488. package/pack/generated/omp/skills/devrites-lib/reference/standards/README.md +2 -1
  489. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  490. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +43 -19
  491. package/pack/generated/omp/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  492. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-index.md +111 -0
  493. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  494. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  495. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +14 -1
  496. package/pack/generated/omp/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  497. package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +10 -1
  498. package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +14 -0
  499. package/pack/generated/omp/skills/devrites-lib/reference/standards/security.md +4 -0
  500. package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +3 -1
  501. package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +9 -8
  502. package/pack/generated/omp/skills/devrites-lib/reference/standards/windows.md +3 -2
  503. package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  504. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  505. package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +1 -1
  506. package/pack/generated/omp/skills/overhaul/references/orchestration.md +3 -2
  507. package/pack/generated/omp/skills/rite/SKILL.md +1 -1
  508. package/pack/generated/omp/skills/rite-adopt/SKILL.md +1 -1
  509. package/pack/generated/omp/skills/rite-adopt/reference/adoption.md +1 -1
  510. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +11 -6
  511. package/pack/generated/omp/skills/rite-autocomplete/reference/lookahead.md +50 -0
  512. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +7 -0
  513. package/pack/generated/omp/skills/rite-build/SKILL.md +4 -3
  514. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +2 -0
  515. package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  516. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -0
  517. package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +1 -1
  518. package/pack/generated/omp/skills/rite-build/reference/output.md +2 -0
  519. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +22 -12
  520. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +13 -3
  521. package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +4 -0
  522. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +42 -25
  523. package/pack/generated/omp/skills/rite-clarify/SKILL.md +1 -1
  524. package/pack/generated/omp/skills/rite-converge/SKILL.md +4 -4
  525. package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +3 -3
  526. package/pack/generated/omp/skills/rite-define/SKILL.md +10 -5
  527. package/pack/generated/omp/skills/rite-doctor/SKILL.md +17 -2
  528. package/pack/generated/omp/skills/rite-dogfood/SKILL.md +1 -1
  529. package/pack/generated/omp/skills/rite-explain/SKILL.md +1 -1
  530. package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
  531. package/pack/generated/omp/skills/rite-fast/SKILL.md +1 -1
  532. package/pack/generated/omp/skills/rite-handoff/SKILL.md +3 -3
  533. package/pack/generated/omp/skills/rite-handoff/reference/handoff-template.md +1 -1
  534. package/pack/generated/omp/skills/rite-plan/SKILL.md +4 -4
  535. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +3 -2
  536. package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -3
  537. package/pack/generated/omp/skills/rite-prove/SKILL.md +1 -1
  538. package/pack/generated/omp/skills/rite-quick/SKILL.md +1 -1
  539. package/pack/generated/omp/skills/rite-resolve/SKILL.md +1 -1
  540. package/pack/generated/omp/skills/rite-review/SKILL.md +4 -4
  541. package/pack/generated/omp/skills/rite-seal/SKILL.md +2 -2
  542. package/pack/generated/omp/skills/rite-ship/SKILL.md +1 -1
  543. package/pack/generated/omp/skills/rite-spec/SKILL.md +3 -2
  544. package/pack/generated/omp/skills/rite-spec/reference/investigation.md +5 -5
  545. package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +1 -1
  546. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +6 -4
  547. package/pack/generated/omp/skills/rite-status/SKILL.md +1 -1
  548. package/pack/generated/omp/skills/rite-temper/SKILL.md +1 -1
  549. package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +2 -2
  550. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +2 -2
  551. package/pack/generated/omp/skills/rite-temper/reference/significance.md +2 -2
  552. package/pack/generated/omp/skills/rite-vet/SKILL.md +11 -5
  553. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +10 -3
  554. package/pack/generated/omp/skills/rite-vet/reference/depth.md +2 -2
  555. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +2 -2
  556. package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +6 -6
  557. package/pack/generated/pi/agents/devrites-code-reviewer.md +9 -5
  558. package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -4
  559. package/pack/generated/pi/agents/devrites-doubt-reviewer.md +4 -4
  560. package/pack/generated/pi/agents/devrites-evidence-scout.md +3 -2
  561. package/pack/generated/pi/agents/devrites-frontend-reviewer.md +5 -4
  562. package/pack/generated/pi/agents/devrites-performance-reviewer.md +5 -5
  563. package/pack/generated/pi/agents/devrites-plan-drafter.md +4 -2
  564. package/pack/generated/pi/agents/devrites-plan-reviewer.md +5 -5
  565. package/pack/generated/pi/agents/devrites-proof-runner.md +1 -1
  566. package/pack/generated/pi/agents/devrites-retrospector.md +1 -1
  567. package/pack/generated/pi/agents/devrites-security-auditor.md +4 -4
  568. package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +5 -4
  569. package/pack/generated/pi/agents/devrites-slice-wright.md +18 -9
  570. package/pack/generated/pi/agents/devrites-spec-reviewer.md +4 -4
  571. package/pack/generated/pi/agents/devrites-strategy-reviewer.md +5 -6
  572. package/pack/generated/pi/agents/devrites-test-analyst.md +7 -4
  573. package/pack/generated/pi/agents/devrites-upgrade-planner.md +1 -1
  574. package/pack/generated/pi/agents/fast-builder.md +4 -2
  575. package/pack/generated/pi/agents/fast-checker.md +3 -2
  576. package/pack/generated/pi/agents/fast-critic.md +3 -2
  577. package/pack/generated/pi/agents/fast-planner.md +3 -3
  578. package/pack/generated/pi/agents/overhaul-backend-engineer.md +1 -1
  579. package/pack/generated/pi/agents/overhaul-boundary.md +1 -1
  580. package/pack/generated/pi/agents/overhaul-craft.md +1 -1
  581. package/pack/generated/pi/agents/overhaul-frontend-engineer.md +1 -1
  582. package/pack/generated/pi/agents/overhaul-implementer.md +1 -1
  583. package/pack/generated/pi/agents/overhaul-recon.md +6 -5
  584. package/pack/generated/pi/agents/overhaul-specialist.md +1 -1
  585. package/pack/generated/pi/agents/overhaul-verifier.md +1 -1
  586. package/pack/generated/pi/prompts/rite-autocomplete.md +1 -1
  587. package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +1 -1
  588. package/pack/generated/pi/skills/devrites-audit/SKILL.md +1 -1
  589. package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +1 -1
  590. package/pack/generated/pi/skills/devrites-doubt/SKILL.md +5 -5
  591. package/pack/generated/pi/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
  592. package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
  593. package/pack/generated/pi/skills/devrites-lib/SKILL.md +11 -6
  594. package/pack/generated/pi/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
  595. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
  596. package/pack/generated/pi/skills/devrites-lib/reference/standards/README.md +2 -1
  597. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
  598. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +43 -19
  599. package/pack/generated/pi/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
  600. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-index.md +111 -0
  601. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
  602. package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
  603. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +14 -1
  604. package/pack/generated/pi/skills/devrites-lib/reference/standards/deprecation.md +1 -1
  605. package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +10 -1
  606. package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +14 -0
  607. package/pack/generated/pi/skills/devrites-lib/reference/standards/security.md +4 -0
  608. package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +3 -1
  609. package/pack/generated/pi/skills/devrites-lib/reference/standards/tooling.md +9 -8
  610. package/pack/generated/pi/skills/devrites-lib/reference/standards/windows.md +3 -2
  611. package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
  612. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
  613. package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
  614. package/pack/generated/pi/skills/overhaul/references/orchestration.md +3 -2
  615. package/pack/generated/pi/skills/rite/SKILL.md +1 -1
  616. package/pack/generated/pi/skills/rite-adopt/SKILL.md +1 -1
  617. package/pack/generated/pi/skills/rite-adopt/reference/adoption.md +1 -1
  618. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +11 -6
  619. package/pack/generated/pi/skills/rite-autocomplete/reference/lookahead.md +50 -0
  620. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +7 -0
  621. package/pack/generated/pi/skills/rite-build/SKILL.md +4 -3
  622. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +2 -0
  623. package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +4 -1
  624. package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +2 -0
  625. package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +1 -1
  626. package/pack/generated/pi/skills/rite-build/reference/output.md +2 -0
  627. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +22 -12
  628. package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +13 -3
  629. package/pack/generated/pi/skills/rite-build/reference/spec-drift-guard.md +4 -0
  630. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +42 -25
  631. package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
  632. package/pack/generated/pi/skills/rite-converge/SKILL.md +4 -4
  633. package/pack/generated/pi/skills/rite-converge/reference/convergence-assessment.md +3 -3
  634. package/pack/generated/pi/skills/rite-define/SKILL.md +10 -5
  635. package/pack/generated/pi/skills/rite-doctor/SKILL.md +17 -2
  636. package/pack/generated/pi/skills/rite-dogfood/SKILL.md +1 -1
  637. package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
  638. package/pack/generated/pi/skills/rite-explain/reference/intake.md +1 -1
  639. package/pack/generated/pi/skills/rite-fast/SKILL.md +1 -1
  640. package/pack/generated/pi/skills/rite-handoff/SKILL.md +3 -3
  641. package/pack/generated/pi/skills/rite-handoff/reference/handoff-template.md +1 -1
  642. package/pack/generated/pi/skills/rite-plan/SKILL.md +4 -4
  643. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -2
  644. package/pack/generated/pi/skills/rite-polish/SKILL.md +6 -3
  645. package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
  646. package/pack/generated/pi/skills/rite-quick/SKILL.md +1 -1
  647. package/pack/generated/pi/skills/rite-resolve/SKILL.md +1 -1
  648. package/pack/generated/pi/skills/rite-review/SKILL.md +4 -4
  649. package/pack/generated/pi/skills/rite-seal/SKILL.md +2 -2
  650. package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
  651. package/pack/generated/pi/skills/rite-spec/SKILL.md +3 -2
  652. package/pack/generated/pi/skills/rite-spec/reference/investigation.md +5 -5
  653. package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +1 -1
  654. package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +6 -4
  655. package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
  656. package/pack/generated/pi/skills/rite-temper/SKILL.md +1 -1
  657. package/pack/generated/pi/skills/rite-temper/reference/review-dimensions.md +2 -2
  658. package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +2 -2
  659. package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -2
  660. package/pack/generated/pi/skills/rite-vet/SKILL.md +11 -5
  661. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +10 -3
  662. package/pack/generated/pi/skills/rite-vet/reference/depth.md +2 -2
  663. package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +2 -2
  664. package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +6 -6
  665. package/package.json +1 -1
  666. package/scripts/build-host-artifacts.sh +5 -4
  667. package/scripts/omp-generate.sh +3 -12
  668. package/scripts/pi-generate.sh +5 -51
@@ -0,0 +1,331 @@
1
+ package lib
2
+
3
+ import (
4
+ "encoding/json"
5
+ "errors"
6
+ "fmt"
7
+ "io"
8
+ "os"
9
+ "path/filepath"
10
+ "slices"
11
+ "strings"
12
+ "time"
13
+
14
+ "github.com/devrites/devrites/internal/devritespaths"
15
+ "github.com/devrites/devrites/internal/state"
16
+ )
17
+
18
+ // treeBaselineFile is the feature-root map of dirty product paths to their
19
+ // pathDigest fingerprint (ADR-0038). `dispatch open` writes it when absent
20
+ // (run start: pre-existing dirt is accepted user work), the return that
21
+ // completes a wright wave takes that wave's write set, and `dispatch
22
+ // attribute` takes the paths it names. Paths no longer dirty keep their
23
+ // recorded fingerprint, so a checkpoint commit later collapsed back into the
24
+ // work tree (git reset --soft) is not flagged. The engine never reverts a file.
25
+ const treeBaselineFile = "tree-baseline.json"
26
+
27
+ // treeProject returns the project directory and its path inside the git
28
+ // repository ("" at the top, else "sub/"). ok is false when root is not a
29
+ // project's .devrites tree or the project is not in a git work tree; the
30
+ // tripwire is then off.
31
+ func treeProject(root string) (project, prefix string, ok bool) {
32
+ if filepath.Base(root) != devritespaths.DevritesRootName {
33
+ return "", "", false
34
+ }
35
+ project = filepath.Dir(root)
36
+ out, err := runGitCommand(project, nil, "rev-parse", "--show-prefix")
37
+ if err != nil {
38
+ return "", "", false
39
+ }
40
+ return project, strings.TrimSpace(string(out)), true
41
+ }
42
+
43
+ // productDirt fingerprints every dirty product path, project-relative: git
44
+ // status entries (tracked, staged, untracked; gitignored files never appear)
45
+ // outside .devrites/ and .scratch/.
46
+ func productDirt(project, prefix string) (map[string]string, error) {
47
+ paths, err := gitStatusPaths(project)
48
+ if err != nil {
49
+ return nil, err
50
+ }
51
+ dirt := make(map[string]string, len(paths))
52
+ for _, path := range paths {
53
+ rel, ok := strings.CutPrefix(path, prefix)
54
+ if !ok || rel == ".devrites" || rel == ".scratch" || strings.HasPrefix(rel, ".devrites/") || strings.HasPrefix(rel, ".scratch/") {
55
+ continue
56
+ }
57
+ dirt[rel] = pathDigest(project, rel)
58
+ }
59
+ return dirt, nil
60
+ }
61
+
62
+ // loadTreeBaseline reads the feature's baseline; ok is false when it is absent.
63
+ func loadTreeBaseline(root, slug string) (map[string]string, bool, error) {
64
+ dir, err := devritespaths.ExistingFeatureDirChecked(root, slug)
65
+ if err != nil {
66
+ return nil, false, err
67
+ }
68
+ data, err := os.ReadFile(filepath.Join(dir, treeBaselineFile)) // #nosec G304 -- validated feature workspace artifact
69
+ if errors.Is(err, os.ErrNotExist) {
70
+ return nil, false, nil
71
+ }
72
+ if err != nil {
73
+ return nil, false, fmt.Errorf("%s: %w", treeBaselineFile, err)
74
+ }
75
+ var baseline map[string]string
76
+ if err := json.Unmarshal(data, &baseline); err != nil {
77
+ return nil, false, fmt.Errorf("%s is not valid JSON: %w", treeBaselineFile, err)
78
+ }
79
+ return baseline, true, nil
80
+ }
81
+
82
+ // recordTreeBaseline rewrites the baseline from the current dirty set and
83
+ // carries clean paths' recorded values forward. A path
84
+ // whose fingerprint changed is taken when accept covers it (always when no
85
+ // baseline exists yet); otherwise it keeps its recorded value, or stays
86
+ // unrecorded, and remains flagged. It returns how many paths it took and
87
+ // writes nothing outside a git project. Callers hold the feature lock.
88
+ func recordTreeBaseline(root, slug string, accept func(string) bool) (int, error) {
89
+ project, prefix, ok := treeProject(root)
90
+ if !ok {
91
+ return 0, nil
92
+ }
93
+ baseline, exists, err := loadTreeBaseline(root, slug)
94
+ if err != nil {
95
+ return 0, err
96
+ }
97
+ dirt, err := productDirt(project, prefix)
98
+ if err != nil {
99
+ return 0, err
100
+ }
101
+ next := make(map[string]string, len(dirt))
102
+ taken := 0
103
+ for path, digest := range dirt {
104
+ was, recorded := baseline[path]
105
+ switch {
106
+ case recorded && was == digest:
107
+ next[path] = was
108
+ case !exists || accept(path):
109
+ next[path] = digest
110
+ taken++
111
+ case recorded:
112
+ next[path] = was
113
+ }
114
+ }
115
+ for path, was := range baseline {
116
+ if _, dirty := dirt[path]; !dirty {
117
+ next[path] = was
118
+ }
119
+ }
120
+ data, err := json.MarshalIndent(next, "", " ")
121
+ if err != nil {
122
+ return 0, err
123
+ }
124
+ return taken, state.AtomicWrite(filepath.Join(devritespaths.FeatureDir(root, slug), treeBaselineFile), append(data, '\n'), 0o600)
125
+ }
126
+
127
+ // ensureTreeBaseline records the run-start baseline when none exists.
128
+ func ensureTreeBaseline(root, slug string, stdout io.Writer) error {
129
+ if _, exists, err := loadTreeBaseline(root, slug); err != nil || exists {
130
+ return err
131
+ }
132
+ if _, _, ok := treeProject(root); !ok {
133
+ return nil
134
+ }
135
+ n, err := recordTreeBaseline(root, slug, nil)
136
+ if err == nil {
137
+ fmt.Fprintf(stdout, "dispatch: tree baseline recorded (%d dirty product path(s) accepted as user work)\n", n)
138
+ }
139
+ return err
140
+ }
141
+
142
+ // unattributedEdits lists, sorted, the dirty product paths whose fingerprint
143
+ // differs from the baseline and that neither a live claim nor an in-flight
144
+ // wright wave's slice write set covers. A workspace without a baseline,
145
+ // or a project outside git, has none.
146
+ func unattributedEdits(root, slug string) ([]string, error) {
147
+ baseline, exists, err := loadTreeBaseline(root, slug)
148
+ if err != nil || !exists {
149
+ return nil, err
150
+ }
151
+ project, prefix, ok := treeProject(root)
152
+ if !ok {
153
+ return nil, nil
154
+ }
155
+ dirt, err := productDirt(project, prefix)
156
+ if err != nil {
157
+ return nil, err
158
+ }
159
+ covered, err := liveAttribution(root, slug)
160
+ if err != nil {
161
+ return nil, err
162
+ }
163
+ var out []string
164
+ for path, digest := range dirt {
165
+ if was, recorded := baseline[path]; (!recorded || was != digest) && !covers(covered, path) {
166
+ out = append(out, path)
167
+ }
168
+ }
169
+ slices.Sort(out)
170
+ return out, nil
171
+ }
172
+
173
+ // liveAttribution is every path a wright may be writing now: live claims in
174
+ // the ledger plus the slice write sets of open or sealed wright waves, in
175
+ // any phase.
176
+ func liveAttribution(root, slug string) ([]string, error) {
177
+ latest, order, _, err := readClaims(claimsPath(root))
178
+ if err != nil {
179
+ return nil, err
180
+ }
181
+ var paths []string
182
+ for _, rec := range liveClaims(latest, order, time.Now().UTC()) {
183
+ paths = append(paths, rec.Paths...)
184
+ }
185
+ f, _, err := loadDispatch(root, slug)
186
+ if err != nil {
187
+ return nil, err
188
+ }
189
+ for _, w := range f.Waves {
190
+ if (w.State == "open" || w.State == "sealed") && isWrightWave(w) {
191
+ paths = append(paths, sliceWriteSet(root, slug, w.Slices)...)
192
+ }
193
+ }
194
+ return paths, nil
195
+ }
196
+
197
+ // waveWriteSet is what a completed wright wave owns: its slices' write
198
+ // sets plus the paths of its claim, released or not.
199
+ func waveWriteSet(root, slug string, w *dispatchWave) []string {
200
+ paths := sliceWriteSet(root, slug, w.Slices)
201
+ if w.Claim != "" {
202
+ if latest, _, _, err := readClaims(claimsPath(root)); err == nil && latest[w.Claim] != nil {
203
+ paths = append(paths, latest[w.Claim].Paths...)
204
+ }
205
+ }
206
+ return paths
207
+ }
208
+
209
+ // sliceWriteSet is the tasks.md write set (Writer allowlist, else Files likely
210
+ // touched) of each named slice; an unreadable tasks.md yields none.
211
+ func sliceWriteSet(root, slug string, ids []string) []string {
212
+ raw, err := readWorkspaceArtifact(root, slug, "tasks.md")
213
+ if err != nil {
214
+ return nil
215
+ }
216
+ byID, _ := sliceWritePaths(raw, ParseTaskGraph(raw))
217
+ var out []string
218
+ for id, paths := range byID {
219
+ if containsSlice(ids, id) {
220
+ out = append(out, paths...)
221
+ }
222
+ }
223
+ return out
224
+ }
225
+
226
+ // covers reports whether a held path (file or directory) covers path.
227
+ func covers(held []string, path string) bool {
228
+ return slices.ContainsFunc(held, func(h string) bool { return claimPathsOverlap(h, path) })
229
+ }
230
+
231
+ // unattributedMessage names the flagged paths and both remedies; neither
232
+ // stops for a human and the engine reverts nothing.
233
+ func unattributedMessage(slug string, paths []string) string {
234
+ return fmt.Sprintf("unattributed root edit: %s; route each path through a bounded wright (its `dispatch open` names it with --claim <path>, or a slice write set covers it) or record the evidence that it is owner work, gate output, a returned wright outside a dispatch wave, or a protocol-sanctioned root write (Polish ADR promotion, DESIGN.md): devrites-engine dispatch %s attribute --reason <evidence> --path <path> (ADR-0038)",
235
+ strings.Join(paths, ", "), slug)
236
+ }
237
+
238
+ // recordUnattributed logs one tripwire finding to metrics.jsonl.
239
+ func recordUnattributed(root, slug, phase string, paths []string) {
240
+ recordMetricNote(root, slug, phase, "unattributed-edit", "", "paths="+strings.Join(paths, ","))
241
+ }
242
+
243
+ // CheckTreeBaseline is the `check candidate` tripwire: it fails while a dirty
244
+ // product path changed since the tree baseline with no live wright
245
+ // attribution. A workspace without tree-baseline.json always passes.
246
+ func CheckTreeBaseline(root, slug string) error {
247
+ flagged, err := unattributedEdits(root, slug)
248
+ if err != nil {
249
+ return fmt.Errorf("tree baseline: %w", err)
250
+ }
251
+ if len(flagged) > 0 {
252
+ recordUnattributed(root, slug, cursorPhase(root, slug), flagged)
253
+ return errors.New(unattributedMessage(slug, flagged))
254
+ }
255
+ return nil
256
+ }
257
+
258
+ // attributeEdits records evidence-backed attribution for flagged paths: each
259
+ // must be an unattributed edit now, and its current fingerprint joins the
260
+ // baseline. The reason and paths land in metrics.jsonl.
261
+ func attributeEdits(root, slug, reason string, paths []string, stdout, stderr io.Writer) int {
262
+ if strings.TrimSpace(reason) == "" || len(paths) == 0 {
263
+ fmt.Fprintln(stderr, "dispatch: attribute needs --reason <evidence> and at least one --path <path>")
264
+ return 2
265
+ }
266
+ code := 0
267
+ err := state.WithFeatureLock(root, slug, func() error {
268
+ flagged, err := unattributedEdits(root, slug)
269
+ if err != nil {
270
+ return err
271
+ }
272
+ for _, path := range paths {
273
+ if !slices.Contains(flagged, path) {
274
+ fmt.Fprintf(stderr, "dispatch: %s is not an unattributed edit (flagged: %s)\n", path, listOrNone(flagged))
275
+ code = 2
276
+ return nil
277
+ }
278
+ }
279
+ if _, err := recordTreeBaseline(root, slug, func(p string) bool { return slices.Contains(paths, p) }); err != nil {
280
+ return err
281
+ }
282
+ recordMetricNote(root, slug, cursorPhase(root, slug), "unattributed-edit", "", "attributed="+strings.Join(paths, ",")+" reason="+reason)
283
+ for _, path := range paths {
284
+ fmt.Fprintf(stdout, "dispatch: attributed %s (%s)\n", path, reason)
285
+ }
286
+ return nil
287
+ })
288
+ if err != nil {
289
+ fmt.Fprintf(stderr, "dispatch: attribute: %v\n", err)
290
+ return 3
291
+ }
292
+ return code
293
+ }
294
+
295
+ func listOrNone(paths []string) string {
296
+ if len(paths) == 0 {
297
+ return "none"
298
+ }
299
+ return strings.Join(paths, ", ")
300
+ }
301
+
302
+ // openTripwire refuses a wave open while an unattributed edit remains that
303
+ // the new wave does not take on: only a wright wave (any phase) takes on
304
+ // paths, through its --claim paths and its slices' write sets.
305
+ func openTripwire(root, slug string, w *dispatchWave, claimPaths []string) error {
306
+ flagged, err := unattributedEdits(root, slug)
307
+ if err != nil {
308
+ return fmt.Errorf("tree baseline: %w", err)
309
+ }
310
+ if isWrightWave(w) {
311
+ own := append(sliceWriteSet(root, slug, w.Slices), claimPaths...)
312
+ flagged = slices.DeleteFunc(flagged, func(p string) bool { return covers(own, p) })
313
+ }
314
+ if len(flagged) == 0 {
315
+ return nil
316
+ }
317
+ recordUnattributed(root, slug, w.Phase, flagged)
318
+ return errors.New(unattributedMessage(slug, flagged))
319
+ }
320
+
321
+ // absorbWave takes a completed wright wave's write set into the
322
+ // baseline. A failure only warns: the return is already recorded.
323
+ func absorbWave(root, slug string, w *dispatchWave, stderr io.Writer) {
324
+ if !isWrightWave(w) {
325
+ return
326
+ }
327
+ own := waveWriteSet(root, slug, w)
328
+ if _, err := recordTreeBaseline(root, slug, func(p string) bool { return covers(own, p) }); err != nil {
329
+ fmt.Fprintf(stderr, "dispatch: WARNING: %s not updated: %v\n", treeBaselineFile, err)
330
+ }
331
+ }
@@ -24,6 +24,7 @@ type triggerFacts struct {
24
24
  afk bool
25
25
  afkParallel bool
26
26
  principles bool
27
+ aiSpec bool // featureDir/ai-spec.md exists: the spec process marked an AI feature
27
28
  corpus string // lowercased text of spec/plan/tasks/design brief
28
29
  }
29
30
 
@@ -38,8 +39,23 @@ var (
38
39
  tddSignalRe = regexp.MustCompile(`\b(tdd|test[- ]first|test driven)\b`)
39
40
  topoSignalRe = regexp.MustCompile(`(migrat|\bschema\b|\bsql\b|database|postgres|mysql|sqlite|mongo|\bqueue\b|kafka|rabbitmq|redis|\bcache\b|webhook|monorepo|multi[- ]root|multi[- ]service|microservice|\bgrpc\b|graphql|\brest\b|\bapi\b|message broker)`)
40
41
  wfaSignalRe = regexp.MustCompile(`workflow[- ]artifact`)
42
+ aiSignalRe = regexp.MustCompile(`\b(llms?|prompts?|rag|embeddings?|model output|agents?|agentic|tool[- ]use|skill packages?|mcp|chatbot)\b`)
43
+ // aiAnnexRe drops the spec template's always-present "AI-SPEC annex" section
44
+ // (its boilerplate names LLM/RAG/agent) up to the next heading, kept via $1.
45
+ aiAnnexRe = regexp.MustCompile(`(?ms)^#{1,6}[ \t]*ai-spec annex[^\n]*\n.*?(^#|\z)`)
41
46
  )
42
47
 
48
+ // keepModelSurface reports whether a --role bundle inlines <!-- model-surface -->
49
+ // sections. Unlike suggestions this is decided by the engine, and it fails
50
+ // safe: the security auditor always keeps them, and so does any role whose
51
+ // spec/plan/tasks corpus is absent, whose feature has an ai-spec.md, or whose
52
+ // corpus (minus the template's AI-SPEC annex) names a model, agent, RAG, or
53
+ // tool surface.
54
+ func keepModelSurface(role string, facts triggerFacts) bool {
55
+ return role == "security-auditor" || facts.aiSpec || strings.TrimSpace(facts.corpus) == "" ||
56
+ aiSignalRe.MatchString(aiAnnexRe.ReplaceAllString(facts.corpus, "$1"))
57
+ }
58
+
43
59
  // triggerSignals maps declared trigger-name shapes to facts. nameRe is matched
44
60
  // case-insensitively against each declared (unselected) trigger name.
45
61
  var triggerSignals = []struct {
@@ -100,6 +116,9 @@ func gatherTriggerFacts(root, featureDir, role string) triggerFacts {
100
116
  }
101
117
  }
102
118
  if featureDir != "" {
119
+ if info, err := os.Stat(filepath.Join(featureDir, "ai-spec.md")); err == nil && info.Mode().IsRegular() {
120
+ facts.aiSpec = true
121
+ }
103
122
  var corpus strings.Builder
104
123
  for _, name := range triggerEvidenceFiles {
105
124
  path := filepath.Join(featureDir, name)
@@ -1,16 +1,21 @@
1
1
  package lib
2
2
 
3
3
  import (
4
+ "bytes"
5
+ "context"
4
6
  "fmt"
5
7
  "io"
6
8
  "os"
9
+ "os/exec"
7
10
  "path"
8
11
  "path/filepath"
9
12
  "regexp"
10
13
  "strconv"
11
14
  "strings"
15
+ "time"
12
16
 
13
17
  "github.com/devrites/devrites/internal/devritespaths"
18
+ "github.com/devrites/devrites/internal/gitenv"
14
19
  )
15
20
 
16
21
  // windows.go — the broken-windows check. Review prose flags a new TODO, stub,
@@ -20,7 +25,7 @@ import (
20
25
  // recorded waiver row in the workspace's windows.md, or the check fails. A
21
26
  // silent deferral or lowered bar is the bug.
22
27
  //
23
- // devrites-engine check windows <slug> [--worktree|--staged|--base <ref>] [--cwd <dir>]
28
+ // devrites-engine check windows <slug> [--worktree|--staged|--base <ref>|--since-dispatch <wave>] [--cwd <dir>]
24
29
  //
25
30
  // 0 no unwaived markers 2 usage error 3 unwaived markers or blocked
26
31
  //
@@ -30,6 +35,10 @@ import (
30
35
  // that remains (`removed-assertion`). Each windows.md row waives exactly one hit —
31
36
  // one blanket row cannot cover a file's five new TODOs.
32
37
  //
38
+ // --since-dispatch <wave> reports only those removals, against the work-tree
39
+ // snapshot that wave's build wright open recorded: same-tree repair rounds stay
40
+ // uncommitted, so a test an earlier round added is plain additions against HEAD.
41
+ //
33
42
  // windows.md row grammar (one waiver per line):
34
43
  //
35
44
  // - <project-relative path> | <marker token> | <reason>
@@ -37,7 +46,7 @@ import (
37
46
  // A row waives one hit at that path carrying that marker; empty reasons do not
38
47
  // waive. Rows never suppress coverage — they explain it.
39
48
 
40
- const windowsUsage = `usage: devrites-engine check windows <slug> [--worktree|--staged|--base <ref>] [--cwd <dir>]
49
+ const windowsUsage = `usage: devrites-engine check windows <slug> [--worktree|--staged|--base <ref>|--since-dispatch <wave>] [--cwd <dir>]
41
50
 
42
51
  Reports deferral and bar-lowering markers introduced by the change (added lines:
43
52
  TODO/stub/skip/focus idioms, checker suppressions, empty-catch; removals:
@@ -45,6 +54,8 @@ deleted-test, removed-assertion) and requires each to be waived by a row in
45
54
  .devrites/work/<slug>/windows.md:
46
55
  - <path> | <marker> | <reason>
47
56
  Each row waives one hit at that path with that marker token.
57
+ --since-dispatch <wave> reports only removals since that build wright wave
58
+ opened (its recorded work-tree snapshot), untracked files included.
48
59
  Exit 0 clean or fully waived, 3 unwaived markers or blocked.`
49
60
 
50
61
  // deferralTokenRe catches uppercase comment markers: TODO, FIXME, XXX, HACK.
@@ -312,12 +323,22 @@ func windowsHits(opts diffScopeOpts) ([]windowHit, error) {
312
323
  diffArgs = append(diffArgs, "--cached", "-M", "-U0", "--")
313
324
  case "base":
314
325
  diffArgs = append(diffArgs, opts.base, "-M", "-U0", "--")
326
+ case "since":
327
+ after, err := worktreeTree(dir)
328
+ if err != nil {
329
+ return nil, err
330
+ }
331
+ diffArgs = append(diffArgs, opts.base, after, "-M", "-U0", "--")
315
332
  default:
316
333
  diffArgs = append(diffArgs, "HEAD", "-M", "-U0", "--")
317
334
  }
318
335
  diff, err := runGitCommand(dir, nil, diffArgs...)
319
336
  var diffPaths map[string]bool
320
337
  switch {
338
+ case err == nil && opts.mode == "since":
339
+ // Added markers are the HEAD-based run's job; round over round only
340
+ // removals are new.
341
+ hits = removedTestHits(string(diff))
321
342
  case err == nil:
322
343
  hits, diffPaths = addedLinesFromDiff(string(diff))
323
344
  hits = append(hits, removedTestHits(string(diff))...)
@@ -368,6 +389,55 @@ func windowsHits(opts diffScopeOpts) ([]windowHit, error) {
368
389
  return kept, nil
369
390
  }
370
391
 
392
+ // worktreeTree snapshots the work tree (tracked, staged, and untracked files
393
+ // git does not ignore) as a tree object and returns its id. It stages into a
394
+ // private copy of the index, so the real index, refs, and files stay untouched;
395
+ // the only trace is unreferenced objects git gc prunes.
396
+ func worktreeTree(dir string) (string, error) {
397
+ tmp, err := os.MkdirTemp("", "devrites-tree-")
398
+ if err != nil {
399
+ return "", err
400
+ }
401
+ defer func() { _ = os.RemoveAll(tmp) }()
402
+ index := filepath.Join(tmp, "index")
403
+ // Seeding from the real index reuses its stat cache: only changed files rehash.
404
+ if out, err := runGitCommand(dir, nil, "rev-parse", "--git-path", "index"); err == nil {
405
+ live := strings.TrimSpace(string(out))
406
+ if !filepath.IsAbs(live) {
407
+ live = filepath.Join(dir, live)
408
+ }
409
+ if raw, err := os.ReadFile(live); err == nil { // #nosec G304 -- git's own index path
410
+ if err := os.WriteFile(index, raw, 0o600); err != nil { // #nosec G703 -- index is a fixed name in our own MkdirTemp dir
411
+ return "", err
412
+ }
413
+ }
414
+ }
415
+ if _, err := gitWithIndex(dir, index, "add", "-A"); err != nil {
416
+ return "", err
417
+ }
418
+ tree, err := gitWithIndex(dir, index, "write-tree")
419
+ return strings.TrimSpace(tree), err
420
+ }
421
+
422
+ // gitWithIndex runs git on a private index. runGitCommand strips
423
+ // GIT_INDEX_FILE with the other repository-targeting variables, so it is set
424
+ // here after sanitizing.
425
+ func gitWithIndex(dir, index string, args ...string) (string, error) {
426
+ ctx, cancel := context.WithTimeout(context.Background(), gitCommandTimeout)
427
+ defer cancel()
428
+ // #nosec G204 -- git -C <project dir>; fixed binary, sanitized env plus a private index
429
+ cmd := exec.CommandContext(ctx, "git", append([]string{"-C", dir}, args...)...)
430
+ cmd.Env = append(gitenv.Sanitize(os.Environ()), "GIT_INDEX_FILE="+index, "GIT_TERMINAL_PROMPT=0", "LC_ALL=C")
431
+ cmd.WaitDelay = 2 * time.Second
432
+ var stderr bytes.Buffer
433
+ cmd.Stderr = &stderr
434
+ out, err := cmd.Output()
435
+ if err != nil {
436
+ return "", fmt.Errorf("git %s: %w: %s", strings.Join(args, " "), err, strings.TrimSpace(stderr.String()))
437
+ }
438
+ return string(out), nil
439
+ }
440
+
371
441
  func isUnbornHEAD(dir string) bool {
372
442
  _, err := runGitCommand(dir, nil, "rev-parse", "--verify", "HEAD")
373
443
  return err != nil
@@ -410,6 +480,7 @@ func parseWindowsWaivers(raw string) (map[windowWaiver]int, []string) {
410
480
  func parseWindowsArgs(root string, args []string, stderr io.Writer) (diffScopeOpts, int) {
411
481
  opts := diffScopeOpts{mode: "worktree", root: root}
412
482
  var positional []string
483
+ var wave string
413
484
  for i := 0; i < len(args); i++ {
414
485
  switch args[i] {
415
486
  case "--phase":
@@ -427,6 +498,14 @@ func parseWindowsArgs(root string, args []string, stderr io.Writer) (diffScopeOp
427
498
  return opts, 2
428
499
  }
429
500
  i++
501
+ case "--since-dispatch":
502
+ opts.mode = "since"
503
+ wave = argAt(args, i+1)
504
+ if wave == "" || strings.HasPrefix(wave, "-") {
505
+ fmt.Fprintln(stderr, "windows: --since-dispatch requires a wave name (not a flag)")
506
+ return opts, 2
507
+ }
508
+ i++
430
509
  case "--cwd":
431
510
  opts.cwd = argAt(args, i+1)
432
511
  i++
@@ -443,6 +522,28 @@ func parseWindowsArgs(root string, args []string, stderr io.Writer) (diffScopeOp
443
522
  return opts, 2
444
523
  }
445
524
  opts.slug = positional[0]
525
+ if opts.mode == "since" {
526
+ if opts.cwd != "" {
527
+ fmt.Fprintln(stderr, "windows: --since-dispatch compares the project checkout; it takes no --cwd")
528
+ return opts, 2
529
+ }
530
+ // opts.base carries the wave's recorded tree: the diff's old side.
531
+ if _, err := devritespaths.ExistingFeatureDirChecked(root, opts.slug); err != nil {
532
+ fmt.Fprintf(stderr, "windows: workspace unavailable: %v\n", err)
533
+ return opts, 2
534
+ }
535
+ f, _, err := loadDispatch(root, opts.slug)
536
+ if err != nil {
537
+ fmt.Fprintf(stderr, "windows: %v\n", err)
538
+ return opts, 2
539
+ }
540
+ w := f.Waves[wave]
541
+ if w == nil || w.Tree == "" {
542
+ fmt.Fprintf(stderr, "windows: wave %q has no recorded tree snapshot (only a build wright wave opened in a git project records one)\n", wave)
543
+ return opts, 2
544
+ }
545
+ opts.base = w.Tree
546
+ }
446
547
  if opts.phase == "" {
447
548
  opts.phase = cursorPhase(root, opts.slug)
448
549
  }
@@ -477,6 +578,10 @@ func RunCheckWindows(root string, args []string, stdout, stderr io.Writer) int {
477
578
  for _, w := range warnings {
478
579
  fmt.Fprintf(stdout, "windows: %s\n", w)
479
580
  }
581
+ event := "windows"
582
+ if opts.mode == "since" {
583
+ event = "windows-since" // per-round removals stay apart from HEAD-based runs
584
+ }
480
585
  var unwaived, waived int
481
586
  for _, h := range hits {
482
587
  w := windowWaiver{Path: h.Path, Marker: h.Marker}
@@ -492,15 +597,15 @@ func RunCheckWindows(root string, args []string, stdout, stderr io.Writer) int {
492
597
  switch {
493
598
  case len(hits) == 0:
494
599
  fmt.Fprintln(stdout, "windows: ok (no deferral markers introduced)")
495
- recordMetric(root, opts.slug, opts.phase, "windows", "", 0)
600
+ recordMetric(root, opts.slug, opts.phase, event, "", 0)
496
601
  return 0
497
602
  case unwaived == 0:
498
603
  fmt.Fprintf(stdout, "windows: ok (%d marker(s), all waived in windows.md)\n", len(hits))
499
- recordMetric(root, opts.slug, opts.phase, "windows", "", int64(len(hits)))
604
+ recordMetric(root, opts.slug, opts.phase, event, "", int64(len(hits)))
500
605
  return 0
501
606
  default:
502
607
  fmt.Fprintf(stdout, "windows: BLOCKED: %d unwaived deferral marker(s) introduced — remove them or record waivers in windows.md\n", unwaived)
503
- recordMetric(root, opts.slug, opts.phase, "windows", "", int64(unwaived))
608
+ recordMetric(root, opts.slug, opts.phase, event, "", int64(unwaived))
504
609
  return 3
505
610
  }
506
611
  }
@@ -22,8 +22,8 @@ import (
22
22
  "strconv"
23
23
  "strings"
24
24
  "unicode/utf16"
25
- "unicode/utf8"
26
25
 
26
+ "github.com/devrites/devrites/internal/anchor"
27
27
  "github.com/devrites/devrites/internal/overhaul/ovio"
28
28
  "github.com/devrites/devrites/internal/overhaul/packet"
29
29
  "github.com/devrites/devrites/internal/overhaul/records"
@@ -56,7 +56,7 @@ func Run(args []string, stdout, stderr io.Writer) int {
56
56
  case len(args) == 3 && args[0] == "packet":
57
57
  code, err = packetAdmit(args[1], args[2], stdout)
58
58
  case len(args) == 3 && args[0] == "anchor":
59
- code, err = anchor(args[1], args[2], stdout, stderr)
59
+ code, err = anchorFindings(args[1], args[2], stdout, stderr)
60
60
  default:
61
61
  fmt.Fprint(stderr, usage)
62
62
  return 2
@@ -332,28 +332,6 @@ func result(stdout io.Writer, why []string, ok string) int {
332
332
  return 0
333
333
  }
334
334
 
335
- // splitlines is Python's str.splitlines().
336
- func splitlines(s string) []string {
337
- var out []string
338
- start := 0
339
- for i := 0; i < len(s); {
340
- r, size := utf8.DecodeRuneInString(s[i:])
341
- i += size
342
- switch r {
343
- case '\n', '\r', '\v', '\f', 0x1c, 0x1d, 0x1e, 0x85, 0x2028, 0x2029:
344
- out = append(out, s[start:i-size])
345
- if r == '\r' && i < len(s) && s[i] == '\n' {
346
- i++
347
- }
348
- start = i
349
- }
350
- }
351
- if start < len(s) {
352
- out = append(out, s[start:])
353
- }
354
- return out
355
- }
356
-
357
335
  // pyInt is Python's int() on a decoded JSON value.
358
336
  func pyInt(v any) (int, error) {
359
337
  switch x := v.(type) {
@@ -381,7 +359,7 @@ func pyInt(v any) (int, error) {
381
359
  return 0, fmt.Errorf("int() argument must be a string or a number, not %s", records.Repr(v))
382
360
  }
383
361
 
384
- func anchor(root, path string, stdout, stderr io.Writer) (int, error) {
362
+ func anchorFindings(root, path string, stdout, stderr io.Writer) (int, error) {
385
363
  doc, err := ovio.LoadJSON(path)
386
364
  if err != nil {
387
365
  return 0, err
@@ -411,7 +389,7 @@ func anchor(root, path string, stdout, stderr io.Writer) (int, error) {
411
389
  if err != nil {
412
390
  return 0, err
413
391
  }
414
- lines := splitlines(strings.ToValidUTF8(string(b), "�"))
392
+ lines := anchor.Lines(b)
415
393
  start, ok := loc["start"]
416
394
  if !ok {
417
395
  start = json.Number("0")
@@ -432,11 +410,10 @@ func anchor(root, path string, stdout, stderr io.Writer) (int, error) {
432
410
  why = append(why, fmt.Sprintf("%s: %s lines %d-%d outside file (%d lines)", id, rel, s, e, len(lines)))
433
411
  continue
434
412
  }
435
- q := strings.Join(strings.Fields(quote), " ")
436
- w := strings.Join(strings.Fields(strings.Join(lines[s-1:e], " ")), " ")
437
- if q == "" || !strings.Contains(w, q) {
413
+ switch anchor.At(lines, s, e, quote) {
414
+ case anchor.NotFound:
438
415
  why = append(why, fmt.Sprintf("%s: quote not found at %s:%d-%d", id, rel, s, e))
439
- } else if utf8.RuneCountInString(strings.ReplaceAll(q, " ", "")) < 8 && q != w {
416
+ case anchor.TooShort:
440
417
  why = append(why, fmt.Sprintf("%s: quote at %s:%d is too short to anchor; quote the whole line", id, rel, s))
441
418
  }
442
419
  }