devrites 5.14.4 → 6.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 (637) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/NOTICE.md +6 -4
  3. package/README.md +77 -16
  4. package/SECURITY.md +25 -11
  5. package/bin/devrites.mjs +49 -15
  6. package/docs/adr/0001-go-engine-as-control-plane.md +6 -3
  7. package/docs/adr/0029-v5-workspace-schema-and-native-migration.md +9 -0
  8. package/docs/adr/README.md +3 -2
  9. package/docs/agents/issue-tracker.md +1 -1
  10. package/docs/architecture.md +6 -3
  11. package/docs/cli.md +32 -9
  12. package/docs/command-map.md +5 -3
  13. package/docs/engine/state-schema.md +1 -1
  14. package/docs/flow.md +1 -1
  15. package/docs/harness-compliance.md +2 -2
  16. package/docs/release.md +15 -11
  17. package/docs/usage.md +1 -1
  18. package/engine/commands.go +1 -1
  19. package/engine/go.mod +1 -1
  20. package/engine/help.go +41 -15
  21. package/engine/help_test.go +134 -0
  22. package/engine/internal/acceptance/acceptance_test.go +298 -7
  23. package/engine/internal/acceptance/approve.go +7 -2
  24. package/engine/internal/acceptance/cli.go +3 -0
  25. package/engine/internal/acceptance/evidence.go +69 -5
  26. package/engine/internal/acceptance/lint.go +1 -1
  27. package/engine/internal/acceptance/run.go +5 -3
  28. package/engine/internal/acceptance/scaffold.go +5 -16
  29. package/engine/internal/devritespaths/paths.go +7 -6
  30. package/engine/internal/devritespaths/paths_test.go +18 -0
  31. package/engine/internal/fsutil/copy.go +83 -49
  32. package/engine/internal/fsutil/copy_test.go +70 -109
  33. package/engine/internal/gate/gate.go +89 -16
  34. package/engine/internal/gate/gate_test.go +101 -0
  35. package/engine/internal/hostpack/hostpack.go +52 -2
  36. package/engine/internal/hostpack/hostpack_test.go +83 -2
  37. package/engine/internal/install/apply.go +59 -16
  38. package/engine/internal/install/binary.go +10 -1
  39. package/engine/internal/install/install_test.go +428 -0
  40. package/engine/internal/install/merge.go +69 -38
  41. package/engine/internal/install/preflight.go +7 -0
  42. package/engine/internal/install/uninstall.go +43 -4
  43. package/engine/internal/lib/claims.go +25 -4
  44. package/engine/internal/lib/claims_test.go +57 -0
  45. package/engine/internal/lib/closeout.go +41 -3
  46. package/engine/internal/lib/closeout_test.go +144 -0
  47. package/engine/internal/lib/context.go +8 -4
  48. package/engine/internal/lib/context_next_test.go +100 -0
  49. package/engine/internal/lib/detect.go +1 -1
  50. package/engine/internal/lib/detect_test.go +13 -0
  51. package/engine/internal/lib/diffscope.go +19 -9
  52. package/engine/internal/lib/dispatch.go +7 -0
  53. package/engine/internal/lib/dup.go +40 -37
  54. package/engine/internal/lib/dup_test.go +178 -0
  55. package/engine/internal/lib/manifest_union.go +4 -1
  56. package/engine/internal/lib/manifest_union_test.go +37 -0
  57. package/engine/internal/lib/metrics.go +4 -0
  58. package/engine/internal/lib/metrics_test.go +28 -0
  59. package/engine/internal/lib/migrate_test.go +59 -0
  60. package/engine/internal/lib/observe_budgets.go +25 -9
  61. package/engine/internal/lib/observe_budgets_test.go +254 -0
  62. package/engine/internal/lib/observe_summary.go +23 -2
  63. package/engine/internal/lib/open_visual.go +4 -2
  64. package/engine/internal/lib/open_visual_test.go +11 -0
  65. package/engine/internal/lib/regression.go +62 -23
  66. package/engine/internal/lib/regression_test.go +103 -0
  67. package/engine/internal/lib/resolve.go +36 -17
  68. package/engine/internal/lib/resolve_remediation_test.go +132 -0
  69. package/engine/internal/lib/skilltrust.go +0 -11
  70. package/engine/internal/lib/slicecheck.go +7 -5
  71. package/engine/internal/lib/slicecheck_test.go +18 -0
  72. package/engine/internal/lib/triggers.go +9 -3
  73. package/engine/internal/lib/triggers_test.go +23 -0
  74. package/engine/internal/lib/util.go +17 -3
  75. package/engine/internal/lib/util_test.go +104 -0
  76. package/engine/internal/lib/visual_outline.go +7 -3
  77. package/engine/internal/lib/visual_outline_test.go +28 -0
  78. package/engine/internal/lib/windows.go +13 -9
  79. package/engine/internal/lib/windows_test.go +98 -0
  80. package/engine/internal/lib/workspace_read.go +2 -11
  81. package/engine/internal/lib/workspace_read_test.go +102 -0
  82. package/engine/internal/markdowntext/markdowntext.go +194 -11
  83. package/engine/internal/markdowntext/testdata/structural.json +250 -0
  84. package/engine/internal/notes/cli.go +30 -12
  85. package/engine/internal/notes/notes.go +242 -39
  86. package/engine/internal/notes/notes_test.go +372 -0
  87. package/engine/internal/overhaul/admit/packet.go +89 -0
  88. package/engine/internal/overhaul/admit/packet_test.go +223 -0
  89. package/engine/internal/overhaul/admit/run.go +4 -0
  90. package/engine/internal/overhaul/bench/run.go +6 -0
  91. package/engine/internal/overhaul/bench/run_test.go +46 -0
  92. package/engine/internal/overhaul/overhaul.go +6 -1
  93. package/engine/internal/overhaul/ovio/ovio.go +10 -3
  94. package/engine/internal/overhaul/ovio/ovio_test.go +75 -0
  95. package/engine/internal/overhaul/packet/packet.go +208 -0
  96. package/engine/internal/overhaul/packet/packet_test.go +263 -0
  97. package/engine/internal/overhaul/records/check.go +6 -0
  98. package/engine/internal/overhaul/records/init.go +16 -5
  99. package/engine/internal/overhaul/records/records_test.go +4 -0
  100. package/engine/internal/overhaul/records/run.go +66 -0
  101. package/engine/internal/overhaul/records/run_test.go +77 -0
  102. package/engine/internal/overhaul/render/run.go +15 -11
  103. package/engine/internal/overhaul/render/run_test.go +463 -1
  104. package/engine/internal/overhaul/render/visual.go +95 -33
  105. package/engine/internal/overhaul/score/run.go +20 -0
  106. package/engine/internal/overhaul/score/run_test.go +156 -1
  107. package/engine/internal/overhaul/snapshot/run.go +78 -21
  108. package/engine/internal/overhaul/snapshot/run_test.go +344 -8
  109. package/engine/internal/parallel/cli.go +33 -20
  110. package/engine/internal/parallel/cli_test.go +59 -0
  111. package/engine/internal/parallel/git.go +39 -1
  112. package/engine/internal/parallel/ops.go +101 -11
  113. package/engine/internal/parallel/ops_test.go +552 -69
  114. package/engine/internal/parallel/parallel_test.go +31 -1
  115. package/engine/internal/parallel/pathdisjoint.go +19 -1
  116. package/engine/internal/parallel/pathdisjoint_test.go +72 -0
  117. package/engine/internal/parallel/select.go +6 -2
  118. package/engine/internal/release/release.go +13 -3
  119. package/engine/internal/release/release_test.go +208 -3
  120. package/engine/internal/rootfacts/facts.go +9 -0
  121. package/engine/internal/rootfacts/facts_test.go +38 -0
  122. package/engine/internal/state/acceptance.go +7 -1
  123. package/engine/internal/state/budgets.go +11 -10
  124. package/engine/internal/state/budgets_test.go +93 -0
  125. package/engine/internal/state/cursor.go +19 -8
  126. package/engine/internal/state/cursor_test.go +120 -0
  127. package/engine/internal/state/lock_unix.go +7 -1
  128. package/engine/internal/state/lock_windows.go +7 -1
  129. package/engine/internal/state/state_test.go +49 -18
  130. package/engine/internal/state/taskgraph.go +18 -4
  131. package/engine/internal/state/taskgraph_test.go +43 -0
  132. package/engine/internal/state/workspaceschema.go +16 -2
  133. package/engine/internal/state/workspaceschema_test.go +34 -0
  134. package/engine/internal/state/write.go +67 -6
  135. package/engine/internal/state/write_test.go +136 -0
  136. package/engine/internal/version/version_test.go +2 -0
  137. package/engine/main.go +8 -1
  138. package/engine/observation_contract_test.go +1 -1
  139. package/engine/root_routing_test.go +23 -1
  140. package/install.sh +132 -12
  141. package/pack/.claude/agents/devrites-spec-reviewer.md +2 -2
  142. package/pack/.claude/skills/devrites-browser-proof/SKILL.md +2 -2
  143. package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +18 -18
  144. package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +6 -4
  145. package/pack/.claude/skills/devrites-interview/SKILL.md +4 -4
  146. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +1 -1
  147. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +9 -1
  148. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +5 -2
  149. package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +6 -5
  150. package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +1 -1
  151. package/pack/.claude/skills/devrites-lib/reference/standards/verification-methods.md +3 -3
  152. package/pack/.claude/skills/devrites-lib/reference/standards/windows.md +3 -3
  153. package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -2
  154. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/outline-template.md +1 -1
  155. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +4 -4
  156. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +11 -12
  157. package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +3 -1
  158. package/pack/.claude/skills/overhaul/SKILL.md +1 -1
  159. package/pack/.claude/skills/overhaul/references/orchestration.md +5 -3
  160. package/pack/.claude/skills/overhaul/references/records.md +39 -0
  161. package/pack/.claude/skills/overhaul/references/scoring.md +14 -4
  162. package/pack/.claude/skills/rite/reference/menu.md +1 -1
  163. package/pack/.claude/skills/rite-adopt/SKILL.md +8 -2
  164. package/pack/.claude/skills/rite-autocomplete/SKILL.md +11 -6
  165. package/pack/.claude/skills/rite-autocomplete/reference/decision-policy.md +3 -2
  166. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +1 -1
  167. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -3
  168. package/pack/.claude/skills/rite-build/SKILL.md +2 -1
  169. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +1 -1
  170. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +1 -1
  171. package/pack/.claude/skills/rite-build/reference/checkpoint.md +5 -0
  172. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +2 -2
  173. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +6 -3
  174. package/pack/.claude/skills/rite-clarify/SKILL.md +5 -4
  175. package/pack/.claude/skills/rite-clarify/reference/anti-patterns.md +2 -2
  176. package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +3 -2
  177. package/pack/.claude/skills/rite-converge/SKILL.md +2 -0
  178. package/pack/.claude/skills/rite-customize/SKILL.md +6 -4
  179. package/pack/.claude/skills/rite-define/SKILL.md +2 -0
  180. package/pack/.claude/skills/rite-define/reference/gates.md +8 -7
  181. package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
  182. package/pack/.claude/skills/rite-explain/reference/intake.md +1 -1
  183. package/pack/.claude/skills/rite-fast/SKILL.md +1 -1
  184. package/pack/.claude/skills/rite-plan/SKILL.md +4 -3
  185. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +4 -4
  186. package/pack/.claude/skills/rite-polish/reference/anti-ai-slop.md +1 -1
  187. package/pack/.claude/skills/rite-prove/reference/browser-proof.md +5 -5
  188. package/pack/.claude/skills/rite-resolve/SKILL.md +3 -3
  189. package/pack/.claude/skills/rite-seal/SKILL.md +4 -3
  190. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +3 -2
  191. package/pack/.claude/skills/rite-seal/reference/seal-template.md +2 -0
  192. package/pack/.claude/skills/rite-ship/SKILL.md +4 -2
  193. package/pack/.claude/skills/rite-ship/reference/git-ship.md +8 -2
  194. package/pack/.claude/skills/rite-ship/reference/ship-template.md +2 -1
  195. package/pack/.claude/skills/rite-spec/SKILL.md +2 -2
  196. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +1 -1
  197. package/pack/.claude/skills/rite-spec/reference/spec-template.md +7 -3
  198. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +2 -0
  199. package/pack/.claude/skills/rite-temper/SKILL.md +12 -9
  200. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +1 -1
  201. package/pack/.claude/skills/rite-temper/reference/significance.md +10 -3
  202. package/pack/.claude/skills/rite-temper/reference/strategy-template.md +13 -2
  203. package/pack/.claude/skills/rite-vet/SKILL.md +4 -3
  204. package/pack/.claude/skills/rite-vet/reference/artifacts.md +1 -1
  205. package/pack/.claude/workflows/devrites-readonly-review.js +5 -4
  206. package/pack/generated/claude/agents/devrites-spec-reviewer.md +2 -2
  207. package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +2 -2
  208. package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +18 -18
  209. package/pack/generated/claude/skills/devrites-frontend-craft/reference/quality-standards.md +6 -4
  210. package/pack/generated/claude/skills/devrites-interview/SKILL.md +4 -4
  211. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +1 -1
  212. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +9 -1
  213. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +5 -2
  214. package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +6 -5
  215. package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +1 -1
  216. package/pack/generated/claude/skills/devrites-lib/reference/standards/verification-methods.md +3 -3
  217. package/pack/generated/claude/skills/devrites-lib/reference/standards/windows.md +3 -3
  218. package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -2
  219. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/outline-template.md +1 -1
  220. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +4 -4
  221. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +11 -12
  222. package/pack/generated/claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +3 -1
  223. package/pack/generated/claude/skills/overhaul/SKILL.md +1 -1
  224. package/pack/generated/claude/skills/overhaul/references/orchestration.md +5 -3
  225. package/pack/generated/claude/skills/overhaul/references/records.md +39 -0
  226. package/pack/generated/claude/skills/overhaul/references/scoring.md +14 -4
  227. package/pack/generated/claude/skills/rite/reference/menu.md +1 -1
  228. package/pack/generated/claude/skills/rite-adopt/SKILL.md +8 -2
  229. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +11 -6
  230. package/pack/generated/claude/skills/rite-autocomplete/reference/decision-policy.md +3 -2
  231. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +1 -1
  232. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -3
  233. package/pack/generated/claude/skills/rite-build/SKILL.md +2 -1
  234. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +1 -1
  235. package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +1 -1
  236. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +5 -0
  237. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +2 -2
  238. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +6 -3
  239. package/pack/generated/claude/skills/rite-clarify/SKILL.md +5 -4
  240. package/pack/generated/claude/skills/rite-clarify/reference/anti-patterns.md +2 -2
  241. package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +3 -2
  242. package/pack/generated/claude/skills/rite-converge/SKILL.md +2 -0
  243. package/pack/generated/claude/skills/rite-customize/SKILL.md +6 -4
  244. package/pack/generated/claude/skills/rite-define/SKILL.md +2 -0
  245. package/pack/generated/claude/skills/rite-define/reference/gates.md +8 -7
  246. package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
  247. package/pack/generated/claude/skills/rite-explain/reference/intake.md +1 -1
  248. package/pack/generated/claude/skills/rite-fast/SKILL.md +1 -1
  249. package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -3
  250. package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +4 -4
  251. package/pack/generated/claude/skills/rite-polish/reference/anti-ai-slop.md +1 -1
  252. package/pack/generated/claude/skills/rite-prove/reference/browser-proof.md +5 -5
  253. package/pack/generated/claude/skills/rite-resolve/SKILL.md +3 -3
  254. package/pack/generated/claude/skills/rite-seal/SKILL.md +4 -3
  255. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +3 -2
  256. package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +2 -0
  257. package/pack/generated/claude/skills/rite-ship/SKILL.md +4 -2
  258. package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +8 -2
  259. package/pack/generated/claude/skills/rite-ship/reference/ship-template.md +2 -1
  260. package/pack/generated/claude/skills/rite-spec/SKILL.md +2 -2
  261. package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +1 -1
  262. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +7 -3
  263. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +2 -0
  264. package/pack/generated/claude/skills/rite-temper/SKILL.md +12 -9
  265. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +1 -1
  266. package/pack/generated/claude/skills/rite-temper/reference/significance.md +10 -3
  267. package/pack/generated/claude/skills/rite-temper/reference/strategy-template.md +13 -2
  268. package/pack/generated/claude/skills/rite-vet/SKILL.md +4 -3
  269. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +1 -1
  270. package/pack/generated/claude/workflows/devrites-readonly-review.js +5 -4
  271. package/pack/generated/codex/AGENTS.md +1 -1
  272. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +2 -2
  273. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +2 -2
  274. package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +18 -18
  275. package/pack/generated/codex/skills/devrites-frontend-craft/reference/quality-standards.md +6 -4
  276. package/pack/generated/codex/skills/devrites-interview/SKILL.md +4 -4
  277. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +1 -1
  278. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +9 -1
  279. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +5 -2
  280. package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +6 -5
  281. package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +1 -1
  282. package/pack/generated/codex/skills/devrites-lib/reference/standards/verification-methods.md +3 -3
  283. package/pack/generated/codex/skills/devrites-lib/reference/standards/windows.md +3 -3
  284. package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -2
  285. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/outline-template.md +1 -1
  286. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +4 -4
  287. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +11 -12
  288. package/pack/generated/codex/skills/devrites-ux-shape/reference/visual-direction-probe.md +3 -1
  289. package/pack/generated/codex/skills/overhaul/SKILL.md +1 -1
  290. package/pack/generated/codex/skills/overhaul/references/orchestration.md +5 -3
  291. package/pack/generated/codex/skills/overhaul/references/records.md +39 -0
  292. package/pack/generated/codex/skills/overhaul/references/scoring.md +14 -4
  293. package/pack/generated/codex/skills/rite/reference/menu.md +1 -1
  294. package/pack/generated/codex/skills/rite-adopt/SKILL.md +8 -2
  295. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +11 -6
  296. package/pack/generated/codex/skills/rite-autocomplete/reference/decision-policy.md +3 -2
  297. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +1 -1
  298. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +6 -3
  299. package/pack/generated/codex/skills/rite-build/SKILL.md +2 -1
  300. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +1 -1
  301. package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +1 -1
  302. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +5 -0
  303. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +2 -2
  304. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +6 -3
  305. package/pack/generated/codex/skills/rite-clarify/SKILL.md +5 -4
  306. package/pack/generated/codex/skills/rite-clarify/reference/anti-patterns.md +2 -2
  307. package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +3 -2
  308. package/pack/generated/codex/skills/rite-converge/SKILL.md +2 -0
  309. package/pack/generated/codex/skills/rite-customize/SKILL.md +6 -4
  310. package/pack/generated/codex/skills/rite-define/SKILL.md +2 -0
  311. package/pack/generated/codex/skills/rite-define/reference/gates.md +8 -7
  312. package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
  313. package/pack/generated/codex/skills/rite-explain/reference/intake.md +1 -1
  314. package/pack/generated/codex/skills/rite-fast/SKILL.md +1 -1
  315. package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -3
  316. package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +4 -4
  317. package/pack/generated/codex/skills/rite-polish/reference/anti-ai-slop.md +1 -1
  318. package/pack/generated/codex/skills/rite-prove/reference/browser-proof.md +5 -5
  319. package/pack/generated/codex/skills/rite-resolve/SKILL.md +3 -3
  320. package/pack/generated/codex/skills/rite-seal/SKILL.md +4 -3
  321. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +3 -2
  322. package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +2 -0
  323. package/pack/generated/codex/skills/rite-ship/SKILL.md +4 -2
  324. package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +8 -2
  325. package/pack/generated/codex/skills/rite-ship/reference/ship-template.md +2 -1
  326. package/pack/generated/codex/skills/rite-spec/SKILL.md +2 -2
  327. package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +1 -1
  328. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +7 -3
  329. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +2 -0
  330. package/pack/generated/codex/skills/rite-temper/SKILL.md +12 -9
  331. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +1 -1
  332. package/pack/generated/codex/skills/rite-temper/reference/significance.md +10 -3
  333. package/pack/generated/codex/skills/rite-temper/reference/strategy-template.md +13 -2
  334. package/pack/generated/codex/skills/rite-vet/SKILL.md +4 -3
  335. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +1 -1
  336. package/pack/generated/devin/AGENTS.md +1 -1
  337. package/pack/generated/devin/agents/devrites-spec-reviewer.md +2 -2
  338. package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +2 -2
  339. package/pack/generated/devin/skills/devrites-frontend-craft/reference/design-references.md +18 -18
  340. package/pack/generated/devin/skills/devrites-frontend-craft/reference/quality-standards.md +6 -4
  341. package/pack/generated/devin/skills/devrites-interview/SKILL.md +4 -4
  342. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +1 -1
  343. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +9 -1
  344. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +5 -2
  345. package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +6 -5
  346. package/pack/generated/devin/skills/devrites-lib/reference/standards/spec-grammar.md +1 -1
  347. package/pack/generated/devin/skills/devrites-lib/reference/standards/verification-methods.md +3 -3
  348. package/pack/generated/devin/skills/devrites-lib/reference/standards/windows.md +3 -3
  349. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -2
  350. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/outline-template.md +1 -1
  351. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +4 -4
  352. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +11 -12
  353. package/pack/generated/devin/skills/devrites-ux-shape/reference/visual-direction-probe.md +3 -1
  354. package/pack/generated/devin/skills/overhaul/SKILL.md +1 -1
  355. package/pack/generated/devin/skills/overhaul/references/orchestration.md +5 -3
  356. package/pack/generated/devin/skills/overhaul/references/records.md +39 -0
  357. package/pack/generated/devin/skills/overhaul/references/scoring.md +14 -4
  358. package/pack/generated/devin/skills/rite/reference/menu.md +1 -1
  359. package/pack/generated/devin/skills/rite-adopt/SKILL.md +8 -2
  360. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +11 -6
  361. package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +3 -2
  362. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +1 -1
  363. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +6 -3
  364. package/pack/generated/devin/skills/rite-build/SKILL.md +2 -1
  365. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +1 -1
  366. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +1 -1
  367. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +5 -0
  368. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +2 -2
  369. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +6 -3
  370. package/pack/generated/devin/skills/rite-clarify/SKILL.md +5 -4
  371. package/pack/generated/devin/skills/rite-clarify/reference/anti-patterns.md +2 -2
  372. package/pack/generated/devin/skills/rite-clarify/reference/decision-coverage.md +3 -2
  373. package/pack/generated/devin/skills/rite-converge/SKILL.md +2 -0
  374. package/pack/generated/devin/skills/rite-customize/SKILL.md +6 -4
  375. package/pack/generated/devin/skills/rite-define/SKILL.md +2 -0
  376. package/pack/generated/devin/skills/rite-define/reference/gates.md +8 -7
  377. package/pack/generated/devin/skills/rite-explain/SKILL.md +1 -1
  378. package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
  379. package/pack/generated/devin/skills/rite-fast/SKILL.md +1 -1
  380. package/pack/generated/devin/skills/rite-plan/SKILL.md +4 -3
  381. package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +4 -4
  382. package/pack/generated/devin/skills/rite-polish/reference/anti-ai-slop.md +1 -1
  383. package/pack/generated/devin/skills/rite-prove/reference/browser-proof.md +5 -5
  384. package/pack/generated/devin/skills/rite-resolve/SKILL.md +3 -3
  385. package/pack/generated/devin/skills/rite-seal/SKILL.md +4 -3
  386. package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +3 -2
  387. package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +2 -0
  388. package/pack/generated/devin/skills/rite-ship/SKILL.md +4 -2
  389. package/pack/generated/devin/skills/rite-ship/reference/git-ship.md +8 -2
  390. package/pack/generated/devin/skills/rite-ship/reference/ship-template.md +2 -1
  391. package/pack/generated/devin/skills/rite-spec/SKILL.md +2 -2
  392. package/pack/generated/devin/skills/rite-spec/reference/spec-checklists.md +1 -1
  393. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +7 -3
  394. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +2 -0
  395. package/pack/generated/devin/skills/rite-temper/SKILL.md +12 -9
  396. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +1 -1
  397. package/pack/generated/devin/skills/rite-temper/reference/significance.md +10 -3
  398. package/pack/generated/devin/skills/rite-temper/reference/strategy-template.md +13 -2
  399. package/pack/generated/devin/skills/rite-vet/SKILL.md +4 -3
  400. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +1 -1
  401. package/pack/generated/omp/agents/devrites-spec-reviewer.md +2 -2
  402. package/pack/generated/omp/commands/rite-define.md +1 -1
  403. package/pack/generated/omp/commands/rite-handoff.md +1 -1
  404. package/pack/generated/omp/commands/rite-plan.md +1 -1
  405. package/pack/generated/omp/commands/rite-pressure-test.md +1 -1
  406. package/pack/generated/omp/commands/rite-quick.md +1 -1
  407. package/pack/generated/omp/commands/rite-status.md +1 -1
  408. package/pack/generated/omp/commands/rite-temper.md +1 -1
  409. package/pack/generated/omp/commands/rite-zoom-out.md +1 -1
  410. package/pack/generated/omp/skills/devrites-browser-proof/SKILL.md +2 -2
  411. package/pack/generated/omp/skills/devrites-frontend-craft/reference/design-references.md +18 -18
  412. package/pack/generated/omp/skills/devrites-frontend-craft/reference/quality-standards.md +6 -4
  413. package/pack/generated/omp/skills/devrites-interview/SKILL.md +4 -4
  414. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +1 -1
  415. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +9 -1
  416. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +5 -2
  417. package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +6 -5
  418. package/pack/generated/omp/skills/devrites-lib/reference/standards/spec-grammar.md +1 -1
  419. package/pack/generated/omp/skills/devrites-lib/reference/standards/verification-methods.md +3 -3
  420. package/pack/generated/omp/skills/devrites-lib/reference/standards/windows.md +3 -3
  421. package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -2
  422. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/outline-template.md +1 -1
  423. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +4 -4
  424. package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +11 -12
  425. package/pack/generated/omp/skills/devrites-ux-shape/reference/visual-direction-probe.md +3 -1
  426. package/pack/generated/omp/skills/overhaul/SKILL.md +1 -1
  427. package/pack/generated/omp/skills/overhaul/references/orchestration.md +5 -3
  428. package/pack/generated/omp/skills/overhaul/references/records.md +39 -0
  429. package/pack/generated/omp/skills/overhaul/references/scoring.md +14 -4
  430. package/pack/generated/omp/skills/rite/reference/menu.md +1 -1
  431. package/pack/generated/omp/skills/rite-adopt/SKILL.md +8 -2
  432. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +11 -6
  433. package/pack/generated/omp/skills/rite-autocomplete/reference/decision-policy.md +3 -2
  434. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +1 -1
  435. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +6 -3
  436. package/pack/generated/omp/skills/rite-build/SKILL.md +2 -1
  437. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +1 -1
  438. package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +1 -1
  439. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +5 -0
  440. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +2 -2
  441. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +6 -3
  442. package/pack/generated/omp/skills/rite-clarify/SKILL.md +5 -4
  443. package/pack/generated/omp/skills/rite-clarify/reference/anti-patterns.md +2 -2
  444. package/pack/generated/omp/skills/rite-clarify/reference/decision-coverage.md +3 -2
  445. package/pack/generated/omp/skills/rite-converge/SKILL.md +2 -0
  446. package/pack/generated/omp/skills/rite-customize/SKILL.md +6 -4
  447. package/pack/generated/omp/skills/rite-define/SKILL.md +2 -0
  448. package/pack/generated/omp/skills/rite-define/reference/gates.md +8 -7
  449. package/pack/generated/omp/skills/rite-explain/SKILL.md +1 -1
  450. package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
  451. package/pack/generated/omp/skills/rite-fast/SKILL.md +1 -1
  452. package/pack/generated/omp/skills/rite-plan/SKILL.md +4 -3
  453. package/pack/generated/omp/skills/rite-plan/reference/replan-and-repair.md +4 -4
  454. package/pack/generated/omp/skills/rite-polish/reference/anti-ai-slop.md +1 -1
  455. package/pack/generated/omp/skills/rite-prove/reference/browser-proof.md +5 -5
  456. package/pack/generated/omp/skills/rite-resolve/SKILL.md +3 -3
  457. package/pack/generated/omp/skills/rite-seal/SKILL.md +4 -3
  458. package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +3 -2
  459. package/pack/generated/omp/skills/rite-seal/reference/seal-template.md +2 -0
  460. package/pack/generated/omp/skills/rite-ship/SKILL.md +4 -2
  461. package/pack/generated/omp/skills/rite-ship/reference/git-ship.md +8 -2
  462. package/pack/generated/omp/skills/rite-ship/reference/ship-template.md +2 -1
  463. package/pack/generated/omp/skills/rite-spec/SKILL.md +2 -2
  464. package/pack/generated/omp/skills/rite-spec/reference/spec-checklists.md +1 -1
  465. package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +7 -3
  466. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +2 -0
  467. package/pack/generated/omp/skills/rite-temper/SKILL.md +12 -9
  468. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +1 -1
  469. package/pack/generated/omp/skills/rite-temper/reference/significance.md +10 -3
  470. package/pack/generated/omp/skills/rite-temper/reference/strategy-template.md +13 -2
  471. package/pack/generated/omp/skills/rite-vet/SKILL.md +4 -3
  472. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +1 -1
  473. package/pack/generated/pi/AGENTS.md +1 -1
  474. package/pack/generated/pi/agents/devrites-spec-reviewer.md +2 -2
  475. package/pack/generated/pi/prompts/rite-define.md +1 -1
  476. package/pack/generated/pi/prompts/rite-handoff.md +1 -1
  477. package/pack/generated/pi/prompts/rite-plan.md +1 -1
  478. package/pack/generated/pi/prompts/rite-pressure-test.md +1 -1
  479. package/pack/generated/pi/prompts/rite-quick.md +1 -1
  480. package/pack/generated/pi/prompts/rite-status.md +1 -1
  481. package/pack/generated/pi/prompts/rite-temper.md +1 -1
  482. package/pack/generated/pi/prompts/rite-zoom-out.md +1 -1
  483. package/pack/generated/pi/skills/devrites-browser-proof/SKILL.md +2 -2
  484. package/pack/generated/pi/skills/devrites-frontend-craft/reference/design-references.md +18 -18
  485. package/pack/generated/pi/skills/devrites-frontend-craft/reference/quality-standards.md +6 -4
  486. package/pack/generated/pi/skills/devrites-interview/SKILL.md +4 -4
  487. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +1 -1
  488. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +9 -1
  489. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +5 -2
  490. package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +6 -5
  491. package/pack/generated/pi/skills/devrites-lib/reference/standards/spec-grammar.md +1 -1
  492. package/pack/generated/pi/skills/devrites-lib/reference/standards/verification-methods.md +3 -3
  493. package/pack/generated/pi/skills/devrites-lib/reference/standards/windows.md +3 -3
  494. package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -2
  495. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/outline-template.md +1 -1
  496. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +4 -4
  497. package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +11 -12
  498. package/pack/generated/pi/skills/devrites-ux-shape/reference/visual-direction-probe.md +3 -1
  499. package/pack/generated/pi/skills/overhaul/SKILL.md +1 -1
  500. package/pack/generated/pi/skills/overhaul/references/orchestration.md +5 -3
  501. package/pack/generated/pi/skills/overhaul/references/records.md +39 -0
  502. package/pack/generated/pi/skills/overhaul/references/scoring.md +14 -4
  503. package/pack/generated/pi/skills/rite/reference/menu.md +1 -1
  504. package/pack/generated/pi/skills/rite-adopt/SKILL.md +8 -2
  505. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +11 -6
  506. package/pack/generated/pi/skills/rite-autocomplete/reference/decision-policy.md +3 -2
  507. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +1 -1
  508. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +6 -3
  509. package/pack/generated/pi/skills/rite-build/SKILL.md +2 -1
  510. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +1 -1
  511. package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +1 -1
  512. package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +5 -0
  513. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +2 -2
  514. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +6 -3
  515. package/pack/generated/pi/skills/rite-clarify/SKILL.md +5 -4
  516. package/pack/generated/pi/skills/rite-clarify/reference/anti-patterns.md +2 -2
  517. package/pack/generated/pi/skills/rite-clarify/reference/decision-coverage.md +3 -2
  518. package/pack/generated/pi/skills/rite-converge/SKILL.md +2 -0
  519. package/pack/generated/pi/skills/rite-customize/SKILL.md +6 -4
  520. package/pack/generated/pi/skills/rite-define/SKILL.md +2 -0
  521. package/pack/generated/pi/skills/rite-define/reference/gates.md +8 -7
  522. package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
  523. package/pack/generated/pi/skills/rite-explain/reference/intake.md +1 -1
  524. package/pack/generated/pi/skills/rite-fast/SKILL.md +1 -1
  525. package/pack/generated/pi/skills/rite-plan/SKILL.md +4 -3
  526. package/pack/generated/pi/skills/rite-plan/reference/replan-and-repair.md +4 -4
  527. package/pack/generated/pi/skills/rite-polish/reference/anti-ai-slop.md +1 -1
  528. package/pack/generated/pi/skills/rite-prove/reference/browser-proof.md +5 -5
  529. package/pack/generated/pi/skills/rite-resolve/SKILL.md +3 -3
  530. package/pack/generated/pi/skills/rite-seal/SKILL.md +4 -3
  531. package/pack/generated/pi/skills/rite-seal/reference/phase-contract.md +3 -2
  532. package/pack/generated/pi/skills/rite-seal/reference/seal-template.md +2 -0
  533. package/pack/generated/pi/skills/rite-ship/SKILL.md +4 -2
  534. package/pack/generated/pi/skills/rite-ship/reference/git-ship.md +8 -2
  535. package/pack/generated/pi/skills/rite-ship/reference/ship-template.md +2 -1
  536. package/pack/generated/pi/skills/rite-spec/SKILL.md +2 -2
  537. package/pack/generated/pi/skills/rite-spec/reference/spec-checklists.md +1 -1
  538. package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +7 -3
  539. package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +2 -0
  540. package/pack/generated/pi/skills/rite-temper/SKILL.md +12 -9
  541. package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +1 -1
  542. package/pack/generated/pi/skills/rite-temper/reference/significance.md +10 -3
  543. package/pack/generated/pi/skills/rite-temper/reference/strategy-template.md +13 -2
  544. package/pack/generated/pi/skills/rite-vet/SKILL.md +4 -3
  545. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +1 -1
  546. package/package.json +5 -4
  547. package/scripts/build-host-artifacts.sh +15 -0
  548. package/scripts/codex-generate.sh +1 -1
  549. package/scripts/devin-generate.sh +1 -1
  550. package/scripts/expand-includes.py +46 -0
  551. package/scripts/install-lib.sh +42 -7
  552. package/scripts/omp-generate.sh +11 -0
  553. package/scripts/pi-generate.sh +12 -1
  554. package/update.sh +1 -2
  555. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/README.md +0 -7
  556. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/architecture.md +0 -3
  557. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/assumptions.md +0 -3
  558. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/brief.md +0 -3
  559. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/decision-coverage.md +0 -3
  560. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/decisions.md +0 -4
  561. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/eng-review.md +0 -3
  562. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/gates.md +0 -4
  563. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/plan.md +0 -5
  564. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/questions.md +0 -3
  565. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/spec.md +0 -6
  566. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/state.md +0 -8
  567. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/tasks.md +0 -1
  568. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/test-plan.md +0 -3
  569. package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/traceability.md +0 -3
  570. package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/README.md +0 -7
  571. package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/assumptions.md +0 -3
  572. package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/brief.md +0 -3
  573. package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/decisions.md +0 -3
  574. package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/questions.md +0 -3
  575. package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/spec.md +0 -6
  576. package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/state.md +0 -3
  577. package/engine/testdata/golden/TestParityCloseOut/active_pointed_elsewhere.golden +0 -2
  578. package/engine/testdata/golden/TestParityCloseOut/active_slug_cleared.golden +0 -2
  579. package/engine/testdata/golden/TestParityCloseOut/archive_clobber.golden +0 -1
  580. package/engine/testdata/golden/TestParityCloseOut/missing_slug.golden +0 -1
  581. package/engine/testdata/golden/TestParityCloseOut/missing_workspace.golden +0 -1
  582. package/engine/testdata/golden/TestParityLearnings/add.golden +0 -2
  583. package/engine/testdata/golden/TestParityLearnings/list.golden +0 -5
  584. package/engine/testdata/golden/TestParityLearnings/mine-no-archive.golden +0 -2
  585. package/engine/testdata/golden/TestParityLearnings/mine.golden +0 -5
  586. package/engine/testdata/golden/TestParityLearnings/nudge.golden +0 -2
  587. package/engine/testdata/golden/TestParityLearnings/unknown.golden +0 -1
  588. package/engine/testdata/golden/TestParityPackageExistence/ghost-workspace.golden +0 -1
  589. package/engine/testdata/golden/TestParityPackageExistence/no-manifest.golden +0 -1
  590. package/engine/testdata/golden/TestParityPackageExistence/not-git.golden +0 -1
  591. package/engine/testdata/golden/TestParityPackageExistence/undeclared.golden +0 -1
  592. package/engine/testdata/golden/TestParityPreamble/afk/a.golden +0 -14
  593. package/engine/testdata/golden/TestParityPreamble/hitl/active.golden +0 -18
  594. package/engine/testdata/golden/TestParityPreamble/hitl/bare.golden +0 -10
  595. package/engine/testdata/golden/TestParityPreamble/hitl/full.golden +0 -18
  596. package/engine/testdata/golden/TestParityPreamble/hitl/ghost.golden +0 -2
  597. package/engine/testdata/golden/TestParityPreamble/hitl/nonl.golden +0 -11
  598. package/engine/testdata/golden/TestParityPreamble/hitl/openend.golden +0 -13
  599. package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +0 -4
  600. package/engine/testdata/golden/TestParityProgress/arg=done.golden +0 -3
  601. package/engine/testdata/golden/TestParityProgress/arg=ghost.golden +0 -1
  602. package/engine/testdata/golden/TestParityProgress/arg=mid.golden +0 -4
  603. package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +0 -3
  604. package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +0 -3
  605. package/engine/testdata/golden/TestParityProgress/arg=plan.golden +0 -4
  606. package/engine/testdata/golden/TestParityProgress/arg=seal.golden +0 -3
  607. package/engine/testdata/golden/TestParityResolve/answer/questions.md.golden +0 -9
  608. package/engine/testdata/golden/TestParityResolve/answer/state.md.golden +0 -7
  609. package/engine/testdata/golden/TestParityResolve/answer.golden +0 -4
  610. package/engine/testdata/golden/TestParityResolve/batch/questions.md.golden +0 -9
  611. package/engine/testdata/golden/TestParityResolve/batch-unterminated/questions.md.golden +0 -9
  612. package/engine/testdata/golden/TestParityResolve/batch-unterminated.golden +0 -2
  613. package/engine/testdata/golden/TestParityResolve/batch.golden +0 -3
  614. package/engine/testdata/golden/TestParityResolve/drop/questions.md.golden +0 -9
  615. package/engine/testdata/golden/TestParityResolve/drop/state.md.golden +0 -9
  616. package/engine/testdata/golden/TestParityResolve/drop.golden +0 -4
  617. package/engine/testdata/golden/TestParityResolve/missing-answer.golden +0 -1
  618. package/engine/testdata/golden/TestParityResolve/no-workspace.golden +0 -1
  619. package/engine/testdata/golden/TestParityResolve/not-found.golden +0 -1
  620. package/engine/testdata/golden/TestParityResolve/not-open.golden +0 -1
  621. package/engine/testdata/golden/TestStatusLiveWorkspace.golden +0 -10
  622. package/engine/testdata/golden/status/auth-tokens.txt +0 -9
  623. package/engine/testdata/golden/status/search-ranking.txt +0 -9
  624. package/engine/testdata/visual/open-visual-smoke.html +0 -675
  625. package/engine/testdata/visual/open-visual-smoke.outline.md +0 -54
  626. package/engine/tests/adr_0003_gate_exit_code_test.go +0 -32
  627. package/engine/tests/adr_0004_required_by_phase_test.go +0 -54
  628. package/engine/tests/adr_0011_define_plan_test.go +0 -32
  629. package/engine/tests/adr_0027_readiness_binding_test.go +0 -107
  630. package/engine/tests/cli_test.go +0 -126
  631. package/engine/tests/gate_test.go +0 -669
  632. package/engine/tests/meta_test.go +0 -37
  633. package/engine/tests/parity_closeout_test.go +0 -105
  634. package/engine/tests/parity_githelpers_test.go +0 -41
  635. package/engine/tests/parity_resolve_test.go +0 -136
  636. package/engine/tests/parity_test.go +0 -86
  637. package/engine/tests/workspace_observation_migration_test.go +0 -1069
