devrites 3.0.7 → 3.1.0

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 (472) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +67 -47
  3. package/SECURITY.md +31 -29
  4. package/docs/adr/0001-go-engine-as-control-plane.md +1 -1
  5. package/docs/adr/0002-dual-host-harness.md +1 -1
  6. package/docs/adr/0004-state-schema-phases-sections.md +1 -2
  7. package/docs/adr/0006-clock-seam-and-engine-ci-gates.md +3 -4
  8. package/docs/adr/0009-prebuild-decision-coverage-and-readiness.md +67 -0
  9. package/docs/adr/0010-agent-first-fresh-context-orchestration.md +71 -0
  10. package/docs/adr/0011-define-plan-transition-rights.md +28 -0
  11. package/docs/adr/README.md +3 -0
  12. package/docs/agents/triage-labels.md +7 -7
  13. package/docs/architecture.md +157 -140
  14. package/docs/cli.md +41 -12
  15. package/docs/command-map.md +49 -35
  16. package/docs/engine/agent-contract.md +92 -15
  17. package/docs/engine/commands.md +242 -72
  18. package/docs/engine/state-schema.md +52 -23
  19. package/docs/engine/workspace-schema.md +94 -15
  20. package/docs/extensions.md +1 -1
  21. package/docs/flow.md +80 -50
  22. package/docs/harness-compliance.md +29 -5
  23. package/docs/orchestration.md +107 -79
  24. package/docs/quick-reference.md +7 -3
  25. package/docs/release.md +4 -3
  26. package/docs/skills.md +64 -38
  27. package/docs/usage.md +57 -38
  28. package/engine/cmd/releasepack/main.go +219 -0
  29. package/engine/cmd/releasepack/main_test.go +170 -0
  30. package/engine/commands.go +170 -23
  31. package/engine/git_guard.go +187 -0
  32. package/engine/git_guard_test.go +283 -0
  33. package/engine/hookpolicy.go +53 -55
  34. package/engine/hookpolicy_test.go +91 -1
  35. package/engine/hooks.go +296 -75
  36. package/engine/hooks_events_test.go +276 -6
  37. package/engine/hooks_workspace.go +640 -159
  38. package/engine/internal/devritespaths/paths.go +65 -10
  39. package/engine/internal/devritespaths/paths_test.go +110 -0
  40. package/engine/internal/doctor/doctor.go +153 -23
  41. package/engine/internal/doctor/doctor_test.go +74 -0
  42. package/engine/internal/forge/forge.go +940 -0
  43. package/engine/internal/forge/forge_test.go +576 -0
  44. package/engine/internal/forge/git.go +245 -0
  45. package/engine/internal/forge/liveness_unix.go +48 -0
  46. package/engine/internal/forge/liveness_windows.go +67 -0
  47. package/engine/internal/forge/manifest.go +402 -0
  48. package/engine/internal/gate/gate.go +90 -71
  49. package/engine/internal/gate/gate_test.go +71 -2
  50. package/engine/internal/harness/compliance.go +18 -24
  51. package/engine/internal/harness/harness.go +37 -44
  52. package/engine/internal/harness/harness_test.go +21 -5
  53. package/engine/internal/install/install.go +486 -38
  54. package/engine/internal/install/install_test.go +383 -10
  55. package/engine/internal/iohooks/iohooks.go +350 -59
  56. package/engine/internal/iohooks/iohooks_test.go +421 -1
  57. package/engine/internal/lib/buildreadiness.go +35 -18
  58. package/engine/internal/lib/clarifyreturn.go +91 -0
  59. package/engine/internal/lib/clarifyreturn_test.go +123 -0
  60. package/engine/internal/lib/context.go +54 -15
  61. package/engine/internal/lib/cursor_compat_test.go +8 -0
  62. package/engine/internal/lib/extensions.go +2 -3
  63. package/engine/internal/lib/gitauthority.go +601 -0
  64. package/engine/internal/lib/gitauthority_test.go +346 -0
  65. package/engine/internal/lib/jsonout.go +25 -11
  66. package/engine/internal/lib/jsonout_test.go +16 -0
  67. package/engine/internal/lib/lanes.go +14 -8
  68. package/engine/internal/lib/observability_test.go +358 -0
  69. package/engine/internal/lib/packageexistence.go +151 -35
  70. package/engine/internal/lib/packageexistence_test.go +163 -0
  71. package/engine/internal/lib/progress.go +11 -9
  72. package/engine/internal/lib/provenance.go +462 -0
  73. package/engine/internal/lib/provenance_test.go +154 -0
  74. package/engine/internal/lib/readiness_contract.json +111 -0
  75. package/engine/internal/lib/readinessartifact.go +510 -0
  76. package/engine/internal/lib/readinessartifact_test.go +321 -0
  77. package/engine/internal/lib/reconcile.go +712 -88
  78. package/engine/internal/lib/reconcile_test.go +335 -16
  79. package/engine/internal/lib/recoveryattempts.go +298 -0
  80. package/engine/internal/lib/recoveryattempts_test.go +215 -0
  81. package/engine/internal/lib/resolve.go +23 -19
  82. package/engine/internal/lib/runbook_context_test.go +20 -0
  83. package/engine/internal/lib/session.go +701 -9
  84. package/engine/internal/lib/session_test.go +80 -13
  85. package/engine/internal/lib/testintegrity.go +33 -37
  86. package/engine/internal/lib/testintegrity_test.go +63 -1
  87. package/engine/internal/migrate/migrate.go +81 -1
  88. package/engine/internal/migrate/migrate_test.go +22 -1
  89. package/engine/internal/reason/reason.go +180 -0
  90. package/engine/internal/reason/reason_test.go +35 -0
  91. package/engine/internal/rootfacts/facts.go +466 -0
  92. package/engine/internal/rootfacts/facts_test.go +306 -0
  93. package/engine/internal/safepath/safepath.go +55 -0
  94. package/engine/internal/safepath/safepath_test.go +69 -0
  95. package/engine/internal/safepath/safepath_windows_test.go +26 -0
  96. package/engine/internal/state/clarify_transition.go +165 -0
  97. package/engine/internal/state/clarify_transition_test.go +130 -0
  98. package/engine/internal/state/cmd/workflowmanifest/main.go +12 -8
  99. package/engine/internal/state/cursor.go +58 -0
  100. package/engine/internal/state/cursor_test.go +42 -1
  101. package/engine/internal/state/feature.go +35 -48
  102. package/engine/internal/state/schema.go +90 -37
  103. package/engine/internal/state/snapshot.go +18 -2
  104. package/engine/internal/state/state_test.go +187 -7
  105. package/engine/internal/state/status.go +48 -11
  106. package/engine/internal/state/workflow_manifest.json +231 -50
  107. package/engine/internal/toolpolicy/classifier.go +533 -0
  108. package/engine/internal/toolpolicy/classifier_test.go +424 -0
  109. package/engine/internal/toolpolicy/git.go +616 -0
  110. package/engine/internal/toolpolicy/scanner.go +382 -0
  111. package/engine/main.go +160 -77
  112. package/engine/observability_cli_test.go +52 -0
  113. package/engine/root_routing_test.go +277 -0
  114. package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
  115. package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
  116. package/engine/testdata/golden/TestParityBuildReadiness/arg=noclarify.golden +1 -0
  117. package/engine/testdata/golden/TestParityBuildReadiness/arg=novet.golden +1 -0
  118. package/engine/testdata/golden/TestParityBuildReadiness/arg=stalevet.golden +1 -0
  119. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
  120. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
  121. package/engine/testdata/golden/TestParityBuildReadiness/arg=vetnotready.golden +1 -0
  122. package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +1 -1
  123. package/engine/testdata/golden/TestParityProgress/arg=done.golden +1 -1
  124. package/engine/testdata/golden/TestParityProgress/arg=mid.golden +1 -1
  125. package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +1 -1
  126. package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +1 -1
  127. package/engine/testdata/golden/TestParityProgress/arg=plan.golden +1 -1
  128. package/engine/testdata/golden/TestParityProgress/arg=seal.golden +1 -1
  129. package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
  130. package/engine/testdata/golden/TestParityReconcile/inline-fallback.golden +1 -0
  131. package/engine/testdata/golden/TestParityReconcile/snapshot-no-allowlist.golden +1 -0
  132. package/engine/testdata/golden/TestParityWrightScope/devrites-edit-denied.golden +2 -0
  133. package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
  134. package/engine/tests/adr_0011_define_plan_test.go +30 -0
  135. package/engine/tests/budget_test.go +19 -8
  136. package/engine/tests/concurrency_cli_test.go +7 -1
  137. package/engine/tests/doctor_cli_test.go +148 -2
  138. package/engine/tests/forge_cli_test.go +463 -0
  139. package/engine/tests/gate_test.go +63 -8
  140. package/engine/tests/hook_test.go +260 -8
  141. package/engine/tests/hooks_io_test.go +94 -3
  142. package/engine/tests/json_contract_test.go +127 -2
  143. package/engine/tests/migrate_cli_test.go +2 -2
  144. package/engine/tests/parity_buildreadiness_test.go +141 -10
  145. package/engine/tests/parity_learnings_test.go +16 -17
  146. package/engine/tests/parity_reconcile_test.go +20 -17
  147. package/engine/tests/parity_resolve_test.go +12 -11
  148. package/engine/tests/parity_test.go +21 -17
  149. package/pack/.claude/agents/devrites-code-reviewer.md +62 -48
  150. package/pack/.claude/agents/devrites-devex-reviewer.md +69 -53
  151. package/pack/.claude/agents/devrites-doubt-reviewer.md +29 -22
  152. package/pack/.claude/agents/devrites-evidence-scout.md +69 -0
  153. package/pack/.claude/agents/devrites-forge-judge.md +74 -61
  154. package/pack/.claude/agents/devrites-frontend-reviewer.md +48 -39
  155. package/pack/.claude/agents/devrites-performance-reviewer.md +49 -40
  156. package/pack/.claude/agents/devrites-plan-drafter.md +71 -0
  157. package/pack/.claude/agents/devrites-plan-reviewer.md +80 -47
  158. package/pack/.claude/agents/devrites-proof-runner.md +74 -0
  159. package/pack/.claude/agents/devrites-retrospector.md +48 -45
  160. package/pack/.claude/agents/devrites-security-auditor.md +46 -36
  161. package/pack/.claude/agents/devrites-simplifier-reviewer.md +50 -46
  162. package/pack/.claude/agents/devrites-slice-wright.md +153 -165
  163. package/pack/.claude/agents/devrites-spec-reviewer.md +34 -32
  164. package/pack/.claude/agents/devrites-strategy-reviewer.md +63 -34
  165. package/pack/.claude/agents/devrites-test-analyst.md +40 -30
  166. package/pack/.claude/settings.json +2 -1
  167. package/pack/.claude/skills/devrites-audit/SKILL.md +40 -61
  168. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +24 -13
  169. package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  170. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  171. package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  172. package/pack/.claude/skills/devrites-doubt/SKILL.md +25 -17
  173. package/pack/.claude/skills/devrites-interview/SKILL.md +53 -52
  174. package/pack/.claude/skills/devrites-lib/SKILL.md +11 -9
  175. package/pack/.claude/skills/devrites-lib/reference/intent-map.md +3 -2
  176. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  177. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +8 -1
  178. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +38 -55
  179. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  180. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +198 -190
  181. package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  182. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  183. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
  184. package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  185. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  186. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -18
  187. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  188. package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  189. package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  190. package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
  191. package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
  192. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +0 -9
  193. package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +1 -3
  194. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +17 -7
  195. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +1 -27
  196. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
  197. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +23 -10
  198. package/pack/.claude/skills/devrites-source-driven/SKILL.md +23 -22
  199. package/pack/.claude/skills/rite/SKILL.md +8 -6
  200. package/pack/.claude/skills/rite/reference/menu.md +8 -6
  201. package/pack/.claude/skills/rite-adopt/SKILL.md +33 -37
  202. package/pack/.claude/skills/rite-autocomplete/SKILL.md +33 -28
  203. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +21 -21
  204. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  205. package/pack/.claude/skills/rite-build/SKILL.md +35 -30
  206. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +38 -38
  207. package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -0
  208. package/pack/.claude/skills/rite-build/reference/forge.md +186 -156
  209. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
  210. package/pack/.claude/skills/rite-build/reference/phase-contract.md +96 -175
  211. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +129 -134
  212. package/pack/.claude/skills/rite-clarify/SKILL.md +89 -0
  213. package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +59 -0
  214. package/pack/.claude/skills/rite-converge/SKILL.md +35 -25
  215. package/pack/.claude/skills/rite-define/SKILL.md +57 -32
  216. package/pack/.claude/skills/rite-define/reference/gates.md +16 -15
  217. package/pack/.claude/skills/rite-define/reference/plan-template.md +16 -8
  218. package/pack/.claude/skills/rite-frame/reference/failure-modes.md +22 -24
  219. package/pack/.claude/skills/rite-plan/SKILL.md +44 -16
  220. package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +4 -0
  221. package/pack/.claude/skills/rite-polish/SKILL.md +27 -23
  222. package/pack/.claude/skills/rite-prototype/SKILL.md +25 -26
  223. package/pack/.claude/skills/rite-prove/SKILL.md +27 -17
  224. package/pack/.claude/skills/rite-resolve/SKILL.md +12 -11
  225. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
  226. package/pack/.claude/skills/rite-review/SKILL.md +37 -28
  227. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +27 -92
  228. package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  229. package/pack/.claude/skills/rite-ship/reference/design-memory.md +31 -36
  230. package/pack/.claude/skills/rite-spec/SKILL.md +84 -135
  231. package/pack/.claude/skills/rite-spec/reference/investigation.md +37 -33
  232. package/pack/.claude/skills/rite-spec/reference/question-protocol.md +6 -2
  233. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +25 -24
  234. package/pack/.claude/skills/rite-spec/reference/spec-template.md +9 -2
  235. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +13 -3
  236. package/pack/.claude/skills/rite-temper/SKILL.md +62 -47
  237. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +24 -22
  238. package/pack/.claude/skills/rite-vet/SKILL.md +110 -113
  239. package/pack/.claude/skills/rite-vet/reference/artifacts.md +42 -9
  240. package/pack/.claude/skills/rite-vet/reference/review-axes.md +39 -37
  241. package/pack/generated/claude/agents/devrites-code-reviewer.md +62 -48
  242. package/pack/generated/claude/agents/devrites-devex-reviewer.md +69 -53
  243. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +29 -22
  244. package/pack/generated/claude/agents/devrites-evidence-scout.md +69 -0
  245. package/pack/generated/claude/agents/devrites-forge-judge.md +74 -61
  246. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +48 -39
  247. package/pack/generated/claude/agents/devrites-performance-reviewer.md +49 -40
  248. package/pack/generated/claude/agents/devrites-plan-drafter.md +71 -0
  249. package/pack/generated/claude/agents/devrites-plan-reviewer.md +80 -47
  250. package/pack/generated/claude/agents/devrites-proof-runner.md +74 -0
  251. package/pack/generated/claude/agents/devrites-retrospector.md +48 -45
  252. package/pack/generated/claude/agents/devrites-security-auditor.md +46 -36
  253. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +50 -46
  254. package/pack/generated/claude/agents/devrites-slice-wright.md +153 -165
  255. package/pack/generated/claude/agents/devrites-spec-reviewer.md +34 -32
  256. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +63 -34
  257. package/pack/generated/claude/agents/devrites-test-analyst.md +40 -30
  258. package/pack/generated/claude/settings.json +2 -1
  259. package/pack/generated/claude/skills/devrites-audit/SKILL.md +40 -61
  260. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +24 -13
  261. package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  262. package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  263. package/pack/generated/claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  264. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +25 -17
  265. package/pack/generated/claude/skills/devrites-interview/SKILL.md +53 -52
  266. package/pack/generated/claude/skills/devrites-lib/SKILL.md +11 -9
  267. package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +3 -2
  268. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  269. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +8 -1
  270. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +38 -55
  271. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  272. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +198 -190
  273. package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  274. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  275. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
  276. package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  277. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  278. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -18
  279. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  280. package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  281. package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  282. package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
  283. package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
  284. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +0 -9
  285. package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +1 -3
  286. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +17 -7
  287. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +1 -27
  288. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
  289. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +23 -10
  290. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +23 -22
  291. package/pack/generated/claude/skills/rite/SKILL.md +8 -6
  292. package/pack/generated/claude/skills/rite/reference/menu.md +8 -6
  293. package/pack/generated/claude/skills/rite-adopt/SKILL.md +33 -37
  294. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +33 -28
  295. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +21 -21
  296. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  297. package/pack/generated/claude/skills/rite-build/SKILL.md +35 -30
  298. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +38 -38
  299. package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +10 -0
  300. package/pack/generated/claude/skills/rite-build/reference/forge.md +186 -156
  301. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
  302. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +96 -175
  303. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +129 -134
  304. package/pack/generated/claude/skills/rite-clarify/SKILL.md +89 -0
  305. package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +59 -0
  306. package/pack/generated/claude/skills/rite-converge/SKILL.md +35 -25
  307. package/pack/generated/claude/skills/rite-define/SKILL.md +57 -32
  308. package/pack/generated/claude/skills/rite-define/reference/gates.md +16 -15
  309. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +16 -8
  310. package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +22 -24
  311. package/pack/generated/claude/skills/rite-plan/SKILL.md +44 -16
  312. package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +4 -0
  313. package/pack/generated/claude/skills/rite-polish/SKILL.md +27 -23
  314. package/pack/generated/claude/skills/rite-prototype/SKILL.md +25 -26
  315. package/pack/generated/claude/skills/rite-prove/SKILL.md +27 -17
  316. package/pack/generated/claude/skills/rite-resolve/SKILL.md +12 -11
  317. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
  318. package/pack/generated/claude/skills/rite-review/SKILL.md +37 -28
  319. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +27 -92
  320. package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  321. package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +31 -36
  322. package/pack/generated/claude/skills/rite-spec/SKILL.md +84 -135
  323. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +37 -33
  324. package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +6 -2
  325. package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +25 -24
  326. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +9 -2
  327. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +13 -3
  328. package/pack/generated/claude/skills/rite-temper/SKILL.md +62 -47
  329. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +24 -22
  330. package/pack/generated/claude/skills/rite-vet/SKILL.md +110 -113
  331. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +42 -9
  332. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +39 -37
  333. package/pack/generated/codex/AGENTS.md +5 -2
  334. package/pack/generated/codex/agents/devrites-code-reviewer.toml +69 -47
  335. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +75 -51
  336. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +35 -20
  337. package/pack/generated/codex/agents/devrites-evidence-scout.toml +75 -0
  338. package/pack/generated/codex/agents/devrites-forge-judge.toml +80 -59
  339. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +54 -37
  340. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +55 -38
  341. package/pack/generated/codex/agents/devrites-plan-drafter.toml +77 -0
  342. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +82 -47
  343. package/pack/generated/codex/agents/devrites-proof-runner.toml +80 -0
  344. package/pack/generated/codex/agents/devrites-retrospector.toml +54 -43
  345. package/pack/generated/codex/agents/devrites-security-auditor.toml +53 -35
  346. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +56 -44
  347. package/pack/generated/codex/agents/devrites-slice-wright.toml +159 -163
  348. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +40 -30
  349. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +65 -34
  350. package/pack/generated/codex/agents/devrites-test-analyst.toml +46 -28
  351. package/pack/generated/codex/hooks.json +4 -14
  352. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +7 -3
  353. package/pack/generated/codex/skills/devrites-audit/SKILL.md +47 -64
  354. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +7 -3
  355. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +31 -16
  356. package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  357. package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  358. package/pack/generated/codex/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  359. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +32 -20
  360. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +7 -3
  361. package/pack/generated/codex/skills/devrites-interview/SKILL.md +60 -55
  362. package/pack/generated/codex/skills/devrites-lib/SKILL.md +18 -12
  363. package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +3 -2
  364. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  365. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +8 -1
  366. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +38 -55
  367. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  368. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +198 -190
  369. package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  370. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  371. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +16 -52
  372. package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  373. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  374. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -18
  375. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  376. package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  377. package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  378. package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -14
  379. package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +9 -25
  380. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +0 -9
  381. package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +1 -3
  382. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +17 -7
  383. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +1 -27
  384. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +46 -50
  385. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +23 -10
  386. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +7 -3
  387. package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +7 -3
  388. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +29 -24
  389. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +7 -3
  390. package/pack/generated/codex/skills/rite/SKILL.md +19 -13
  391. package/pack/generated/codex/skills/rite/reference/menu.md +8 -6
  392. package/pack/generated/codex/skills/rite-adopt/SKILL.md +40 -40
  393. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +40 -31
  394. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +21 -21
  395. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  396. package/pack/generated/codex/skills/rite-build/SKILL.md +42 -33
  397. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +38 -38
  398. package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +10 -0
  399. package/pack/generated/codex/skills/rite-build/reference/forge.md +186 -156
  400. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +4 -3
  401. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +96 -175
  402. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +129 -134
  403. package/pack/generated/codex/skills/rite-clarify/SKILL.md +105 -0
  404. package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +59 -0
  405. package/pack/generated/codex/skills/rite-converge/SKILL.md +42 -28
  406. package/pack/generated/codex/skills/rite-customize/SKILL.md +7 -3
  407. package/pack/generated/codex/skills/rite-define/SKILL.md +64 -35
  408. package/pack/generated/codex/skills/rite-define/reference/gates.md +16 -15
  409. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +16 -8
  410. package/pack/generated/codex/skills/rite-doctor/SKILL.md +7 -3
  411. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +7 -3
  412. package/pack/generated/codex/skills/rite-explain/SKILL.md +7 -3
  413. package/pack/generated/codex/skills/rite-frame/SKILL.md +7 -3
  414. package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +22 -24
  415. package/pack/generated/codex/skills/rite-handoff/SKILL.md +7 -3
  416. package/pack/generated/codex/skills/rite-learn/SKILL.md +7 -3
  417. package/pack/generated/codex/skills/rite-plan/SKILL.md +51 -19
  418. package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +5 -1
  419. package/pack/generated/codex/skills/rite-polish/SKILL.md +34 -26
  420. package/pack/generated/codex/skills/rite-pov/SKILL.md +7 -3
  421. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +7 -3
  422. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -3
  423. package/pack/generated/codex/skills/rite-prototype/SKILL.md +32 -29
  424. package/pack/generated/codex/skills/rite-prove/SKILL.md +34 -20
  425. package/pack/generated/codex/skills/rite-quick/SKILL.md +7 -3
  426. package/pack/generated/codex/skills/rite-resolve/SKILL.md +19 -14
  427. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +3 -0
  428. package/pack/generated/codex/skills/rite-review/SKILL.md +44 -31
  429. package/pack/generated/codex/skills/rite-seal/SKILL.md +7 -3
  430. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +27 -92
  431. package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  432. package/pack/generated/codex/skills/rite-ship/SKILL.md +7 -3
  433. package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +31 -36
  434. package/pack/generated/codex/skills/rite-spec/SKILL.md +91 -138
  435. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +37 -33
  436. package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +6 -2
  437. package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +25 -24
  438. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +9 -2
  439. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +13 -3
  440. package/pack/generated/codex/skills/rite-status/SKILL.md +7 -3
  441. package/pack/generated/codex/skills/rite-temper/SKILL.md +69 -50
  442. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +24 -22
  443. package/pack/generated/codex/skills/rite-vet/SKILL.md +117 -116
  444. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +42 -9
  445. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +40 -38
  446. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +7 -3
  447. package/package.json +1 -1
  448. package/scripts/build-release-tarball.sh +32 -15
  449. package/scripts/check-authority-drift.py +125 -0
  450. package/scripts/check-instruction-size-baseline.mjs +19 -11
  451. package/scripts/check-invocation-integrity.py +2 -0
  452. package/scripts/codex-generate.sh +69 -33
  453. package/scripts/grade-feature.sh +121 -40
  454. package/scripts/live-hosts/agent-result.schema.json +230 -0
  455. package/scripts/live-hosts/claude.sh +87 -0
  456. package/scripts/live-hosts/codex.sh +81 -0
  457. package/scripts/live-hosts/common.sh +113 -0
  458. package/scripts/live-hosts/fake-host.py +264 -0
  459. package/scripts/live-hosts/host-transport.py +287 -0
  460. package/scripts/release-check.sh +5 -1
  461. package/scripts/run-agent-contract-evals.py +1380 -0
  462. package/scripts/run-behavioral-evals.sh +24 -30
  463. package/scripts/run-evals.sh +1 -5
  464. package/scripts/run-live-behavioral-evals.py +1274 -144
  465. package/scripts/run-outcome-evals.sh +414 -88
  466. package/scripts/run-tests.mjs +30 -2
  467. package/scripts/skills-inventory.mjs +1 -1
  468. package/scripts/validate-workflow-security.py +39 -20
  469. package/scripts/validate-workspace-schema.py +362 -10
  470. package/scripts/validate.sh +21 -15
  471. package/engine/testdata/golden/TestParityWrightScope/devrites-edit-allowed.golden +0 -1
  472. /package/engine/testdata/golden/{TestParityReconcile/check-no-claimed.golden → TestParityBuildReadiness/arg=clarifyopen.golden} +0 -0
