devrites 3.0.5 → 3.0.7

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 (744) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +282 -533
  3. package/SECURITY.md +26 -26
  4. package/docs/adr/README.md +7 -9
  5. package/docs/agents/domain.md +5 -5
  6. package/docs/agents/issue-driven-rites.md +1 -1
  7. package/docs/agents/issue-tracker.md +1 -1
  8. package/docs/agents/triage-labels.md +2 -2
  9. package/docs/architecture.md +45 -45
  10. package/docs/cli.md +11 -11
  11. package/docs/command-map.md +33 -33
  12. package/docs/engine/agent-contract.md +6 -6
  13. package/docs/engine/commands.md +66 -65
  14. package/docs/engine/state-schema.md +15 -15
  15. package/docs/engine/workspace-schema.md +7 -7
  16. package/docs/extensions.md +17 -17
  17. package/docs/flow.md +17 -17
  18. package/docs/harness-compliance.md +2 -2
  19. package/docs/orchestration.md +21 -20
  20. package/docs/release.md +22 -5
  21. package/docs/research/go-authoritative-workflow-schema-and-quality-2026-07-20.md +3 -3
  22. package/docs/skills.md +77 -52
  23. package/docs/usage.md +33 -32
  24. package/engine/Makefile +2 -2
  25. package/engine/commands.go +3 -3
  26. package/engine/harnessmatrix.go +2 -2
  27. package/engine/hookpolicy.go +9 -9
  28. package/engine/hooks.go +11 -11
  29. package/engine/hooks_workspace.go +11 -11
  30. package/engine/internal/doctor/doctor.go +7 -7
  31. package/engine/internal/gate/gate.go +11 -11
  32. package/engine/internal/harness/compliance.go +1 -1
  33. package/engine/internal/harness/harness.go +7 -7
  34. package/engine/internal/install/install.go +95 -24
  35. package/engine/internal/install/install_test.go +111 -3
  36. package/engine/internal/iohooks/detach_unix.go +1 -1
  37. package/engine/internal/iohooks/iohooks.go +8 -8
  38. package/engine/internal/lib/adoption.go +1 -1
  39. package/engine/internal/lib/analyze.go +15 -15
  40. package/engine/internal/lib/archivesearch.go +3 -3
  41. package/engine/internal/lib/budget.go +3 -3
  42. package/engine/internal/lib/buildreadiness.go +6 -6
  43. package/engine/internal/lib/checkacceptance.go +10 -10
  44. package/engine/internal/lib/closeout.go +5 -5
  45. package/engine/internal/lib/conventions.go +3 -3
  46. package/engine/internal/lib/coverage.go +4 -4
  47. package/engine/internal/lib/doubtcoverage.go +9 -9
  48. package/engine/internal/lib/evidencefresh.go +6 -6
  49. package/engine/internal/lib/extensions.go +9 -9
  50. package/engine/internal/lib/footprint.go +13 -13
  51. package/engine/internal/lib/jsonout.go +2 -2
  52. package/engine/internal/lib/lanes.go +2 -2
  53. package/engine/internal/lib/learnings.go +9 -9
  54. package/engine/internal/lib/ledger.go +8 -8
  55. package/engine/internal/lib/ledger_test.go +5 -5
  56. package/engine/internal/lib/mutationgate.go +4 -4
  57. package/engine/internal/lib/overrides.go +9 -9
  58. package/engine/internal/lib/overrides_test.go +2 -2
  59. package/engine/internal/lib/packageexistence.go +5 -5
  60. package/engine/internal/lib/preamble.go +6 -6
  61. package/engine/internal/lib/progress.go +5 -5
  62. package/engine/internal/lib/reconcile.go +80 -20
  63. package/engine/internal/lib/reconcile_test.go +13 -5
  64. package/engine/internal/lib/resolve.go +3 -3
  65. package/engine/internal/lib/reviewerstats.go +2 -2
  66. package/engine/internal/lib/reviewintegrity.go +13 -13
  67. package/engine/internal/lib/reviewintegrity_test.go +6 -6
  68. package/engine/internal/lib/runbook.go +1 -1
  69. package/engine/internal/lib/session.go +1 -1
  70. package/engine/internal/lib/session_test.go +2 -2
  71. package/engine/internal/lib/specparse.go +4 -4
  72. package/engine/internal/lib/specskeleton.go +2 -2
  73. package/engine/internal/lib/specvalidate.go +13 -13
  74. package/engine/internal/lib/stuck.go +13 -13
  75. package/engine/internal/lib/templates/conventions_ledger_header.md +1 -1
  76. package/engine/internal/lib/templates/conventions_orient_header.txt +1 -1
  77. package/engine/internal/lib/testintegrity.go +9 -9
  78. package/engine/internal/lib/tickafk.go +4 -4
  79. package/engine/internal/migrate/migrate.go +2 -2
  80. package/engine/internal/migrate/migrate_test.go +1 -0
  81. package/engine/internal/orient/firstrun.go +8 -8
  82. package/engine/internal/orient/orient.go +5 -5
  83. package/engine/internal/state/concurrency_test.go +4 -4
  84. package/engine/internal/state/feature.go +6 -6
  85. package/engine/internal/state/lock_unix.go +1 -1
  86. package/engine/internal/state/schema.go +1 -1
  87. package/engine/internal/state/snapshot.go +2 -2
  88. package/engine/internal/state/write.go +1 -1
  89. package/engine/internal/version/version.go +1 -1
  90. package/engine/main.go +5 -5
  91. package/engine/subagent_orient_context.txt +4 -4
  92. package/engine/testdata/golden/TestParityA1Guard/source-edit-enforce-denies.golden +1 -1
  93. package/engine/testdata/golden/TestParityAnalyze/slug=covered.golden +2 -2
  94. package/engine/testdata/golden/TestParityAnalyze/slug=dangling.golden +3 -3
  95. package/engine/testdata/golden/TestParityAnalyze/slug=noac.golden +2 -2
  96. package/engine/testdata/golden/TestParityAnalyze/slug=order.golden +4 -4
  97. package/engine/testdata/golden/TestParityAnalyze/slug=orphan.golden +3 -3
  98. package/engine/testdata/golden/TestParityAnalyze/slug=uncovered.golden +3 -3
  99. package/engine/testdata/golden/TestParityBudget/extra-md.golden +1 -1
  100. package/engine/testdata/golden/TestParityBudget/over-advisory.golden +1 -1
  101. package/engine/testdata/golden/TestParityBudget/over-strict.golden +1 -1
  102. package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
  103. package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
  104. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
  105. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
  106. package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-ok.golden +1 -1
  107. package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-ok.golden +1 -1
  108. package/engine/testdata/golden/TestParityCloseOut/active_pointed_elsewhere.golden +1 -1
  109. package/engine/testdata/golden/TestParityCoverage/arg=speconly.golden +2 -2
  110. package/engine/testdata/golden/TestParityCursor/bare.golden +1 -1
  111. package/engine/testdata/golden/TestParityCursor/full-afk.golden +1 -1
  112. package/engine/testdata/golden/TestParityCursor/full-hitl.golden +1 -1
  113. package/engine/testdata/golden/TestParityCursor/red.golden +2 -2
  114. package/engine/testdata/golden/TestParityCursor/zerogates.golden +1 -1
  115. package/engine/testdata/golden/TestParityDoubtCoverage/arg=ghost.golden +1 -1
  116. package/engine/testdata/golden/TestParityDoubtCoverage/arg=inline.golden +1 -1
  117. package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing-inline.golden +1 -1
  118. package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing.golden +1 -1
  119. package/engine/testdata/golden/TestParityDoubtCoverage/arg=nodoubt.golden +1 -1
  120. package/engine/testdata/golden/TestParityDoubtCoverage/arg=nolog.golden +1 -1
  121. package/engine/testdata/golden/TestParityLearnings/mine-no-archive.golden +1 -1
  122. package/engine/testdata/golden/TestParityLearnings/mine.golden +1 -1
  123. package/engine/testdata/golden/TestParityLearnings/nudge.golden +1 -1
  124. package/engine/testdata/golden/TestParityMutationGate/active-slug.golden +1 -1
  125. package/engine/testdata/golden/TestParityMutationGate/explicit-slug.golden +1 -1
  126. package/engine/testdata/golden/TestParityPackageExistence/declared.golden +1 -1
  127. package/engine/testdata/golden/TestParityPackageExistence/default-import-subpath.golden +1 -1
  128. package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
  129. package/engine/testdata/golden/TestParityRedwatch/fail-writes-red.golden +1 -1
  130. package/engine/testdata/golden/TestParityResolve/answer/state.md.golden +1 -1
  131. package/engine/testdata/golden/TestParityResolve/batch.golden +1 -1
  132. package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-devrites-agent-denies.golden +1 -1
  133. package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-git-commit.golden +1 -1
  134. package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-mutating.golden +1 -1
  135. package/engine/testdata/golden/TestParitySpecValidate/arg=flat.golden +1 -1
  136. package/engine/testdata/golden/TestParitySpecValidate/arg=valid/spec.md.golden +1 -1
  137. package/engine/testdata/golden/TestParitySpecValidate/arg=valid.golden +1 -1
  138. package/engine/testdata/golden/TestParityStuckCheck/custom-window-2.golden +1 -1
  139. package/engine/testdata/golden/TestParityStuckCheck/dominant.golden +1 -1
  140. package/engine/testdata/golden/TestParityStuckCheck/few.golden +1 -1
  141. package/engine/testdata/golden/TestParityStuckCheck/ghost.golden +1 -1
  142. package/engine/testdata/golden/TestParityStuckCheck/identical.golden +1 -1
  143. package/engine/testdata/golden/TestParityStuckCheck/nolog.golden +1 -1
  144. package/engine/testdata/golden/TestParityStuckCheck/pingpong.golden +1 -1
  145. package/engine/testdata/golden/TestParityStuckCheck/varied.golden +1 -1
  146. package/engine/testdata/golden/TestParityStuckCheck/window-04-identical.golden +1 -1
  147. package/engine/testdata/golden/TestParityStuckCheck/window-2.5-varied4.golden +1 -1
  148. package/engine/testdata/golden/TestParityStuckCheck/window-4x-varied4.golden +1 -1
  149. package/engine/testdata/golden/TestParityStuckCheck/window-leadspace-varied4.golden +1 -1
  150. package/engine/testdata/golden/TestParityStuckCheck/window-plus4-identical.golden +1 -1
  151. package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent-subagent-type-key.golden +1 -1
  152. package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent.golden +1 -1
  153. package/engine/testdata/golden/TestParityTestIntegrity/clean.golden +1 -1
  154. package/engine/testdata/golden/TestParityTickAfk/missingField.golden +1 -1
  155. package/engine/testdata/golden/TestParityTickAfk/none.golden +1 -1
  156. package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
  157. package/engine/testdata/golden/TestSpecSkeleton/missing-some.golden +1 -1
  158. package/engine/testdata/golden/TestSpecSkeleton/present-all.golden +1 -1
  159. package/engine/tests/adr_0004_required_by_phase_test.go +2 -2
  160. package/engine/tests/adr_0006_clock_seam_test.go +1 -1
  161. package/engine/tests/budget_test.go +1 -1
  162. package/engine/tests/canonical_ac_ids_test.go +2 -2
  163. package/engine/tests/cli_test.go +1 -1
  164. package/engine/tests/concurrency_cli_test.go +1 -1
  165. package/engine/tests/gate_test.go +4 -4
  166. package/engine/tests/hook_test.go +3 -3
  167. package/engine/tests/hooks_io_test.go +1 -1
  168. package/engine/tests/lib_parity_test.go +29 -29
  169. package/engine/tests/meta_test.go +2 -2
  170. package/engine/tests/parity_closeout_test.go +1 -1
  171. package/engine/tests/parity_learnings_test.go +2 -2
  172. package/engine/tests/parity_mutationgate_test.go +2 -2
  173. package/engine/tests/parity_resolve_test.go +1 -1
  174. package/engine/tests/parity_test.go +3 -3
  175. package/engine/tests/parity_tickafk_test.go +1 -1
  176. package/engine/validatepack.go +5 -5
  177. package/engine/validatepackskills.go +9 -9
  178. package/pack/.claude/agents/devrites-code-reviewer.md +21 -22
  179. package/pack/.claude/agents/devrites-devex-reviewer.md +17 -17
  180. package/pack/.claude/agents/devrites-doubt-reviewer.md +6 -6
  181. package/pack/.claude/agents/devrites-forge-judge.md +26 -26
  182. package/pack/.claude/agents/devrites-frontend-reviewer.md +17 -17
  183. package/pack/.claude/agents/devrites-performance-reviewer.md +19 -18
  184. package/pack/.claude/agents/devrites-plan-reviewer.md +29 -27
  185. package/pack/.claude/agents/devrites-retrospector.md +19 -19
  186. package/pack/.claude/agents/devrites-security-auditor.md +15 -15
  187. package/pack/.claude/agents/devrites-simplifier-reviewer.md +14 -14
  188. package/pack/.claude/agents/devrites-slice-wright.md +52 -51
  189. package/pack/.claude/agents/devrites-spec-reviewer.md +11 -11
  190. package/pack/.claude/agents/devrites-strategy-reviewer.md +21 -21
  191. package/pack/.claude/agents/devrites-test-analyst.md +13 -13
  192. package/pack/.claude/settings.json +1 -1
  193. package/pack/.claude/skills/devrites-api-interface/SKILL.md +12 -12
  194. package/pack/.claude/skills/devrites-audit/SKILL.md +7 -7
  195. package/pack/.claude/skills/devrites-browser-proof/SKILL.md +16 -16
  196. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +14 -14
  197. package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
  198. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
  199. package/pack/.claude/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
  200. package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
  201. package/pack/.claude/skills/devrites-debug-recovery/reference/trace.md +4 -4
  202. package/pack/.claude/skills/devrites-doubt/SKILL.md +14 -14
  203. package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +18 -18
  204. package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +17 -17
  205. package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +25 -25
  206. package/pack/.claude/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
  207. package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
  208. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
  209. package/pack/.claude/skills/devrites-frontend-craft/reference/shape.md +13 -13
  210. package/pack/.claude/skills/devrites-interview/SKILL.md +27 -27
  211. package/pack/.claude/skills/devrites-lib/SKILL.md +18 -18
  212. package/pack/.claude/skills/devrites-lib/reference/model-tiers.md +5 -5
  213. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
  214. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +10 -10
  215. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
  216. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +37 -37
  217. package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
  218. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
  219. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +40 -40
  220. package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +7 -7
  221. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
  222. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -23
  223. package/pack/.claude/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
  224. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +18 -18
  225. package/pack/.claude/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
  226. package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +10 -10
  227. package/pack/.claude/skills/devrites-lib/reference/standards/documentation.md +4 -4
  228. package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
  229. package/pack/.claude/skills/devrites-lib/reference/standards/elicitation.md +26 -26
  230. package/pack/.claude/skills/devrites-lib/reference/standards/error-handling.md +4 -4
  231. package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
  232. package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -3
  233. package/pack/.claude/skills/devrites-lib/reference/standards/observability.md +15 -15
  234. package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +8 -8
  235. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +5 -5
  236. package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +31 -31
  237. package/pack/.claude/skills/devrites-lib/reference/standards/prose-style.md +25 -25
  238. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +30 -30
  239. package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
  240. package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
  241. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +40 -40
  242. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +26 -26
  243. package/pack/.claude/skills/devrites-prose-craft/SKILL.md +5 -5
  244. package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +6 -6
  245. package/pack/.claude/skills/devrites-source-driven/SKILL.md +8 -8
  246. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +33 -33
  247. package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +6 -6
  248. package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
  249. package/pack/.claude/skills/rite/SKILL.md +7 -7
  250. package/pack/.claude/skills/rite/reference/menu.md +6 -6
  251. package/pack/.claude/skills/rite-adopt/SKILL.md +15 -15
  252. package/pack/.claude/skills/rite-adopt/reference/adoption.md +9 -9
  253. package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +6 -6
  254. package/pack/.claude/skills/rite-autocomplete/SKILL.md +14 -14
  255. package/pack/.claude/skills/rite-autocomplete/reference/decision-policy.md +4 -4
  256. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -7
  257. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
  258. package/pack/.claude/skills/rite-build/SKILL.md +22 -22
  259. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +9 -9
  260. package/pack/.claude/skills/rite-build/reference/anti-patterns.md +6 -6
  261. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +14 -14
  262. package/pack/.claude/skills/rite-build/reference/checkpoint.md +8 -8
  263. package/pack/.claude/skills/rite-build/reference/evidence-standard.md +1 -1
  264. package/pack/.claude/skills/rite-build/reference/forge.md +28 -29
  265. package/pack/.claude/skills/rite-build/reference/frontend-trigger.md +2 -2
  266. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +3 -3
  267. package/pack/.claude/skills/rite-build/reference/output.md +1 -1
  268. package/pack/.claude/skills/rite-build/reference/phase-contract.md +44 -44
  269. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +1 -1
  270. package/pack/.claude/skills/rite-build/reference/tdd.md +6 -6
  271. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +23 -23
  272. package/pack/.claude/skills/rite-converge/SKILL.md +17 -17
  273. package/pack/.claude/skills/rite-converge/reference/anti-patterns.md +7 -7
  274. package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +14 -14
  275. package/pack/.claude/skills/rite-customize/SKILL.md +2 -2
  276. package/pack/.claude/skills/rite-define/SKILL.md +25 -25
  277. package/pack/.claude/skills/rite-define/reference/anti-patterns.md +5 -5
  278. package/pack/.claude/skills/rite-define/reference/gates.md +13 -13
  279. package/pack/.claude/skills/rite-define/reference/plan-template.md +1 -1
  280. package/pack/.claude/skills/rite-doctor/SKILL.md +11 -11
  281. package/pack/.claude/skills/rite-dogfood/SKILL.md +2 -2
  282. package/pack/.claude/skills/rite-explain/SKILL.md +22 -22
  283. package/pack/.claude/skills/rite-explain/reference/intake.md +16 -16
  284. package/pack/.claude/skills/rite-frame/SKILL.md +22 -22
  285. package/pack/.claude/skills/rite-frame/reference/failure-modes.md +13 -13
  286. package/pack/.claude/skills/rite-handoff/SKILL.md +12 -12
  287. package/pack/.claude/skills/rite-learn/SKILL.md +23 -23
  288. package/pack/.claude/skills/rite-plan/SKILL.md +21 -21
  289. package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +3 -3
  290. package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +1 -1
  291. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +3 -3
  292. package/pack/.claude/skills/rite-plan/reference/slicing.md +9 -9
  293. package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +3 -3
  294. package/pack/.claude/skills/rite-polish/SKILL.md +11 -11
  295. package/pack/.claude/skills/rite-polish/reference/anti-patterns.md +8 -8
  296. package/pack/.claude/skills/rite-polish/reference/backend-polish.md +13 -13
  297. package/pack/.claude/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
  298. package/pack/.claude/skills/rite-polish/reference/code.md +26 -26
  299. package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +31 -31
  300. package/pack/.claude/skills/rite-polish/reference/ui.md +23 -23
  301. package/pack/.claude/skills/rite-pov/SKILL.md +3 -3
  302. package/pack/.claude/skills/rite-pr-feedback/SKILL.md +2 -2
  303. package/pack/.claude/skills/rite-pressure-test/SKILL.md +14 -14
  304. package/pack/.claude/skills/rite-prototype/SKILL.md +13 -13
  305. package/pack/.claude/skills/rite-prove/SKILL.md +17 -17
  306. package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +4 -4
  307. package/pack/.claude/skills/rite-prove/reference/browser-proof.md +2 -2
  308. package/pack/.claude/skills/rite-prove/reference/failure-triage.md +4 -4
  309. package/pack/.claude/skills/rite-prove/reference/proof-ladder.md +6 -6
  310. package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +1 -1
  311. package/pack/.claude/skills/rite-quick/SKILL.md +22 -22
  312. package/pack/.claude/skills/rite-resolve/SKILL.md +18 -18
  313. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +7 -7
  314. package/pack/.claude/skills/rite-review/SKILL.md +34 -34
  315. package/pack/.claude/skills/rite-review/reference/anti-patterns.md +4 -4
  316. package/pack/.claude/skills/rite-review/reference/cognitive-load.md +22 -22
  317. package/pack/.claude/skills/rite-review/reference/feature-scoped-review.md +2 -2
  318. package/pack/.claude/skills/rite-review/reference/five-axis-review.md +8 -8
  319. package/pack/.claude/skills/rite-review/reference/nielsen-heuristics.md +14 -14
  320. package/pack/.claude/skills/rite-review/reference/performance-checklist.md +14 -14
  321. package/pack/.claude/skills/rite-review/reference/security-review.md +9 -9
  322. package/pack/.claude/skills/rite-seal/SKILL.md +26 -26
  323. package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +8 -8
  324. package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +8 -8
  325. package/pack/.claude/skills/rite-seal/reference/final-evidence.md +9 -9
  326. package/pack/.claude/skills/rite-seal/reference/go-no-go.md +9 -9
  327. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +43 -43
  328. package/pack/.claude/skills/rite-ship/SKILL.md +12 -12
  329. package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +5 -5
  330. package/pack/.claude/skills/rite-ship/reference/close-out.md +2 -2
  331. package/pack/.claude/skills/rite-ship/reference/design-memory.md +22 -22
  332. package/pack/.claude/skills/rite-ship/reference/git-ship.md +10 -10
  333. package/pack/.claude/skills/rite-ship/reference/ledger.md +9 -9
  334. package/pack/.claude/skills/rite-ship/reference/rollout.md +11 -11
  335. package/pack/.claude/skills/rite-ship/reference/ship-template.md +1 -1
  336. package/pack/.claude/skills/rite-spec/SKILL.md +45 -45
  337. package/pack/.claude/skills/rite-spec/reference/acceptance-criteria.md +4 -4
  338. package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +6 -6
  339. package/pack/.claude/skills/rite-spec/reference/interview-patterns.md +3 -3
  340. package/pack/.claude/skills/rite-spec/reference/investigation.md +21 -21
  341. package/pack/.claude/skills/rite-spec/reference/question-protocol.md +9 -9
  342. package/pack/.claude/skills/rite-spec/reference/references-intake.md +8 -8
  343. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +19 -19
  344. package/pack/.claude/skills/rite-status/SKILL.md +13 -13
  345. package/pack/.claude/skills/rite-temper/SKILL.md +29 -29
  346. package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +11 -11
  347. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +20 -20
  348. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +16 -16
  349. package/pack/.claude/skills/rite-temper/reference/significance.md +10 -10
  350. package/pack/.claude/skills/rite-temper/reference/strategy-template.md +14 -14
  351. package/pack/.claude/skills/rite-vet/SKILL.md +31 -31
  352. package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +14 -14
  353. package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -10
  354. package/pack/.claude/skills/rite-vet/reference/cross-model.md +9 -9
  355. package/pack/.claude/skills/rite-vet/reference/depth.md +14 -14
  356. package/pack/.claude/skills/rite-vet/reference/eng-lenses.md +9 -9
  357. package/pack/.claude/skills/rite-vet/reference/review-axes.md +28 -28
  358. package/pack/.claude/skills/rite-zoom-out/SKILL.md +18 -18
  359. package/pack/generated/claude/agents/devrites-code-reviewer.md +21 -22
  360. package/pack/generated/claude/agents/devrites-devex-reviewer.md +17 -17
  361. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +6 -6
  362. package/pack/generated/claude/agents/devrites-forge-judge.md +26 -26
  363. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +17 -17
  364. package/pack/generated/claude/agents/devrites-performance-reviewer.md +19 -18
  365. package/pack/generated/claude/agents/devrites-plan-reviewer.md +29 -27
  366. package/pack/generated/claude/agents/devrites-retrospector.md +19 -19
  367. package/pack/generated/claude/agents/devrites-security-auditor.md +15 -15
  368. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +14 -14
  369. package/pack/generated/claude/agents/devrites-slice-wright.md +52 -51
  370. package/pack/generated/claude/agents/devrites-spec-reviewer.md +11 -11
  371. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +21 -21
  372. package/pack/generated/claude/agents/devrites-test-analyst.md +13 -13
  373. package/pack/generated/claude/settings.json +1 -1
  374. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +12 -12
  375. package/pack/generated/claude/skills/devrites-audit/SKILL.md +7 -7
  376. package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +16 -16
  377. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +14 -14
  378. package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
  379. package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
  380. package/pack/generated/claude/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
  381. package/pack/generated/claude/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
  382. package/pack/generated/claude/skills/devrites-debug-recovery/reference/trace.md +4 -4
  383. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +14 -14
  384. package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +18 -18
  385. package/pack/generated/claude/skills/devrites-frontend-craft/reference/craft.md +17 -17
  386. package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +25 -25
  387. package/pack/generated/claude/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
  388. package/pack/generated/claude/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
  389. package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
  390. package/pack/generated/claude/skills/devrites-frontend-craft/reference/shape.md +13 -13
  391. package/pack/generated/claude/skills/devrites-interview/SKILL.md +27 -27
  392. package/pack/generated/claude/skills/devrites-lib/SKILL.md +18 -18
  393. package/pack/generated/claude/skills/devrites-lib/reference/model-tiers.md +5 -5
  394. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
  395. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +10 -10
  396. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
  397. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +37 -37
  398. package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
  399. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
  400. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +40 -40
  401. package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +7 -7
  402. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
  403. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -23
  404. package/pack/generated/claude/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
  405. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +18 -18
  406. package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
  407. package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +10 -10
  408. package/pack/generated/claude/skills/devrites-lib/reference/standards/documentation.md +4 -4
  409. package/pack/generated/claude/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
  410. package/pack/generated/claude/skills/devrites-lib/reference/standards/elicitation.md +26 -26
  411. package/pack/generated/claude/skills/devrites-lib/reference/standards/error-handling.md +4 -4
  412. package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
  413. package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -3
  414. package/pack/generated/claude/skills/devrites-lib/reference/standards/observability.md +15 -15
  415. package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +8 -8
  416. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +5 -5
  417. package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +31 -31
  418. package/pack/generated/claude/skills/devrites-lib/reference/standards/prose-style.md +25 -25
  419. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +30 -30
  420. package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
  421. package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
  422. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +40 -40
  423. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +26 -26
  424. package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +5 -5
  425. package/pack/generated/claude/skills/devrites-refresh-indexes/SKILL.md +6 -6
  426. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +8 -8
  427. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +33 -33
  428. package/pack/generated/claude/skills/devrites-ux-shape/reference/brief-template.md +6 -6
  429. package/pack/generated/claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
  430. package/pack/generated/claude/skills/rite/SKILL.md +7 -7
  431. package/pack/generated/claude/skills/rite/reference/menu.md +6 -6
  432. package/pack/generated/claude/skills/rite-adopt/SKILL.md +15 -15
  433. package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +9 -9
  434. package/pack/generated/claude/skills/rite-adopt/reference/anti-patterns.md +6 -6
  435. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +14 -14
  436. package/pack/generated/claude/skills/rite-autocomplete/reference/decision-policy.md +4 -4
  437. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -7
  438. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
  439. package/pack/generated/claude/skills/rite-build/SKILL.md +22 -22
  440. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +9 -9
  441. package/pack/generated/claude/skills/rite-build/reference/anti-patterns.md +6 -6
  442. package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +14 -14
  443. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +8 -8
  444. package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +1 -1
  445. package/pack/generated/claude/skills/rite-build/reference/forge.md +28 -29
  446. package/pack/generated/claude/skills/rite-build/reference/frontend-trigger.md +2 -2
  447. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +3 -3
  448. package/pack/generated/claude/skills/rite-build/reference/output.md +1 -1
  449. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +44 -44
  450. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +1 -1
  451. package/pack/generated/claude/skills/rite-build/reference/tdd.md +6 -6
  452. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +23 -23
  453. package/pack/generated/claude/skills/rite-converge/SKILL.md +17 -17
  454. package/pack/generated/claude/skills/rite-converge/reference/anti-patterns.md +7 -7
  455. package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +14 -14
  456. package/pack/generated/claude/skills/rite-customize/SKILL.md +2 -2
  457. package/pack/generated/claude/skills/rite-define/SKILL.md +25 -25
  458. package/pack/generated/claude/skills/rite-define/reference/anti-patterns.md +5 -5
  459. package/pack/generated/claude/skills/rite-define/reference/gates.md +13 -13
  460. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +1 -1
  461. package/pack/generated/claude/skills/rite-doctor/SKILL.md +11 -11
  462. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +2 -2
  463. package/pack/generated/claude/skills/rite-explain/SKILL.md +22 -22
  464. package/pack/generated/claude/skills/rite-explain/reference/intake.md +16 -16
  465. package/pack/generated/claude/skills/rite-frame/SKILL.md +22 -22
  466. package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +13 -13
  467. package/pack/generated/claude/skills/rite-handoff/SKILL.md +12 -12
  468. package/pack/generated/claude/skills/rite-learn/SKILL.md +23 -23
  469. package/pack/generated/claude/skills/rite-plan/SKILL.md +21 -21
  470. package/pack/generated/claude/skills/rite-plan/reference/anti-patterns.md +3 -3
  471. package/pack/generated/claude/skills/rite-plan/reference/dependency-graph.md +1 -1
  472. package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +3 -3
  473. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +9 -9
  474. package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +3 -3
  475. package/pack/generated/claude/skills/rite-polish/SKILL.md +11 -11
  476. package/pack/generated/claude/skills/rite-polish/reference/anti-patterns.md +8 -8
  477. package/pack/generated/claude/skills/rite-polish/reference/backend-polish.md +13 -13
  478. package/pack/generated/claude/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
  479. package/pack/generated/claude/skills/rite-polish/reference/code.md +26 -26
  480. package/pack/generated/claude/skills/rite-polish/reference/harden-checklist.md +31 -31
  481. package/pack/generated/claude/skills/rite-polish/reference/ui.md +23 -23
  482. package/pack/generated/claude/skills/rite-pov/SKILL.md +3 -3
  483. package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +2 -2
  484. package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +14 -14
  485. package/pack/generated/claude/skills/rite-prototype/SKILL.md +13 -13
  486. package/pack/generated/claude/skills/rite-prove/SKILL.md +17 -17
  487. package/pack/generated/claude/skills/rite-prove/reference/anti-patterns.md +4 -4
  488. package/pack/generated/claude/skills/rite-prove/reference/browser-proof.md +2 -2
  489. package/pack/generated/claude/skills/rite-prove/reference/failure-triage.md +4 -4
  490. package/pack/generated/claude/skills/rite-prove/reference/proof-ladder.md +6 -6
  491. package/pack/generated/claude/skills/rite-prove/reference/test-command-discovery.md +1 -1
  492. package/pack/generated/claude/skills/rite-quick/SKILL.md +22 -22
  493. package/pack/generated/claude/skills/rite-resolve/SKILL.md +18 -18
  494. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +7 -7
  495. package/pack/generated/claude/skills/rite-review/SKILL.md +34 -34
  496. package/pack/generated/claude/skills/rite-review/reference/anti-patterns.md +4 -4
  497. package/pack/generated/claude/skills/rite-review/reference/cognitive-load.md +22 -22
  498. package/pack/generated/claude/skills/rite-review/reference/feature-scoped-review.md +2 -2
  499. package/pack/generated/claude/skills/rite-review/reference/five-axis-review.md +8 -8
  500. package/pack/generated/claude/skills/rite-review/reference/nielsen-heuristics.md +14 -14
  501. package/pack/generated/claude/skills/rite-review/reference/performance-checklist.md +14 -14
  502. package/pack/generated/claude/skills/rite-review/reference/security-review.md +9 -9
  503. package/pack/generated/claude/skills/rite-seal/SKILL.md +26 -26
  504. package/pack/generated/claude/skills/rite-seal/reference/anti-patterns.md +8 -8
  505. package/pack/generated/claude/skills/rite-seal/reference/conventions-ledger.md +8 -8
  506. package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +9 -9
  507. package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +9 -9
  508. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +43 -43
  509. package/pack/generated/claude/skills/rite-ship/SKILL.md +12 -12
  510. package/pack/generated/claude/skills/rite-ship/reference/anti-patterns.md +5 -5
  511. package/pack/generated/claude/skills/rite-ship/reference/close-out.md +2 -2
  512. package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +22 -22
  513. package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +10 -10
  514. package/pack/generated/claude/skills/rite-ship/reference/ledger.md +9 -9
  515. package/pack/generated/claude/skills/rite-ship/reference/rollout.md +11 -11
  516. package/pack/generated/claude/skills/rite-ship/reference/ship-template.md +1 -1
  517. package/pack/generated/claude/skills/rite-spec/SKILL.md +45 -45
  518. package/pack/generated/claude/skills/rite-spec/reference/acceptance-criteria.md +4 -4
  519. package/pack/generated/claude/skills/rite-spec/reference/anti-patterns.md +6 -6
  520. package/pack/generated/claude/skills/rite-spec/reference/interview-patterns.md +3 -3
  521. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +21 -21
  522. package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +9 -9
  523. package/pack/generated/claude/skills/rite-spec/reference/references-intake.md +8 -8
  524. package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +19 -19
  525. package/pack/generated/claude/skills/rite-status/SKILL.md +13 -13
  526. package/pack/generated/claude/skills/rite-temper/SKILL.md +29 -29
  527. package/pack/generated/claude/skills/rite-temper/reference/anti-patterns.md +11 -11
  528. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +20 -20
  529. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +16 -16
  530. package/pack/generated/claude/skills/rite-temper/reference/significance.md +10 -10
  531. package/pack/generated/claude/skills/rite-temper/reference/strategy-template.md +14 -14
  532. package/pack/generated/claude/skills/rite-vet/SKILL.md +31 -31
  533. package/pack/generated/claude/skills/rite-vet/reference/anti-patterns.md +14 -14
  534. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -10
  535. package/pack/generated/claude/skills/rite-vet/reference/cross-model.md +9 -9
  536. package/pack/generated/claude/skills/rite-vet/reference/depth.md +14 -14
  537. package/pack/generated/claude/skills/rite-vet/reference/eng-lenses.md +9 -9
  538. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +28 -28
  539. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +18 -18
  540. package/pack/generated/codex/agents/devrites-code-reviewer.toml +21 -22
  541. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +17 -17
  542. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +6 -6
  543. package/pack/generated/codex/agents/devrites-forge-judge.toml +26 -26
  544. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +17 -17
  545. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +19 -18
  546. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +29 -27
  547. package/pack/generated/codex/agents/devrites-retrospector.toml +19 -19
  548. package/pack/generated/codex/agents/devrites-security-auditor.toml +15 -15
  549. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +14 -14
  550. package/pack/generated/codex/agents/devrites-slice-wright.toml +52 -51
  551. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +11 -11
  552. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +21 -21
  553. package/pack/generated/codex/agents/devrites-test-analyst.toml +13 -13
  554. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +15 -15
  555. package/pack/generated/codex/skills/devrites-audit/SKILL.md +10 -10
  556. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +19 -19
  557. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +17 -17
  558. package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
  559. package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
  560. package/pack/generated/codex/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
  561. package/pack/generated/codex/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
  562. package/pack/generated/codex/skills/devrites-debug-recovery/reference/trace.md +4 -4
  563. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +17 -17
  564. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +20 -20
  565. package/pack/generated/codex/skills/devrites-frontend-craft/reference/craft.md +17 -17
  566. package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +25 -25
  567. package/pack/generated/codex/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
  568. package/pack/generated/codex/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
  569. package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
  570. package/pack/generated/codex/skills/devrites-frontend-craft/reference/shape.md +13 -13
  571. package/pack/generated/codex/skills/devrites-interview/SKILL.md +30 -30
  572. package/pack/generated/codex/skills/devrites-lib/SKILL.md +21 -21
  573. package/pack/generated/codex/skills/devrites-lib/reference/model-tiers.md +5 -5
  574. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
  575. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +10 -10
  576. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
  577. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +37 -37
  578. package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
  579. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
  580. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +40 -40
  581. package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +7 -7
  582. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
  583. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -23
  584. package/pack/generated/codex/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
  585. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +18 -18
  586. package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
  587. package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +10 -10
  588. package/pack/generated/codex/skills/devrites-lib/reference/standards/documentation.md +4 -4
  589. package/pack/generated/codex/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
  590. package/pack/generated/codex/skills/devrites-lib/reference/standards/elicitation.md +26 -26
  591. package/pack/generated/codex/skills/devrites-lib/reference/standards/error-handling.md +4 -4
  592. package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
  593. package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -3
  594. package/pack/generated/codex/skills/devrites-lib/reference/standards/observability.md +15 -15
  595. package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +8 -8
  596. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +5 -5
  597. package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +31 -31
  598. package/pack/generated/codex/skills/devrites-lib/reference/standards/prose-style.md +25 -25
  599. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +30 -30
  600. package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
  601. package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
  602. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +40 -40
  603. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +26 -26
  604. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +8 -8
  605. package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +9 -9
  606. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +11 -11
  607. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +36 -36
  608. package/pack/generated/codex/skills/devrites-ux-shape/reference/brief-template.md +6 -6
  609. package/pack/generated/codex/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
  610. package/pack/generated/codex/skills/rite/SKILL.md +10 -10
  611. package/pack/generated/codex/skills/rite/reference/menu.md +6 -6
  612. package/pack/generated/codex/skills/rite-adopt/SKILL.md +18 -18
  613. package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +9 -9
  614. package/pack/generated/codex/skills/rite-adopt/reference/anti-patterns.md +6 -6
  615. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +17 -17
  616. package/pack/generated/codex/skills/rite-autocomplete/reference/decision-policy.md +4 -4
  617. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -7
  618. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
  619. package/pack/generated/codex/skills/rite-build/SKILL.md +25 -25
  620. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +9 -9
  621. package/pack/generated/codex/skills/rite-build/reference/anti-patterns.md +6 -6
  622. package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +14 -14
  623. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +8 -8
  624. package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +1 -1
  625. package/pack/generated/codex/skills/rite-build/reference/forge.md +28 -29
  626. package/pack/generated/codex/skills/rite-build/reference/frontend-trigger.md +2 -2
  627. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +3 -3
  628. package/pack/generated/codex/skills/rite-build/reference/output.md +1 -1
  629. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +44 -44
  630. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +1 -1
  631. package/pack/generated/codex/skills/rite-build/reference/tdd.md +6 -6
  632. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +23 -23
  633. package/pack/generated/codex/skills/rite-converge/SKILL.md +20 -20
  634. package/pack/generated/codex/skills/rite-converge/reference/anti-patterns.md +7 -7
  635. package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +14 -14
  636. package/pack/generated/codex/skills/rite-customize/SKILL.md +5 -5
  637. package/pack/generated/codex/skills/rite-define/SKILL.md +28 -28
  638. package/pack/generated/codex/skills/rite-define/reference/anti-patterns.md +5 -5
  639. package/pack/generated/codex/skills/rite-define/reference/gates.md +13 -13
  640. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +1 -1
  641. package/pack/generated/codex/skills/rite-doctor/SKILL.md +14 -14
  642. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +5 -5
  643. package/pack/generated/codex/skills/rite-explain/SKILL.md +25 -25
  644. package/pack/generated/codex/skills/rite-explain/reference/intake.md +16 -16
  645. package/pack/generated/codex/skills/rite-frame/SKILL.md +25 -25
  646. package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +13 -13
  647. package/pack/generated/codex/skills/rite-handoff/SKILL.md +15 -15
  648. package/pack/generated/codex/skills/rite-learn/SKILL.md +26 -26
  649. package/pack/generated/codex/skills/rite-plan/SKILL.md +24 -24
  650. package/pack/generated/codex/skills/rite-plan/reference/anti-patterns.md +3 -3
  651. package/pack/generated/codex/skills/rite-plan/reference/dependency-graph.md +1 -1
  652. package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +3 -3
  653. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +9 -9
  654. package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +3 -3
  655. package/pack/generated/codex/skills/rite-polish/SKILL.md +14 -14
  656. package/pack/generated/codex/skills/rite-polish/reference/anti-patterns.md +8 -8
  657. package/pack/generated/codex/skills/rite-polish/reference/backend-polish.md +13 -13
  658. package/pack/generated/codex/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
  659. package/pack/generated/codex/skills/rite-polish/reference/code.md +26 -26
  660. package/pack/generated/codex/skills/rite-polish/reference/harden-checklist.md +31 -31
  661. package/pack/generated/codex/skills/rite-polish/reference/ui.md +23 -23
  662. package/pack/generated/codex/skills/rite-pov/SKILL.md +6 -6
  663. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +5 -5
  664. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +17 -17
  665. package/pack/generated/codex/skills/rite-prototype/SKILL.md +16 -16
  666. package/pack/generated/codex/skills/rite-prove/SKILL.md +20 -20
  667. package/pack/generated/codex/skills/rite-prove/reference/anti-patterns.md +4 -4
  668. package/pack/generated/codex/skills/rite-prove/reference/browser-proof.md +2 -2
  669. package/pack/generated/codex/skills/rite-prove/reference/failure-triage.md +4 -4
  670. package/pack/generated/codex/skills/rite-prove/reference/proof-ladder.md +6 -6
  671. package/pack/generated/codex/skills/rite-prove/reference/test-command-discovery.md +1 -1
  672. package/pack/generated/codex/skills/rite-quick/SKILL.md +25 -25
  673. package/pack/generated/codex/skills/rite-resolve/SKILL.md +21 -21
  674. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +7 -7
  675. package/pack/generated/codex/skills/rite-review/SKILL.md +37 -37
  676. package/pack/generated/codex/skills/rite-review/reference/anti-patterns.md +4 -4
  677. package/pack/generated/codex/skills/rite-review/reference/cognitive-load.md +22 -22
  678. package/pack/generated/codex/skills/rite-review/reference/feature-scoped-review.md +2 -2
  679. package/pack/generated/codex/skills/rite-review/reference/five-axis-review.md +8 -8
  680. package/pack/generated/codex/skills/rite-review/reference/nielsen-heuristics.md +14 -14
  681. package/pack/generated/codex/skills/rite-review/reference/performance-checklist.md +14 -14
  682. package/pack/generated/codex/skills/rite-review/reference/security-review.md +9 -9
  683. package/pack/generated/codex/skills/rite-seal/SKILL.md +29 -29
  684. package/pack/generated/codex/skills/rite-seal/reference/anti-patterns.md +8 -8
  685. package/pack/generated/codex/skills/rite-seal/reference/conventions-ledger.md +8 -8
  686. package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +9 -9
  687. package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +9 -9
  688. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +43 -43
  689. package/pack/generated/codex/skills/rite-ship/SKILL.md +15 -15
  690. package/pack/generated/codex/skills/rite-ship/reference/anti-patterns.md +5 -5
  691. package/pack/generated/codex/skills/rite-ship/reference/close-out.md +2 -2
  692. package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +22 -22
  693. package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +10 -10
  694. package/pack/generated/codex/skills/rite-ship/reference/ledger.md +9 -9
  695. package/pack/generated/codex/skills/rite-ship/reference/rollout.md +11 -11
  696. package/pack/generated/codex/skills/rite-ship/reference/ship-template.md +1 -1
  697. package/pack/generated/codex/skills/rite-spec/SKILL.md +48 -48
  698. package/pack/generated/codex/skills/rite-spec/reference/acceptance-criteria.md +4 -4
  699. package/pack/generated/codex/skills/rite-spec/reference/anti-patterns.md +6 -6
  700. package/pack/generated/codex/skills/rite-spec/reference/interview-patterns.md +3 -3
  701. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +21 -21
  702. package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +9 -9
  703. package/pack/generated/codex/skills/rite-spec/reference/references-intake.md +8 -8
  704. package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +19 -19
  705. package/pack/generated/codex/skills/rite-status/SKILL.md +16 -16
  706. package/pack/generated/codex/skills/rite-temper/SKILL.md +32 -32
  707. package/pack/generated/codex/skills/rite-temper/reference/anti-patterns.md +11 -11
  708. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +20 -20
  709. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +16 -16
  710. package/pack/generated/codex/skills/rite-temper/reference/significance.md +10 -10
  711. package/pack/generated/codex/skills/rite-temper/reference/strategy-template.md +14 -14
  712. package/pack/generated/codex/skills/rite-vet/SKILL.md +34 -34
  713. package/pack/generated/codex/skills/rite-vet/reference/anti-patterns.md +14 -14
  714. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -10
  715. package/pack/generated/codex/skills/rite-vet/reference/cross-model.md +9 -9
  716. package/pack/generated/codex/skills/rite-vet/reference/depth.md +14 -14
  717. package/pack/generated/codex/skills/rite-vet/reference/eng-lenses.md +9 -9
  718. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +28 -28
  719. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +21 -21
  720. package/package.json +2 -2
  721. package/scripts/build-binaries.sh +1 -1
  722. package/scripts/build-host-artifacts.sh +1 -1
  723. package/scripts/build-release-tarball.sh +1 -1
  724. package/scripts/check-cross-refs.py +8 -8
  725. package/scripts/check-invocation-integrity.py +4 -4
  726. package/scripts/check-no-global-writes.sh +2 -2
  727. package/scripts/check-reply-contract.sh +1 -1
  728. package/scripts/check-rule-uniqueness.sh +2 -2
  729. package/scripts/codex-generate.sh +5 -5
  730. package/scripts/devrites-detect.sh +33 -33
  731. package/scripts/eval-runner.py +7 -7
  732. package/scripts/grade-feature.sh +14 -14
  733. package/scripts/install-lib.sh +2 -2
  734. package/scripts/pin.sh +12 -12
  735. package/scripts/run-behavioral-evals.sh +12 -12
  736. package/scripts/run-evals.sh +1 -1
  737. package/scripts/run-outcome-evals.sh +12 -12
  738. package/scripts/scan-pack-security.py +4 -4
  739. package/scripts/scan-supply-chain-iocs.py +7 -7
  740. package/scripts/skills-inventory.mjs +7 -8
  741. package/scripts/sync-version.sh +2 -2
  742. package/scripts/validate-workflow-security.py +12 -6
  743. package/scripts/validate-workspace-schema.py +2 -2
  744. package/scripts/validate.sh +7 -7