@@ -10,7 +10,7 @@ source for classification; the SKILL improvises none of it.
10
10
  | --- | --- | --- | --- | --- |
11
11
  | **concept** | a named idea / pattern / technology ("explain optimistic locking", "how does our gate engine work") | this repo's footprint of the concept (codegraph first) + external sources only if they sharpen it | build the mental model from a known part of *this* codebase outward | **checked exercise** |
12
12
  | **diff** | a specific change: a ref, a slice, a PR, "this diff" | `git diff` / the hunks + `decisions.md` + `seal.md` for the *why* + `touched-files.md` `Review trail` when present | explainer, or **walkthrough** when the user asks to review/approve/checkpoint the change | **predict-then-reveal** |
13
- | **idea** | a hypothesis or "what if" with no code yet | the user's framing + prior art (external, date-weighted; year is 2026) | steelman the idea, name its hinge and its failure mode | **checked exercise** |
13
+ | **idea** | a hypothesis or "what if" with no code yet | the user's framing + prior art (external, date-weighted) | steelman the idea, name its hinge and its failure mode | **checked exercise** |
14
14
  | **recap** | a time window of the user's own work ("what did I ship this week") | the shipped archive + `git log`/`git diff` over the window + `evidence.md` | narrate what changed and what was learned, ranked by leverage | **predict-then-reveal** |