@@ -1,11 +1,11 @@
1
1
  # DevRites architecture
2
2
 
3
- DevRites is a **distributed but coordinated** set of project-local Claude Code
4
- and Codex skill surfaces backed by one Go control plane. It makes an AI coding
5
- agent behave like a disciplined senior engineer: framespecoptional temper
6
- definemandatory vetbuild one verified slice prove with evidence →
7
- polish → review → seal → ship. `converge` is the recovery state when live code
8
- and recorded intent need to meet again.
3
+ DevRites combines project-local Claude Code and Codex skills with one Go control
4
+ plane. It gives AI coding agents a defined engineering process: frame spec
5
+ mandatory adaptive clarify optional temper definemandatory vet build
6
+ one verified slice prove with evidence polish reviewseal ship.
7
+ `converge` is the recovery state for bringing live code and recorded intent
8
+ back into agreement.
9
9
 
10
10
  For the `.devrites/` load order, file budgets, artifact schema, aliases,
11
11
  traceability rules, and phase-relative completeness model, see
@@ -15,60 +15,56 @@ traceability rules, and phase-relative completeness model, see
15
15
 
16
16
  1. **Public lifecycle and workspace skills**: `.claude/skills/rite-*`,
17
17
  `user-invocable: true`. Each owns one bounded phase or workspace transition.