@@ -4,9 +4,12 @@ import (
4
4
  "archive/tar"
5
5
  "bytes"
6
6
  "compress/gzip"
7
+ "crypto/sha256"
7
8
  "encoding/json"
8
9
  "fmt"
9
10
  "io/fs"
11
+ "net/http"
12
+ "net/http/httptest"
10
13
  "os"
11
14
  "path/filepath"
12
15
  "runtime"
@@ -195,7 +198,7 @@ func TestInstallMergesClaudeHooksIntoExistingSettings(t *testing.T) {
195
198
  }`+"\n")
196
199
  target := t.TempDir()
197
200
  testutil.WriteFile(t, filepath.Join(target, ".claude", "settings.json"), `{
198
- "$comment": "DevRites hooks keep my local notes",
201
+ "$comment": "DevRites hooks: keep my local notes",
199
202
  "theme": "dark",
200
203
  "statusLine": {"type":"command","command":"DEVRITES_THEME=dark echo user-status"},
201
204
  "hooks": {"Stop":[{"hooks":[
@@ -209,7 +212,7 @@ func TestInstallMergesClaudeHooksIntoExistingSettings(t *testing.T) {
209
212
  runInstall(t, target, payload, func(o *Options) { o.Stderr = &stderr })
210
213
 
211
214
  settings := testutil.ReadFile(t, filepath.Join(target, ".claude", "settings.json"))
212
- for _, preserved := range []string{"DevRites hooks keep my local notes", `"theme": "dark"`, "echo user-status", "echo user-stop"} {
215
+ for _, preserved := range []string{"DevRites hooks: keep my local notes", `"theme": "dark"`, "echo user-status", "echo user-stop"} {
213
216
  if !strings.Contains(settings, preserved) {
214
217
  t.Fatalf("Claude settings lost user content %q:\n%s", preserved, settings)
215
218
  }
@@ -229,7 +232,7 @@ func TestInstallMergesClaudeHooksIntoExistingSettings(t *testing.T) {
229
232
 
230
233
  runUninstall(t, target)
231
234
  settings = testutil.ReadFile(t, filepath.Join(target, ".claude", "settings.json"))
232
- for _, preserved := range []string{"DevRites hooks keep my local notes", `"theme": "dark"`, "echo user-status", "echo user-stop"} {
235
+ for _, preserved := range []string{"DevRites hooks: keep my local notes", `"theme": "dark"`, "echo user-status", "echo user-stop"} {
233
236
  if !strings.Contains(settings, preserved) {
234
237
  t.Fatalf("Claude settings uninstall lost user content %q:\n%s", preserved, settings)
235
238
  }
@@ -347,6 +350,111 @@ func TestInstallBinaryUsesEngineHandoff(t *testing.T) {
347
350
  }
348
351
  }
349
352
 
353
+ func TestAcquireBinaryBuildsWithoutVCSMetadata(t *testing.T) {
354
+ t.Setenv("DEVRITES_ENGINE_CLI", "")
355
+ t.Setenv("DEVRITES_UPDATE_BUNDLE", "")
356
+ t.Setenv("GOFLAGS", "-buildvcs=true")
357
+ source := t.TempDir()
358
+ if err := os.Mkdir(filepath.Join(source, ".git"), 0o755); err != nil {
359
+ t.Fatal(err)
360
+ }
361
+ testutil.WriteFile(t, filepath.Join(source, "engine", "go.mod"), "module github.com/devrites/devrites\n\ngo 1.23\n")
362
+ testutil.WriteFile(t, filepath.Join(source, "engine", "main.go"), "package main\nfunc main() {}\n")
363
+
364
+ r := runner{source: source}
365
+ staged, cleanup, err := r.acquireBinary("v1.2.3", githubBaseURL)
366
+ defer cleanup()
367
+ if err != nil {
368
+ t.Fatalf("acquireBinary with unavailable VCS metadata: %v", err)
369
+ }
370
+ if !exists(staged) {
371
+ t.Fatalf("acquireBinary did not build %s", staged)
372
+ }
373
+ }
374
+
375
+ func TestAcquireBinaryPrefersVerifiedReleaseOverStaleHandoff(t *testing.T) {
376
+ stale := filepath.Join(t.TempDir(), "devrites-engine")
377
+ testutil.WriteExecutable(t, stale, "#!/bin/sh\nif [ \"$1\" = version ]; then echo v1.2.2; fi\n")
378
+ t.Setenv("DEVRITES_ENGINE_CLI", stale)
379
+ t.Setenv("DEVRITES_UPDATE_BUNDLE", "")
380
+ t.Setenv("DEVRITES_REPO", "owner/repo")
381
+ tag := "v1.2.3"
382
+ asset := fmt.Sprintf("devrites-%s-%s", runtime.GOOS, runtime.GOARCH)
383
+ if runtime.GOOS == "windows" {
384
+ asset += ".exe"
385
+ }
386
+ path := "/owner/repo/releases/download/" + tag + "/" + asset
387
+ body := []byte("verified release binary")
388
+ sum := fmt.Sprintf("%x %s\n", sha256.Sum256(body), asset)
389
+ server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
390
+ switch req.URL.Path {
391
+ case path:
392
+ _, _ = w.Write(body)
393
+ case path + ".sha256":
394
+ _, _ = w.Write([]byte(sum))
395
+ default:
396
+ http.NotFound(w, req)
397
+ }
398
+ }))
399
+ defer server.Close()
400
+
401
+ r := runner{releaseBinaryTag: tag}
402
+ staged, cleanup, err := r.acquireBinary(tag, server.URL)
403
+ defer cleanup()
404
+ if err != nil {
405
+ t.Fatalf("acquire verified release binary: %v", err)
406
+ }
407
+ got, err := os.ReadFile(staged)
408
+ if err != nil {
409
+ t.Fatal(err)
410
+ }
411
+ if !bytes.Equal(got, body) {
412
+ t.Fatalf("acquired binary = %q, want %q", got, body)
413
+ }
414
+ }
415
+
416
+ func TestAcquireBinaryRejectsReleaseChecksumMismatch(t *testing.T) {
417
+ t.Setenv("DEVRITES_ENGINE_CLI", "")
418
+ t.Setenv("DEVRITES_UPDATE_BUNDLE", "")
419
+ t.Setenv("DEVRITES_REPO", "owner/repo")
420
+ tag := "v1.2.3"
421
+ source := t.TempDir()
422
+ testutil.WriteFile(t, filepath.Join(source, "engine", "go.mod"), "module github.com/devrites/devrites\n\ngo 1.23\n")
423
+ testutil.WriteFile(t, filepath.Join(source, "engine", "main.go"), "package main\nfunc main() {}\n")
424
+ server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
425
+ if strings.HasSuffix(req.URL.Path, ".sha256") {
426
+ _, _ = w.Write([]byte("deadbeef\n"))
427
+ return
428
+ }
429
+ _, _ = w.Write([]byte("tampered release binary"))
430
+ }))
431
+ defer server.Close()
432
+
433
+ r := runner{source: source, releaseBinaryTag: tag}
434
+ _, cleanup, err := r.acquireBinary(tag, server.URL)
435
+ defer cleanup()
436
+ if err == nil || !strings.Contains(err.Error(), "checksum mismatch") {
437
+ t.Fatalf("acquireBinary error = %v, want checksum mismatch", err)
438
+ }
439
+ }
440
+
441
+ func TestInstallBinaryFailsWhenPreparedUpdateCannotBeWritten(t *testing.T) {
442
+ prepared := filepath.Join(t.TempDir(), "devrites-engine")
443
+ testutil.WriteExecutable(t, prepared, "#!/bin/sh\n")
444
+ blocked := filepath.Join(t.TempDir(), "not-a-directory")
445
+ testutil.WriteFile(t, blocked, "file\n")
446
+ t.Setenv("DEVRITES_BIN_DIR", filepath.Join(blocked, "bin"))
447
+ t.Setenv("DEVRITES_REF", "v1.2.3")
448
+
449
+ r := runner{
450
+ opts: DefaultOptions(ModeInstall),
451
+ preparedBinary: prepared,
452
+ }
453
+ if err := r.installBinary(); err == nil {
454
+ t.Fatal("installBinary accepted a prepared update it could not write")
455
+ }
456
+ }
457
+
350
458
  func TestInstallBinaryWarnsWhenHooksCannotResolveEngine(t *testing.T) {
351
459
  payload := testPayload(t)
352
460
  target := t.TempDir()
@@ -5,7 +5,7 @@ package iohooks
5
5
  import "syscall"
6
6
 
7
7
  // detachSysProcAttr starts the refresh worker in its own session so it outlives the
8
- // Stop hook that spawned it the detached-background contract of refresh-indexes.
8
+ // Stop hook that spawned it: the detached-background contract of refresh-indexes.
9
9
  func detachSysProcAttr() *syscall.SysProcAttr {
10
10
  return &syscall.SysProcAttr{Setsid: true}
11
11
  }
@@ -1,6 +1,6 @@
1
1
  package iohooks
2
2
 
3
- // IO hooks: the ported bash hooks that do network or process-orchestration IO
3
+ // IO hooks: the ported bash hooks that do network or process-orchestration IO:
4
4
  // the source-citation cache (a conditional-HEAD revalidation cache) and the
5
5
  // code-index refresher (a detached background reindex). Unlike the deterministic
6
6
  // control-plane hooks these reach the network / spawn processes; they are kept in
@@ -47,7 +47,7 @@ type sourceCacheEntry struct {
47
47
 
48
48
  func sourceCacheOff() bool { return os.Getenv("DEVRITES_SOURCE_CACHE") == "off" }
49
49
 
50
- // ioProjectDir is the repo root the IO hooks key off CLAUDE_PROJECT_DIR or CWD,
50
+ // ioProjectDir is the repo root the IO hooks key off: CLAUDE_PROJECT_DIR or CWD,
51
51
  // like the shell hooks. (The cache is project-global under .devrites/, not
52
52
  // feature-scoped, so it does not use the feature-dir resolver.)
53
53
  func ioProjectDir() string {
@@ -61,7 +61,7 @@ func ioProjectDir() string {
61
61
  }
62
62
 
63
63
  // sourceCachePath is the entry path for a URL: .devrites/source-cache/<key>.json,
64
- // keyed on the first 32 hex chars of sha256(url) matching the shell hooks.
64
+ // keyed on the first 32 hex chars of sha256(url): matching the shell hooks.
65
65
  func sourceCachePath(url string) string {
66
66
  sum := sha256.Sum256([]byte(url))
67
67
  key := hex.EncodeToString(sum[:])[:32]
@@ -69,7 +69,7 @@ func sourceCachePath(url string) string {
69
69
  }
70
70
 
71
71
  // hookSourceCachePre serves a cached page reading ONLY after revalidating it with a
72
- // conditional HEAD that returns 304 a fresh verification, not a memory read.
72
+ // conditional HEAD that returns 304: a fresh verification, not a memory read.
73
73
  // Ported from devrites-source-cache-pre.sh. Cache hit → the reading on stderr +
74
74
  // exit 2 (Claude hands that to the agent in place of the fetch); miss/uncertain →
75
75
  // exit 0 (the real WebFetch proceeds). Fail-open on every uncertainty.
@@ -124,7 +124,7 @@ func SourceCachePre(stdin io.Reader, stdout, stderr io.Writer) int {
124
124
  fetched = "a previous fetch"
125
125
  }
126
126
  fmt.Fprintf(stderr, "[devrites-source-cache] Cache hit for %s\n", url)
127
- fmt.Fprintf(stderr, "Revalidated via HTTP 304 the page is unchanged since %s, so this cached reading is still a valid citation.\n", fetched)
127
+ fmt.Fprintf(stderr, "Revalidated via HTTP 304: the page is unchanged since %s, so this cached reading is still a valid citation.\n", fetched)
128
128
  if e.Prompt != "" {
129
129
  fmt.Fprintf(stderr, "Cached under the prompt: %q. If your angle differs, judge whether this reading still covers it before re-fetching.\n", e.Prompt)
130
130
  }
@@ -135,7 +135,7 @@ func SourceCachePre(stdin io.Reader, stdout, stderr io.Writer) int {
135
135
  }
136
136
 
137
137
  // hookSourceCachePost stores a completed WebFetch keyed on sha256(url) together with
138
- // the origin's validator headers but only when the origin supplies a validator
138
+ // the origin's validator headers, but only when the origin supplies a validator
139
139
  // (else a later 304 could never prove freshness). Ported from
140
140
  // devrites-source-cache-post.sh. Always exit 0.
141
141
  func SourceCachePost(stdin io.Reader, stdout, stderr io.Writer) int {
@@ -390,7 +390,7 @@ func computeRefreshState(root string) refreshState {
390
390
  }
391
391
 
392
392
  // repoChangedSince reports whether any tracked file under root is newer than the
393
- // stamp, skipping the excluded directories the Go form of the script's `find
393
+ // stamp, skipping the excluded directories: the Go form of the script's `find
394
394
  // -newer`. It returns on the first newer file found.
395
395
  func repoChangedSince(root, stamp string) bool {
396
396
  info, err := os.Stat(stamp)
@@ -505,7 +505,7 @@ func runIndexTool(out io.Writer, timeout time.Duration, name string, args ...str
505
505
  }
506
506
  }
507
507
 
508
- // cbmRegistered reports whether codebase-memory-mcp is installed AND tracks root
508
+ // cbmRegistered reports whether codebase-memory-mcp is installed AND tracks root:
509
509
  // a cheap repo-local marker first, then the project registry.
510
510
  func cbmRegistered(root string) bool {
511
511
  if !hasTool("codebase-memory-mcp") {
@@ -320,7 +320,7 @@ func Decisions(root string, args []string, stdout, stderr io.Writer) int {
320
320
  }
321
321
  }
322
322
  for _, e := range matches {
323
- fmt.Fprintf(stdout, "%s:%d %s %s\n", e.Path, e.Line, e.Slug, e.Text)
323
+ fmt.Fprintf(stdout, "%s:%d %s: %s\n", e.Path, e.Line, e.Slug, e.Text)
324
324
  }
325
325
  if len(matches) == 0 {
326
326
  fmt.Fprintln(stdout, "decisions: no matches.")
@@ -15,10 +15,10 @@ import (
15
15
  // written, so a coverage gap surfaces as a one-line plan edit rather than a reslice
16
16
  // mid-build. It emits a markdown report and flags:
17
17
  //
18
- // Coverage a spec AC id that no slice Satisfies (CRITICAL)
19
- // Consistency a slice that Satisfies an AC the spec never defines (CRITICAL)
20
- // Orphan slice a slice that satisfies no acceptance criterion (warn)
21
- // Ambiguity an unquantified vague adjective or unresolved
18
+ // Coverage : a spec AC id that no slice Satisfies (CRITICAL)
19
+ // Consistency : a slice that Satisfies an AC the spec never defines (CRITICAL)
20
+ // Orphan slice: a slice that satisfies no acceptance criterion (warn)
21
+ // Ambiguity : an unquantified vague adjective or unresolved
22
22
  // placeholder in the spec (warn)
23
23
  //
24
24
  // It closes with a Metrics line (criteria count, coverage %, orphan + ambiguity
@@ -69,14 +69,14 @@ func Analyze(root string, args []string, stdout, stderr io.Writer) int {
69
69
  covered := 0
70
70
  fmt.Fprintln(stdout, "## Coverage")
71
71
  if len(specACs) == 0 {
72
- fmt.Fprintln(stdout, "- [warn] spec.md no AC-### acceptance ids found; tag criteria for a machine-checkable gate.")
72
+ fmt.Fprintln(stdout, "- [warn] spec.md: no AC-### acceptance ids found; tag criteria for a machine-checkable gate.")
73
73
  } else {
74
74
  for _, ac := range specACs {
75
75
  if taskSet[ac] {
76
76
  covered++
77
- fmt.Fprintf(stdout, "- [ok] %s covered\n", ac)
77
+ fmt.Fprintf(stdout, "- [ok] %s: covered\n", ac)
78
78
  } else {
79
- fmt.Fprintf(stdout, "- [CRITICAL] %s (spec.md) no slice Satisfies it (uncovered)\n", ac)
79
+ fmt.Fprintf(stdout, "- [CRITICAL] %s (spec.md): no slice Satisfies it (uncovered)\n", ac)
80
80
  crit++
81
81
  }
82
82
  }
@@ -88,7 +88,7 @@ func Analyze(root string, args []string, stdout, stderr io.Writer) int {
88
88
  if len(taskACs) > 0 {
89
89
  for _, ac := range taskACs {
90
90
  if !specSet[ac] {
91
- fmt.Fprintf(stdout, "- [CRITICAL] %s (tasks.md) referenced by a slice but not defined in spec.md (dangling)\n", ac)
91
+ fmt.Fprintf(stdout, "- [CRITICAL] %s (tasks.md): referenced by a slice but not defined in spec.md (dangling)\n", ac)
92
92
  crit++
93
93
  }
94
94
  }
@@ -99,7 +99,7 @@ func Analyze(root string, args []string, stdout, stderr io.Writer) int {
99
99
  for _, name := range orphanSlices(tasksData) {
100
100
  if name != "" {
101
101
  orphans++
102
- fmt.Fprintf(stdout, "- [warn] slice '%s' satisfies no acceptance criterion (add Satisfies: or justify)\n", name)
102
+ fmt.Fprintf(stdout, "- [warn] slice '%s': satisfies no acceptance criterion (add Satisfies, or justify)\n", name)
103
103
  }
104
104
  }
105
105
 
@@ -127,17 +127,17 @@ func Analyze(root string, args []string, stdout, stderr io.Writer) int {
127
127
 
128
128
  fmt.Fprintln(stdout)
129
129
  if crit > 0 {
130
- fmt.Fprintf(stdout, "## Verdict: BLOCKED %d CRITICAL finding(s). Resolve before %s.\n", crit, workflow.ForVerb("build").Both())
130
+ fmt.Fprintf(stdout, "## Verdict: BLOCKED: %d CRITICAL finding(s). Resolve before %s.\n", crit, workflow.ForVerb("build").Both())
131
131
  return 1
132
132
  }
133
- fmt.Fprintln(stdout, "## Verdict: clear spec/tasks consistent and fully mapped.")
133
+ fmt.Fprintln(stdout, "## Verdict: clear: spec/tasks consistent and fully mapped.")
134
134
  return 0
135
135
  }
136
136
 
137
137
  // ambiguityFindings scans spec text for unfalsifiable criteria: a vague quality
138
138
  // adjective (fast, robust, secure …) on a line with no number to pin it down, or an
139
139
  // unresolved placeholder (TODO, ???, <placeholder> …). Code fences are skipped. One
140
- // finding per line a placeholder takes precedence over an adjective. 1-based lines.
140
+ // finding per line: a placeholder takes precedence over an adjective. 1-based lines.
141
141
  func ambiguityFindings(specData []byte) []string {
142
142
  var out []string
143
143
  inFence := false
@@ -151,16 +151,16 @@ func ambiguityFindings(specData []byte) []string {
151
151
  }
152
152
  ln := i + 1
153
153
  if m := placeholderRe.FindString(line); m != "" {
154
- out = append(out, fmt.Sprintf("- [warn] spec.md:L%d unresolved placeholder %q", ln, m))
154
+ out = append(out, fmt.Sprintf("- [warn] spec.md:L%d: unresolved placeholder %q", ln, m))
155
155
  continue
156
156
  }
157
- // Strip the AC id before the digit gate else the id's own digit masks
157
+ // Strip the AC id before the digit gate: else the id's own digit masks
158
158
  // a vague adjective on the very criterion line it tags.
159
159
  bare := acIDRe.ReplaceAllString(line, "")
160
160
  bare = taskACRe.ReplaceAllString(bare, "")
161
161
  if !analyzeDigitRe.MatchString(bare) {
162
162
  if m := vagueAdjRe.FindString(bare); m != "" {
163
- out = append(out, fmt.Sprintf("- [warn] spec.md:L%d %q is not quantified; state a measurable target", ln, m))
163
+ out = append(out, fmt.Sprintf("- [warn] spec.md:L%d: %q is not quantified; state a measurable target", ln, m))
164
164
  }
165
165
  }
166
166
  }
@@ -10,7 +10,7 @@ import (
10
10
  )
11
11
 
12
12
  // ArchiveSearch surfaces shipped features whose spec.md overlaps a query, so
13
- // /rite-spec can spot prior art before writing a new spec an extension, a
13
+ // /rite-spec can spot prior art before writing a new spec: an extension, a
14
14
  // conflict, or a re-spec of solved work. It is advisory, not a gate: it always
15
15
  // exits 0 when it runs (empty output means no overlap), and reserves exit 2 for
16
16
  // a missing query. The query is the feature's key nouns, one or many args; a
@@ -36,7 +36,7 @@ func ArchiveSearch(root string, args []string, stdout, stderr io.Writer) int {
36
36
 
37
37
  entries, err := os.ReadDir(filepath.Join(root, "archive"))
38
38
  if err != nil {
39
- // No archive yet no prior art to surface. Silent, successful no-op.
39
+ // No archive yet: no prior art to surface. Silent, successful no-op.
40
40
  return 0
41
41
  }
42
42
 
@@ -80,7 +80,7 @@ func ArchiveSearch(root string, args []string, stdout, stderr io.Writer) int {
80
80
  }
81
81
 
82
82
  // specTitle returns the spec's first Markdown heading, or its first non-empty
83
- // line, as a one-line label empty when the spec has neither.
83
+ // line, as a one-line label: empty when the spec has neither.
84
84
  func specTitle(b []byte) string {
85
85
  for _, line := range strings.Split(string(b), "\n") {
86
86
  line = strings.TrimSpace(line)
@@ -10,7 +10,7 @@ import (
10
10
  // The context-budget lint. A feature is deliberately a directory of small,
11
11
  // single-concern files rather than one long document: each file stays
12
12
  // context-cheap to read, and completeness is self-evident from which files
13
- // exist. That discipline only holds if the files stay small a spec.md that
13
+ // exist. That discipline only holds if the files stay small: a spec.md that
14
14
  // grows to 800 lines is a "sausage" that an agent must load whole, spending the
15
15
  // context window it was meant to conserve. Budget measures every workspace file
16
16
  // against a per-file line ceiling and flags the overgrown ones.
@@ -107,10 +107,10 @@ func Budget(root string, args []string, stdout, stderr io.Writer) int {
107
107
  return 0
108
108
  }
109
109
  if strict {
110
- fmt.Fprintf(stdout, "budget: %d file(s) over the line budget split or trim them\n", over)
110
+ fmt.Fprintf(stdout, "budget: %d file(s) over the line budget: split or trim them\n", over)
111
111
  return 3
112
112
  }
113
- fmt.Fprintf(stdout, "budget: %d file(s) over the line budget (advisory pass --strict to fail)\n", over)
113
+ fmt.Fprintf(stdout, "budget: %d file(s) over the line budget (advisory: pass --strict to fail)\n", over)
114
114
  return 0
115
115
  }
116
116
 
@@ -12,7 +12,7 @@ import (
12
12
  )
13
13
 
14
14
  // BuildReadiness decides whether a feature is ready to build, reading only its
15
- // recorded state (state.md) an open HITL question, a blocked plan, or an
15
+ // recorded state (state.md): an open HITL question, a blocked plan, or an
16
16
  // unapproved plan each stops the build with a distinct, actionable exit code
17
17
  // rather than trusting the model to honour a prose checklist. It never mutates
18
18
  // the workspace.
@@ -33,7 +33,7 @@ func BuildReadiness(root string, args []string, stdout, stderr io.Writer) int {
33
33
  if shown == "" {
34
34
  shown = "<unset>"
35
35
  }
36
- fmt.Fprintf(stderr, "readiness: no active workspace/state.md (slug=%s) run %s <feature>\n", shown, workflow.ForVerb("spec").Both())
36
+ fmt.Fprintf(stderr, "readiness: no active workspace/state.md (slug=%s): run %s <feature>\n", shown, workflow.ForVerb("spec").Both())
37
37
  return 5
38
38
  }
39
39
 
@@ -43,16 +43,16 @@ func BuildReadiness(root string, args []string, stdout, stderr io.Writer) int {
43
43
  status := readinessField(lines, "Status")
44
44
  switch status {
45
45
  case "awaiting_human":
46
- fmt.Fprintf(stderr, "readiness: STOP Status: awaiting_human. Resume with %s <qid> \"<answer>\".\n", workflow.ForVerb("resolve").Both())
46
+ fmt.Fprintf(stderr, "readiness: STOP: Status: awaiting_human. Resume with %s <qid> \"<answer>\".\n", workflow.ForVerb("resolve").Both())
47
47
  return 3
48
48
  case "blocked":
49
- fmt.Fprintf(stderr, "readiness: STOP Status: blocked. Repair with %s repair (or unblock).\n", workflow.ForVerb("plan").Both())
49
+ fmt.Fprintf(stderr, "readiness: STOP: Status: blocked. Repair with %s repair (or unblock).\n", workflow.ForVerb("plan").Both())
50
50
  return 4
51
51
  }
52
52
 
53
53
  approved := readinessField(lines, "Plan approved")
54
54
  if approved == "" || approved == "none" {
55
- fmt.Fprintf(stderr, "readiness: STOP plan not approved (state.md has no \"Plan approved\"). Run %s.\n", workflow.ForVerb("define").Both())
55
+ fmt.Fprintf(stderr, "readiness: STOP: plan not approved (state.md has no \"Plan approved\"). Run %s.\n", workflow.ForVerb("define").Both())
56
56
  return 2
57
57
  }
58
58
 
@@ -60,7 +60,7 @@ func BuildReadiness(root string, args []string, stdout, stderr io.Writer) int {
60
60
  if shownStatus == "" {
61
61
  shownStatus = "running"
62
62
  }
63
- fmt.Fprintf(stdout, "readiness: OK plan approved %s, status %s. Ready to build.\n", approved, shownStatus)
63
+ fmt.Fprintf(stdout, "readiness: OK: plan approved %s, status %s. Ready to build.\n", approved, shownStatus)
64
64
  return 0
65
65
  }
66
66
 
@@ -9,7 +9,7 @@ import (
9
9
  "strings"
10
10
  )
11
11
 
12
- // Executable acceptance criteria a port of check-acceptance.sh. Grades the
12
+ // Executable acceptance criteria: a port of check-acceptance.sh. Grades the
13
13
  // AC-### acceptance criteria in spec.md against seal.md: each spec
14
14
  // criterion must be checked ([x]) in seal.md. Without ids it falls back to a
15
15
  // count/unchecked heuristic. The spec-time mirror is SpecValidate (shape); this
@@ -41,7 +41,7 @@ func CheckAcceptance(ws string, stdout, stderr io.Writer) int {
41
41
  return 5
42
42
  }
43
43
  if !isFile(seal) {
44
- fmt.Fprintf(stderr, "check-acceptance: no seal.md in %s feature not sealed\n", ws)
44
+ fmt.Fprintf(stderr, "check-acceptance: no seal.md in %s: feature not sealed\n", ws)
45
45
  return 5
46
46
  }
47
47
 
@@ -57,14 +57,14 @@ func CheckAcceptance(ws string, stdout, stderr io.Writer) int {
57
57
  }
58
58
 
59
59
  if sectionEmpty(specBody) {
60
- fmt.Fprintln(stderr, "check-acceptance: spec.md has no \"## Acceptance criteria\" section nothing to grade")
60
+ fmt.Fprintln(stderr, "check-acceptance: spec.md has no \"## Acceptance criteria\" section: nothing to grade")
61
61
  return 1
62
62
  }
63
63
 
64
64
  specIDs := sortedUniqueIDs(specBody)
65
65
 
66
66
  if len(specIDs) > 0 {
67
- // ID mode each spec AC id must be checked ([x]) in seal.md.
67
+ // ID mode: each spec AC id must be checked ([x]) in seal.md.
68
68
  checkedIDs := map[string]bool{}
69
69
  for _, line := range sealBody {
70
70
  if checkedRe.MatchString(line) {
@@ -85,18 +85,18 @@ func CheckAcceptance(ws string, stdout, stderr io.Writer) int {
85
85
  total-len(missing), total, " "+strings.Join(missing, " "))
86
86
  return 1
87
87
  }
88
- fmt.Fprintf(stdout, "check-acceptance: OK all %d acceptance criteria (%s) proven + checked in seal.md\n",
88
+ fmt.Fprintf(stdout, "check-acceptance: OK: all %d acceptance criteria (%s) proven + checked in seal.md\n",
89
89
  total, strings.Join(specIDs, " "))
90
90
  return 0
91
91
  }
92
92
 
93
- // Fallback (no ids) count spec criteria vs seal checked/unchecked items.
93
+ // Fallback (no ids): count spec criteria vs seal checked/unchecked items.
94
94
  specN := countMatching(specBody, bulletRe)
95
95
  sealTotal := countMatching(sealBody, checkboxRe)
96
96
  sealUnchecked := countMatching(sealBody, uncheckedRe)
97
97
 
98
98
  if sealTotal < specN {
99
- fmt.Fprintf(stderr, "check-acceptance: seal.md lists %d acceptance items but spec.md has %d criteria %d dropped. (Tag criteria AC-### to grade by id.)\n",
99
+ fmt.Fprintf(stderr, "check-acceptance: seal.md lists %d acceptance items but spec.md has %d criteria: %d dropped. (Tag criteria AC-### to grade by id.)\n",
100
100
  sealTotal, specN, specN-sealTotal)
101
101
  return 1
102
102
  }
@@ -104,12 +104,12 @@ func CheckAcceptance(ws string, stdout, stderr io.Writer) int {
104
104
  fmt.Fprintf(stderr, "check-acceptance: %d acceptance criterion(s) unchecked in seal.md (unproven). (Tag criteria AC-### to grade by id.)\n", sealUnchecked)
105
105
  return 1
106
106
  }
107
- fmt.Fprintf(stdout, "check-acceptance: OK %d acceptance items all checked in seal.md (no ids; add AC-### for id-level grading)\n", sealTotal)
107
+ fmt.Fprintf(stdout, "check-acceptance: OK: %d acceptance items all checked in seal.md (no ids; add AC-### for id-level grading)\n", sealTotal)
108
108
  return 0
109
109
  }
110
110
 
111
111
  // acSection returns the body lines under an "## Acceptance Criteria" heading
112
- // (case-insensitive on the words), up to the next "## " heading mirroring the
112
+ // (case-insensitive on the words), up to the next "## " heading: mirroring the
113
113
  // awk one-liner in check-acceptance.sh.
114
114
  func acSection(file string) ([]string, error) {
115
115
  f, err := os.Open(file)
@@ -140,7 +140,7 @@ func acSection(file string) ([]string, error) {
140
140
  // sectionEmpty reports whether the acceptance body is empty in the bash sense:
141
141
  // awk emits each in-section line with a trailing newline, $() strips the trailing
142
142
  // newlines, and `[ -z ]` tests the remainder. A body of only blank lines collapses
143
- // to "" so a heading followed by blanks is "nothing to grade", not a fallback.
143
+ // to "", so a heading followed by blanks is "nothing to grade", not a fallback.
144
144
  func sectionEmpty(lines []string) bool {
145
145
  return strings.TrimRight(strings.Join(lines, "\n"), "\n") == ""
146
146
  }
@@ -9,7 +9,7 @@ import (
9
9
 
10
10
  // CloseOut retires a shipped feature: it moves the feature directory into the
11
11
  // archive and, when the feature is still the active one, clears the ACTIVE cursor
12
- // so the next /rite-spec starts clean. The workspace is relocated, never deleted
12
+ // so the next /rite-spec starts clean. The workspace is relocated, never deleted:
13
13
  // the audit trail is preserved under archive/<slug>.
14
14
  //
15
15
  // args is `<slug> [devrites-dir]`. The optional second argument overrides the
@@ -18,7 +18,7 @@ import (
18
18
  //
19
19
  // 0 archived (ACTIVE cleared if it pointed here)
20
20
  // 4 no slug given, or the feature has no workspace
21
- // 5 an archive already exists at the destination refuse to clobber it
21
+ // 5 an archive already exists at the destination: refuse to clobber it
22
22
  func CloseOut(root string, args []string, stdout, stderr io.Writer) int {
23
23
  slug := argAt(args, 0)
24
24
  dv := argAt(args, 1)
@@ -41,12 +41,12 @@ func CloseOut(root string, args []string, stdout, stderr io.Writer) int {
41
41
  // A broken symlink at the destination still counts as "already there", so use
42
42
  // Lstat rather than Stat to avoid silently overwriting it.
43
43
  if _, err := os.Lstat(arch); err == nil {
44
- fmt.Fprintf(stderr, "close-out: archive already exists at %s refusing to clobber\n", arch)
44
+ fmt.Fprintf(stderr, "close-out: archive already exists at %s: refusing to clobber\n", arch)
45
45
  return 5
46
46
  }
47
47
 
48
48
  // Fail closed: if the move does not happen, leave the cursor alone and do not
49
- // claim success a lost audit trail must never look like a clean close-out.
49
+ // claim success: a lost audit trail must never look like a clean close-out.
50
50
  if err := os.MkdirAll(filepath.Join(dv, "archive"), 0o755); err != nil {
51
51
  fmt.Fprintf(stderr, "close-out: cannot create archive dir: %v\n", err)
52
52
  return 1
@@ -64,6 +64,6 @@ func CloseOut(root string, args []string, stdout, stderr io.Writer) int {
64
64
  return 0
65
65
  }
66
66
  }
67
- fmt.Fprintf(stdout, "close-out: archived %s -> %s (ACTIVE pointed elsewhere left as-is)\n", slug, filepath.ToSlash(arch))
67
+ fmt.Fprintf(stdout, "close-out: archived %s -> %s (ACTIVE pointed elsewhere: left as-is)\n", slug, filepath.ToSlash(arch))
68
68
  return 0
69
69
  }
@@ -162,7 +162,7 @@ func conventionsPromote(args []string, stdout, stderr io.Writer) int {
162
162
  }
163
163
  if !already {
164
164
  e.Corroborations++
165
- e.Proofs = append(e.Proofs, fmt.Sprintf("%s %s %s", slug, conventionDate(date), evidence))
165
+ e.Proofs = append(e.Proofs, fmt.Sprintf("%s %s: %s", slug, conventionDate(date), evidence))
166
166
  }
167
167
  entries[key] = e
168
168
  if err := saveConventions(root, entries); err != nil {
@@ -202,7 +202,7 @@ func conventionsContradict(args []string, stdout, stderr io.Writer) int {
202
202
  }
203
203
  when := conventionDate(date)
204
204
  e.Contradictions++
205
- e.Proofs = append(e.Proofs, fmt.Sprintf("%s %s CONTRADICTED: %s", slug, when, evidence))
205
+ e.Proofs = append(e.Proofs, fmt.Sprintf("%s %s: CONTRADICTED: %s", slug, when, evidence))
206
206
  entries[key] = e
207
207
  if err := saveConventions(root, entries); err != nil {
208
208
  fmt.Fprintln(stderr, err)
@@ -240,7 +240,7 @@ func conventionsContradict(args []string, stdout, stderr io.Writer) int {
240
240
  return 1
241
241
  }
242
242
  }
243
- fmt.Fprintf(stdout, "DRIFT: convention '%s' contradicted by %s now %s\n", key, slug, state)
243
+ fmt.Fprintf(stdout, "DRIFT: convention '%s' contradicted by %s: now %s\n", key, slug, state)
244
244
  return 0
245
245
  }
246
246
 
@@ -49,11 +49,11 @@ func Coverage(root string, args []string, stdout, stderr io.Writer) int {
49
49
 
50
50
  specBytes, err := os.ReadFile(filepath.Join(dir, "spec.md"))
51
51
  if err != nil {
52
- fmt.Fprintln(stderr, "coverage: no spec.md nothing to map.")
52
+ fmt.Fprintln(stderr, "coverage: no spec.md: nothing to map.")
53
53
  return 2
54
54
  }
55
55
 
56
- // tasks.md / seal.md are optional inputs a missing one just yields
56
+ // tasks.md / seal.md are optional inputs: a missing one just yields
57
57
  // UNCOVERED slices / pending proof, never an error.
58
58
  tasks, haveTasks := readFileOK(filepath.Join(dir, "tasks.md"))
59
59
  seal, haveSeal := readFileOK(filepath.Join(dir, "seal.md"))
@@ -69,7 +69,7 @@ func Coverage(root string, args []string, stdout, stderr io.Writer) int {
69
69
  slices = slicesForAC(tasks, ac)
70
70
  }
71
71
  if slices == "" {
72
- slices = "(UNCOVERED)"
72
+ slices = "(UNCOVERED)"
73
73
  }
74
74
  proven := "pending"
75
75
  if haveSeal && provenInSeal(seal, ac) {
@@ -108,7 +108,7 @@ func acIDs(spec string) []string {
108
108
  // slicesForAC returns the `;`-joined slice headers whose `Satisfies:` line names
109
109
  // ac, in file order. It reproduces the script's awk exactly, including its two
110
110
  // quirks: the current `## Slice …` header persists to the next Satisfies line,
111
- // and the match is a substring test so ac "AC1" also matches a slice that
111
+ // and the match is a substring test, so ac "AC1" also matches a slice that
112
112
  // satisfies "AC10". Faithful parity requires preserving both.
113
113
  func slicesForAC(tasks, ac string) string {
114
114
  var matched []string