15
15
 
16
16
  ## Token overrides: explicit beats inferred
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: rite-fast
3
- description: Fast lane for mid-size work: one spec-and-plan step with clarifying questions, up to ten slices built without per-slice gates, one completeness check with gap fixes, review, polish, proof.
3
+ description: "Fast lane for mid-size work: one spec-and-plan step with clarifying questions, up to ten slices built without per-slice gates, one completeness check with gap fixes, review, polish, proof."
4
4
  argument-hint: "<task | slug>"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
@@ -73,8 +73,9 @@ Before classifying any Reslice, read `.pi/skills/devrites-lib/reference/standard
73
73
  - **course-correct:** mid-build user pivot; apply the marked action, choose
74
74
  rollback/forward-fix, and update permitted artifacts atomically (`MVP cut` is the named retreat).
75
75
  - **revise:** reconcile a requested artifact revision; propose/confirm its file set and
76
- **never edit source**. Only explicit `/rite-upgrade` with a `repairable` assessment naming
77
- rule, evidence, gate, paths, and delta can authorize its neutral workspace edit—not source/history.
76
+ **never edit source**. A neutral workspace edit is authorized by explicit `/rite-upgrade` with a
77
+ `repairable` assessment naming rule, evidence, gate, paths, and delta, or, for budget relocation
78
+ only, by the phase owner when `orient` reports `over: true`—never source or history rewording.
78
79
  **Revise or new?** Same intent? >50% scope survives? Original not completable without it?
79
80
  Two “no” answers mean new work: seal/ship current scope (`MVP cut` if named), then
80
81
  `/rite-spec`, and stop.
@@ -160,7 +161,7 @@ Before classifying any Reslice, read `.pi/skills/devrites-lib/reference/standard
160
161
  mark the `drift.md` entry resolved. Never remove or overwrite a valid caller