18
- Sequence: `rite-spec`, optional `rite-temper`, `rite-define`, mandatory
18
+ Sequence: `rite-spec`, mandatory adaptive `rite-clarify`, optional `rite-temper`, `rite-define`, mandatory
19
19
  `rite-vet`, `rite-build`, recovery `rite-converge`, `rite-prove`,
20
- `rite-polish`, `rite-review`, `rite-seal`, `rite-ship`; `rite-plan` repairs
21
- or reslices an active plan,
22
- plus the resume verb `rite-resolve` (answer a HITL gate and clear
23
- `Awaiting human`). The thin `/rite` menu and read-only `rite-status` live in
24
- the public utility layer below.
20
+ `rite-polish`, `rite-review`, `rite-seal`, and `rite-ship`. `rite-plan`
21
+ repairs or reslices an active plan. The resume verb `rite-resolve` answers a
22
+ HITL gate and clears `Awaiting human`. The thin `/rite` menu and read-only
23
+ `rite-status` live in the public utility layer below.
25
24
  `/rite-seal` **decides** GO/NO-GO and writes the verdict to `seal.md`;
26
- `/rite-ship` is the eighth core lifecycle rite that **executes** the
27
- irreversible git ladder and **closes** the task (archives the workspace,
28
- clears `ACTIVE`). Keeping the decision and the irreversible action as two
29
- separately-auditable steps is the point.
25
+ `/rite-ship` is the final core lifecycle rite that **executes** the
26
+ irreversible git ladder and **closes** the task by archiving the workspace
27
+ and clearing `ACTIVE`. Separate steps let users audit the release decision
28
+ before any irreversible action.
30
29
  2. **Public utility and on-ramp skills**: `rite-adopt`, `rite-quick`,
