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
@@ -65,7 +65,7 @@ var fallbackPackageResolver = packageResolver{extract: quotedModulesFromAddedLin
65
65
 
66
66
  // PackageExistence catches hallucinated or typo-squatted dependencies: every new
67
67
  // third-party import in the slice diff must be DECLARED in a project manifest, not
68
- // merely imported. It is deterministic and offline it checks the manifest, not a
68
+ // merely imported. It is deterministic and offline: it checks the manifest, not a
69
69
  // package registry. The workspace is <root>/features/<slug>.
70
70
  //
71
71
  // 0 clean, nothing to check, or skipped (not a git repo / no manifest)
@@ -86,7 +86,7 @@ func PackageExistence(root string, args []string, stdout, stderr io.Writer) int
86
86
  cwd, _ := os.Getwd()
87
87
  gitRoot := gitToplevel(cwd)
88
88
  if gitRoot == "" {
89
- fmt.Fprintln(stderr, "package-existence: not a git repo skipped.")
89
+ fmt.Fprintln(stderr, "package-existence: not a git repo: skipped.")
90
90
  return 0
91
91
  }
92
92
  ref := "HEAD"
@@ -122,7 +122,7 @@ func PackageExistence(root string, args []string, stdout, stderr io.Writer) int
122
122
  }
123
123
 
124
124
  if !hasManifest {
125
- fmt.Fprintln(stderr, "package-existence: no recognized manifest skipped.")
125
+ fmt.Fprintln(stderr, "package-existence: no recognized manifest: skipped.")
126
126
  return 0
127
127
  }
128
128
 
@@ -132,14 +132,14 @@ func PackageExistence(root string, args []string, stdout, stderr io.Writer) int
132
132
  packages = append(packages, pkg)
133
133
  }
134
134
  sort.Strings(packages)
135
- fmt.Fprintf(stderr, "package-existence: %d imported package(s) are NOT declared in a manifest verify each exists and add it via the package manager:\n", len(packages))
135
+ fmt.Fprintf(stderr, "package-existence: %d imported package(s) are NOT declared in a manifest: verify each exists and add it via the package manager:\n", len(packages))
136
136
  for _, pkg := range packages {
137
137
  fmt.Fprintf(stderr, " - %s: imported but not declared in any manifest\n", pkg)
138
138
  }
139
139
  fmt.Fprintln(stderr, "An undeclared import is how hallucinated/typo-squatted packages slip in. Confirm the name on the registry before trusting it.")
140
140
  return 3
141
141
  }
142
- fmt.Fprintln(stdout, "package-existence: OK every new third-party import is declared in a manifest.")
142
+ fmt.Fprintln(stdout, "package-existence: OK: every new third-party import is declared in a manifest.")
143
143
  return 0
144
144
  }
145
145
 
@@ -11,7 +11,7 @@ import (
11
11
  "github.com/devrites/devrites/internal/workflow"
12
12
  )
13
13
 
14
- // spaceChars is the POSIX [[:space:]] set under the C locale the collation the
14
+ // spaceChars is the POSIX [[:space:]] set under the C locale: the collation the
15
15
  // parity oracle pins (LC_ALL=C), so trimming matches the bash awk/sed exactly.
16
16
  const spaceChars = " \t\n\v\f\r"
17
17
 
@@ -22,7 +22,7 @@ func featureDir(root, slug string) string {
22
22
  }
23
23
 
24
24
  // activeSlug reads the active-feature pointer at <root>/ACTIVE (trimmed), or ""