161
162
  return cursor while writing the Plan checkpoint.
162
163
  6. After editing `brief.md`, `spec.md`, `decisions.md`, `assumptions.md`, or `questions.md`,
163
- re-scan affected coverage, assumptions, uncertainty, and gates. Partial/Missing, unowned
164
+ re-scan affected coverage, assumptions, uncertainty, and gates. `open` rows, unowned
164
165
  material assumption, or open blocking/escalating question routes `/rite-clarify`/HITL.
165
166
  Restore `CLEAR` only from current evidence.
166
167
  7. **Done when:** every slice is sized (builds + proves in one cycle; no slice scoring >3
@@ -84,15 +84,15 @@ Record the sequence once in `decisions.md`.
84
84
  ## revise
85
85
 
86
86
  Artifact-only reconciliation of `spec.md`, `architecture.md`, `plan.md`, `tasks.md`,
87
- or `traceability.md` — never source. Propose/confirm the file set first. Only explicit
88
- `/rite-upgrade` with a `repairable` assessment may authorize neutral workspace edits.
87
+ or `traceability.md` — never source. Propose/confirm the file set first. A neutral workspace
88
+ edit is authorized by explicit `/rite-upgrade` with a `repairable` assessment, or, for budget
89
+ relocation only, by the phase owner when `orient` reports `over: true`.
89
90
 
90
91
  Unchanged acceptance/behavior with non-equivalent `proposed_coverage` is a
91
92
  contradictory input: the canonical classifier blocks it — there is no fourth
92
93
  route (see [`acceptance-preserving-reslice.md`](../../devrites-lib/reference/standards/acceptance-preserving-reslice.md)).
93
94
 
94
- **Budget relocation** (admitted by `/rite-upgrade`, or by the phase owner when
95
- `orient` reports `over: true`): move checkpoint narrative, historical fold text and
95
+ **Budget relocation** (authorized as above): move checkpoint narrative, historical fold text and
96
96
  closed-round accounts verbatim from `state.md`/`tasks.md`/`plan.md`/`architecture.md`/
97
97
  `eng-review.md` into `history/<file>-<YYYYMMDD>.md`, packets/accounts from the root
98
98
  into `packets/`, leaving a one-line pointer. Cursor, live slices, open findings, IDs,
@@ -18,7 +18,7 @@ Build avoids every UI entry; review and polish admit a hit only by this rule. Cl
18
18
  a declared token, brief line or nearest neighbour (cite both locations), or it has a
19
19
  measured user consequence (contrast ratio, overflow, CLS, lost or hidden focus). Otherwise
20
20
  it is an AES proposal under "Proposals (non-blocking)": never a Visual Verdict FAIL, never
21
- scored, capped at Suggestion/Minor, never blocking unless `design-brief.md` adopts it (then
21
+ scored, capped at Suggestion, never blocking unless `design-brief.md` adopts it (then
22
22
  DS). Act on clusters per [`prose-style.md`](../../devrites-lib/reference/standards/prose-style.md).
23
23
  A broken task, data loss or misleading state is reported and fixed before any AES item.
24
24
  **Failing case:** `tokens.css` declares Inter and a 20 px card radius, yet review files
@@ -12,11 +12,9 @@ What `browser-evidence.md` must capture for a UI slice. Delegates to
12
12
  | EVID-003 | <route> | empty/keyboard | 375 | brief Proof targets + target reference 1 | playwright-mcp | <observed result> | AC-002, SLICE-002 | <none / exact gap> |
13
13
 
14
14
  ## Visual Verdict
15
- | State | Result | Notes |
16
- | --- | --- | --- |
17
- | default | PASS / FAIL | <what is visible> |
18
- | loading | PASS / FAIL | <what is visible> |
19
- | error | PASS / FAIL | <what is visible> |
15
+ | Criterion (source, class) | Expected | Observed (screenshot) | Verdict | Severity |
16
+ |---|---|---|---|---|
17
+ | <state / delta / anti-slop criterion> (<brief / reference / anti-slop / acceptance>, <ENG / A11Y / DS / AES>) | <expected> | <what is visible> | PASS / PARTIAL / FAIL / n/a | <Critical / Important / Suggestion> |
20
18
 
21
19
  ## Comparison deltas
22
20
  | State / viewport | Target | Material delta observed | Disposition | Result |
@@ -33,6 +31,8 @@ What `browser-evidence.md` must capture for a UI slice. Delegates to
33
31
  ```
34
32
 
35
33
  ## Rules
34
+ - The `## Visual Verdict` table follows [visual-verdict.md](../../devrites-browser-proof/reference/visual-verdict.md),
35
+ which owns its rows, verdict values and severity mapping.
36
36
  - Open every screenshot path and describe it: never assert from the filename.
37
37
  - Read `design-brief.md` + `references.md` first. Compare fidelity only with references
38
38
  classified **target**; check constraints as rules and never pixel-match inspiration.
@@ -74,8 +74,8 @@ Pull these via `Read` when shaping the resolve:
74
74
  user's explicit consent for this local workspace mutation. Echo the qid, answer/drop,
75
75
  and slice being unblocked, then continue immediately; do not ask the user to confirm the
76
76
  command they just typed.
77
- 4. **Mutate.** Run `devrites-engine state resolve` with those arguments. It:
78
- - flips the qid's `status` to `answered` / `dropped` and stamps `answered_at` + `answer`;
77
+ 4. **Mutate.** Run `devrites-engine state resolve --human` with those arguments (a human is resolving). It:
78
+ - flips the qid's `status` to `answered` / `dropped` and stamps `answered_at` + `answer` + `answered_by: human`;
79
79
  - if the qid is in `state.md`'s `Awaiting human` block (single-question pause), clears
80
80
  that block and sets `Status: running`;
81
81
  - appends a `Log` line to `state.md`.
@@ -96,7 +96,7 @@ Pull these via `Read` when shaping the resolve:
96
96
  **Completion:** the resolved state contains exactly one next command.
97
97
  6. **STOP.** User-invoked `/rite-resolve` does not run `/rite-build` itself: the
98
98
  user re-enters the workflow explicitly. A controlling `/rite-autocomplete`
99
- caller invokes the same `devrites-engine state resolve` writer internally and
99
+ caller invokes the same `devrites-engine state resolve` writer internally (never with `--human`) and
100
100
  continues; it must not emit this skill as a user handoff for a question that
101
101
  already names a ranked recommended option.
102
102
 
@@ -65,7 +65,7 @@ Follow [`reference/phase-contract.md`](reference/phase-contract.md)
65
65
  `../devrites-lib/reference/parallel-dispatch.md` on the same frozen candidate,
66
66
  code review through its § Engineering lanes;
67
67
  4. reconcile their read-only verdicts against source and immutable evidence;
68
- 5. draft GO/NO-GO `seal.md` with acceptance, tests, decisions, and seven accounts
68
+ 5. draft GO/NO-GO `seal.md` with acceptance, tests, decisions, and seven roster accounts plus proof-runner and doubt-reviewer
69
69
  (each engineering lane its own account);
70
70
  6. write exactly one candidate binding, then run
71
71
  `devrites-engine check seal <slug>` for structure and identity, never semantics,
@@ -74,8 +74,9 @@ Follow [`reference/phase-contract.md`](reference/phase-contract.md)
74
74
  starts at the named changed, missing, or added input,
75
75
  and `devrites-engine check regression <slug>` to confirm no recorded progress
76
76
  fact was lost since the last checkpoint — `BLOCKED` is NO-GO; `unproven`
77
- (no baseline) does not block — plus `devrites-engine check windows <slug>
78
- --base <release-base>` so each deferral marker the feature diff introduced
77
+ (no baseline) does not block — plus two separate runs of `devrites-engine check windows <slug>`,
78
+ one with `--base <release-base>` and one with `--worktree` (the only mode that scans
79
+ untracked files; never pass both flags in one command, the last one wins) so each deferral marker the feature diff introduced
79
80
  carries a `windows.md` waiver row ([`windows.md`](../devrites-lib/reference/standards/windows.md));
80
81
  unwaived hits are NO-GO. The engine already refuses a `gates.md` ledger
81
82
  that is malformed, unmet,
@@ -28,7 +28,8 @@
28
28
  and the [`review roster`](../../devrites-lib/reference/parallel-dispatch.md) on
29
29
  the candidate. Admit each result through
30
30
  [`result admission`](../../devrites-lib/reference/standards/agents.md#result-admission).
31
- `## Reviewer Accounts` preserves all seven roles, each engineering lane as its own account; gap/missing/malformed blocks;
31
+ `## Reviewer Accounts` preserves the seven roster roles, each engineering lane as its own account, plus
32
+ `devrites-proof-runner` and, when any decision stood, `devrites-doubt-reviewer`; gap/missing/malformed blocks;
32
33
  conditional `Not-applicable` names why.
33
34
  7. **Route corrections.** Reconcile cited findings/disagreements, but do not
34
35
  edit the candidate or manifest in Seal. Route an accepted correction through
@@ -36,7 +37,7 @@
36
37
  Review under evidence validity, then restart Seal on the new digest.
37
38
  8. **Draft/check.** Write `seal.md` from
38
39
  [`seal-template.md`](seal-template.md) with the GO/NO-GO rationale, acceptance map,
39
- test-analysis account, stood-decision verdicts, all seven reviewer accounts,
40
+ test-analysis account, stood-decision verdicts, all seven roster reviewer accounts plus proof-runner and doubt-reviewer,
40
41
  and exactly one `Candidate SHA-256: <64 lowercase hex>` line. Then run:
41
42
  ```bash
42
43
  devrites-engine check seal "<slug>"
@@ -16,6 +16,8 @@ Candidate SHA-256: <64 lowercase hex>
16
16
  - devrites-security-auditor: <outcome>
17
17
  - devrites-performance-reviewer: <outcome>
18
18
  - devrites-devex-reviewer: <outcome>
19
+ - devrites-proof-runner: <outcome>
20
+ - devrites-doubt-reviewer: <outcome, or Not-applicable: no decision stood>
19
21
  ## Risks / Rollback
20
22
  <risks/recovery>
21
23
  ## Stood Decisions
@@ -72,8 +72,10 @@ if absent, route to `/rite-spec <feature>`. Ship only with current **GO** in `se
72
72
  stops. Any command/scope/branch/message/tag/PR change or retry needs a fresh prompt;
73
73
  native approval is still required.
74
74
  4. On GO, commit; verify committed state/path set and exact candidate digest; then push →
75
- tag/PR as applicable via `git-ship.md`. Capture SHA(s), branch, tag/PR URL. Mismatch
76
- stops before push/tag; retry needs fresh approval.
75
+ tag/PR as applicable via `git-ship.md`. Record SHA and push state in `ship.md` before
76
+ push (git-ship 7a); a push/tag/PR failure stops, and a rerun resumes at push under
77
+ fresh type-GO. Capture branch, tag/PR URL. Mismatch stops before push/tag; retry
78
+ needs fresh approval.
77
79
  4a. **PR only:** render [`git-ship.md`](reference/git-ship.md#pull-request-body)'s
78
80
  structured body; omit empty sections.
79
81
  5. Re-scan the four residual sources; any new/missing/changed item blocks archive.
@@ -52,7 +52,8 @@ Pre-GO is read-only. Do not run the disclosed collapse or staging commands.
52
52
  sequence whose workspace is sealed in this run
53
53
  ([afk-hitl.md § Sequence continuation](../../devrites-lib/reference/standards/afk-hitl.md#sequence-continuation-continue_sequence-max_workspaces));
54
54
  disclose the exact slug set. A different slug, missing colon, broad `WIP(` match,
55
- ordinary commit, or mixed history blocks; never reinterpret the range.
55
+ ordinary commit, or mixed history blocks; never reinterpret the range. The recorded
56
+ ship commit of a resumed ship (step 7a) is not an ordinary commit for that rerun.
56
57
  2. **Verify the candidate.** Rerun `devrites-engine check candidate <slug>` and
57
58
  `devrites-engine check seal <slug>`, compare every binding, require the
58
59
  candidate worktree paths to be unchanged, and inspect the existing staged
@@ -98,6 +99,11 @@ Pre-GO is read-only. Do not run the disclosed collapse or staging commands.
98
99
  paths still match `HEAD`, then rerun `devrites-engine check candidate <slug>`
99
100
  and `devrites-engine check seal <slug>` and compare the exact digest again.
100
101
  Any mismatch stops; do not reinterpret it.
102
+ 7a. **Record before push.** Write `ship.md` `Commit(s)` and `Push: pending`. A failed
103
+ push/tag/PR records `failed`, an unanswered or timed-out one `unknown`; stop. Check
104
+ the remote ref (`git ls-remote`) before any retry. A rerun whose HEAD equals the
105
+ recorded commit and whose candidate digest is unchanged skips steps 1-7 and
106
+ prompts a fresh type-GO for only the remaining push/tag/PR commands.
101
107
  8. **Push** to the project-conventional target branch.
102
108
  9. **Tag / PR** only when project convention requires it; otherwise skip.
103
109
  10. **Close sealed predecessors** only when the prompt disclosed them: run the
@@ -105,7 +111,7 @@ Pre-GO is read-only. Do not run the disclosed collapse or staging commands.
105
111
  because `ACTIVE` names the release workspace; a nonzero exit stops the rest and
106
112
  is reported, never retried against an unverified destination.
107
113
 
108
- Record SHA(s), branch, and tag/PR URL in `ship.md`.
114
+ Update `Push:` to `pushed` and record branch and tag/PR URL in `ship.md`.
109
115
 
110
116
  ## Pull request body
111
117
 
@@ -1,6 +1,6 @@
1
1
  # `ship.md` template
2
2
 
3
- Write before close-out; it moves to `.devrites/archive/<slug>/ship.md`.
3
+ Write Commit(s)/Push at git-ship step 7a; complete before close-out; it moves to `.devrites/archive/<slug>/ship.md`.
4
4
 
5
5
  ```markdown
6
6
  # Ship: <slug>
@@ -10,6 +10,7 @@ Write before close-out; it moves to `.devrites/archive/<slug>/ship.md`.
10
10
  - Branch: <branch>
11
11
  - Commit(s): <sha> [<sha> …]
12
12
  - Tag/PR: <value|none>
13
+ - Push: <pushed|pending|failed|unknown>
13
14
 
14
15
  ## What shipped
15
16
  <project-vocabulary paragraph>
@@ -143,8 +143,8 @@ load a routed standard to discover required behavior, not to prescribe implement
143
143
  complete-block preservation rule.
144
144
  `tasks.md` deliberately does not exist yet; cross-artifact traceability starts in
145
145
  `/rite-define`. Any grammar or delta failure blocks. The interruption forecast must be resolved, owned, or a justified
146
- action-time gate. Run the [`spec-grammar.md`](../devrites-lib/reference/standards/spec-grammar.md) marker sweep; a kept hit blocks. Then write
147
- `Spec gate: passed <iso>` with its `marker sweep:` line.
146
+ action-time gate. Run the [`spec-grammar.md`](../devrites-lib/reference/standards/spec-grammar.md) marker sweep; a kept hit blocks. Then record
147
+ `passed <iso>; marker sweep: …` in the `state.md` `spec_gate` row, never in `spec.md`.
148
148
  6a. **Existing-spec delta.** For a pre-existing slug/workspace, compare old/new
149
149
  spec and questions, then show `Acceptance delta` (added/removed/reworded IDs)
150
150
  and `Open-question delta` (opened/resolved/reworded IDs), using `none` for
@@ -77,7 +77,7 @@ Each question checks one requirement-prose failure mode:
77
77
  The spec **Readiness gate** at the bottom of
78
78
  [`spec-template.md`](spec-template.md) requires every
79
79
  emitted `checklists/<domain>.md` to reach `Verdict: pass` (zero CRITICAL fails) before the gate
80
- passes. Minor fails are logged, not blocking. A single open CRITICAL keeps the spec `Status: Draft`.
80
+ passes. Minor fails are logged, not blocking. A single open CRITICAL blocks `spec_gate: passed`.
81
81
  `/rite-define` reads the checklists at step 0 and **hard-blocks while any CRITICAL is
82
82
  unchecked**. A spec without checklists is not yet checked, so define stops and routes
83
83
  back here.
@@ -6,12 +6,13 @@ topology in `architecture.md`/`flows.md`, coverage in `traceability.md`.
6
6
  Use `[NEEDS CLARIFICATION: <question>]` (blocking stops `/rite-clarify`); before readiness
7
7
  every surviving marker converts to a gated `q-YYYY-MM-DD-NNN` open question (released `Q-###` kept) ([`spec-grammar.md`](../../devrites-lib/reference/standards/spec-grammar.md) §
8
8
  Unresolved-question markers — fail closed). Stable `REQ-001`/`AC-001` IDs; link, never
9
- duplicate, source artifacts; over-budget requires `Budget override: <reason>`.
9
+ duplicate, source artifacts; over-budget requires `Budget override: <reason>`. `spec.md`
10
+ is the product contract only: the phase verdict goes in the `state.md` `spec_gate` row,
11
+ never in this file (every reviewer read-set includes `spec.md`).
10
12
 
11
13
  ```markdown
12
14
  # Spec: <Feature>
13
15
  Slug: <kebab-case>
14
- Status: Draft | Ready
15
16
  Created: <date>
16
17
 
17
18
  ## Problem
@@ -136,8 +137,11 @@ status routes Define/Vet/Build/Prove to the named standard without copying it he
136
137
  | Question ID | Gate | Question | Impact |
137
138
  | --- | --- | --- | --- |
138
139
  | q-YYYY-MM-DD-NNN | blocking | <question text, no marker> | AC-001 |
140
+ ```
139
141
 
140
142
  ## Readiness gate
143
+ Run before stamping `spec_gate`; it is an authoring check, never written into `spec.md`.
144
+
141
145
  - [ ] No blocking clarification or open `blocking`/`escalating` question; REQ/AC IDs are valid and ACs independently provable.
142
146
  - [ ] `marker sweep:` recorded with zero kept hits (spec-grammar § Unresolved-question markers).
143
147
  - [ ] Every verbatim ask in `brief.md` `## Asks` maps to REQ/AC, a reasoned Non-goal, or a blocking question.
@@ -151,6 +155,6 @@ status routes Define/Vet/Build/Prove to the named standard without copying it he
151
155
  - [ ] Every applicability row is `applies` with affected IDs or has a specific
152
156
  evidence-backed `not applicable` reason.
153
157
  - [ ] AI has `ai-spec.md` and UI has `design-brief.md`; out-of-scope work states not applicable.
158
+ - [ ] Every emitted `checklists/<domain>.md` has `Verdict: pass` (zero CRITICAL fails); minor fails are logged.
154
159
  - [ ] Non-goals/scope are explicit; capability impact is singular/specific and matches ledger deltas.
155
160
  - [ ] Architecture/flows/decisions are linked, not duplicated; Coverage seed names Clarify surfaces.
156
- ```
@@ -130,6 +130,7 @@ None.
130
130
  | active_slice | none |
131
131
  | slice_mode | none |
132
132
  | risk | none |
133
+ | spec_gate | <passed <iso>; marker sweep: <n> files, <k> hits, <d> discarded — absent until /rite-spec passes> |
133
134
  | next_action | <single command + reason, or terminal: none — technical recovery exhausted for an unchanged causal fingerprint> |
134
135
  | return_phase | <originating later phase; clarification or agent-owned technical backtracking only> |
135
136
  | return_next_action | <saved originating command> |
@@ -195,6 +196,7 @@ proposed: <best current answer>
195
196
  raised_at: <iso>
196
197
  answered_at:
197
198
  answer:
199
+ answered_by: # human, only when resolved with `state resolve --human`
198
200
  impact: <affected AC/REQ/slice IDs>
199
201
  ```
200
202
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: rite-temper
3
3
  description: Temper a readied spec before planning. Use when the user says "temper this", "strategy review", "pre-mortem the spec", or asks if we are over/under-building. Not for code review or final seal.
4
- argument-hint: "[feature-slug] [--mode expand|selective|hold|reduce]"
4
+ argument-hint: "[feature-slug] [--mode expand|selective|hold-rigor|reduce-to-MVP]"
5
5
  user-invocable: true
6
6
  ---
7
7
 
@@ -31,8 +31,9 @@ the spec applicability map triggers that risk family.
31
31
  - **Raise outcome ambition without expanding the solution unnecessarily.** Solve the
32
32
  underlying problem without adding speculative capability or abstraction.
33
33
  - **Route every scope change through the Spec Drift Guard.** A scope change takes effect
34
- only when `spec.md` records the confirmed decision. HITL confirms expand;
35
- autocomplete auto-applies it. Irreversible-risk still pauses.
34
+ only when `spec.md` records the confirmed decision. Growth (`expand`, extra
35
+ acceptance) needs a resolved human `questions.md` qid, so an unattended run holds it
36
+ open. Irreversible-risk still pauses.
36
37
  - **Apply maximum caution to hard-to-reverse changes.** Auth, migration, public API, and
37
38
  data-model changes always pause under the irreversible-risk list.
38
39
  - **Honest verdict.** Never round "needs work" up to "ready"; record every scope call's *why*.
@@ -50,7 +51,7 @@ the spec applicability map triggers that risk family.
50
51
  0. **Read `.pi/skills/devrites-lib/reference/standards/core.md`**, then
51
52
  resolve the active slug, require its `state.md`, and read the cursor directly.
52
53
  Then read the workspace: `spec.md`, `decision-coverage.md` (+ `decisions.md`,
53
- `assumptions.md`, `design-brief.md` if UI), `state.md`. Require `Spec gate: passed`: else
54
+ `assumptions.md`, `design-brief.md` if UI), `state.md`. Require `state.md` `spec_gate: passed` (legacy `Spec gate:` accepted): else
54
55
  STOP → `/rite-spec`. Require `Decision coverage: CLEAR`: else STOP →
55
56
  `/rite-clarify`. If a plan already exists, scope changes route through `/rite-plan
56
57
  repair` (record in `drift.md`), not a blind spec edit.
@@ -91,10 +92,12 @@ the spec applicability map triggers that risk family.
91
92
  5. **Review human-owned findings with the human; do not batch them.** `strategy.md`
92
93
  records the interactive review but does not replace it. Present each material scope decision through
93
94
  `AskUserQuestion`, one at a time, best-guess + **why**. Each material scope call ends as a
94
- **recorded decision**: a resolved `questions.md` qid (HITL) or a `decisions.md` ADR (AFK):
95
+ **recorded decision**: a resolved `questions.md` qid (HITL) or a `decisions.md` ADR (AFK;
96
+ never for `expand` or extra acceptance, which need a human-resolved qid):
95
97
  so the review leaves an auditable record outside chat. (AFK gate policy —
96
98
  [`reference/significance.md`](reference/significance.md) — autocomplete applies
97
- the recommended mode including `expand`; irreversible-risk always pauses.)
99
+ `hold-rigor`, `reduce-to-MVP` and a skip, but holds `expand` and extra acceptance for a human
100
+ qid; irreversible-risk always pauses.)
98
101
  Apply objective clarity, mitigation, and assumption fixes directly.
99
102
  6. **Write `strategy.md` + fold back:** [`reference/strategy-template.md`](reference/strategy-template.md).
100
103
  **Choose the drift path based on whether a plan exists:** *no `plan.md` yet* (the normal pre-define
@@ -110,12 +113,12 @@ the spec applicability map triggers that risk family.
110
113
  any folded scope delta lacks its decision or leaves a foreseeable human build choice).
111
114
  After any edit to `brief.md`, `spec.md`, `decisions.md`, `assumptions.md`, or
112
115
  `questions.md`, re-scan the affected coverage rows, assumption audit, residual uncertainty,
113
- and closed gates. Partial/Missing, an unowned material assumption, or an open
116
+ and closed gates. `open` rows, an unowned material assumption, or an open
114
117
  blocking/escalating question routes `/rite-clarify`/HITL. Only after the
115
118
  matrix is re-closed may the phase advance.
116
119
  Set `Phase: temper`; `Next step: /rite-define` only after verification.
117
- Unapproved irreversible choices set `Awaiting human`. Autocomplete expand does
118
- not. Objective below-bar findings continue correction.
120
+ Unapproved irreversible choices and unresolved growth qids set `Awaiting human`.
121
+ Objective below-bar findings continue correction.
119
122
  7. **Adversarial verification loop:** ask the exact
120
123
  [`devrites-strategy-reviewer`](.pi/agents/devrites-strategy-reviewer.md)
121
124
  through the native fresh-context contract in
@@ -35,7 +35,7 @@ Mode selection is the first convergence move. Record the chosen mode + rationale
35
35
 
36
36
  | Mode | When | What it does | YAGNI / Drift Guard |
37
37
  |---|---|---|---|
38
- | **EXPAND** *(opt-in, default OFF)* | Under-reaching on the outcome is the real risk | Raise the success bar / reframe to the deeper problem; thinner-but-more-complete path to a bigger target | Expands the *problem + acceptance*, not machinery. Each added criterion is a Drift-Guard-recorded, human-confirmed (HITL) decision: never auto-grown |
38
+ | **EXPAND** *(opt-in, default OFF)* | Under-reaching on the outcome is the real risk | Raise the success bar / reframe to the deeper problem; thinner-but-more-complete path to a bigger target | Expands the *problem + acceptance*, not machinery. Each added criterion is a Drift-Guard-recorded, human-confirmed (HITL) decision: never auto-grown. Under AFK it escalates via `AskUserQuestion` and the fold **holds** until the human answers; an unattended run never auto-applies it |
39
39
  | **SELECTIVE** | One or two high-leverage dimensions deserve more; the rest is right | Expand only the high-upside dimension; hold the rest at spec scope | Each selected expansion routes through the Guard; everything not selected is parked in Non-goals so it's neither dropped nor re-injected mid-build |
40
40
  | **HOLD-RIGOR** | The spec is right-sized (default for irreversible-risk-heavy or already-tight specs) | No scope change: pure hardening: pre-mortem, risk mitigations, acceptance sharpening, cross-cutting coverage | Adds zero surface; trivially Drift-Guard-clean (no acceptance change) |
41
41
  | **REDUCE-TO-MVP** | Over-scoped: second-system bloat, ~all must-haves, gold-plating | Hammer scope to the Minimum Usable Subset; move the rest to Non-goals with one-line reasons + revisit notes | Strongest YAGNI alignment. Cutting acceptance is **still a spec change**: record it via the Guard, never a silent trim |
@@ -41,6 +41,13 @@ seal can see the call was made deliberately.
41
41
 
42
42
  ## In `/rite-autocomplete`
43
43
  Autocomplete runs the significance test every feature. On skip → straight to `/rite-define`
44
- (no pause). On fire → run the full review and auto-apply the recommended mode, including
45
- `expand` and extra acceptance (record the ADR; fold via Spec Drift Guard).
46
- Irreversible-risk findings always pause.
44
+ (no pause). On fire → run the full review, then apply the mode under the AFK rule in
45
+ [`scope-modes.md`](scope-modes.md): `hold-rigor`, `reduce-to-MVP`, and a skip apply unattended.
46
+ `expand` and any extra acceptance **do not** apply unattended — acceptance is never auto-grown.
47
+ When the review lands on `expand` or any acceptance growth, the agent presents the scope call as a
48
+ ranked `AskUserQuestion` option set per the HITL rule, records the open `questions.md` qid, and
49
+ **holds the fold**: do not write *Success metrics* or *Acceptance criteria* rows, do not fold via
50
+ Spec Drift Guard, and do not recommend `/rite-define` until a human answers the qid. A self-written
51
+ `decisions.md` ADR is not that human answer (see [`strategy-template.md`](strategy-template.md)
52
+ § Write discipline); the growth stays blocked until the qid resolves. Irreversible-risk findings
53
+ always pause.
@@ -74,8 +74,15 @@ already exists, record in `drift.md` and route via `/rite-plan repair` instead o
74
74
  mitigations go to *Failure and recovery behavior* rows.
75
75
  - *Open questions* table: one row per scope call (options offered → decision → owner).
76
76
  - **Re-run the Readiness gate** at the bottom of the spec after edits; it must still pass, and
77
- **every folded scope delta must trace to a recorded decision** (a `questions.md` qid or a
78
- `decisions.md` ADR): an untraceable change is the batch-dump failure.
77
+ **every folded scope delta must trace to a recorded decision**: a reduction or non-growth
78
+ delta traces to a `questions.md` qid **or** a `decisions.md` ADR, but an **acceptance-growth**
79
+ delta (`expand` or any added *Success metrics* / *Acceptance criteria* row) traces **only** to a
80
+ **resolved human `questions.md` qid** (`status: answered` plus an unindented, lowercase `answered_by: human` line; a qid without exactly
81
+ that line, including every qid written before the field existed, does not satisfy growth traceability).
82
+ A `decisions.md` ADR written by the same run is **not**
83
+ the human approval that growth requires, so an ADR-only growth fold is untraceable and the
84
+ Readiness gate fails closed — `/rite-define` step 0 hard-blocks while it is unresolved. An
85
+ untraceable change is the batch-dump failure.
79
86
  - **`decisions.md`:** one ADR-style entry per scope call and accepted trade-off:
80
87
  `context · decision · why-not-the-alternative · what-would-change-it`.
81
88
  - **`assumptions.md`:** every "we'll probably need X" demoted to an explicit
@@ -86,5 +93,9 @@ already exists, record in `drift.md` and route via `/rite-plan repair` instead o
86
93
  `devrites-strategy-reviewer` agent is **read-only** and only returns findings + bands.
87
94
  - **No silent scope.** An expansion that the human didn't opt into, or a reduction that drops an
88
95
  acceptance criterion without a recorded decision, is a defect, not a convenience.
96
+ - **An ADR is not its own approval.** A `decisions.md` ADR the run writes about its own scope call
97
+ records *why* it chose that mode; it never stands in for the human's answer. Acceptance growth
98
+ stays blocked until a resolved human `questions.md` qid lands, so an unattended run cannot fold
99
+ an expansion by citing its own record.
89
100
  - Add `strategy.md` to the workspace between `spec.md` and `plan.md`; `/rite-define` and
90
101
  `/rite-ship` read it.
@@ -20,11 +20,11 @@ Vet owns implementation; current `$ARGUMENTS` (`--full`) feeds the depth trigger
20
20
  ## Rules
21
21
 
22
22
  Read the active standard from: [`principles.md`](../devrites-lib/reference/standards/principles.md), [`patterns.md`](../devrites-lib/reference/standards/patterns.md) + [`coding-style.md`](../devrites-lib/reference/standards/coding-style.md) (over-engineering / YAGNI rubric, trigger `yagni`),
23
- [`testing.md`](../devrites-lib/reference/standards/testing.md), [`spec-grammar.md`](../devrites-lib/reference/standards/spec-grammar.md), [`performance.md`](../devrites-lib/reference/standards/performance.md), [`error-handling.md`](../devrites-lib/reference/standards/error-handling.md),
23
+ [`testing.md`](../devrites-lib/reference/standards/testing.md), [`spec-grammar.md`](../devrites-lib/reference/standards/spec-grammar.md), [`performance.md`](../devrites-lib/reference/standards/performance.md), [`error-handling.md`](../devrites-lib/reference/standards/error-handling.md) (trigger `errors`),
24
24
  [`development-workflow.md`](../devrites-lib/reference/standards/development-workflow.md), [`afk-hitl.md`](../devrites-lib/reference/standards/afk-hitl.md), [`one-shot-actions.md`](../devrites-lib/reference/standards/one-shot-actions.md),
25
- [`developer-experience.md`](../devrites-lib/reference/standards/developer-experience.md), [`elicitation.md`](../devrites-lib/reference/standards/elicitation.md), and [`definition-of-done.md`](../devrites-lib/reference/standards/definition-of-done.md). Load
25
+ [`developer-experience.md`](../devrites-lib/reference/standards/developer-experience.md), [`elicitation.md`](../devrites-lib/reference/standards/elicitation.md), and [`definition-of-done.md`](../devrites-lib/reference/standards/definition-of-done.md) (trigger `dod`). Load
26
26
  repository topology, data integrity, and integration reliability only when
27
- triggered. When the plan's scope generalizes an existing boundary — a second
27
+ triggered (trigger `applicability`). When the plan's scope generalizes an existing boundary — a second
28
28
  platform/tenant/source of truth, a newly optional field, a constant turned parameter —
29
29
  confirm the [`assumption-checkpoints.md`](../devrites-lib/reference/standards/assumption-checkpoints.md) question (trigger `assumption-delta`)
30
30
  was answered and recorded, not skipped-as-negative.
@@ -67,6 +67,7 @@ plan declares a root-authored executable workflow file, read
67
67
  repeat unaffected axes/reviewers. One dispatch covers every open fingerprint
68
68
  of the fold — each checked individually — with a mandatory correction-created
69
69
  regression audit.
70
+ - Refuse the rationalizations in [`anti-patterns`](reference/anti-patterns.md).
70
71
  <!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"plan declares root-authored executable workflow file","action":"emit exact admission; stale/missing authority uses PLAN_VET_REPAIR","return":"Vet READY cursor or exact technical replan"} -->
71
72
  ## Workflow
72
73
 
@@ -211,7 +211,7 @@ Vet hardens the plan. Use the marked action before fold-back.
211
211
  - Finish `test-plan.md`, fold-back, and rechecks first. Changes to `brief.md`, `spec.md`,
212
212
  `decisions.md`, `assumptions.md`, or `questions.md` require revalidating the
213
213
  affected decision-coverage rows, assumption audit, residual uncertainty, and closed gates.
214
- Partial/Missing, an unowned material assumption, or an open blocking/escalating question routes
214
+ `open` rows, an unowned material assumption, or an open blocking/escalating question routes
215
215
  `/rite-clarify`/HITL. Re-read affected rows with current evidence; repeat the exact
216
216
  plan-reviewer and applicable strategy/DevEx after edits. Root writes READY only after
217
217
  the checklist. Normal readiness rejects missing/stale bindings; empty tables,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devrites",
3
- "version": "5.14.4",
3
+ "version": "6.0.1",
4
4
  "description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code, Codex, omp, pi, and Devin CLI",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
@@ -31,14 +31,15 @@
31
31
  "files": [
32
32
  "bin/",
33
33
  "engine/",
34
- "!engine/devrites-engine",
35
- "!engine/devrites-engine.exe",
34
+ "!engine/tests/",
35
+ "!engine/testdata/",
36
36
  "pack/",
37
37
  "scripts/build-host-artifacts.sh",
38
38
  "scripts/codex-generate.sh",
39
39
  "scripts/omp-generate.sh",
40
40
  "scripts/pi-generate.sh",
41
41
  "scripts/devin-generate.sh",
42
+ "scripts/expand-includes.py",
42
43
  "scripts/install-lib.sh",
43
44
  "install.sh",
44
45
  "uninstall.sh",
@@ -60,7 +61,6 @@
60
61
  },
61
62
  "scripts": {
62
63
  "prepare": "husky || true",
63
- "prepack": "bash scripts/build-host-artifacts.sh",
64
64
  "commitlint": "commitlint --edit",
65
65
  "validate": "bash scripts/validate.sh",
66
66
  "test": "node scripts/run-tests.mjs",
@@ -86,6 +86,7 @@
86
86
  "semantic-release": "^25.0.9"
87
87
  },
88
88
  "overrides": {
89
+ "@semantic-release/commit-analyzer": "14.0.0-beta.4",
89
90
  "@semantic-release/release-notes-generator": "15.0.0-beta.3",
90
91
  "@semantic-release/npm": {
91
92
  "npm": "11.20.0"
@@ -23,6 +23,21 @@ OUT_ROOT="${DEVRITES_HOST_ARTIFACT_DIR:-$ROOT/pack/generated}"
23
23
  exit 1
24
24
  }
25
25
 
26
+ command -v python3 >/dev/null 2>&1 || {
27
+ echo "build-host-artifacts: python3 is required" >&2
28
+ exit 1
29
+ }
30
+ [ -f "$ROOT/scripts/expand-includes.py" ] || {
31
+ echo "build-host-artifacts: missing $ROOT/scripts/expand-includes.py" >&2
32
+ exit 1
33
+ }
34
+
35
+ _out_parent="$(dirname "$OUT_ROOT")"
36
+ [ "$OUT_ROOT" = . ] || { mkdir -p "$_out_parent" 2>/dev/null && [ -d "$_out_parent" ] && [ -w "$_out_parent" ]; } || {
37
+ echo "build-host-artifacts: output parent of $OUT_ROOT is not a writable directory (DEVRITES_HOST_ARTIFACT_DIR)" >&2
38
+ exit 1
39
+ }
40
+
26
41
  TMP_GEN_DIR="$(mktemp -d)"
27
42
  cleanup() { rm -rf "$TMP_GEN_DIR"; }
28
43
  trap cleanup EXIT
@@ -104,7 +104,7 @@ This project has DevRites installed for both Claude Code and Codex.
104
104
  - In DevRites guidance, **invoke** means run a skill inline in the current context; **dispatch** means start a fresh agent with `spawn_agent`, wait for it, and reconcile its result.
105
105
  - Dispatch every exact named `devrites-<role>` required by the active workflow in a fresh subagent thread, wait for it, and reconcile its result. If that role is unavailable, stop for HITL; never skip it, never substitute a generic/default child, and never execute the specialist role in the root context.
106
106
  - The root uses the workspace-capable `devrites-orchestrator` profile because Codex children cannot elevate above the parent permission ceiling. This permission is for native writer dispatch and exact path-bounded executable workflow artifacts under the active `.devrites/work/<slug>/`; the root must never edit product source or tests itself.
107
- - Every generated specialist is hook-free. `devrites-slice-wright` alone uses `default_permissions = ":workspace"`; every other specialist uses `default_permissions = ":read-only"`. Exact paths are instruction-enforced: put the project-relative paths in the task, wait for the wright, compare its file list and `git diff --name-only` with that contract, and reject any extra path. Never bypass the wright, widen its contract, or edit source in the root; the root must never recreate an engine dispatch bridge.
107
+ - Every generated specialist is hook-free. Among the lifecycle `devrites-*` specialists, `devrites-slice-wright` alone uses `default_permissions = ":workspace"` and every other specialist in that family uses `default_permissions = ":read-only"`. The shipped profiles are the full role-to-permission map; `/rite-doctor` step 3 checks them. Exact paths are instruction-enforced: put the project-relative paths in the task, wait for the wright, compare its file list and `git diff --name-only` with that contract, and reject any extra path. Never bypass the wright, widen its contract, or edit source in the root; the root must never recreate an engine dispatch bridge.
108
108
  - The explicit `/overhaul` skill ships its own `overhaul-*` agents outside the DevRites lifecycle. They use `default_permissions = ":workspace"`, are dispatched only by that skill, and follow its own approval gate and path contracts instead of the lifecycle writer rules above.
109
109
  - The explicit `/rite-fast` skill ships its own `fast-*` agents. Only `fast-builder` uses `default_permissions = ":workspace"`; `fast-planner`, `fast-checker`, and `fast-critic` stay `:read-only`. `/rite-fast` dispatches them itself and applies its own exact-path contracts.
110
110
  - A seal GO, AFK mode, or autocomplete flag never authorizes an irreversible action. Disclose the exact commit/push/tag/PR plan and obtain fresh explicit user approval for that attempt; any changed or retried plan needs fresh approval. Native host permission and sandbox prompts remain authoritative and cannot be inferred or bypassed.
@@ -206,7 +206,7 @@ This project has DevRites installed for Devin CLI.
206
206
  - Before using any DevRites workflow skill, read `.devin/skills/devrites-lib/reference/standards/core.md`. Load other `.devin/skills/devrites-lib/reference/standards/*.md` files when the skill or rule index asks for them.
207
207
  - DevRites specialist agents live in `.devin/agents` as custom subagent profiles offered to `run_subagent`. If a required `devrites-<role>` profile is not among the offered profiles, stop for HITL - never skip the role, never substitute `subagent_general`, `subagent_explore`, or another generic profile, never inline the specialist prompt, and never execute the specialist role in the root context.
208
208
  - In DevRites guidance, **invoke** means run a skill inline in the current context; **dispatch** means start a fresh agent with `run_subagent` using the exact `profile` name, wait for it with `read_subagent`, and reconcile its result.
209
- - Only `devrites-slice-wright` may edit source or tests; every other specialist is read-only by `allowed-tools`. Exact paths are instruction-enforced: put the project-relative paths in the task, wait for the wright, compare its file list and `git diff --name-only` with that contract, and reject any extra path.
209
+ - Among the lifecycle `devrites-*` specialists, only `devrites-slice-wright` may edit source or tests; every other specialist in that family is read-only by `allowed-tools`. The shipped profiles are the full role-to-permission map; `/rite-doctor` step 3 checks them. Exact paths are instruction-enforced: put the project-relative paths in the task, wait for the wright, compare its file list and `git diff --name-only` with that contract, and reject any extra path.
210
210
  - The explicit `/overhaul` skill ships its own `overhaul-*` agents outside the DevRites lifecycle. They carry the full write tool set, are dispatched only by that skill, and follow its own approval gate and path contracts instead of the lifecycle writer rules above.
211
211
  - The explicit `/rite-fast` skill ships its own `fast-*` agents. Only `fast-builder` carries write tools; `fast-planner`, `fast-checker`, and `fast-critic` stay read-only. `/rite-fast` dispatches them itself and applies its own exact-path contracts.
212
212
  - Custom profiles do not inherit interactive tool grants, and background subagents auto-deny unapproved tools. Dispatch the write-capable wright in the foreground, or make sure its `edit`, `write`, and `exec` tools are approved first. Specialists cannot use `ask_user_question`; the root relays user questions and answers through the task text and returned result.
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env python3
2
+ """Expand <!-- include:REL/PATH.md --> markers in-place under a directory.
3
+
4
+ Paths resolve relative to the file containing the marker. Used by
5
+ build-host-artifacts.sh on a scratch copy of pack/.claude so every host
6
+ receives identical expanded text while canonical sources deduplicate
7
+ shared blocks into pack/.claude/**/_shared/.
8
+ """
9
+ from __future__ import annotations
10
+
11
+ import re
12
+ import sys
13
+ from pathlib import Path
14
+
15
+ MARKER = re.compile(r"<!--\s*include:([^\s>]+)\s*-->")
16
+
17
+
18
+ def expand_file(path: Path, errors: list[str]) -> str:
19
+ text = path.read_text(encoding="utf-8")
20
+
21
+ def repl(m: re.Match) -> str:
22
+ target = (path.parent / m.group(1)).resolve()
23
+ if not target.is_file():
24
+ errors.append(f"{path}: include not found: {m.group(1)}")
25
+ return m.group(0)
26
+ return target.read_text(encoding="utf-8").rstrip("\n")
27
+
28
+ return MARKER.sub(repl, text)
29
+
30
+
31
+ def main() -> int:
32
+ root = Path(sys.argv[1])
33
+ errors: list[str] = []
34
+ for f in sorted(root.rglob("*.md")):
35
+ if "include:" not in f.read_text(encoding="utf-8"):
36
+ continue
37
+ new = expand_file(f, errors)
38
+ if new != f.read_text(encoding="utf-8"):
39
+ f.write_text(new, encoding="utf-8")
40
+ for e in errors:
41
+ print(e, file=sys.stderr)
42
+ return 1 if errors else 0
43
+
44
+
45
+ if __name__ == "__main__":
46
+ sys.exit(main())