31
30
  `rite-frame`, `rite-status`, `rite-doctor`, `rite-learn`, `rite-explain`,
32
31
  `rite-customize`, `rite-zoom-out`, `rite-prototype`, `rite-handoff`,
33
32
  `rite-pressure-test`, `rite-pov`, `rite-dogfood`, `rite-pr-feedback`, and
34
33
  `rite-autocomplete`. These are public commands. `rite-autocomplete` is the
35
- unattended orchestrator: it drives the whole lifecycle (spec → … → seal →
36
- ship) end-to-end, choosing the best option at each soft gate, pausing only
37
- on hard irreversible-risk / blocking / escalating gates or a NO-GO. The
38
- `devrites-` prefix is **namespace** (collision avoidance against bundled
39
- Claude Code skill names like `prototype`, `handoff`, `triage`, `diagnose`),
40
- not a visibility marker; `rite-pressure-test` carries no prefix because it
41
- doesn't collide.
34
+ unattended orchestrator. It drives the whole lifecycle (spec → … → seal →
35
+ ship), chooses the recommended option at each soft gate, and pauses only for
36
+ hard irreversible-risk, blocking, or escalating gates, or a NO-GO. The
37
+ `devrites-` prefix prevents collisions with bundled Claude Code skill names
38
+ such as `prototype`, `handoff`, `triage`, and `diagnose`; it does not mark
39
+ visibility. `rite-pressure-test` needs no prefix because it does not collide.
42
40
  3. **Internal specialist skills**: `.claude/skills/devrites-*` with
