devrites 3.0.4 → 3.0.6

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 (752) hide show
  1. package/CHANGELOG.md +40 -1
  2. package/README.md +280 -521
  3. package/SECURITY.md +91 -77
  4. package/docs/adr/README.md +7 -9
  5. package/docs/agents/domain.md +5 -5
  6. package/docs/agents/issue-driven-rites.md +5 -5
  7. package/docs/agents/issue-tracker.md +1 -1
  8. package/docs/agents/triage-labels.md +2 -2
  9. package/docs/architecture.md +101 -85
  10. package/docs/capability-surface-selection.md +3 -1
  11. package/docs/cli.md +20 -13
  12. package/docs/command-map.md +39 -35
  13. package/docs/engine/agent-contract.md +11 -9
  14. package/docs/engine/commands.md +92 -78
  15. package/docs/engine/state-schema.md +23 -19
  16. package/docs/engine/workspace-schema.md +12 -11
  17. package/docs/extensions.md +17 -17
  18. package/docs/flow.md +34 -23
  19. package/docs/harness-compliance.md +2 -2
  20. package/docs/orchestration.md +21 -20
  21. package/docs/porting-to-a-new-harness.md +6 -2
  22. package/docs/release.md +30 -12
  23. package/docs/research/go-authoritative-workflow-schema-and-quality-2026-07-20.md +3 -3
  24. package/docs/skills.md +77 -52
  25. package/docs/templates/CRITIC_REVIEW_PACKET_TEMPLATE.md +35 -0
  26. package/docs/usage.md +56 -45
  27. package/engine/Makefile +2 -2
  28. package/engine/commands.go +3 -3
  29. package/engine/harnessmatrix.go +2 -2
  30. package/engine/hookpolicy.go +9 -9
  31. package/engine/hooks.go +11 -11
  32. package/engine/hooks_workspace.go +11 -11
  33. package/engine/internal/doctor/doctor.go +7 -7
  34. package/engine/internal/gate/gate.go +11 -11
  35. package/engine/internal/harness/compliance.go +1 -1
  36. package/engine/internal/harness/harness.go +7 -7
  37. package/engine/internal/install/install.go +2 -0
  38. package/engine/internal/install/install_test.go +3 -3
  39. package/engine/internal/iohooks/detach_unix.go +1 -1
  40. package/engine/internal/iohooks/iohooks.go +8 -8
  41. package/engine/internal/lib/adoption.go +1 -1
  42. package/engine/internal/lib/analyze.go +15 -15
  43. package/engine/internal/lib/archivesearch.go +3 -3
  44. package/engine/internal/lib/budget.go +3 -3
  45. package/engine/internal/lib/buildreadiness.go +6 -6
  46. package/engine/internal/lib/checkacceptance.go +10 -10
  47. package/engine/internal/lib/closeout.go +5 -5
  48. package/engine/internal/lib/conventions.go +3 -3
  49. package/engine/internal/lib/coverage.go +4 -4
  50. package/engine/internal/lib/doubtcoverage.go +9 -9
  51. package/engine/internal/lib/evidencefresh.go +6 -6
  52. package/engine/internal/lib/extensions.go +9 -9
  53. package/engine/internal/lib/footprint.go +13 -13
  54. package/engine/internal/lib/jsonout.go +2 -2
  55. package/engine/internal/lib/lanes.go +2 -2
  56. package/engine/internal/lib/learnings.go +9 -9
  57. package/engine/internal/lib/ledger.go +8 -8
  58. package/engine/internal/lib/ledger_test.go +5 -5
  59. package/engine/internal/lib/mutationgate.go +4 -4
  60. package/engine/internal/lib/overrides.go +9 -9
  61. package/engine/internal/lib/overrides_test.go +2 -2
  62. package/engine/internal/lib/packageexistence.go +732 -55
  63. package/engine/internal/lib/packageexistence_test.go +343 -0
  64. package/engine/internal/lib/preamble.go +6 -6
  65. package/engine/internal/lib/progress.go +5 -5
  66. package/engine/internal/lib/reconcile.go +80 -20
  67. package/engine/internal/lib/reconcile_test.go +13 -5
  68. package/engine/internal/lib/resolve.go +3 -3
  69. package/engine/internal/lib/reviewerstats.go +2 -2
  70. package/engine/internal/lib/reviewintegrity.go +13 -13
  71. package/engine/internal/lib/reviewintegrity_test.go +6 -6
  72. package/engine/internal/lib/runbook.go +1 -1
  73. package/engine/internal/lib/session.go +1 -1
  74. package/engine/internal/lib/session_test.go +2 -2
  75. package/engine/internal/lib/specparse.go +4 -4
  76. package/engine/internal/lib/specskeleton.go +2 -2
  77. package/engine/internal/lib/specvalidate.go +13 -13
  78. package/engine/internal/lib/stuck.go +13 -13
  79. package/engine/internal/lib/templates/conventions_ledger_header.md +1 -1
  80. package/engine/internal/lib/templates/conventions_orient_header.txt +1 -1
  81. package/engine/internal/lib/testintegrity.go +9 -9
  82. package/engine/internal/lib/tickafk.go +4 -4
  83. package/engine/internal/lib/util.go +1 -1
  84. package/engine/internal/migrate/migrate.go +2 -2
  85. package/engine/internal/migrate/migrate_test.go +1 -0
  86. package/engine/internal/orient/firstrun.go +8 -8
  87. package/engine/internal/orient/orient.go +5 -5
  88. package/engine/internal/state/concurrency_test.go +4 -4
  89. package/engine/internal/state/feature.go +6 -6
  90. package/engine/internal/state/lock_unix.go +1 -1
  91. package/engine/internal/state/schema.go +1 -1
  92. package/engine/internal/state/snapshot.go +2 -2
  93. package/engine/internal/state/write.go +1 -1
  94. package/engine/internal/version/version.go +1 -1
  95. package/engine/main.go +5 -5
  96. package/engine/subagent_orient_context.txt +4 -4
  97. package/engine/testdata/golden/TestParityA1Guard/source-edit-enforce-denies.golden +1 -1
  98. package/engine/testdata/golden/TestParityAnalyze/slug=covered.golden +2 -2
  99. package/engine/testdata/golden/TestParityAnalyze/slug=dangling.golden +3 -3
  100. package/engine/testdata/golden/TestParityAnalyze/slug=noac.golden +2 -2
  101. package/engine/testdata/golden/TestParityAnalyze/slug=order.golden +4 -4
  102. package/engine/testdata/golden/TestParityAnalyze/slug=orphan.golden +3 -3
  103. package/engine/testdata/golden/TestParityAnalyze/slug=uncovered.golden +3 -3
  104. package/engine/testdata/golden/TestParityBudget/extra-md.golden +1 -1
  105. package/engine/testdata/golden/TestParityBudget/over-advisory.golden +1 -1
  106. package/engine/testdata/golden/TestParityBudget/over-strict.golden +1 -1
  107. package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
  108. package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
  109. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
  110. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
  111. package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-ok.golden +1 -1
  112. package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-ok.golden +1 -1
  113. package/engine/testdata/golden/TestParityCloseOut/active_pointed_elsewhere.golden +1 -1
  114. package/engine/testdata/golden/TestParityCoverage/arg=speconly.golden +2 -2
  115. package/engine/testdata/golden/TestParityCursor/bare.golden +1 -1
  116. package/engine/testdata/golden/TestParityCursor/full-afk.golden +1 -1
  117. package/engine/testdata/golden/TestParityCursor/full-hitl.golden +1 -1
  118. package/engine/testdata/golden/TestParityCursor/red.golden +2 -2
  119. package/engine/testdata/golden/TestParityCursor/zerogates.golden +1 -1
  120. package/engine/testdata/golden/TestParityDoubtCoverage/arg=ghost.golden +1 -1
  121. package/engine/testdata/golden/TestParityDoubtCoverage/arg=inline.golden +1 -1
  122. package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing-inline.golden +1 -1
  123. package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing.golden +1 -1
  124. package/engine/testdata/golden/TestParityDoubtCoverage/arg=nodoubt.golden +1 -1
  125. package/engine/testdata/golden/TestParityDoubtCoverage/arg=nolog.golden +1 -1
  126. package/engine/testdata/golden/TestParityLearnings/mine-no-archive.golden +1 -1
  127. package/engine/testdata/golden/TestParityLearnings/mine.golden +1 -1
  128. package/engine/testdata/golden/TestParityLearnings/nudge.golden +1 -1
  129. package/engine/testdata/golden/TestParityMutationGate/active-slug.golden +1 -1
  130. package/engine/testdata/golden/TestParityMutationGate/explicit-slug.golden +1 -1
  131. package/engine/testdata/golden/TestParityPackageExistence/declared.golden +1 -1
  132. package/engine/testdata/golden/TestParityPackageExistence/default-import-subpath.golden +1 -1
  133. package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
  134. package/engine/testdata/golden/TestParityRedwatch/fail-writes-red.golden +1 -1
  135. package/engine/testdata/golden/TestParityResolve/answer/state.md.golden +1 -1
  136. package/engine/testdata/golden/TestParityResolve/batch.golden +1 -1
  137. package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-devrites-agent-denies.golden +1 -1
  138. package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-git-commit.golden +1 -1
  139. package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-mutating.golden +1 -1
  140. package/engine/testdata/golden/TestParitySpecValidate/arg=flat.golden +1 -1
  141. package/engine/testdata/golden/TestParitySpecValidate/arg=valid/spec.md.golden +1 -1
  142. package/engine/testdata/golden/TestParitySpecValidate/arg=valid.golden +1 -1
  143. package/engine/testdata/golden/TestParityStuckCheck/custom-window-2.golden +1 -1
  144. package/engine/testdata/golden/TestParityStuckCheck/dominant.golden +1 -1
  145. package/engine/testdata/golden/TestParityStuckCheck/few.golden +1 -1
  146. package/engine/testdata/golden/TestParityStuckCheck/ghost.golden +1 -1
  147. package/engine/testdata/golden/TestParityStuckCheck/identical.golden +1 -1
  148. package/engine/testdata/golden/TestParityStuckCheck/nolog.golden +1 -1
  149. package/engine/testdata/golden/TestParityStuckCheck/pingpong.golden +1 -1
  150. package/engine/testdata/golden/TestParityStuckCheck/varied.golden +1 -1
  151. package/engine/testdata/golden/TestParityStuckCheck/window-04-identical.golden +1 -1
  152. package/engine/testdata/golden/TestParityStuckCheck/window-2.5-varied4.golden +1 -1
  153. package/engine/testdata/golden/TestParityStuckCheck/window-4x-varied4.golden +1 -1
  154. package/engine/testdata/golden/TestParityStuckCheck/window-leadspace-varied4.golden +1 -1
  155. package/engine/testdata/golden/TestParityStuckCheck/window-plus4-identical.golden +1 -1
  156. package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent-subagent-type-key.golden +1 -1
  157. package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent.golden +1 -1
  158. package/engine/testdata/golden/TestParityTestIntegrity/clean.golden +1 -1
  159. package/engine/testdata/golden/TestParityTickAfk/missingField.golden +1 -1
  160. package/engine/testdata/golden/TestParityTickAfk/none.golden +1 -1
  161. package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
  162. package/engine/testdata/golden/TestSpecSkeleton/missing-some.golden +1 -1
  163. package/engine/testdata/golden/TestSpecSkeleton/present-all.golden +1 -1
  164. package/engine/tests/adr_0004_required_by_phase_test.go +2 -2
  165. package/engine/tests/adr_0006_clock_seam_test.go +1 -1
  166. package/engine/tests/budget_test.go +1 -1
  167. package/engine/tests/canonical_ac_ids_test.go +2 -2
  168. package/engine/tests/cli_test.go +1 -1
  169. package/engine/tests/concurrency_cli_test.go +1 -1
  170. package/engine/tests/gate_test.go +4 -4
  171. package/engine/tests/hook_test.go +3 -3
  172. package/engine/tests/hooks_io_test.go +1 -1
  173. package/engine/tests/lib_parity_test.go +29 -29
  174. package/engine/tests/meta_test.go +2 -2
  175. package/engine/tests/parity_closeout_test.go +1 -1
  176. package/engine/tests/parity_learnings_test.go +2 -2
  177. package/engine/tests/parity_mutationgate_test.go +2 -2
  178. package/engine/tests/parity_resolve_test.go +1 -1
  179. package/engine/tests/parity_test.go +3 -3
  180. package/engine/tests/parity_tickafk_test.go +1 -1
  181. package/engine/validatepack.go +5 -5
  182. package/engine/validatepackskills.go +9 -9
  183. package/pack/.claude/agents/devrites-code-reviewer.md +21 -22
  184. package/pack/.claude/agents/devrites-devex-reviewer.md +17 -17
  185. package/pack/.claude/agents/devrites-doubt-reviewer.md +6 -6
  186. package/pack/.claude/agents/devrites-forge-judge.md +26 -26
  187. package/pack/.claude/agents/devrites-frontend-reviewer.md +17 -17
  188. package/pack/.claude/agents/devrites-performance-reviewer.md +19 -18
  189. package/pack/.claude/agents/devrites-plan-reviewer.md +29 -27
  190. package/pack/.claude/agents/devrites-retrospector.md +19 -19
  191. package/pack/.claude/agents/devrites-security-auditor.md +15 -15
  192. package/pack/.claude/agents/devrites-simplifier-reviewer.md +14 -14
  193. package/pack/.claude/agents/devrites-slice-wright.md +52 -51
  194. package/pack/.claude/agents/devrites-spec-reviewer.md +11 -11
  195. package/pack/.claude/agents/devrites-strategy-reviewer.md +21 -21
  196. package/pack/.claude/agents/devrites-test-analyst.md +13 -13
  197. package/pack/.claude/settings.json +1 -1
  198. package/pack/.claude/skills/devrites-api-interface/SKILL.md +12 -12
  199. package/pack/.claude/skills/devrites-audit/SKILL.md +7 -7
  200. package/pack/.claude/skills/devrites-browser-proof/SKILL.md +16 -16
  201. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +14 -14
  202. package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
  203. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
  204. package/pack/.claude/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
  205. package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
  206. package/pack/.claude/skills/devrites-debug-recovery/reference/trace.md +4 -4
  207. package/pack/.claude/skills/devrites-doubt/SKILL.md +14 -14
  208. package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +18 -18
  209. package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +17 -17
  210. package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +25 -25
  211. package/pack/.claude/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
  212. package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
  213. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
  214. package/pack/.claude/skills/devrites-frontend-craft/reference/shape.md +13 -13
  215. package/pack/.claude/skills/devrites-interview/SKILL.md +27 -27
  216. package/pack/.claude/skills/devrites-lib/SKILL.md +25 -27
  217. package/pack/.claude/skills/devrites-lib/reference/model-tiers.md +5 -5
  218. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
  219. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +11 -3
  220. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +10 -10
  221. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
  222. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +37 -37
  223. package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
  224. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
  225. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +40 -40
  226. package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +7 -7
  227. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
  228. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -23
  229. package/pack/.claude/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
  230. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +18 -18
  231. package/pack/.claude/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
  232. package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +12 -13
  233. package/pack/.claude/skills/devrites-lib/reference/standards/documentation.md +4 -4
  234. package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
  235. package/pack/.claude/skills/devrites-lib/reference/standards/elicitation.md +26 -26
  236. package/pack/.claude/skills/devrites-lib/reference/standards/error-handling.md +4 -4
  237. package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
  238. package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -3
  239. package/pack/.claude/skills/devrites-lib/reference/standards/observability.md +15 -15
  240. package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +8 -8
  241. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +5 -5
  242. package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +31 -31
  243. package/pack/.claude/skills/devrites-lib/reference/standards/prose-style.md +25 -25
  244. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +30 -30
  245. package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
  246. package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
  247. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +40 -40
  248. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +26 -26
  249. package/pack/.claude/skills/devrites-prose-craft/SKILL.md +5 -5
  250. package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +6 -6
  251. package/pack/.claude/skills/devrites-source-driven/SKILL.md +8 -8
  252. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +33 -33
  253. package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +6 -6
  254. package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
  255. package/pack/.claude/skills/rite/SKILL.md +13 -14
  256. package/pack/.claude/skills/rite/reference/menu.md +10 -10
  257. package/pack/.claude/skills/rite-adopt/SKILL.md +17 -18
  258. package/pack/.claude/skills/rite-adopt/reference/adoption.md +9 -9
  259. package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +6 -6
  260. package/pack/.claude/skills/rite-autocomplete/SKILL.md +14 -14
  261. package/pack/.claude/skills/rite-autocomplete/reference/decision-policy.md +4 -4
  262. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -7
  263. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
  264. package/pack/.claude/skills/rite-build/SKILL.md +22 -22
  265. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +9 -9
  266. package/pack/.claude/skills/rite-build/reference/anti-patterns.md +6 -6
  267. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +14 -14
  268. package/pack/.claude/skills/rite-build/reference/checkpoint.md +8 -8
  269. package/pack/.claude/skills/rite-build/reference/evidence-standard.md +1 -1
  270. package/pack/.claude/skills/rite-build/reference/forge.md +28 -29
  271. package/pack/.claude/skills/rite-build/reference/frontend-trigger.md +2 -2
  272. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +3 -3
  273. package/pack/.claude/skills/rite-build/reference/output.md +1 -1
  274. package/pack/.claude/skills/rite-build/reference/phase-contract.md +44 -44
  275. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +1 -1
  276. package/pack/.claude/skills/rite-build/reference/tdd.md +6 -6
  277. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +23 -23
  278. package/pack/.claude/skills/rite-converge/SKILL.md +17 -17
  279. package/pack/.claude/skills/rite-converge/reference/anti-patterns.md +7 -7
  280. package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +14 -14
  281. package/pack/.claude/skills/rite-customize/SKILL.md +2 -2
  282. package/pack/.claude/skills/rite-define/SKILL.md +25 -25
  283. package/pack/.claude/skills/rite-define/reference/anti-patterns.md +5 -5
  284. package/pack/.claude/skills/rite-define/reference/gates.md +13 -13
  285. package/pack/.claude/skills/rite-define/reference/plan-template.md +1 -1
  286. package/pack/.claude/skills/rite-doctor/SKILL.md +11 -11
  287. package/pack/.claude/skills/rite-dogfood/SKILL.md +2 -2
  288. package/pack/.claude/skills/rite-explain/SKILL.md +22 -22
  289. package/pack/.claude/skills/rite-explain/reference/intake.md +16 -16
  290. package/pack/.claude/skills/rite-frame/SKILL.md +22 -22
  291. package/pack/.claude/skills/rite-frame/reference/failure-modes.md +13 -13
  292. package/pack/.claude/skills/rite-handoff/SKILL.md +12 -12
  293. package/pack/.claude/skills/rite-learn/SKILL.md +23 -23
  294. package/pack/.claude/skills/rite-plan/SKILL.md +21 -21
  295. package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +3 -3
  296. package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +1 -1
  297. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +3 -3
  298. package/pack/.claude/skills/rite-plan/reference/slicing.md +9 -9
  299. package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +3 -3
  300. package/pack/.claude/skills/rite-polish/SKILL.md +11 -11
  301. package/pack/.claude/skills/rite-polish/reference/anti-patterns.md +8 -8
  302. package/pack/.claude/skills/rite-polish/reference/backend-polish.md +13 -13
  303. package/pack/.claude/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
  304. package/pack/.claude/skills/rite-polish/reference/code.md +26 -26
  305. package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +31 -31
  306. package/pack/.claude/skills/rite-polish/reference/ui.md +23 -23
  307. package/pack/.claude/skills/rite-pov/SKILL.md +3 -3
  308. package/pack/.claude/skills/rite-pr-feedback/SKILL.md +2 -2
  309. package/pack/.claude/skills/rite-pressure-test/SKILL.md +14 -14
  310. package/pack/.claude/skills/rite-prototype/SKILL.md +13 -13
  311. package/pack/.claude/skills/rite-prove/SKILL.md +17 -17
  312. package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +4 -4
  313. package/pack/.claude/skills/rite-prove/reference/browser-proof.md +2 -2
  314. package/pack/.claude/skills/rite-prove/reference/failure-triage.md +4 -4
  315. package/pack/.claude/skills/rite-prove/reference/proof-ladder.md +6 -6
  316. package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +1 -1
  317. package/pack/.claude/skills/rite-quick/SKILL.md +22 -22
  318. package/pack/.claude/skills/rite-resolve/SKILL.md +18 -18
  319. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +7 -7
  320. package/pack/.claude/skills/rite-review/SKILL.md +34 -34
  321. package/pack/.claude/skills/rite-review/reference/anti-patterns.md +4 -4
  322. package/pack/.claude/skills/rite-review/reference/cognitive-load.md +22 -22
  323. package/pack/.claude/skills/rite-review/reference/feature-scoped-review.md +2 -2
  324. package/pack/.claude/skills/rite-review/reference/five-axis-review.md +8 -8
  325. package/pack/.claude/skills/rite-review/reference/nielsen-heuristics.md +14 -14
  326. package/pack/.claude/skills/rite-review/reference/performance-checklist.md +14 -14
  327. package/pack/.claude/skills/rite-review/reference/security-review.md +9 -9
  328. package/pack/.claude/skills/rite-seal/SKILL.md +26 -26
  329. package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +8 -8
  330. package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +8 -8
  331. package/pack/.claude/skills/rite-seal/reference/final-evidence.md +9 -9
  332. package/pack/.claude/skills/rite-seal/reference/go-no-go.md +9 -9
  333. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +43 -43
  334. package/pack/.claude/skills/rite-ship/SKILL.md +12 -12
  335. package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +5 -5
  336. package/pack/.claude/skills/rite-ship/reference/close-out.md +2 -2
  337. package/pack/.claude/skills/rite-ship/reference/design-memory.md +22 -22
  338. package/pack/.claude/skills/rite-ship/reference/git-ship.md +10 -10
  339. package/pack/.claude/skills/rite-ship/reference/ledger.md +9 -9
  340. package/pack/.claude/skills/rite-ship/reference/rollout.md +11 -11
  341. package/pack/.claude/skills/rite-ship/reference/ship-template.md +1 -1
  342. package/pack/.claude/skills/rite-spec/SKILL.md +45 -45
  343. package/pack/.claude/skills/rite-spec/reference/acceptance-criteria.md +4 -4
  344. package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +6 -6
  345. package/pack/.claude/skills/rite-spec/reference/interview-patterns.md +3 -3
  346. package/pack/.claude/skills/rite-spec/reference/investigation.md +21 -21
  347. package/pack/.claude/skills/rite-spec/reference/question-protocol.md +9 -9
  348. package/pack/.claude/skills/rite-spec/reference/references-intake.md +8 -8
  349. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +19 -19
  350. package/pack/.claude/skills/rite-status/SKILL.md +13 -13
  351. package/pack/.claude/skills/rite-temper/SKILL.md +29 -29
  352. package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +11 -11
  353. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +20 -20
  354. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +16 -16
  355. package/pack/.claude/skills/rite-temper/reference/significance.md +10 -10
  356. package/pack/.claude/skills/rite-temper/reference/strategy-template.md +14 -14
  357. package/pack/.claude/skills/rite-vet/SKILL.md +31 -31
  358. package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +14 -14
  359. package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -10
  360. package/pack/.claude/skills/rite-vet/reference/cross-model.md +9 -9
  361. package/pack/.claude/skills/rite-vet/reference/depth.md +14 -14
  362. package/pack/.claude/skills/rite-vet/reference/eng-lenses.md +9 -9
  363. package/pack/.claude/skills/rite-vet/reference/review-axes.md +28 -28
  364. package/pack/.claude/skills/rite-zoom-out/SKILL.md +18 -18
  365. package/pack/generated/claude/agents/devrites-code-reviewer.md +21 -22
  366. package/pack/generated/claude/agents/devrites-devex-reviewer.md +17 -17
  367. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +6 -6
  368. package/pack/generated/claude/agents/devrites-forge-judge.md +26 -26
  369. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +17 -17
  370. package/pack/generated/claude/agents/devrites-performance-reviewer.md +19 -18
  371. package/pack/generated/claude/agents/devrites-plan-reviewer.md +29 -27
  372. package/pack/generated/claude/agents/devrites-retrospector.md +19 -19
  373. package/pack/generated/claude/agents/devrites-security-auditor.md +15 -15
  374. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +14 -14
  375. package/pack/generated/claude/agents/devrites-slice-wright.md +52 -51
  376. package/pack/generated/claude/agents/devrites-spec-reviewer.md +11 -11
  377. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +21 -21
  378. package/pack/generated/claude/agents/devrites-test-analyst.md +13 -13
  379. package/pack/generated/claude/settings.json +1 -1
  380. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +12 -12
  381. package/pack/generated/claude/skills/devrites-audit/SKILL.md +7 -7
  382. package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +16 -16
  383. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +14 -14
  384. package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
  385. package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
  386. package/pack/generated/claude/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
  387. package/pack/generated/claude/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
  388. package/pack/generated/claude/skills/devrites-debug-recovery/reference/trace.md +4 -4
  389. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +14 -14
  390. package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +18 -18
  391. package/pack/generated/claude/skills/devrites-frontend-craft/reference/craft.md +17 -17
  392. package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +25 -25
  393. package/pack/generated/claude/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
  394. package/pack/generated/claude/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
  395. package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
  396. package/pack/generated/claude/skills/devrites-frontend-craft/reference/shape.md +13 -13
  397. package/pack/generated/claude/skills/devrites-interview/SKILL.md +27 -27
  398. package/pack/generated/claude/skills/devrites-lib/SKILL.md +25 -27
  399. package/pack/generated/claude/skills/devrites-lib/reference/model-tiers.md +5 -5
  400. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
  401. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +11 -3
  402. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +10 -10
  403. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
  404. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +37 -37
  405. package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
  406. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
  407. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +40 -40
  408. package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +7 -7
  409. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
  410. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -23
  411. package/pack/generated/claude/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
  412. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +18 -18
  413. package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
  414. package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +12 -13
  415. package/pack/generated/claude/skills/devrites-lib/reference/standards/documentation.md +4 -4
  416. package/pack/generated/claude/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
  417. package/pack/generated/claude/skills/devrites-lib/reference/standards/elicitation.md +26 -26
  418. package/pack/generated/claude/skills/devrites-lib/reference/standards/error-handling.md +4 -4
  419. package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
  420. package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -3
  421. package/pack/generated/claude/skills/devrites-lib/reference/standards/observability.md +15 -15
  422. package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +8 -8
  423. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +5 -5
  424. package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +31 -31
  425. package/pack/generated/claude/skills/devrites-lib/reference/standards/prose-style.md +25 -25
  426. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +30 -30
  427. package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
  428. package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
  429. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +40 -40
  430. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +26 -26
  431. package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +5 -5
  432. package/pack/generated/claude/skills/devrites-refresh-indexes/SKILL.md +6 -6
  433. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +8 -8
  434. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +33 -33
  435. package/pack/generated/claude/skills/devrites-ux-shape/reference/brief-template.md +6 -6
  436. package/pack/generated/claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
  437. package/pack/generated/claude/skills/rite/SKILL.md +13 -14
  438. package/pack/generated/claude/skills/rite/reference/menu.md +10 -10
  439. package/pack/generated/claude/skills/rite-adopt/SKILL.md +17 -18
  440. package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +9 -9
  441. package/pack/generated/claude/skills/rite-adopt/reference/anti-patterns.md +6 -6
  442. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +14 -14
  443. package/pack/generated/claude/skills/rite-autocomplete/reference/decision-policy.md +4 -4
  444. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -7
  445. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
  446. package/pack/generated/claude/skills/rite-build/SKILL.md +22 -22
  447. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +9 -9
  448. package/pack/generated/claude/skills/rite-build/reference/anti-patterns.md +6 -6
  449. package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +14 -14
  450. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +8 -8
  451. package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +1 -1
  452. package/pack/generated/claude/skills/rite-build/reference/forge.md +28 -29
  453. package/pack/generated/claude/skills/rite-build/reference/frontend-trigger.md +2 -2
  454. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +3 -3
  455. package/pack/generated/claude/skills/rite-build/reference/output.md +1 -1
  456. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +44 -44
  457. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +1 -1
  458. package/pack/generated/claude/skills/rite-build/reference/tdd.md +6 -6
  459. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +23 -23
  460. package/pack/generated/claude/skills/rite-converge/SKILL.md +17 -17
  461. package/pack/generated/claude/skills/rite-converge/reference/anti-patterns.md +7 -7
  462. package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +14 -14
  463. package/pack/generated/claude/skills/rite-customize/SKILL.md +2 -2
  464. package/pack/generated/claude/skills/rite-define/SKILL.md +25 -25
  465. package/pack/generated/claude/skills/rite-define/reference/anti-patterns.md +5 -5
  466. package/pack/generated/claude/skills/rite-define/reference/gates.md +13 -13
  467. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +1 -1
  468. package/pack/generated/claude/skills/rite-doctor/SKILL.md +11 -11
  469. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +2 -2
  470. package/pack/generated/claude/skills/rite-explain/SKILL.md +22 -22
  471. package/pack/generated/claude/skills/rite-explain/reference/intake.md +16 -16
  472. package/pack/generated/claude/skills/rite-frame/SKILL.md +22 -22
  473. package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +13 -13
  474. package/pack/generated/claude/skills/rite-handoff/SKILL.md +12 -12
  475. package/pack/generated/claude/skills/rite-learn/SKILL.md +23 -23
  476. package/pack/generated/claude/skills/rite-plan/SKILL.md +21 -21
  477. package/pack/generated/claude/skills/rite-plan/reference/anti-patterns.md +3 -3
  478. package/pack/generated/claude/skills/rite-plan/reference/dependency-graph.md +1 -1
  479. package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +3 -3
  480. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +9 -9
  481. package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +3 -3
  482. package/pack/generated/claude/skills/rite-polish/SKILL.md +11 -11
  483. package/pack/generated/claude/skills/rite-polish/reference/anti-patterns.md +8 -8
  484. package/pack/generated/claude/skills/rite-polish/reference/backend-polish.md +13 -13
  485. package/pack/generated/claude/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
  486. package/pack/generated/claude/skills/rite-polish/reference/code.md +26 -26
  487. package/pack/generated/claude/skills/rite-polish/reference/harden-checklist.md +31 -31
  488. package/pack/generated/claude/skills/rite-polish/reference/ui.md +23 -23
  489. package/pack/generated/claude/skills/rite-pov/SKILL.md +3 -3
  490. package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +2 -2
  491. package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +14 -14
  492. package/pack/generated/claude/skills/rite-prototype/SKILL.md +13 -13
  493. package/pack/generated/claude/skills/rite-prove/SKILL.md +17 -17
  494. package/pack/generated/claude/skills/rite-prove/reference/anti-patterns.md +4 -4
  495. package/pack/generated/claude/skills/rite-prove/reference/browser-proof.md +2 -2
  496. package/pack/generated/claude/skills/rite-prove/reference/failure-triage.md +4 -4
  497. package/pack/generated/claude/skills/rite-prove/reference/proof-ladder.md +6 -6
  498. package/pack/generated/claude/skills/rite-prove/reference/test-command-discovery.md +1 -1
  499. package/pack/generated/claude/skills/rite-quick/SKILL.md +22 -22
  500. package/pack/generated/claude/skills/rite-resolve/SKILL.md +18 -18
  501. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +7 -7
  502. package/pack/generated/claude/skills/rite-review/SKILL.md +34 -34
  503. package/pack/generated/claude/skills/rite-review/reference/anti-patterns.md +4 -4
  504. package/pack/generated/claude/skills/rite-review/reference/cognitive-load.md +22 -22
  505. package/pack/generated/claude/skills/rite-review/reference/feature-scoped-review.md +2 -2
  506. package/pack/generated/claude/skills/rite-review/reference/five-axis-review.md +8 -8
  507. package/pack/generated/claude/skills/rite-review/reference/nielsen-heuristics.md +14 -14
  508. package/pack/generated/claude/skills/rite-review/reference/performance-checklist.md +14 -14
  509. package/pack/generated/claude/skills/rite-review/reference/security-review.md +9 -9
  510. package/pack/generated/claude/skills/rite-seal/SKILL.md +26 -26
  511. package/pack/generated/claude/skills/rite-seal/reference/anti-patterns.md +8 -8
  512. package/pack/generated/claude/skills/rite-seal/reference/conventions-ledger.md +8 -8
  513. package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +9 -9
  514. package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +9 -9
  515. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +43 -43
  516. package/pack/generated/claude/skills/rite-ship/SKILL.md +12 -12
  517. package/pack/generated/claude/skills/rite-ship/reference/anti-patterns.md +5 -5
  518. package/pack/generated/claude/skills/rite-ship/reference/close-out.md +2 -2
  519. package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +22 -22
  520. package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +10 -10
  521. package/pack/generated/claude/skills/rite-ship/reference/ledger.md +9 -9
  522. package/pack/generated/claude/skills/rite-ship/reference/rollout.md +11 -11
  523. package/pack/generated/claude/skills/rite-ship/reference/ship-template.md +1 -1
  524. package/pack/generated/claude/skills/rite-spec/SKILL.md +45 -45
  525. package/pack/generated/claude/skills/rite-spec/reference/acceptance-criteria.md +4 -4
  526. package/pack/generated/claude/skills/rite-spec/reference/anti-patterns.md +6 -6
  527. package/pack/generated/claude/skills/rite-spec/reference/interview-patterns.md +3 -3
  528. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +21 -21
  529. package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +9 -9
  530. package/pack/generated/claude/skills/rite-spec/reference/references-intake.md +8 -8
  531. package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +19 -19
  532. package/pack/generated/claude/skills/rite-status/SKILL.md +13 -13
  533. package/pack/generated/claude/skills/rite-temper/SKILL.md +29 -29
  534. package/pack/generated/claude/skills/rite-temper/reference/anti-patterns.md +11 -11
  535. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +20 -20
  536. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +16 -16
  537. package/pack/generated/claude/skills/rite-temper/reference/significance.md +10 -10
  538. package/pack/generated/claude/skills/rite-temper/reference/strategy-template.md +14 -14
  539. package/pack/generated/claude/skills/rite-vet/SKILL.md +31 -31
  540. package/pack/generated/claude/skills/rite-vet/reference/anti-patterns.md +14 -14
  541. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -10
  542. package/pack/generated/claude/skills/rite-vet/reference/cross-model.md +9 -9
  543. package/pack/generated/claude/skills/rite-vet/reference/depth.md +14 -14
  544. package/pack/generated/claude/skills/rite-vet/reference/eng-lenses.md +9 -9
  545. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +28 -28
  546. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +18 -18
  547. package/pack/generated/codex/agents/devrites-code-reviewer.toml +21 -22
  548. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +17 -17
  549. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +6 -6
  550. package/pack/generated/codex/agents/devrites-forge-judge.toml +26 -26
  551. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +17 -17
  552. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +19 -18
  553. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +29 -27
  554. package/pack/generated/codex/agents/devrites-retrospector.toml +19 -19
  555. package/pack/generated/codex/agents/devrites-security-auditor.toml +15 -15
  556. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +14 -14
  557. package/pack/generated/codex/agents/devrites-slice-wright.toml +52 -51
  558. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +11 -11
  559. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +21 -21
  560. package/pack/generated/codex/agents/devrites-test-analyst.toml +13 -13
  561. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +15 -15
  562. package/pack/generated/codex/skills/devrites-audit/SKILL.md +10 -10
  563. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +19 -19
  564. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +17 -17
  565. package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
  566. package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
  567. package/pack/generated/codex/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
  568. package/pack/generated/codex/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
  569. package/pack/generated/codex/skills/devrites-debug-recovery/reference/trace.md +4 -4
  570. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +17 -17
  571. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +20 -20
  572. package/pack/generated/codex/skills/devrites-frontend-craft/reference/craft.md +17 -17
  573. package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +25 -25
  574. package/pack/generated/codex/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
  575. package/pack/generated/codex/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
  576. package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
  577. package/pack/generated/codex/skills/devrites-frontend-craft/reference/shape.md +13 -13
  578. package/pack/generated/codex/skills/devrites-interview/SKILL.md +30 -30
  579. package/pack/generated/codex/skills/devrites-lib/SKILL.md +28 -30
  580. package/pack/generated/codex/skills/devrites-lib/reference/model-tiers.md +5 -5
  581. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
  582. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +11 -3
  583. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +10 -10
  584. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
  585. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +37 -37
  586. package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
  587. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
  588. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +40 -40
  589. package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +7 -7
  590. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
  591. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -23
  592. package/pack/generated/codex/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
  593. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +18 -18
  594. package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
  595. package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +12 -13
  596. package/pack/generated/codex/skills/devrites-lib/reference/standards/documentation.md +4 -4
  597. package/pack/generated/codex/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
  598. package/pack/generated/codex/skills/devrites-lib/reference/standards/elicitation.md +26 -26
  599. package/pack/generated/codex/skills/devrites-lib/reference/standards/error-handling.md +4 -4
  600. package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
  601. package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -3
  602. package/pack/generated/codex/skills/devrites-lib/reference/standards/observability.md +15 -15
  603. package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +8 -8
  604. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +5 -5
  605. package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +31 -31
  606. package/pack/generated/codex/skills/devrites-lib/reference/standards/prose-style.md +25 -25
  607. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +30 -30
  608. package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
  609. package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
  610. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +40 -40
  611. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +26 -26
  612. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +8 -8
  613. package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +9 -9
  614. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +11 -11
  615. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +36 -36
  616. package/pack/generated/codex/skills/devrites-ux-shape/reference/brief-template.md +6 -6
  617. package/pack/generated/codex/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
  618. package/pack/generated/codex/skills/rite/SKILL.md +16 -17
  619. package/pack/generated/codex/skills/rite/reference/menu.md +10 -10
  620. package/pack/generated/codex/skills/rite-adopt/SKILL.md +20 -21
  621. package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +9 -9
  622. package/pack/generated/codex/skills/rite-adopt/reference/anti-patterns.md +6 -6
  623. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +17 -17
  624. package/pack/generated/codex/skills/rite-autocomplete/reference/decision-policy.md +4 -4
  625. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -7
  626. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
  627. package/pack/generated/codex/skills/rite-build/SKILL.md +25 -25
  628. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +9 -9
  629. package/pack/generated/codex/skills/rite-build/reference/anti-patterns.md +6 -6
  630. package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +14 -14
  631. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +8 -8
  632. package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +1 -1
  633. package/pack/generated/codex/skills/rite-build/reference/forge.md +28 -29
  634. package/pack/generated/codex/skills/rite-build/reference/frontend-trigger.md +2 -2
  635. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +3 -3
  636. package/pack/generated/codex/skills/rite-build/reference/output.md +1 -1
  637. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +44 -44
  638. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +1 -1
  639. package/pack/generated/codex/skills/rite-build/reference/tdd.md +6 -6
  640. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +23 -23
  641. package/pack/generated/codex/skills/rite-converge/SKILL.md +20 -20
  642. package/pack/generated/codex/skills/rite-converge/reference/anti-patterns.md +7 -7
  643. package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +14 -14
  644. package/pack/generated/codex/skills/rite-customize/SKILL.md +5 -5
  645. package/pack/generated/codex/skills/rite-define/SKILL.md +28 -28
  646. package/pack/generated/codex/skills/rite-define/reference/anti-patterns.md +5 -5
  647. package/pack/generated/codex/skills/rite-define/reference/gates.md +13 -13
  648. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +1 -1
  649. package/pack/generated/codex/skills/rite-doctor/SKILL.md +14 -14
  650. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +5 -5
  651. package/pack/generated/codex/skills/rite-explain/SKILL.md +25 -25
  652. package/pack/generated/codex/skills/rite-explain/reference/intake.md +16 -16
  653. package/pack/generated/codex/skills/rite-frame/SKILL.md +25 -25
  654. package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +13 -13
  655. package/pack/generated/codex/skills/rite-handoff/SKILL.md +15 -15
  656. package/pack/generated/codex/skills/rite-learn/SKILL.md +26 -26
  657. package/pack/generated/codex/skills/rite-plan/SKILL.md +24 -24
  658. package/pack/generated/codex/skills/rite-plan/reference/anti-patterns.md +3 -3
  659. package/pack/generated/codex/skills/rite-plan/reference/dependency-graph.md +1 -1
  660. package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +3 -3
  661. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +9 -9
  662. package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +3 -3
  663. package/pack/generated/codex/skills/rite-polish/SKILL.md +14 -14
  664. package/pack/generated/codex/skills/rite-polish/reference/anti-patterns.md +8 -8
  665. package/pack/generated/codex/skills/rite-polish/reference/backend-polish.md +13 -13
  666. package/pack/generated/codex/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
  667. package/pack/generated/codex/skills/rite-polish/reference/code.md +26 -26
  668. package/pack/generated/codex/skills/rite-polish/reference/harden-checklist.md +31 -31
  669. package/pack/generated/codex/skills/rite-polish/reference/ui.md +23 -23
  670. package/pack/generated/codex/skills/rite-pov/SKILL.md +6 -6
  671. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +5 -5
  672. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +17 -17
  673. package/pack/generated/codex/skills/rite-prototype/SKILL.md +16 -16
  674. package/pack/generated/codex/skills/rite-prove/SKILL.md +20 -20
  675. package/pack/generated/codex/skills/rite-prove/reference/anti-patterns.md +4 -4
  676. package/pack/generated/codex/skills/rite-prove/reference/browser-proof.md +2 -2
  677. package/pack/generated/codex/skills/rite-prove/reference/failure-triage.md +4 -4
  678. package/pack/generated/codex/skills/rite-prove/reference/proof-ladder.md +6 -6
  679. package/pack/generated/codex/skills/rite-prove/reference/test-command-discovery.md +1 -1
  680. package/pack/generated/codex/skills/rite-quick/SKILL.md +25 -25
  681. package/pack/generated/codex/skills/rite-resolve/SKILL.md +21 -21
  682. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +7 -7
  683. package/pack/generated/codex/skills/rite-review/SKILL.md +37 -37
  684. package/pack/generated/codex/skills/rite-review/reference/anti-patterns.md +4 -4
  685. package/pack/generated/codex/skills/rite-review/reference/cognitive-load.md +22 -22
  686. package/pack/generated/codex/skills/rite-review/reference/feature-scoped-review.md +2 -2
  687. package/pack/generated/codex/skills/rite-review/reference/five-axis-review.md +8 -8
  688. package/pack/generated/codex/skills/rite-review/reference/nielsen-heuristics.md +14 -14
  689. package/pack/generated/codex/skills/rite-review/reference/performance-checklist.md +14 -14
  690. package/pack/generated/codex/skills/rite-review/reference/security-review.md +9 -9
  691. package/pack/generated/codex/skills/rite-seal/SKILL.md +29 -29
  692. package/pack/generated/codex/skills/rite-seal/reference/anti-patterns.md +8 -8
  693. package/pack/generated/codex/skills/rite-seal/reference/conventions-ledger.md +8 -8
  694. package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +9 -9
  695. package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +9 -9
  696. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +43 -43
  697. package/pack/generated/codex/skills/rite-ship/SKILL.md +15 -15
  698. package/pack/generated/codex/skills/rite-ship/reference/anti-patterns.md +5 -5
  699. package/pack/generated/codex/skills/rite-ship/reference/close-out.md +2 -2
  700. package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +22 -22
  701. package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +10 -10
  702. package/pack/generated/codex/skills/rite-ship/reference/ledger.md +9 -9
  703. package/pack/generated/codex/skills/rite-ship/reference/rollout.md +11 -11
  704. package/pack/generated/codex/skills/rite-ship/reference/ship-template.md +1 -1
  705. package/pack/generated/codex/skills/rite-spec/SKILL.md +48 -48
  706. package/pack/generated/codex/skills/rite-spec/reference/acceptance-criteria.md +4 -4
  707. package/pack/generated/codex/skills/rite-spec/reference/anti-patterns.md +6 -6
  708. package/pack/generated/codex/skills/rite-spec/reference/interview-patterns.md +3 -3
  709. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +21 -21
  710. package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +9 -9
  711. package/pack/generated/codex/skills/rite-spec/reference/references-intake.md +8 -8
  712. package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +19 -19
  713. package/pack/generated/codex/skills/rite-status/SKILL.md +16 -16
  714. package/pack/generated/codex/skills/rite-temper/SKILL.md +32 -32
  715. package/pack/generated/codex/skills/rite-temper/reference/anti-patterns.md +11 -11
  716. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +20 -20
  717. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +16 -16
  718. package/pack/generated/codex/skills/rite-temper/reference/significance.md +10 -10
  719. package/pack/generated/codex/skills/rite-temper/reference/strategy-template.md +14 -14
  720. package/pack/generated/codex/skills/rite-vet/SKILL.md +34 -34
  721. package/pack/generated/codex/skills/rite-vet/reference/anti-patterns.md +14 -14
  722. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -10
  723. package/pack/generated/codex/skills/rite-vet/reference/cross-model.md +9 -9
  724. package/pack/generated/codex/skills/rite-vet/reference/depth.md +14 -14
  725. package/pack/generated/codex/skills/rite-vet/reference/eng-lenses.md +9 -9
  726. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +28 -28
  727. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +21 -21
  728. package/package.json +2 -2
  729. package/scripts/build-binaries.sh +1 -1
  730. package/scripts/build-host-artifacts.sh +1 -1
  731. package/scripts/build-release-tarball.sh +1 -1
  732. package/scripts/check-cross-refs.py +8 -8
  733. package/scripts/check-invocation-integrity.py +4 -4
  734. package/scripts/check-no-global-writes.sh +2 -2
  735. package/scripts/check-reply-contract.sh +1 -1
  736. package/scripts/check-rule-uniqueness.sh +2 -2
  737. package/scripts/codex-generate.sh +5 -5
  738. package/scripts/devrites-detect.sh +33 -33
  739. package/scripts/eval-runner.py +7 -7
  740. package/scripts/grade-feature.sh +14 -14
  741. package/scripts/install-lib.sh +2 -2
  742. package/scripts/pin.sh +12 -12
  743. package/scripts/run-behavioral-evals.sh +12 -12
  744. package/scripts/run-evals.sh +1 -1
  745. package/scripts/run-outcome-evals.sh +12 -12
  746. package/scripts/scan-pack-security.py +4 -4
  747. package/scripts/scan-supply-chain-iocs.py +7 -7
  748. package/scripts/skills-inventory.mjs +21 -4
  749. package/scripts/sync-version.sh +2 -2
  750. package/scripts/validate-workflow-security.py +12 -6
  751. package/scripts/validate-workspace-schema.py +2 -2
  752. package/scripts/validate.sh +7 -7