25
- // when absent the new-schema replacement for the old .devrites/ACTIVE lookup.
25
+ // when absent: the new-schema replacement for the old .devrites/ACTIVE lookup.
26
26
  func activeSlug(root string) string {
27
27
  slug, err := devritespaths.ActiveSlug(root)
28
28
  if err != nil {
@@ -32,7 +32,7 @@ func activeSlug(root string) string {
32
32
  }
33
33
 
34
34
  // preambleArtifacts is the fixed order preamble.sh scans for present artifacts.
35
- // It is NOT sorted the display order is the workflow order, so the port keeps
35
+ // It is NOT sorted: the display order is the workflow order, so the port keeps
36
36
  // the literal list.
37
37
  var preambleArtifacts = []string{
38
38
  "brief", "spec", "references", "strategy", "plan", "tasks", "eng-review",
@@ -41,7 +41,7 @@ var preambleArtifacts = []string{
41
41
  "polish-report", "review", "seal", "ship", "handoff",
42
42
  }
43
43
 
44
- // Preamble prints the active feature's workspace state the orientation every
44
+ // Preamble prints the active feature's workspace state: the orientation every
45
45
  // workspace-operating rite-* skill runs first (step 0). Read-only. root is the
46
46
  // .devrites directory; slug defaults to the active feature at <root>/ACTIVE.
47
47
  // Always exits 0: orientation is never a hard dependency.
@@ -63,7 +63,7 @@ func Preamble(root string, args []string, stdout, stderr io.Writer) int {
63
63
 
64
64
  if state, err := os.ReadFile(filepath.Join(workDir, "state.md")); err == nil {
65
65
  fmt.Fprintln(stdout, "### state.md")
66
- // Emit the file verbatim, like `cat` no added trailing newline.
66
+ // Emit the file verbatim, like `cat`: no added trailing newline.
67
67
  _, _ = stdout.Write(state)
68
68
  }
69
69
 
@@ -148,7 +148,7 @@ func isHeadingLine(line string) bool {
148
148
 
149
149
  // splitLinesNoTrailing splits data into lines on '\n', dropping a single trailing
150
150
  // newline's empty final element so a "\n"-terminated file yields N lines, not N+1
151
- // matching how awk/grep iterate records.
151
+ // : matching how awk/grep iterate records.
152
152
  func splitLinesNoTrailing(data []byte) []string {
153
153
  s := string(data)
154
154
  s = strings.TrimSuffix(s, "\n")
@@ -12,18 +12,18 @@ import (
12
12
  )
13
13
 
14
14
  // State-parsing patterns ported verbatim from progress.sh's awk. Each name-strip
15
- // sub is anchored (^ or $), so it matches at most once per line ReplaceAllString
15
+ // sub is anchored (^ or $), so it matches at most once per line: ReplaceAllString
16
16
  // is therefore equivalent to awk's single-match sub.
17
17
  var (
18
18
  sliceCheckRe = regexp.MustCompile(`^- \[[^\]]*\][[:space:]]*`) // drop "- [x] "
19
19
  sliceNameRe = regexp.MustCompile(`^Slice[[:space:]]*[0-9]+:[[:space:]]*`) // drop "Slice N: "
20
20
  sliceStateRe = regexp.MustCompile(`[[:space:]]+(built|pending)[[:space:]]*$`)
21
- sliceSepRe = regexp.MustCompile(`[[:space:]]+[^[:alnum:][:space:]]+[[:space:]]*$`) // drop " "
21
+ sliceSepRe = regexp.MustCompile(`[[:space:]]+[^[:alnum:][:space:]]+[[:space:]]*$`) // drop " · "
22
22
  sliceCheckedRe = regexp.MustCompile(`\[[xX]\]`)
23
23
  sliceHeadingRe = regexp.MustCompile(`^##[[:space:]]+(SLICE-[0-9]{3})(?:[[:space:]]+(.*))?$`)
24
24
  )
25
25
 
26
- // Progress renders the active feature's position the deterministic footer every
26
+ // Progress renders the active feature's position: the deterministic footer every
27
27
  // workspace-operating rite-* skill prints last. Read-only. Prints nothing and
28
28
  // exits 0 when there is no active workspace, so pre-spec callers stay silent. root
29
29
  // is the .devrites directory; slug defaults to the active feature at <root>/ACTIVE.
@@ -38,7 +38,7 @@ func Progress(root string, args []string, stdout, stderr io.Writer) int {
38
38
  workDir := featureDir(root, slug)
39
39
  statePath := filepath.Join(workDir, "state.md")
40
40
  if slug == "" || !isFile(statePath) {
41
- return 0 // silent no active workspace
41
+ return 0 // silent: no active workspace
42
42
  }
43
43
  stateBytes, err := os.ReadFile(statePath)
44
44
  if err != nil {
@@ -180,7 +180,7 @@ func parsePhase(lines []string) string {
180
180
  }
181
181
 
182
182
  // tallySlices reads the "## Slice progress" block: total slice lines, how many are
183
- // checked, and the display name of the last checked one the awk in progress.sh.
183
+ // checked, and the display name of the last checked one: the awk in progress.sh.
184
184
  func tallySlices(lines []string) (total, built int, lastbuilt string) {
185
185
  inp := false
186
186
  for _, line := range lines {
@@ -9,7 +9,7 @@ import (
9
9
  "strings"
10
10
  )
11
11
 
12
- // Reconcile enforces that the orchestrator never edits source itself only the
12
+ // Reconcile enforces that the orchestrator never edits source itself: only the
13
13
  // dispatched slice-wright writes code and tests, while the orchestrator writes
14
14
  // bookkeeping under .devrites/. `snapshot` records the working tree just before
15
15
  // the wright runs; `check` diffs it afterward and flags any changed path that is
@@ -17,8 +17,8 @@ import (
17
17
  // <root>/features/<slug>.
18
18
  //
19
19
  // 0 clean check, snapshot written, inline fallback, or skipped (not a git repo)
20
- // 5 VIOLATION source changed outside the wright's claimed set
21
- // 6 setup error bad args, missing snapshot, or missing claimed manifest
20
+ // 5 VIOLATION: source changed outside the wright's claimed set
21
+ // 6 setup error: bad args, missing snapshot, or missing claimed manifest
22
22
  func Reconcile(root string, args []string, stdout, stderr io.Writer) int {
23
23
  mode := argAt(args, 0)
24
24
  slug := argAt(args, 1)
@@ -29,7 +29,7 @@ func Reconcile(root string, args []string, stdout, stderr io.Writer) int {
29
29
  cwd, _ := os.Getwd()
30
30
  gitRoot := gitToplevel(cwd)
31
31
  if gitRoot == "" {
32
- fmt.Fprintln(stderr, "reconcile: not a git repo gate skipped, verify the diff by hand.")
32
+ fmt.Fprintln(stderr, "reconcile: not a git repo: gate skipped, verify the diff by hand.")
33
33
  return 0
34
34
  }
35
35
 
@@ -37,28 +37,37 @@ func Reconcile(root string, args []string, stdout, stderr io.Writer) int {
37
37
  base := filepath.Join(d, ".reconcile-base")
38
38
  claimed := filepath.Join(d, ".reconcile-claimed")
39
39
  inline := filepath.Join(d, ".reconcile-inline")
40
+ objects := filepath.Join(d, ".reconcile-objects")
40
41
 
41
42
  if slug == "" || !isDir(d) {
42
43
  s := slug
43
44
  if s == "" {
44
45
  s = "<unset>"
45
46
  }
46
- fmt.Fprintf(stderr, "reconcile: no active workspace (slug=%s) nothing to reconcile.\n", s)
47
+ fmt.Fprintf(stderr, "reconcile: no active workspace (slug=%s): nothing to reconcile.\n", s)
47
48
  return 6
48
49
  }
49
50
 
50
- closeWindow := func() { _ = os.Remove(base); _ = os.Remove(claimed); _ = os.Remove(inline) }
51
+ closeWindow := func() {
52
+ _ = os.Remove(base)
53
+ _ = os.Remove(claimed)
54
+ _ = os.Remove(inline)
55
+ _ = os.RemoveAll(objects)
56
+ }
51
57
 
52
58
  switch mode {
53
59
  case "snapshot":
54
60
  _ = os.Remove(inline) // clear any stale sentinel / prior-slice manifest
55
61
  _ = os.Remove(claimed)
56
- tree, err := worktreeTree(gitRoot)
62
+ _ = os.RemoveAll(objects)
63
+ tree, err := worktreeTree(gitRoot, objects)
57
64
  if err != nil {
65
+ _ = os.RemoveAll(objects)
58
66
  fmt.Fprintf(stderr, "reconcile: cannot snapshot worktree: %v\n", err)
59
67
  return 6
60
68
  }
61
69
  if err := os.WriteFile(base, []byte(tree+"\n"), 0o644); err != nil {
70
+ _ = os.RemoveAll(objects)
62
71
  fmt.Fprintf(stderr, "reconcile: cannot write snapshot: %v\n", err)
63
72
  return 6
64
73
  }
@@ -67,16 +76,16 @@ func Reconcile(root string, args []string, stdout, stderr io.Writer) int {
67
76
 
68
77
  case "check":
69
78
  if isFile(inline) {
70
- fmt.Fprintln(stderr, "reconcile: inline-fallback run (no wright dispatched) gate skipped.")
79
+ fmt.Fprintln(stderr, "reconcile: inline-fallback run (no wright dispatched): gate skipped.")
71
80
  closeWindow()
72
81
  return 0
73
82
  }
74
83
  if !isFile(base) {
75
- fmt.Fprintln(stderr, `reconcile: no snapshot (.reconcile-base) run "devrites-engine reconcile snapshot" before dispatch.`)
84
+ fmt.Fprintln(stderr, `reconcile: no snapshot (.reconcile-base): run "devrites-engine reconcile snapshot" before dispatch.`)
76
85
  return 6
77
86
  }
78
87
  if !isFile(claimed) {
79
- fmt.Fprintln(stderr, "reconcile: no claimed manifest (.reconcile-claimed) write the wright Files-changed paths first.")
88
+ fmt.Fprintln(stderr, "reconcile: no claimed manifest (.reconcile-claimed): write the wright Files-changed paths first.")
80
89
  return 6
81
90
  }
82
91
  baseBytes, err := os.ReadFile(base)
@@ -86,19 +95,34 @@ func Reconcile(root string, args []string, stdout, stderr io.Writer) int {
86
95
  }
87
96
  baseTree := strings.TrimSpace(string(baseBytes))
88
97
  if baseTree == "" {
89
- fmt.Fprintln(stderr, "reconcile: empty snapshot (.reconcile-base) re-run \"devrites-engine reconcile snapshot\" before dispatch.")
98
+ fmt.Fprintln(stderr, "reconcile: empty snapshot (.reconcile-base): re-run \"devrites-engine reconcile snapshot\" before dispatch.")
99
+ return 6
100
+ }
101
+ if !isDir(objects) {
102
+ fmt.Fprintln(stderr, "reconcile: missing snapshot object database (.reconcile-objects): re-run \"devrites-engine reconcile snapshot\" before dispatch.")
90
103
  return 6
91
104
  }
92
- nowTree, err := worktreeTree(gitRoot)
105
+ nowTree, err := worktreeTree(gitRoot, objects)
93
106
  if err != nil {
94
107
  fmt.Fprintf(stderr, "reconcile: cannot capture worktree: %v\n", err)
95
108
  return 6
96
109
  }
110
+ diff := exec.Command("git", "-C", gitRoot, "diff", "--name-only", baseTree, nowTree)
111
+ diff.Env, err = reconcileGitEnv(gitRoot, objects)
112
+ if err != nil {
113
+ fmt.Fprintf(stderr, "reconcile: cannot compare worktree: %v\n", err)
114
+ return 6
115
+ }
116
+ diffOut, err := diff.CombinedOutput()
117
+ if err != nil {
118
+ fmt.Fprintf(stderr, "reconcile: cannot compare worktree: git diff --name-only: %v: %s\n", err, strings.TrimSpace(string(diffOut)))
119
+ return 6
120
+ }
97
121
 
98
122
  claimedSet := claimedPaths(claimed)
99
123
  viol := 0
100
124
  var violist strings.Builder
101
- for _, f := range gitDiffNames(gitRoot, baseTree, nowTree) {
125
+ for _, f := range splitLinesNoTrailing(diffOut) {
102
126
  if f == "" || strings.HasPrefix(f, ".devrites/") {
103
127
  continue
104
128
  }
@@ -108,13 +132,13 @@ func Reconcile(root string, args []string, stdout, stderr io.Writer) int {
108
132
  }
109
133
  }
110
134
  if viol > 0 {
111
- fmt.Fprintf(stderr, "reconcile: STOP %d source file(s) changed OUTSIDE the wright (A1 breach):\n", viol)
135
+ fmt.Fprintf(stderr, "reconcile: STOP: %d source file(s) changed OUTSIDE the wright (A1 breach):\n", viol)
112
136
  fmt.Fprint(stderr, violist.String())
113
137
  fmt.Fprintln(stderr, "The orchestrator must NOT edit source. Re-dispatch the wright (continue it once) or revert these.")
114
138
  return 5
115
139
  }
116
140
  closeWindow()
117
- fmt.Fprintln(stdout, "reconcile: OK every source change is the wright's; orchestrator touched only bookkeeping.")
141
+ fmt.Fprintln(stdout, "reconcile: OK: every source change is the wright's; orchestrator touched only bookkeeping.")
118
142
  return 0
119
143
 
120
144
  default:
@@ -132,23 +156,36 @@ func Reconcile(root string, args []string, stdout, stderr io.Writer) int {
132
156
  // snapshot and the check would then record that same sha, the diff would come
133
157
  // back empty, and the gate would report OK on precisely the A1 breach it exists
134
158
  // to catch. Surface the error and let the caller fail closed.
135
- func worktreeTree(gitRoot string) (string, error) {
159
+ func worktreeTree(gitRoot, objectDir string) (string, error) {
136
160
  idx := filepath.Join(os.TempDir(), fmt.Sprintf("devrites-reconcile-%d.idx", os.Getpid()))
137
161
  _ = os.Remove(idx)
138
162
  defer func() { _ = os.Remove(idx) }()
139
- env := append(os.Environ(), "GIT_INDEX_FILE="+idx)
163
+ if err := os.MkdirAll(objectDir, 0o700); err != nil {
164
+ return "", fmt.Errorf("create object directory: %w", err)
165
+ }
166
+ env, err := reconcileGitEnv(gitRoot, objectDir)
167
+ if err != nil {
168
+ return "", err
169
+ }
170
+ env = append(env, "GIT_INDEX_FILE="+idx)
140
171
 
141
172
  add := exec.Command("git", "-C", gitRoot, "add", "-A")
142
173
  add.Env = env
143
- add.Stdout, add.Stderr = io.Discard, io.Discard
144
- if err := add.Run(); err != nil {
174
+ addOut, err := add.CombinedOutput()
175
+ if err != nil {
176
+ if detail := strings.TrimSpace(string(addOut)); detail != "" {
177
+ return "", fmt.Errorf("git add -A: %w: %s", err, detail)
178
+ }
145
179
  return "", fmt.Errorf("git add -A: %w", err)
146
180
  }
147
181
 
148
182
  write := exec.Command("git", "-C", gitRoot, "write-tree")
149
183
  write.Env = env
150
- out, err := write.Output()
184
+ out, err := write.CombinedOutput()
151
185
  if err != nil {
186
+ if detail := strings.TrimSpace(string(out)); detail != "" {
187
+ return "", fmt.Errorf("git write-tree: %w: %s", err, detail)
188
+ }
152
189
  return "", fmt.Errorf("git write-tree: %w", err)
153
190
  }
154
191
  tree := strings.TrimSpace(string(out))
@@ -158,6 +195,29 @@ func worktreeTree(gitRoot string) (string, error) {
158
195
  return tree, nil
159
196
  }
160
197
 
198
+ func reconcileGitEnv(gitRoot, objectDir string) ([]string, error) {
199
+ common := exec.Command("git", "-C", gitRoot, "rev-parse", "--git-common-dir")
200
+ out, err := common.CombinedOutput()
201
+ if err != nil {
202
+ return nil, fmt.Errorf("git rev-parse --git-common-dir: %w: %s", err, strings.TrimSpace(string(out)))
203
+ }
204
+ commonDir := strings.TrimSpace(string(out))
205
+ if !filepath.IsAbs(commonDir) {
206
+ commonDir = filepath.Join(gitRoot, commonDir)
207
+ }
208
+ alternates := []string{filepath.Join(commonDir, "objects")}
209
+ if inherited := os.Getenv("GIT_OBJECT_DIRECTORY"); inherited != "" {
210
+ alternates = append(alternates, inherited)
211
+ }
212
+ if inherited := os.Getenv("GIT_ALTERNATE_OBJECT_DIRECTORIES"); inherited != "" {
213
+ alternates = append(alternates, inherited)
214
+ }
215
+ return append(os.Environ(),
216
+ "GIT_OBJECT_DIRECTORY="+objectDir,
217
+ "GIT_ALTERNATE_OBJECT_DIRECTORIES="+strings.Join(alternates, string(os.PathListSeparator)),
218
+ ), nil
219
+ }
220
+
161
221
  // claimedPaths reads the .reconcile-claimed manifest into a set of the exact
162
222
  // paths the wright reported changing.
163
223
  func claimedPaths(path string) map[string]struct{} {
@@ -75,7 +75,7 @@ func runReconcile(t *testing.T, root string, args ...string) (int, string) {
75
75
 
76
76
  func TestWorktreeTreeErrorsOutsideGitRepo(t *testing.T) {
77
77
  dir := t.TempDir()
78
- tree, err := worktreeTree(dir)
78
+ tree, err := worktreeTree(dir, t.TempDir())
79
79
  if err == nil {
80
80
  t.Fatalf("worktreeTree(%q) = %q, nil; want an error outside a git repo", dir, tree)
81
81
  }
@@ -86,13 +86,14 @@ func TestWorktreeTreeErrorsOutsideGitRepo(t *testing.T) {
86
86
 
87
87
  func TestWorktreeTreeCapturesUntrackedFiles(t *testing.T) {
88
88
  dir := newGitRepo(t)
89
+ objects := t.TempDir()
89
90
 
90
- before, err := worktreeTree(dir)
91
+ before, err := worktreeTree(dir, objects)
91
92
  if err != nil {
92
93
  t.Fatalf("worktreeTree: %v", err)
93
94
  }
94
95
  writeFile(t, filepath.Join(dir, "untracked.go"), "package main\n")
95
- after, err := worktreeTree(dir)
96
+ after, err := worktreeTree(dir, objects)
96
97
  if err != nil {
97
98
  t.Fatalf("worktreeTree: %v", err)
98
99
  }
@@ -100,7 +101,7 @@ func TestWorktreeTreeCapturesUntrackedFiles(t *testing.T) {
100
101
  t.Errorf("worktreeTree did not observe the untracked file: both trees = %s", before)
101
102
  }
102
103
 
103
- // The user's real index must be untouched the file stays untracked.
104
+ // The user's real index must be untouched: the file stays untracked.
104
105
  out, err := exec.Command("git", "-C", dir, "status", "--porcelain", "untracked.go").Output()
105
106
  if err != nil {
106
107
  t.Fatalf("git status: %v", err)
@@ -113,6 +114,13 @@ func TestWorktreeTreeCapturesUntrackedFiles(t *testing.T) {
113
114
  func TestReconcileSnapshotThenCleanCheck(t *testing.T) {
114
115
  gitRoot := newGitRepo(t)
115
116
  root := workspace(t, "feat")
117
+ objects := t.TempDir()
118
+ if err := os.Chmod(objects, 0o500); err != nil {
119
+ t.Fatalf("make git objects read-only: %v", err)
120
+ }
121
+ t.Cleanup(func() { _ = os.Chmod(objects, 0o700) })
122
+ t.Setenv("GIT_OBJECT_DIRECTORY", objects)
123
+ writeFile(t, filepath.Join(gitRoot, "untracked.go"), "package main\n")
116
124
 
117
125
  if code, out := runReconcile(t, root, "snapshot", "feat"); code != 0 {
118
126
  t.Fatalf("snapshot = %d, want 0\n%s", code, out)
@@ -137,7 +145,7 @@ func TestReconcileCheckFlagsUnclaimedChange(t *testing.T) {
137
145
  if code, out := runReconcile(t, root, "snapshot", "feat"); code != 0 {
138
146
  t.Fatalf("snapshot = %d, want 0\n%s", code, out)
139
147
  }
140
- // The orchestrator edits source it never claimed the A1 breach.
148
+ // The orchestrator edits source it never claimed: the A1 breach.
141
149
  writeFile(t, filepath.Join(gitRoot, "rogue.go"), "package main\n")
142
150
  writeFile(t, filepath.Join(root, "work", "feat", ".reconcile-claimed"), "seed.go\n")
143
151
 
@@ -107,7 +107,7 @@ func Resolve(root string, args []string, stdout, stderr io.Writer) int {
107
107
  if err := clearAwaiting(sfile, bid); err != nil {
108
108
  return fail(stderr, err.Error(), 1)
109
109
  }
110
- fmt.Fprintf(stdout, "Dropped: %s %s\n", bid, reason)
110
+ fmt.Fprintf(stdout, "Dropped: %s: %s\n", bid, reason)
111
111
  } else {
112
112
  bid, ans := splitColon(line)
113
113
  ans = strings.TrimPrefix(ans, " ")
@@ -169,7 +169,7 @@ func clockNow() time.Time {
169
169
  func nowUTC() string { return clockNow().UTC().Format("2006-01-02T15:04:05Z") }
170
170
 
171
171
  // resolveNextQID prints the next sequential question id for today, refusing (exit
172
- // 6) an id that already has a header a sign questions.md was hand-edited.
172
+ // 6) an id that already has a header: a sign questions.md was hand-edited.
173
173
  func resolveNextQID(qpath string, stdout, stderr io.Writer) int {
174
174
  if qpath == "" {
175
175
  return fail(stderr, "Usage: devrites-engine resolve next-qid <questions.md path>", 5)
@@ -363,7 +363,7 @@ func clearAwaiting(sfile, qid string) error {
363
363
  out = append(out, fmt.Sprintf("- %s %s: resolved %s", ts, resumePhase, qid))
364
364
  }
365
365
  out, _ = state.SetCursorField(out, state.CursorStatus, "running")
366
- out, _ = state.SetCursorField(out, state.CursorNextAction, "(resume `"+resumeCommand.Both()+"` to continue the workflow)")
366
+ out, _ = state.SetCursorField(out, state.CursorNextAction, "(resume: `"+resumeCommand.Both()+"` to continue the workflow)")
367
367
  if err := fsutil.WriteFileAtomic(sfile, joinRecords(out), 0o644); err != nil {
368
368
  return fmt.Errorf("update state %s: %w", sfile, err)
369
369
  }
@@ -29,7 +29,7 @@ type reviewerStatEntry struct {
29
29
 
30
30
  var reviewerAgentRe = regexp.MustCompile(`^devrites-[a-z][a-z-]*$`)
31
31
 
32
- // alwaysOnReviewers are the roster's unconditional axes stats are recorded for
32
+ // alwaysOnReviewers are the roster's unconditional axes: stats are recorded for
33
33
  // visibility but the verdict is always run.
34
34
  var alwaysOnReviewers = map[string]bool{
35
35
  "devrites-spec-reviewer": true,
@@ -183,7 +183,7 @@ func reviewerVerdict(agent string, zeroStreak int) string {
183
183
  case alwaysOnReviewers[agent]:
184
184
  return "run (always-on)"
185
185
  case insuranceReviewers[agent]:
186
- return "run (insurance never gated)"
186
+ return "run (insurance: never gated)"
187
187
  case zeroStreak >= gateStreak:
188
188
  return "gate-candidate"
189
189
  default:
@@ -8,14 +8,14 @@ import (
8
8
  "strings"
9
9
  )
10
10
 
11
- // findingLabel matches a bold severity label the shape a *real* finding carries
12
- // in review.md (`- **Critical** ...`). A plain summary count ("Critical 0 /
11
+ // findingLabel matches a bold severity label: the shape a *real* finding carries
12
+ // in review.md (`- **Critical**: ...`). A plain summary count ("Critical 0 /
13
13
  // Important 0") is deliberately NOT matched: an all-zero tally is the rubber-stamp
14
14
  // this gate exists to catch, not evidence that review happened.
15
15
  var findingLabel = regexp.MustCompile(`\*\*(Critical|Important|Suggestion|Nit|FYI)\*\*`)
16
16
 
17
17
  // noFindingsMarker matches the justification an adversarial reviewer must leave
18
- // when it genuinely finds nothing the axis stayed clean, and here is the
18
+ // when it genuinely finds nothing: the axis stayed clean, and here is the
19
19
  // account of the passes that came back empty. Presence is all this gate checks;
20
20
  // the quality of the account is the reviewer fan-out's job (same contract as
21
21
  // doubt-coverage's `doubt: MISSING` and footprint's roster).
@@ -34,14 +34,14 @@ var reviewAxes = []struct {
34
34
 
35
35
  // ReviewIntegrity guards the opposite failure from the rest of review discipline:
36
36
  // not the noisy false positive (which confidence-banding suppresses) but the
37
- // silent false negative a reviewer that returns "looks good, nothing found".
37
+ // silent false negative: a reviewer that returns "looks good, nothing found".
38
38
  // An empty findings list is treated as suspicious, not as a pass: an adversarial
39
39
  // axis that reports nothing must justify the emptiness, exactly as it must quote a
40
40
  // line to raise a finding. Read-only; the workspace is <root>/work/<slug>.
41
41
  //
42
- // 0 every axis accounted for has findings, has a no-findings justification, or review.md absent/freeform
42
+ // 0 every axis accounted for: has findings, has a no-findings justification, or review.md absent/freeform
43
43
  // 2 usage (no slug)
44
- // 1 an adversarial axis is silent AND unjustified a suspected rubber-stamp
44
+ // 1 an adversarial axis is silent AND unjustified: a suspected rubber-stamp
45
45
  func ReviewIntegrity(root string, args []string, stdout, stderr io.Writer) int {
46
46
  slug := argAt(args, 0)
47
47
  if slug == "" {
@@ -55,15 +55,15 @@ func ReviewIntegrity(root string, args []string, stdout, stderr io.Writer) int {
55
55
  dir := featureDir(root, slug)
56
56
  review, ok := readFileOK(filepath.Join(dir, "review.md"))
57
57
  if !ok {
58
- fmt.Fprintln(stdout, "review-integrity: no review.md nothing to assess (pass)")
58
+ fmt.Fprintln(stdout, "review-integrity: no review.md: nothing to assess (pass)")
59
59
  return 0
60
60
  }
61
61
 
62
62
  sections := axisSections(review)
63
63
  if len(sections) == 0 {
64
64
  // A freeform review with no `## Spec` / `## Code review` headings can't be
65
- // assessed mechanically say so and pass rather than flag a format choice.
66
- fmt.Fprintln(stdout, "review-integrity: no per-axis sections in review.md heading-based check n/a (pass)")
65
+ // assessed mechanically: say so and pass rather than flag a format choice.
66
+ fmt.Fprintln(stdout, "review-integrity: no per-axis sections in review.md: heading-based check n/a (pass)")
67
67
  return 0
68
68
  }
69
69
 
@@ -71,7 +71,7 @@ func ReviewIntegrity(root string, args []string, stdout, stderr io.Writer) int {
71
71
  for _, ax := range reviewAxes {
72
72
  body, present := sections[ax.label]
73
73
  if !present {
74
- continue // axis not written as its own section nothing to check here
74
+ continue // axis not written as its own section: nothing to check here
75
75
  }
76
76
  hasFinding := findingLabel.MatchString(body)
77
77
  justified := noFindingsMarker.MatchString(body)
@@ -79,7 +79,7 @@ func ReviewIntegrity(root string, args []string, stdout, stderr io.Writer) int {
79
79
  case hasFinding:
80
80
  fmt.Fprintf(stdout, " %s: findings present\n", ax.label)
81
81
  case justified:
82
- fmt.Fprintf(stdout, " %s: clean no-findings justification present\n", ax.label)
82
+ fmt.Fprintf(stdout, " %s: clean: no-findings justification present\n", ax.label)
83
83
  default:
84
84
  fmt.Fprintf(stdout, " %s: SILENT (no finding, no justification)\n", ax.label)
85
85
  silent = append(silent, ax.label)
@@ -87,12 +87,12 @@ func ReviewIntegrity(root string, args []string, stdout, stderr io.Writer) int {
87
87
  }
88
88
 
89
89
  if len(silent) > 0 {
90
- fmt.Fprintf(stdout, "review-integrity: SILENT %s reviewed nothing and justified nothing.\n", strings.Join(silent, ", "))
90
+ fmt.Fprintf(stdout, "review-integrity: SILENT: %s reviewed nothing and justified nothing.\n", strings.Join(silent, ", "))
91
91
  fmt.Fprintln(stdout, "A zero-findings axis is suspicious, not a pass. Re-run the axis, or record a")
92
92
  fmt.Fprintln(stdout, "'No-findings:' justification naming the adversarial passes that came back empty.")
93
93
  return 1
94
94
  }
95
- fmt.Fprintln(stdout, "review-integrity: OK every adversarial axis has findings or a justified clean bill.")
95
+ fmt.Fprintln(stdout, "review-integrity: OK: every adversarial axis has findings or a justified clean bill.")
96
96
  return 0
97
97
  }
98
98
 
@@ -36,7 +36,7 @@ Everything matches the spec. Nothing to report.
36
36
  Critical 0 / Important 0 / Suggestion 0
37
37
 
38
38
  ## Code review
39
- - **Important** off-by-one in pagination at api/list.go:42.
39
+ - **Important**: off-by-one in pagination at api/list.go:42.
40
40
  `)
41
41
  code, out := runReviewIntegrity(t, root, "feat")
42
42
  if code != 1 {
@@ -59,13 +59,13 @@ No-findings: ran the missing/partial/incorrect passes against each AC; every
59
59
  criterion is implemented and no scope creep found.
60
60
 
61
61
  ## Code review
62
- - **Nit** rename tmp to buf at util.go:9.
62
+ - **Nit**: rename tmp to buf at util.go:9.
63
63
  `)
64
64
  code, out := runReviewIntegrity(t, root, "feat")
65
65
  if code != 0 {
66
66
  t.Fatalf("justified clean axis should pass, got %d\n%s", code, out)
67
67
  }
68
- if !contains(out, "Spec: clean no-findings justification present") {
68
+ if !contains(out, "Spec: clean: no-findings justification present") {
69
69
  t.Fatalf("want Spec recognised as justified, got:\n%s", out)
70
70
  }
71
71
  }
@@ -73,10 +73,10 @@ criterion is implemented and no scope creep found.
73
73
  func TestReviewIntegrityBothWithFindingsPasses(t *testing.T) {
74
74
  root := t.TempDir()
75
75
  writeReview(t, root, "feat", `## Spec
76
- - **Critical** AC-003 unimplemented.
76
+ - **Critical**: AC-003 unimplemented.
77
77
 
78
78
  ## Code review
79
- - **Important** missing error path.
79
+ - **Important**: missing error path.
80
80
  `)
81
81
  if code, out := runReviewIntegrity(t, root, "feat"); code != 0 {
82
82
  t.Fatalf("both-with-findings should pass, got %d\n%s", code, out)
@@ -95,7 +95,7 @@ func TestReviewIntegrityNoReviewPasses(t *testing.T) {
95
95
 
96
96
  func TestReviewIntegrityFreeformPasses(t *testing.T) {
97
97
  root := t.TempDir()
98
- // No per-axis headings can't assess mechanically, must not false-positive.
98
+ // No per-axis headings: can't assess mechanically, must not false-positive.
99
99
  writeReview(t, root, "feat", "# Review\n\nLooks fine overall, shipping.\n")
100
100
  if code, out := runReviewIntegrity(t, root, "feat"); code != 0 {
101
101
  t.Fatalf("freeform review should pass, got %d\n%s", code, out)
@@ -44,7 +44,7 @@ func Runbook(root string, args []string, stdout, stderr io.Writer) int {
44
44
  fmt.Fprintf(stderr, "runbook: %v\n", err)
45
45
  return 1
46
46
  }
47
- fmt.Fprintf(stdout, "runbook: OK %d step(s) in %s\n", len(steps), displayRunbookPath(root, path))
47
+ fmt.Fprintf(stdout, "runbook: OK: %d step(s) in %s\n", len(steps), displayRunbookPath(root, path))
48
48
  return 0
49
49
  case "run":
50
50
  return runbookRun(root, args[1:], stdout, stderr)
@@ -227,7 +227,7 @@ func ReviewFingerprints(root string, args []string, stdout, stderr io.Writer) in
227
227
  dir := featureDir(root, slug)
228
228
  review, ok := readFileOK(filepath.Join(dir, "review.md"))
229
229
  if !ok {
230
- fmt.Fprintln(stdout, "review-fingerprints: no review.md nothing to fingerprint.")
230
+ fmt.Fprintln(stdout, "review-fingerprints: no review.md: nothing to fingerprint.")
231
231
  return 0
232
232
  }
233
233
  records := reviewFindingFingerprints(review)
@@ -76,10 +76,10 @@ func TestReviewFingerprintsStableAndWritable(t *testing.T) {
76
76
  writeReview(t, root, "feat", `# Review
77
77
 
78
78
  ## Spec
79
- - **Critical** AC-003 is unproven.
79
+ - **Critical**: AC-003 is unproven.
80
80
 
81
81
  ## Code review
82
- - **Important** missing error handling.`)
82
+ - **Important**: missing error handling.`)
83
83
  stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{}
84
84
  code := ReviewFingerprints(root, []string{"--write", "feat"}, stdout, stderr)
85
85
  if code != 0 {