43
41
  `user-invocable: false`: `devrites-interview`, `-source-driven`,
44
42
  `-doubt`, `-ux-shape` (plans UX/UI into `design-brief.md` at `/rite-spec`),
45
43
  `-frontend-craft`, `-browser-proof`, `-debug-recovery`,
46
44
  `-api-interface`, `-audit` (dispatches the security / perf / simplify
47
- reviewer subagent on an axis argument), `-prose-craft`, and
48
- `-refresh-indexes`. These 11 specialists are model-invoked by public skills
49
- or host auto-selection; not menu noise. Whether a skill is public or
50
- internal is governed by the `user-invocable:` flag, not by the name
51
- prefix.
45
+ fresh-context reviewer on an axis argument), `-prose-craft`, and
46
+ `-refresh-indexes`. Public skills or host auto-selection invoke these 11
47
+ specialists. They do not appear in the menu. The `user-invocable:` flag,
48
+ rather than the name prefix, determines whether a skill is public.
52
49
 
53
50
  Engineering rules live at `.claude/skills/devrites-lib/reference/standards/`.
54
- Workspace-operating lifecycle rites load `core.md` first and disclose phase-specific
55
- files on demand; compact utilities keep a narrower local contract. Parallel
51
+ Workspace-operating lifecycle rites load `core.md` first and read
52
+ phase-specific files on demand. Compact utilities keep a narrower local
53
+ contract. Parallel
56
54
  reviewer fan-out at `/rite-seal` is the shared reference file
57
55
  `devrites-lib/reference/parallel-dispatch.md`, not a skill.
58
56
  4. **Supporting references**: `reference/*.md` inside each skill. Long checklists,
59
57
  templates, and anti-rationalization tables loaded on demand (progressive
60
58
  disclosure) so `SKILL.md` bodies stay small.
61
- 5. **Agents**: `.claude/agents/devrites-*` fresh-context subagents: **13 read-only + 1
62
- write-capable**. The read-only set is twelve reviewers: the post-build fan-out used by
63
- `/rite-seal` and the doubt loop (`devrites-spec-reviewer`, `-code-reviewer`, `-test-analyst`,
64
- `-frontend-reviewer`, `-security-auditor`, `-performance-reviewer`, `-devex-reviewer`,
65
- `-doubt-reviewer`, `-simplifier-reviewer`), the **pre-plan** `devrites-strategy-reviewer`
66
- (`/rite-temper`), the **pre-build** `devrites-plan-reviewer` (`/rite-vet`), and the
67
- **build-time** `devrites-forge-judge` (scores competing candidate builds on a `Forge: yes`
68
- slice), plus the cross-feature `devrites-retrospector` (mines the shipped archive at
69
- `/rite-ship` close). The one **write-capable** executor, `devrites-slice-wright`, is
70
- dispatched by `/rite-build` to write one slice in a clean context (the write-side mirror of
71
- the reviewers).
59
+ 5. **Agents**: `.claude/agents/devrites-*` contains **17 flat depth-one roles**:
60
+ 16 read-only leaves and the sole source/test writer,
61
+ `devrites-slice-wright`. The read-only set includes three bounded work
62
+ leaves (`devrites-evidence-scout`, `devrites-plan-drafter`, and
63
+ `devrites-proof-runner`) plus the existing reviewers, auditors, judge, and
64
+ retrospector. Public rites remain authoritative: leaves return typed
65
+ evidence, never ask the human, change phase, or write canonical
66
+ `.devrites/**` state. See [`orchestration.md`](orchestration.md) for the
67
+ dispatch, fallback, identity, and reconciliation contract.
72
68
  6. **Engineering rules**: DevRites' own stack-agnostic rules installed to
73
69
  `.claude/skills/devrites-lib/reference/standards/`. Workspace-operating lifecycle
74
70
  skills read `core.md` in step 0; compact utilities load only their local or conditional
@@ -85,37 +81,54 @@ traceability rules, and phase-relative completeness model, see
85
81
  `test-proof-checklist.md` · `browser-proof-checklist.md` · `security-checklist.md`.
86
82
  - **Index:** `README.md` (phase mapping, loading model).
87
83
 
88
- State lives in `.devrites/` as human-readable Markdown so it survives context
89
- compaction and new sessions. The optional `.devrites/AFK` sentinel toggles
90
- the session-level run mode (see "Run modes" below). See `usage.md` for the
91
- workspace file list, [`command-map.md`](command-map.md) for the full
92
- per-skill catalog with triggers + I/O, and
84
+ State lives in `.devrites/` as human-readable Markdown so later sessions can
85
+ reload it after context compaction. The optional `.devrites/AFK` sentinel
86
+ toggles the session-level run mode (see "Run modes" below). See `usage.md` for
87
+ the workspace file list, [`command-map.md`](command-map.md) for the full
88
+ per-skill catalog with triggers and I/O, and
93
89
  [`capability-surface-selection.md`](capability-surface-selection.md) for where future
94
90
  capabilities belong.
95
91
 
96
92
  ## Design rationale
97
93
 
98
94
  ### Why the engine owns shared orientation (`devrites-lib`)
99
- Every workspace-operating skill starts by reading the active feature's slug,
100
- phase, present artifacts, run mode, and open-question tally. Re-deriving
101
- that from raw Markdown in each skill was duplicated (step-0 prose across ~20 skills),
102
- token-heavy (counting open gates meant re-reading the append-only `questions.md`, which
103
- only grows), and error-prone (a missed AFK sentinel or a miscounted gate changes behavior).
104
- So orientation is computed once by the `devrites-engine` binary, which prints a compact
105
- digest each skill reads at step 0. The same binary owns the read-only gates
95
+ Every workspace-operating skill needs the active feature's slug, phase, present
96
+ artifacts, run mode, and open-question tally. Parsing raw Markdown in each skill
97
+ duplicated the same setup across about 20 skills. Counting open gates also meant
98
+ rereading the append-only `questions.md`, and a missed AFK sentinel or
99
+ miscounted gate could change behavior. The `devrites-engine` binary now computes
100
+ orientation once and prints a compact digest that each skill reads at step 0.
101
+ The same binary owns the read-only gates
106
102
  (`build-readiness`, `evidence-fresh`, `check-acceptance`) and state mutators
107
103
  (`tick-afk`, `resolve`, `close-out`), so Claude Code, Codex, CI, and humans
108
- all exercise the same control plane. `devrites-lib` remains an internal library skill
109
- (`user-invocable: false`, not a command) for shared references. The orientation
110
- path is read-only; mutation stays in dedicated engine subcommands.
104
+ all exercise the same control plane. `devrites-lib` remains an internal library
105
+ skill (`user-invocable: false`, not a command) for shared references. The
106
+ orientation command only reads state; dedicated engine subcommands handle
107
+ mutations.
111
108
 
112
109
  ### Why the engine owns install/update/uninstall semantics