@@ -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 {
@@ -12,7 +12,7 @@ import (
12
12
  // — capability: <c>" section they sit under. It is the shared reader behind two
13
13
  // consumers: the spec-validate `--against` ledger cross-check (specvalidate.go)
14
14
  // and the capability-ledger fold (ledger.go). The grammar linter (lintSpec) is
15
- // deliberately left untouched delta H2 headers are transparent to it so this
15
+ // deliberately left untouched (delta H2 headers are transparent to it) so this
16
16
  // parser adds delta-awareness without perturbing the flat-spec lint contract.
17
17
 
18
18
  // Delta kinds, lower-cased. A requirement outside any delta section has kind "".
@@ -35,7 +35,7 @@ var (
35
35
  // Requirement is one "### Requirement: <name>" block with its delta context.
36
36
  type Requirement struct {
37
37
  Name string // header text after "Requirement:", trailing space trimmed
38
- Key string // strings.ToLower(Name) the identity used to match across specs
38
+ Key string // strings.ToLower(Name): the identity used to match across specs
39
39
  Kind string // added | modified | removed | "" (flat, no delta section)
40
40
  Capability string // from the section tag; "" when untagged
41
41
  HeaderLine int // 1-based line of the "### Requirement:" header
@@ -48,7 +48,7 @@ type SpecDoc struct {
48
48
  HasDelta bool // at least one "## … Requirements" delta section was seen
49
49
  }
50
50
 
51
- // ParseSpec reads and structures a spec.md. It never fails on grammar problems
51
+ // ParseSpec reads and structures a spec.md. It never fails on grammar problems:
52
52
  // that is lintSpec's job; ParseSpec only extracts blocks and their delta context.
53
53
  func ParseSpec(file string) (*SpecDoc, error) {
54
54
  f, err := os.Open(file)
@@ -109,7 +109,7 @@ func ParseSpec(file string) (*SpecDoc, error) {
109
109
  }
110
110
 
111
111
  // requirementKeys returns the set of lower-cased requirement names present in a
112
- // spec file the identity index a cross-spec existence check consults. A missing
112
+ // spec file: the identity index a cross-spec existence check consults. A missing
113
113
  // or unreadable file yields an empty set (the caller decides whether that is an
114
114
  // error), matching how the ledger treats an unseeded capability.
115
115
  func requirementKeys(file string) map[string]bool {
@@ -45,11 +45,11 @@ func SpecSkeleton(arg, cwd string, stdout, stderr io.Writer) int {
45
45
  }
46
46
  }
47
47
  if len(missing) > 0 {
48
- fmt.Fprintf(stdout, "spec-skeleton: BLOCKED %s: missing top-level section(s): %s\n", rel, strings.Join(missing, ", "))
48
+ fmt.Fprintf(stdout, "spec-skeleton: BLOCKED: %s: missing top-level section(s): %s\n", rel, strings.Join(missing, ", "))
49
49
  return 3
50
50
  }
51
51
 
52
- fmt.Fprintf(stdout, "spec-skeleton: OK %s: all required top-level sections present\n", rel)
52
+ fmt.Fprintf(stdout, "spec-skeleton: OK: %s: all required top-level sections present\n", rel)
53
53
  return 0
54
54
  }
55
55
 
@@ -1,6 +1,6 @@
1
1
  // Package lib holds native Go implementations of the deterministic, zero-token
2
2
  // workflow checks DevRites used to run as individual .sh helpers. Each exported
3
- // function owns its logic outright it does not shell out and reproduces the
3
+ // function owns its logic outright (it does not shell out) and reproduces the
4
4
  // legacy behavior (stdout + exit code) exactly, verified in the CLI test suite
5
5
  // by golden assertions or, transitionally, a bash-parity comparison.
6
6
  package lib
@@ -15,11 +15,11 @@ import (
15
15
  "strings"
16
16
  )
17
17
 
18
- // Spec-grammar validator deterministic lint of the structured
18
+ // Spec-grammar validator: deterministic lint of the structured
19
19
  // Requirement/Scenario acceptance grammar in a spec.md. A port of
20
20
  // spec-validate.sh; see standards/spec-grammar.md for the grammar.
21
21
  //
22
- // Exit codes: 0 valid (or no structured requirements nothing to lint) ·
22
+ // Exit codes: 0 valid (or no structured requirements: nothing to lint) ·
23
23
  // 1 grammar violation(s) · 2 usage · 5 missing spec.md.
24
24
  var (
25
25
  reqHeaderRe = regexp.MustCompile(`^[[:space:]]*###[[:space:]]+[Rr]equirement:`)
@@ -57,13 +57,13 @@ func SpecValidate(arg, against, cwd string, stdout, stderr io.Writer) int {
57
57
  rel := strings.TrimPrefix(spec, cwd+"/")
58
58
 
59
59
  if reqs == 0 && len(findings) == 0 {
60
- fmt.Fprintf(stdout, "spec-validate: %s uses the simple acceptance form (no \"### Requirement:\" blocks) nothing to lint\n", rel)
60
+ fmt.Fprintf(stdout, "spec-validate: %s uses the simple acceptance form (no \"### Requirement:\" blocks): nothing to lint\n", rel)
61
61
  return 0
62
62
  }
63
63
 
64
64
  // Delta cross-check (opt-in via --against): a spec written as deltas against a
65
65
  // living ledger must classify each requirement correctly. Skipped for a flat
66
- // snapshot (no delta sections) there is nothing to reconcile.
66
+ // snapshot (no delta sections): there is nothing to reconcile.
67
67
  if against != "" {
68
68
  findings = append(findings, checkAgainstLedger(spec, against, defaultCapability(arg))...)
69
69
  }
@@ -72,12 +72,12 @@ func SpecValidate(arg, against, cwd string, stdout, stderr io.Writer) int {
72
72
  for _, f := range findings {
73
73
  fmt.Fprintln(stderr, f)
74
74
  }
75
- fmt.Fprintf(stderr, "spec-validate: %s %d requirement(s) / %d scenario(s); %d grammar error(s) (see standards/spec-grammar.md)\n",
75
+ fmt.Fprintf(stderr, "spec-validate: %s: %d requirement(s) / %d scenario(s); %d grammar error(s) (see standards/spec-grammar.md)\n",
76
76
  rel, reqs, scens, len(findings))
77
77
  return 1
78
78
  }
79
79
 
80
- fmt.Fprintf(stdout, "spec-validate: OK %s: %d requirement(s) / %d scenario(s) well-formed (SHALL + WHEN/THEN, unique headers)\n",
80
+ fmt.Fprintf(stdout, "spec-validate: OK: %s: %d requirement(s) / %d scenario(s) well-formed (SHALL + WHEN/THEN, unique headers)\n",
81
81
  rel, reqs, scens)
82
82
  return 0
83
83
  }
@@ -220,7 +220,7 @@ func lintSpec(file string) (reqCount, scenCount int, findings []string, err erro
220
220
  }
221
221
  if scenInReq == 0 {
222
222
  if looseWhenThen {
223
- findings = append(findings, fmt.Sprintf("ERROR:%s: Requirement \"%s\" (line %d) has WHEN/THEN lines but no \"#### Scenario:\" header wrap them in a scenario", file, curReq, reqLine))
223
+ findings = append(findings, fmt.Sprintf("ERROR:%s: Requirement \"%s\" (line %d) has WHEN/THEN lines but no \"#### Scenario:\" header: wrap them in a scenario", file, curReq, reqLine))
224
224
  } else {
225
225
  findings = append(findings, fmt.Sprintf("ERROR:%s: Requirement \"%s\" (line %d) has no \"#### Scenario:\" block", file, curReq, reqLine))
226
226
  }
@@ -245,7 +245,7 @@ func lintSpec(file string) (reqCount, scenCount int, findings []string, err erro
245
245
  looseWhenThen = false
246
246
  key := strings.ToLower(name)
247
247
  if first, dup := seen[key]; dup {
248
- findings = append(findings, fmt.Sprintf("ERROR:%s: duplicate Requirement header \"%s\" (lines %d and %d) headers must be unique", file, name, first, nr))
248
+ findings = append(findings, fmt.Sprintf("ERROR:%s: duplicate Requirement header \"%s\" (lines %d and %d): headers must be unique", file, name, first, nr))
249
249
  } else {
250
250
  seen[key] = nr
251
251
  }
@@ -311,7 +311,7 @@ func resolveSpecPath(command, arg string, stderr io.Writer) (string, int, bool)
311
311
  var spec string
312
312
  switch {
313
313
  case isDir(arg):
314
- spec = arg + "/spec.md" // string concat, not filepath.Join preserve the exact path bytes
314
+ spec = arg + "/spec.md" // string concat, not filepath.Join: preserve the exact path bytes
315
315
  case isFile(arg):
316
316
  spec = arg
317
317
  default:
@@ -359,11 +359,11 @@ func checkAgainstLedger(spec, ledgerRoot, defaultCap string) []string {
359
359
  switch r.Kind {
360
360
  case DeltaAdded:
361
361
  if exists {
362
- findings = append(findings, fmt.Sprintf("ERROR:%s: Requirement %q (line %d) is marked ADDED but already exists in ledger capability %q use MODIFIED, or drop the delta", spec, r.Name, r.HeaderLine, capability))
362
+ findings = append(findings, fmt.Sprintf("ERROR:%s: Requirement %q (line %d) is marked ADDED but already exists in ledger capability %q: use MODIFIED, or drop the delta", spec, r.Name, r.HeaderLine, capability))
363
363
  }
364
364
  case DeltaModified, DeltaRemoved:
365
365
  if !exists {
366
- findings = append(findings, fmt.Sprintf("ERROR:%s: Requirement %q (line %d) is marked %s but is absent from ledger capability %q use ADDED, or fix the capability tag", spec, r.Name, r.HeaderLine, strings.ToUpper(r.Kind), capability))
366
+ findings = append(findings, fmt.Sprintf("ERROR:%s: Requirement %q (line %d) is marked %s but is absent from ledger capability %q: use ADDED, or fix the capability tag", spec, r.Name, r.HeaderLine, strings.ToUpper(r.Kind), capability))
367
367
  }
368
368
  }
369
369
  }
@@ -371,7 +371,7 @@ func checkAgainstLedger(spec, ledgerRoot, defaultCap string) []string {
371
371
  }
372
372
 
373
373
  // defaultCapability derives the fallback capability for an untagged delta section:
374
- // the workspace slug the basename of the workspace dir, or of the spec.md's
374
+ // the workspace slug: the basename of the workspace dir, or of the spec.md's
375
375
  // parent directory when a bare file path was given.
376
376
  func defaultCapability(arg string) string {
377
377
  if isDir(arg) {
@@ -14,7 +14,7 @@ import (
14
14
  )
15
15
 
16
16
  // awkNumRe recognises an awk "numeric string" (optional surrounding blanks, sign,
17
- // int/float/exponent) the class that makes a comparison numeric. awkLeadNumRe
17
+ // int/float/exponent): the class that makes a comparison numeric. awkLeadNumRe
18
18
  // captures the leading numeric prefix strtod would convert (so "4x" → 4).
19
19
  var (
20
20
  awkNumRe = regexp.MustCompile(`^[ \t\n]*[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[ \t\n]*$`)
@@ -62,9 +62,9 @@ func sameWindow(h []string, winVal float64) bool {
62
62
  // Matching is by (tool,target) sha1, timestamps ignored. root is the .devrites
63
63
  // directory; the log lives at <root>/features/<slug>/action.log.
64
64
  //
65
- // 0 ok not stuck (or logging, or no workspace: never fail the caller on log)
65
+ // 0 ok: not stuck (or logging, or no workspace: never fail the caller on log)
66
66
  // 2 bad args
67
- // 3 STUCK the recent window is a loop
67
+ // 3 STUCK: the recent window is a loop
68
68
  func Stuck(root string, args []string, stdout, stderr io.Writer) int {
69
69
  cmd := argAt(args, 0)
70
70
  slug := argAt(args, 1)
@@ -84,7 +84,7 @@ func Stuck(root string, args []string, stdout, stderr io.Writer) int {
84
84
  return 2
85
85
  }
86
86
  if !isDir(dir) {
87
- return 0 // no workspace never fail the caller
87
+ return 0 // no workspace: never fail the caller
88
88
  }
89
89
  record := fmt.Sprintf("%d %s %s\n", time.Now().Unix(), tool, sha1Hex(tool+"|"+target))
90
90
  f, err := os.OpenFile(logPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
@@ -102,7 +102,7 @@ func Stuck(root string, args []string, stdout, stderr io.Writer) int {
102
102
  }
103
103
  data, err := os.ReadFile(logPath)
104
104
  if err != nil {
105
- fmt.Fprintln(stdout, "stuck: no actions logged not stuck.")
105
+ fmt.Fprintln(stdout, "stuck: no actions logged: not stuck.")
106
106
  return 0
107
107
  }
108
108
  return checkStuck(actionHashes(data), rawWin, stdout)
@@ -128,14 +128,14 @@ func actionHashes(data []byte) []string {
128
128
 
129
129
  // checkStuck evaluates the hash column for identical-repeat,
130
130
  // A<->B ping-pong (last 6), and one-action-dominates (≥6 of last 8). The window
131
- // arg is handled with awk-compatible semantics see awkNum / sameWindow because
131
+ // arg is handled with awk-compatible semantics (see awkNum / sameWindow) because
132
132
  // the prior shell helper passed it verbatim to `awk -v win=`.
133
133
  func checkStuck(h []string, rawWin string, stdout io.Writer) int {
134
134
  n := len(h)
135
135
  winVal, isNumericString := awkNum(rawWin)
136
136
 
137
137
  // `NR < win`: a numeric comparison when the token is a numeric string, else a
138
- // string comparison of str(NR) against the raw token awk's comparison rule.
138
+ // string comparison of str(NR) against the raw token: awk's comparison rule.
139
139
  tooFew := false
140
140
  if isNumericString {
141
141
  tooFew = float64(n) < winVal
@@ -143,13 +143,13 @@ func checkStuck(h []string, rawWin string, stdout io.Writer) int {
143
143
  tooFew = strconv.Itoa(n) < rawWin
144
144
  }
145
145
  if tooFew {
146
- fmt.Fprintf(stdout, "stuck: only %d action(s) not stuck.\n", n)
146
+ fmt.Fprintf(stdout, "stuck: only %d action(s): not stuck.\n", n)
147
147
  return 0
148
148
  }
149
149
  // The last `win` actions are identical. The message echoes the raw token, as
150
150
  // awk prints the `win` variable verbatim (so "04"/"+4" render unchanged).
151
151
  if sameWindow(h, winVal) {
152
- fmt.Fprintf(stdout, "stuck: last %s actions identical STUCK.\n", rawWin)
152
+ fmt.Fprintf(stdout, "stuck: last %s actions identical: STUCK.\n", rawWin)
153
153
  return 3
154
154
  }
155
155
  // A<->B ping-pong over the last 6 actions.
@@ -166,7 +166,7 @@ func checkStuck(h []string, rawWin string, stdout io.Writer) int {
166
166
  }
167
167
  }
168
168
  if pp && h[n-1] != h[n-2] {
169
- fmt.Fprintln(stdout, "stuck: A<->B ping-pong over last 6 STUCK.")
169
+ fmt.Fprintln(stdout, "stuck: A<->B ping-pong over last 6: STUCK.")
170
170
  return 3
171
171
  }
172
172
  }
@@ -183,11 +183,11 @@ func checkStuck(h []string, rawWin string, stdout io.Writer) int {
183
183
  }
184
184
  }
185
185
  if top >= 6 {
186
- fmt.Fprintf(stdout, "stuck: one action %d/8 of recent window STUCK.\n", top)
186
+ fmt.Fprintf(stdout, "stuck: one action %d/8 of recent window: STUCK.\n", top)
187
187
  return 3
188
188
  }
189
189
  }
190
- fmt.Fprintln(stdout, "stuck: recent window varied not stuck.")
190
+ fmt.Fprintln(stdout, "stuck: recent window varied: not stuck.")
191
191
  return 0
192
192
  }
193
193
 
@@ -197,7 +197,7 @@ func sha1Hex(s string) string {
197
197
  return hex.EncodeToString(sum[:])
198
198
  }
199
199
 
200
- // argAt returns args[i] or "" the Go analogue of bash's ${N:-} positional reads.
200
+ // argAt returns args[i] or "": the Go analogue of bash's ${N:-} positional reads.
201
201
  func argAt(args []string, i int) string {
202
202
  if i < len(args) {
203
203
  return args[i]
@@ -2,5 +2,5 @@
2
2
 
3
3
  Conventions proven by sealed slices on this project. **Local, gitignored, advisory.**
4
4
  The confidence band is earned: it reflects how many independent sealed slices corroborated
5
- the convention it is not a model's guess. A high band is still untrusted data; a fresh
5
+ the convention. It is not a model's guess. A high band is still untrusted data; a fresh
6
6
  observation of the live code always wins over a stale entry here.
@@ -1 +1 @@
1
- # Conventions ledger proven priors (live code always overrides)
1
+ # Conventions ledger: proven priors (live code always overrides)
@@ -10,7 +10,7 @@ import (
10
10
  "strings"
11
11
  )
12
12
 
13
- // skipMarkers matches a test that has been muted a skip/focus/ignore marker
13
+ // skipMarkers matches a test that has been muted: a skip/focus/ignore marker
14
14
  // across the common test frameworks. assertMarkers matches an assertion. Both are
15
15
  // counted per file to detect a test being weakened rather than fixed.
16
16
  var (
@@ -26,7 +26,7 @@ var (
26
26
  //
27
27
  // 0 clean, or skipped because this is not a git repo
28
28
  // 2 no active workspace / bad args
29
- // 3 WEAKENED a test was deleted, skipped, or de-asserted since the base
29
+ // 3 WEAKENED: a test was deleted, skipped, or de-asserted since the base
30
30
  func TestIntegrity(root string, args []string, stdout, stderr io.Writer) int {
31
31
  // Accept both `test-integrity [slug]` and the `check [slug]` alias; a leading
32
32
  // dash is treated as "no slug".
@@ -56,7 +56,7 @@ func TestIntegrity(root string, args []string, stdout, stderr io.Writer) int {
56
56
  cwd, _ := os.Getwd()
57
57
  gitRoot := gitToplevel(cwd)
58
58
  if gitRoot == "" {
59
- fmt.Fprintln(stderr, "test-integrity: not a git repo gate skipped, eyeball the test diff by hand.")
59
+ fmt.Fprintln(stderr, "test-integrity: not a git repo: gate skipped, eyeball the test diff by hand.")
60
60
  return 0
61
61
  }
62
62
 
@@ -85,7 +85,7 @@ func TestIntegrity(root string, args []string, stdout, stderr io.Writer) int {
85
85
  testChanged++
86
86
  old, ok := gitShow(gitRoot, ref+":"+f)
87
87
  if !ok || old == "" {
88
- continue // new test file adding tests is never a weakening
88
+ continue // new test file: adding tests is never a weakening
89
89
  }
90
90
  if !isFile(filepath.Join(gitRoot, f)) {
91
91
  weak++
@@ -110,17 +110,17 @@ func TestIntegrity(root string, args []string, stdout, stderr io.Writer) int {
110
110
  }
111
111
 
112
112
  // Verification-gap advisory: source changed but no test file did. Not a
113
- // weakening and never a verdict on its own a pointer to run the
113
+ // weakening and never a verdict on its own: a pointer to run the
114
114
  // verification-gap trace (testing.md), since a green suite can pass identically
115
115
  // with the change reverted. Printed on both the clean and weakened paths.
116
116
  gapAdvisory := ""
117
117
  if srcChanged > 0 && testChanged == 0 {
118
- gapAdvisory = fmt.Sprintf("test-integrity: advisory %d source file(s) changed, 0 test file(s) touched; "+
118
+ gapAdvisory = fmt.Sprintf("test-integrity: advisory: %d source file(s) changed, 0 test file(s) touched; "+
119
119
  "run the verification-gap trace (testing.md) to confirm each changed behavior is asserted.", srcChanged)
120
120
  }
121
121
 
122
122
  if weak > 0 {
123
- fmt.Fprintf(stderr, "test-integrity: WEAKENED %d test file(s) lost coverage since the slice base:\n", weak)
123
+ fmt.Fprintf(stderr, "test-integrity: WEAKENED: %d test file(s) lost coverage since the slice base:\n", weak)
124
124
  fmt.Fprint(stderr, report.String())
125
125
  fmt.Fprintln(stderr, "A test weakened to pass a gate is a Critical finding. Revert it; fix the code or raise a blocking question.")
126
126
  if gapAdvisory != "" {
@@ -128,14 +128,14 @@ func TestIntegrity(root string, args []string, stdout, stderr io.Writer) int {
128
128
  }
129
129
  return 3
130
130
  }
131
- fmt.Fprintln(stdout, "test-integrity: OK no test deleted, skipped, or de-asserted since the base.")
131
+ fmt.Fprintln(stdout, "test-integrity: OK: no test deleted, skipped, or de-asserted since the base.")
132
132
  if gapAdvisory != "" {
133
133
  fmt.Fprintln(stdout, gapAdvisory)
134
134
  }
135
135
  return 0
136
136
  }
137
137
 
138
- // isSourceFile recognises a path as project source worth pairing with a test
138
+ // isSourceFile recognises a path as project source worth pairing with a test:
139
139
  // a code file that is not itself a test. It filters out the common non-code
140
140
  // changes (docs, config, lockfiles) so the verification-gap advisory keys on
141
141
  // behavior-bearing edits, not a README or a manifest bump.
@@ -19,7 +19,7 @@ import (
19
19
  // any workspace. Exit codes:
20
20
  //
21
21
  // 0 a slice was spent and budget remains, or no budget is set (nothing to do)
22
- // 3 the budget is now exhausted the caller must stop and hand back to a human
22
+ // 3 the budget is now exhausted: the caller must stop and hand back to a human
23
23
  // 5 the file is missing, or the field holds a non-numeric value
24
24
  func TickAfk(args []string, stdout, stderr io.Writer) int {
25
25
  path := argAt(args, 0)
@@ -37,7 +37,7 @@ func TickAfk(args []string, stdout, stderr io.Writer) int {
37
37
 
38
38
  remaining, found := readBudget(lines)
39
39
  if !found || remaining == "none" {
40
- fmt.Fprintf(stdout, "tick-afk: no \"AFK slices remaining\" budget set in %s no-op\n", path)
40
+ fmt.Fprintf(stdout, "tick-afk: no \"AFK slices remaining\" budget set in %s: no-op\n", path)
41
41
  return 0
42
42
  }
43
43
  if !isAllDigits(remaining) {
@@ -62,8 +62,8 @@ func TickAfk(args []string, stdout, stderr io.Writer) int {
62
62
  return 0
63
63
  }
64
64
 
65
- // readBudget returns the current "AFK slices remaining" value the first blank-
66
- // delimited token after the field and whether the field is present at all.
65
+ // readBudget returns the current "AFK slices remaining" value: the first blank-
66
+ // delimited token after the field, and whether the field is present at all.
67
67
  func readBudget(lines []string) (value string, found bool) {
68
68
  value, found = state.CursorField(lines, state.CursorAFKSlicesRemaining)
69
69
  if !found {