113
- Install/update/uninstall behavior lives in `engine/internal/install`: manifest writing
114
- and pruning, shared-file marker merge/removal, Codex hook merge/removal, dry-run output,
115
- binary lifecycle, and update flag replay all execute through `devrites-engine`. The
116
- shell entrypoints (`install.sh`, `uninstall.sh`, `update.sh`) and npm entrypoint
117
- (`bin/devrites.mjs`) remain bootstrap shims: they acquire a release bundle or engine
118
- binary, then pass arguments through.
110
+ `engine/internal/install` implements install, update, and uninstall behavior:
111
+ manifest writing and pruning, shared-file marker merging and removal, Codex hook
112
+ merging and removal, dry-run output, binary lifecycle, and update flag replay.
113
+ The shell entrypoints
114
+ (`install.sh`, `uninstall.sh`, `update.sh`) and npm entrypoint
115
+ (`bin/devrites.mjs`) remain bootstrap shims. They acquire a release bundle or
116
+ engine binary, then pass arguments through.
117
+
118
+ Directly managed manifest entries carry SHA-256 ownership records. Before the
119
+ first refresh, prune, or uninstall mutation, the engine classifies every
120
+ affected path. It preserves customized or legacy entries without hashes unless
121
+ `--force` is explicit, and it checks each path again immediately before a
122
+ destructive action. Marker-owned shared files retain their block or hook merge
123
+ policy. The engine rejects existing symlinks, junctions, and resolved target
124
+ escapes even under force.
125
+
126
+ Binary replacement is a separate transaction. Before replacement, the binary
127
+ at the exact staged path must report the requested release version. A backup in
128
+ the same directory remains until the binary at the installed path passes the
129
+ same check in a new process. On failure, the engine atomically restores the old
130
+ bytes and mode or removes a bad first install. It does not use `PATH` to
131
+ establish binary identity.
119
132
 
120
133
  Some duplication is intentionally preserved at host boundaries. Raw `curl | bash`
121
134
  install/uninstall must be self-contained enough to fetch the bundle before any sibling
@@ -126,30 +139,31 @@ different project-local conventions. Those generated host artifacts are delivere
126
139
  npm installer; Claude/Codex plugin packaging is intentionally not a distribution path.
127
140
 
128
141
  ### Why `/engine` was rejected
129
- A single `/engine` (or `/devrites`) mega-command would load every phase's instructions
130
- into one context, creating constant context pressure and hiding the intent of each
131
- step. It also makes "do only this phase" hard to enforce and bloats the recurring
132
- token cost (skill bodies stay in context once loaded). DevRites splits the lifecycle
133
- into small skills that load only what the current phase needs.
142
+ A single `/engine` (or `/devrites`) command would load every phase's
143
+ instructions into one context. That would increase context pressure, obscure
144
+ the purpose of each step, and make phase boundaries harder to enforce. Skill
145
+ bodies stay in context once loaded, so the recurring token cost would also
146
+ grow. Separate skills load only what the current phase needs.
134
147
 
135
148
  ### Why `rite-*` names
136
- Short, memorable, brand-aligned ("rites" = disciplined steps), and **collision-free**.
137
- Built-in / bundled Claude Code commands include `/plan`, `/review`, `/run`, `/verify`,
138
- `/code-review`, `/simplify`, `/security-review`, `/init`, `/compact`, `/debug`. The
139
- `rite-` prefix avoids all of them. (Collision audit: `research/claude-code-skills-notes.md`.)
149
+ The team chose `rite-` because it is short, easy to remember, and matches the
150
+ product's use of "rites" for disciplined steps. The prefix also avoids
151
+ collisions. Built-in or bundled Claude Code commands include `/plan`, `/review`,
152
+ `/run`, `/verify`, `/code-review`, `/simplify`, `/security-review`, `/init`,
153
+ `/compact`, and `/debug`. (Collision audit:
154
+ `research/claude-code-skills-notes.md`.)
140
155
 
141
156
  ### Why a thin menu skill, not a mega-router
142
- `/rite` is **only** an entrypoint: it shows a compact phase-grouped menu, prints
157
+ `/rite` is an entrypoint. It shows a compact phase-grouped menu, prints
143
158
  recommended-start guidance from `devrites-engine first-task`, and dispatches a
144
159
  named verb to its owning skill. Menu mode does not read raw workspace state;
145
- `/rite-status` owns detailed status. `/rite` deliberately does **not** duplicate
146
- workflow logic. Doing so would recreate the mega-command problem. DevRites keeps
147
- selection thin and lets each phase own its context.
160
+ `/rite-status` owns detailed status. `/rite` does not duplicate workflow logic,
161
+ which keeps selection small and leaves each phase in control of its context.
148
162
 
149
163
  ### Why internal skills exist
150
- Specialist processes (doubt, source-driven, frontend craft, browser proof, audits)
151
- are **disciplines**, not user commands. As `user-invocable: false` specialist
152
- skills they:
164
+ Specialist processes such as doubt, source-driven research, frontend craft,
165
+ browser proof, and audits are not direct user commands. As
166
+ `user-invocable: false` skills they:
153
167
  - stay out of the command menu (less cognitive load);
154
168
  - are invoked automatically by the host model or explicitly by a public skill when their
155
169
  trigger conditions hit;
@@ -157,16 +171,23 @@ skills they:
157
171
 
158
172
  ### Why spec, architecture, plan, tasks, and traceability are separate artifacts
159
173
  Combining investigation, specification, planning, and slicing makes it easier
160
- to miss a question, guess at placement, or leave a requirement out of a slice.
161
- DevRites splits them so each
162
- is focused and gated. `/rite-spec` **investigates deeply and writes `spec.md`** (product
163
- what/why, requirements, acceptance, non-goals, measurable success) and must pass its
164
- readiness gate. `/rite-define` then turns that **approved spec** into `architecture.md`
174
+ to miss a question, choose the wrong placement, or omit a requirement from a
175
+ slice. Each concern therefore has its own artifact and gate. `/rite-spec`
176
+ investigates the request and codebase in depth, then writes `spec.md` with the
177
+ product what and why, requirements, acceptance criteria, non-goals, and
178
+ measurable success. The spec
179
+ must pass its readiness gate. `/rite-clarify` then audits the full actor,
180
+ journey, data, interface, and operations topology and writes
181
+ `decision-coverage.md`. A complete spec needs no questions.
182
+ `/rite-define` turns that **approved, clarified spec** into `architecture.md`
165
183
  (technical map), `plan.md` (approach), `tasks.md` (vertical `SLICE-###` work), and
166
- `traceability.md` (AC/REQ → slice → proof → evidence → files). The spec is fully covered
167
- before any building begins, but it does not become a long technical omnibus. `/rite-plan`
168
- is the separate repair/reslice/re-order tool for an *active* plan when it goes stale or
169
- drifts.
184
+ `traceability.md` (AC/REQ → slice → proof → evidence → files). `/rite-vet` then records
185
+ `Implementation readiness: READY` before build. Both verdict artifacts are
186
+ semantically validated and bound to their canonical inputs by SHA-256 digest;
187
+ marker text alone or a stale digest cannot pass. This checks the full spec
188
+ before Build without turning `spec.md` into a long technical document.
189
+ `/rite-plan` separately repairs, reslices, or reorders an active plan when it
190
+ goes stale or drifts.
170
191
 
171
192
  ### Why `/rite-polish` is one skill with two progressive-disclosure halves
172
193
  Polish has two natural halves: **code** (simplify, dead code, naming, plus
@@ -189,37 +210,42 @@ to run Phase 4 before Phase 3 because detail work would otherwise reinforce
189
210
  patterns that do not match the project's design system.
190
211
 
191
212
  ### Why seal and ship are separate phases (`/rite-seal`, `/rite-ship`)
192
- Deciding "is this safe to ship" and *shipping it* are different acts with
193
- different blast radii. `/rite-seal` is a **pure decision gate**: it walks acceptance
194
- against evidence, fans out the fresh-context reviewers, and writes the GO / NO-GO
195
- verdict to `seal.md` and runs no git. On GO it sets `state.md` `Next step:
196
- /rite-ship` and stops. `/rite-ship` is the eighth core lifecycle rite: it refuses to run
197
- without a GO recorded in `seal.md`, renders the type-`GO` prompt, runs the irreversible
198
- git ladder (commit → push → tag/PR per the project's convention), writes `ship.md`,
199
- then **closes the task** by setting phase `done` and archiving `.devrites/work/<slug>/`
200
- `.devrites/archive/<slug>/` (every `.md` preserved, never deleted) and clears
201
- `.devrites/ACTIVE`. A GO seal is a verdict, not an authorization to push; keeping the
202
- decision and the irreversible action as two separately-auditable steps is the point.
213
+ Deciding whether a change is safe to ship has a smaller blast radius than
214
+ shipping it. `/rite-seal` checks acceptance against evidence, dispatches the
215
+ fresh-context reviewers, writes the GO or NO-GO verdict to `seal.md`, and runs
216
+ no git commands. On GO, it sets `state.md` to `Next step: /rite-ship` and stops.
217
+ `/rite-ship` refuses to run without a GO in `seal.md`. It renders the type-`GO`
218
+ prompt, runs the irreversible git ladder (commit push tag/PR under the
219
+ project's convention), and writes `ship.md`. It then sets phase `done`, moves
220
+ `.devrites/work/<slug>/` to `.devrites/archive/<slug>/` with every `.md` file
221
+ preserved, and clears `.devrites/ACTIVE`. The GO verdict does not authorize a
222
+ push; the separate Ship step does.
203
223
 
204
224
  ### Why `/rite-autocomplete` exists (the unattended orchestrator)
205
- Some features are routine enough to run end-to-end without per-phase human iteration.
206
- `/rite-autocomplete` drives the whole lifecycle (spec → temper → define → vet →
225
+ Some features are routine enough to run without human input at every phase.
226
+ `/rite-autocomplete` drives the whole lifecycle (spec → clarify → temper → define → vet →
207
227
  build×N → prove → polish → review → seal → ship) by reading each phase's
208
228
  `SKILL.md` and executing its
209
- workflow, carrying state through the workspace files rather than chat. A vague prompt
210
- triggers an up-front `devrites-interview`, which is the only interactive window.
211
- After that it runs unattended, choosing the best option at each soft gate and recording the rationale
212
- in `decisions.md`. It does **not** weaken the safety gates: hard irreversible-risk
213
- (auth / migration / public-API / red tests), blocking / escalating gates, an open
214
- `gate: validating`, a NO-GO, exhausted `max_slices`, or low confidence all still pause.
215
- By default it stops at the final type-`GO`; the `--ship` flag (alias `--yolo`)
216
- auto-confirms it for a zero-touch push.
229
+ workflow. It carries state through workspace files rather than chat. A vague
230
+ prompt starts `devrites-interview`; `/rite-spec` and `/rite-clarify` then
231
+ finish the only interactive window. After decision coverage is CLEAR it runs unattended,
232
+ choosing the recommended option at each soft gate and recording the rationale
233
+ in `decisions.md`. It does **not** weaken the safety gates: genuine
234
+ product/scope/policy decisions, irreversible risk, human-only access/actions,
235
+ an open human-owned gate, a NO-GO, exhausted `max_slices`, or low confidence
236
+ still pause. Agents use bounded recovery for red tests, runtime failures, and
237
+ missing technical coverage. By default the workflow stops at the final
238
+ type-`GO`; the `--ship` flag (alias `--yolo`) confirms it and pushes without
239
+ another prompt.
217
240
 
218
241
  ### Why persistent `.devrites/` state
219
242
  Long features outlive a single context window. Durable Markdown for the spec,
220
243
  plan, tasks, state, evidence, drift, and decisions lets any phase reload the
221
- current position in any session, even after compaction. This is the main thing DevRites adds over typical
222
- session-scoped workflows, which don't persist feature state.
244
+ current position in any session, even after compaction. Later-phase
245
+ clarification stores `return_phase` and `return_next_action` in `state.md`;
246
+ technical recovery stores a fingerprinted three-attempt budget in
247
+ `recovery-attempts.jsonl`. Session-scoped workflows cannot provide the same
248
+ resume behavior because they do not persist feature state.
223
249
 
224
250
  ### Run modes: HITL & AFK
225
251
 
@@ -238,38 +264,27 @@ an `Awaiting human` block to `state.md` and a question to `questions.md`, then s
238
264
  `/rite-resolve` is the canonical resume verb. Restarting a session reads the workspace
239
265
  back into a consistent state because the pause is durable Markdown, not chat memory.
240
266
 
241
- Why a four-gate taxonomy (instead of a single "ask the user" pause): a single gate
242
- becomes a queue under load. Mixing `advisory` (audit-only log) with `validating`
243
- (async: build continues, merge blocks) and reserving `blocking` for synchronous halts
244
- keeps the loop alive when the answer can wait, and pauses hard when it cannot.
245
- AFK always pauses for destructive migrations, auth/authz boundaries, public API
246
- breaks, and failed tests, type checks, or lint, regardless of the sentinel. See
267
+ Why a four-gate taxonomy (instead of a single "ask the user" pause): a single
268
+ gate becomes a queue under load. `advisory` writes only an audit log.
269
+ `validating` lets the build continue but blocks the merge. `blocking` stops
270
+ synchronously. This lets work continue when an answer can wait and pauses it
271
+ when the answer is required.
272
+ AFK always pauses for genuine product/scope/policy choices, irreversible risk,
273
+ and human-only access or actions, regardless of the sentinel. Objective test,
274
+ type, lint, runtime, and coverage failures stay inside bounded technical
275
+ recovery; exhaustion records a blocker without inventing a question. See
247
276
  [`pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md`](../pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md) for the full
248
277
  contract.
249
278
 
250
279
  ## Design choices at a glance
251
280
 
252
- - **Surface**: 29 public `rite-*` skills (42 total): the thin `/rite` menu
253
- (carries the routing) + 8 lifecycle phases (`rite-spec`, `rite-define`,
254
- `rite-build`, `rite-prove`, `rite-polish`, `rite-review`, `rite-seal`,
255
- `rite-ship`: seal **decides**, ship **executes + closes**) + the
256
- `rite-temper` (strategic, optional) and `rite-vet` (engineering, every plan)
257
- reviews + the `rite-quick` express lane and `rite-frame` pre-flight/self-audit
258
- lens + `rite-adopt` (onboard an existing codebase) + `rite-learn` (cross-feature
259
- lessons) + `rite-status` + `rite-doctor` (install health) +
260
- `rite-customize` (project-local overrides/extensions) +
261
- `rite-explain` (grounded concept/diff/idea/recap explanation) +
262
- `rite-pov` (external-option verdicts) + `rite-dogfood` (browser QA) +
263
- `rite-pr-feedback` (review-thread closure) +
264
- the `rite-plan` replan verb + `rite-converge` recovery + the `rite-resolve`
265
- resume verb + 4 ideation /
266
- handoff utilities (`rite-zoom-out`, `rite-prototype`, `rite-handoff`,
267
- `rite-pressure-test`) + `rite-autocomplete` (the unattended full-lifecycle
268
- orchestrator), plus 11 internal model-invoked `devrites-*` specialists and the
269
- `devrites-lib` library, not one mega-command. The `devrites-` prefix is a
270
- namespace (collision avoidance), not a public/internal marker.
271
- `user-invocable:` is. The 11 specialists are model-invoked;
272
- `devrites-lib` explicitly disables model invocation.
281
+ - **Surface**: 30 public `rite-*` skills (43 total), plus the thin `/rite`
282
+ menu: 31 public and 12 internal. The lifecycle
283
+ includes mandatory adaptive Clarify, optional Temper, mandatory Vet, and
284
+ Converge recovery; Seal **decides** and Ship **executes + closes**. Eleven
285
+ `devrites-*` specialists are model-invoked and `devrites-lib` is the shared
286
+ non-command library. Visibility comes from `user-invocable:`, not the
287
+ namespace prefix.
273
288
  - **Selection**: the `/rite` menu skill carries the routing table; every
274
289
  workflow skill enforces a "right skill, right time" rule in its body.
275
290
  - **State**: durable `.devrites/` Markdown that survives compaction and new sessions.
@@ -281,13 +296,15 @@ contract.
281
296
  - **Slice rule**: build **one vertical slice, then stop**. There is no automatic continuation.
282
297
  - **Drift**: an explicit **Spec Drift Guard** in build/prove/polish/review/seal.
283
298
  - **Design**: `devrites-frontend-craft` + a four-phase `/rite-polish` orchestrator (code + backend always; UI normalize + polish when UI is in scope).
284
- - **Review**: **feature-scoped** multi-axis review with severity labels +
285
- fresh-context subagents at the seal.
299
+ - **Agents**: 17 fresh-context roles at flat depth one: 16 read-only leaves and
300
+ one wright. Fallback order is named, generic, then labelled inline.
301
+ - **Review**: **feature-scoped** multi-axis review with severity labels and
302
+ fresh-context agents at the seal.
286
303
  - **Scope**: clarify → seal (decide) → ship (commit → push → tag or PR,
287
304
  following the project's convention) → close. The CI
288
305
  pipeline stays with the project.
289
306
  - **Install**: project-local, manifest-managed host artifacts; the optional
290
- shared engine binary is the sole sanctioned global artifact.
307
+ shared engine binary is the only allowed global artifact.
291
308
 
292
309
  ## Deviations from the original build brief (and why)
293
310
 
package/docs/cli.md CHANGED
@@ -7,21 +7,27 @@ deterministic gates from the project root.
7
7
 
8
8
  ## The `devrites-engine` CLI
9
9
 
10
- Install DevRites normally, then run the engine from the project root:
11
-
12
- The examples below are a curated working set. `devrites-engine help` is the
13
- exhaustive current command and hook inventory.
10
+ Install DevRites normally, then run the engine from the project root. These
11
+ examples cover the common commands; `devrites-engine help` lists every current
12
+ command and hook.
14
13
 
15
14
  ```bash
16
15
  devrites-engine preamble # workspace digest for the active feature
17
16
  devrites-engine snapshot [slug] # machine-readable workspace/status snapshot
18
- devrites-engine build-readiness [slug] # build-readiness gate (exit 0 ready)
17
+ devrites-engine build-readiness [slug] # semantic clarify + vet gate (exit 0 ready)
18
+ devrites-engine readiness-digest coverage|engineering [slug] # canonical input digest
19
+ devrites-engine clarify-return enter|restore [slug] # durable later-phase clarify cursor
20
+ devrites-engine recovery route <class> # typed owner/action; JSON recovery-route/v1
21
+ devrites-engine recovery check|record|clear ... # durable three-failure budget; record/clear accept --class
22
+ devrites-engine reconcile snapshot|check|close [slug] # retained writer baseline
23
+ devrites-engine test-integrity [slug] # reject weakened tests against that baseline
24
+ devrites-engine package-existence [slug] # verify new imports are declared
19
25
  devrites-engine evidence-fresh [slug] # proof freshness gate (exit 0 fresh · 3 stale)
20
26
  devrites-engine check-acceptance <dir> # acceptance gate (exit 0 proven · 1 gap)
21
27
  devrites-engine ledger sync <dir> # fold a feature's spec deltas into the living capability ledger
22
28
  devrites-engine ledger list|show <cap> # read the ledger: what the system already does
23
29
  devrites-engine context show --json # report root, active workspace, and host command forms
24
- devrites-engine timeline log|list # append/list session events, decisions, and state moves
30
+ devrites-engine timeline log|list|report|purge # local typed trace, bounded report, exact retention
25
31
  devrites-engine health run # run known project checks + record a code-health dashboard
26
32
  devrites-engine health record|list # append/list manual or dashboard health history
27
33
  devrites-engine review-fingerprints [slug] # stable IDs for review findings; --write saves JSONL
@@ -41,20 +47,43 @@ directly rather than wrapping human text. Snapshot consumers should read
41
47
  `nextCommands.claude` or `nextCommands.codex` for the current host instead of
42
48
  hardcoding a `/rite-*` or `$rite-*` command form. `context show --json` and
43
49
  `reviewer-stats report --json` are also direct structured reports rather than
44
- envelopes.
50
+ envelopes. The snapshot wire identifier is separate from the workspace-map
51
+ frontmatter `schemaVersion: 2`: schema v2 is additive, reads legacy layouts and
52
+ aliases, and rejects only declarations newer than the engine supports.
45
53
 
46
54
  The npm `devrites` shim remains the installer/updater/uninstaller entry point and
47
55
  proxies these engine subcommands when `devrites-engine` is installed. Install and
48
56
  update DevRites through `npx devrites ...`; DevRites is not distributed through
49
57
  Claude or Codex plugin stores.
50
58
 
51
- The exit code is the gate. A non-zero `build-readiness`,
59
+ Callers use the exit code as the gate result. `build-readiness` routes
60
+ objective gaps to their owner:
61
+
62
+ <!-- authority:readiness-reasons:start -->
63
+ | exit | reason | condition | remediation |
64
+ | --- | --- | --- | --- |
65
+ | `0` | `ready` | Ready to build | *(none)* |
66
+ | `2` | `plan-unapproved` | Plan is not approved | `/rite-define` |
67
+ | `3` | `awaiting-human` | A human-owned question is open | `/rite-resolve` |
68
+ | `4` | `plan-blocked` | Plan is blocked and needs repair | `/rite-plan` |
69
+ | `5` | `workspace-missing` | Workspace or state.md is missing | `/rite-spec` |
70
+ | `6` | `coverage-not-clear` | Decision coverage is not CLEAR and fresh | `/rite-clarify` |
71
+ | `7` | `engineering-not-ready` | Plan is not vetted or implementation readiness is not READY | `/rite-vet` |
72
+ <!-- authority:readiness-reasons:end -->
73
+
74
+ A non-zero `build-readiness`,
52
75
  `evidence-fresh`, or `check-acceptance` result is a hard stop that can be used
53
76
  in an agent loop, a local script, or pre-merge CI.
54
77
 
78
+ `build-readiness` does not trust `CLEAR` or `READY` text alone. It validates the
79
+ required sections, tables, ownership and test mappings, and compares each
80
+ artifact's SHA-256 field with the digest of its canonical inputs. Migration may
81
+ upgrade a workspace declaration to schema v2, but it never creates or blesses
82
+ clarification, vet, or proof evidence.
83
+
55
84
  ## Why this exists
56
85
 
57
- DevRites workspaces and standards are tool-agnostic data. The CLI lets agent
58
- loops, local scripts, CI, and humans use that data without rebuilding the
59
- workflow. CLI verdicts and `rite-*` verdicts agree because both run the same
60
- engine gates.
86
+ The CLI exposes DevRites workspace data and standards to agent loops, local
87
+ scripts, CI, and human operators without requiring each caller to reimplement
88
+ the workflow. CLI and `rite-*` verdicts match because both use the same engine
89
+ gates.