devrites 3.0.7 → 3.2.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 (484) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +82 -50
  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/0012-semantic-workspace-upgrades.md +77 -0
  12. package/docs/adr/README.md +4 -0
  13. package/docs/agents/triage-labels.md +7 -7
  14. package/docs/architecture.md +179 -141
  15. package/docs/cli.md +47 -12
  16. package/docs/command-map.md +61 -38
  17. package/docs/engine/agent-contract.md +92 -15
  18. package/docs/engine/commands.md +248 -72
  19. package/docs/engine/state-schema.md +52 -23
  20. package/docs/engine/workspace-schema.md +103 -15
  21. package/docs/extensions.md +1 -1
  22. package/docs/flow.md +86 -51
  23. package/docs/harness-compliance.md +29 -5
  24. package/docs/orchestration.md +107 -79
  25. package/docs/quick-reference.md +11 -3
  26. package/docs/release.md +4 -3
  27. package/docs/skills.md +67 -38
  28. package/docs/usage.md +84 -39
  29. package/engine/cmd/releasepack/main.go +219 -0
  30. package/engine/cmd/releasepack/main_test.go +170 -0
  31. package/engine/commands.go +170 -23
  32. package/engine/git_guard.go +187 -0
  33. package/engine/git_guard_test.go +283 -0
  34. package/engine/hookpolicy.go +53 -55
  35. package/engine/hookpolicy_test.go +91 -1
  36. package/engine/hooks.go +296 -75
  37. package/engine/hooks_events_test.go +276 -6
  38. package/engine/hooks_workspace.go +640 -159
  39. package/engine/internal/devritespaths/paths.go +65 -10
  40. package/engine/internal/devritespaths/paths_test.go +110 -0
  41. package/engine/internal/doctor/doctor.go +153 -23
  42. package/engine/internal/doctor/doctor_test.go +74 -0
  43. package/engine/internal/forge/forge.go +940 -0
  44. package/engine/internal/forge/forge_test.go +576 -0
  45. package/engine/internal/forge/git.go +245 -0
  46. package/engine/internal/forge/liveness_unix.go +48 -0
  47. package/engine/internal/forge/liveness_windows.go +67 -0
  48. package/engine/internal/forge/manifest.go +402 -0
  49. package/engine/internal/gate/gate.go +90 -71
  50. package/engine/internal/gate/gate_test.go +71 -2
  51. package/engine/internal/harness/compliance.go +18 -24
  52. package/engine/internal/harness/harness.go +37 -44
  53. package/engine/internal/harness/harness_test.go +21 -5
  54. package/engine/internal/install/install.go +486 -38
  55. package/engine/internal/install/install_test.go +383 -10
  56. package/engine/internal/iohooks/iohooks.go +350 -59
  57. package/engine/internal/iohooks/iohooks_test.go +421 -1
  58. package/engine/internal/lib/buildreadiness.go +43 -18
  59. package/engine/internal/lib/clarifyreturn.go +91 -0
  60. package/engine/internal/lib/clarifyreturn_test.go +123 -0
  61. package/engine/internal/lib/context.go +54 -15
  62. package/engine/internal/lib/cursor_compat_test.go +8 -0
  63. package/engine/internal/lib/extensions.go +2 -3
  64. package/engine/internal/lib/gitauthority.go +601 -0
  65. package/engine/internal/lib/gitauthority_test.go +346 -0
  66. package/engine/internal/lib/jsonout.go +25 -11
  67. package/engine/internal/lib/jsonout_test.go +16 -0
  68. package/engine/internal/lib/lanes.go +14 -8
  69. package/engine/internal/lib/observability_test.go +358 -0
  70. package/engine/internal/lib/packageexistence.go +151 -35
  71. package/engine/internal/lib/packageexistence_test.go +163 -0
  72. package/engine/internal/lib/progress.go +11 -9
  73. package/engine/internal/lib/provenance.go +462 -0
  74. package/engine/internal/lib/provenance_test.go +154 -0
  75. package/engine/internal/lib/readiness_contract.json +118 -0
  76. package/engine/internal/lib/readinessartifact.go +533 -0
  77. package/engine/internal/lib/readinessartifact_test.go +422 -0
  78. package/engine/internal/lib/reconcile.go +712 -88
  79. package/engine/internal/lib/reconcile_test.go +335 -16
  80. package/engine/internal/lib/recoveryattempts.go +298 -0
  81. package/engine/internal/lib/recoveryattempts_test.go +215 -0
  82. package/engine/internal/lib/resolve.go +23 -19
  83. package/engine/internal/lib/runbook_context_test.go +20 -0
  84. package/engine/internal/lib/session.go +701 -9
  85. package/engine/internal/lib/session_test.go +80 -13
  86. package/engine/internal/lib/testintegrity.go +33 -37
  87. package/engine/internal/lib/testintegrity_test.go +63 -1
  88. package/engine/internal/migrate/migrate.go +81 -1
  89. package/engine/internal/migrate/migrate_test.go +22 -1
  90. package/engine/internal/reason/reason.go +180 -0
  91. package/engine/internal/reason/reason_test.go +35 -0
  92. package/engine/internal/rootfacts/facts.go +466 -0
  93. package/engine/internal/rootfacts/facts_test.go +306 -0
  94. package/engine/internal/safepath/safepath.go +55 -0
  95. package/engine/internal/safepath/safepath_test.go +69 -0
  96. package/engine/internal/safepath/safepath_windows_test.go +26 -0
  97. package/engine/internal/state/clarify_transition.go +165 -0
  98. package/engine/internal/state/clarify_transition_test.go +130 -0
  99. package/engine/internal/state/cmd/workflowmanifest/main.go +12 -8
  100. package/engine/internal/state/cursor.go +58 -0
  101. package/engine/internal/state/cursor_test.go +42 -1
  102. package/engine/internal/state/feature.go +35 -48
  103. package/engine/internal/state/schema.go +90 -37
  104. package/engine/internal/state/snapshot.go +18 -2
  105. package/engine/internal/state/state_test.go +187 -7
  106. package/engine/internal/state/status.go +48 -11
  107. package/engine/internal/state/workflow_manifest.json +231 -50
  108. package/engine/internal/toolpolicy/classifier.go +533 -0
  109. package/engine/internal/toolpolicy/classifier_test.go +424 -0
  110. package/engine/internal/toolpolicy/git.go +616 -0
  111. package/engine/internal/toolpolicy/scanner.go +382 -0
  112. package/engine/main.go +160 -77
  113. package/engine/observability_cli_test.go +52 -0
  114. package/engine/root_routing_test.go +277 -0
  115. package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
  116. package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
  117. package/engine/testdata/golden/TestParityBuildReadiness/arg=legacycontract.golden +1 -0
  118. package/engine/testdata/golden/TestParityBuildReadiness/arg=noclarify.golden +1 -0
  119. package/engine/testdata/golden/TestParityBuildReadiness/arg=novet.golden +1 -0
  120. package/engine/testdata/golden/TestParityBuildReadiness/arg=stalevet.golden +1 -0
  121. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
  122. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
  123. package/engine/testdata/golden/TestParityBuildReadiness/arg=vetnotready.golden +1 -0
  124. package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +1 -1
  125. package/engine/testdata/golden/TestParityProgress/arg=done.golden +1 -1
  126. package/engine/testdata/golden/TestParityProgress/arg=mid.golden +1 -1
  127. package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +1 -1
  128. package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +1 -1
  129. package/engine/testdata/golden/TestParityProgress/arg=plan.golden +1 -1
  130. package/engine/testdata/golden/TestParityProgress/arg=seal.golden +1 -1
  131. package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
  132. package/engine/testdata/golden/TestParityReconcile/inline-fallback.golden +1 -0
  133. package/engine/testdata/golden/TestParityReconcile/snapshot-no-allowlist.golden +1 -0
  134. package/engine/testdata/golden/TestParityWrightScope/devrites-edit-denied.golden +2 -0
  135. package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
  136. package/engine/tests/adr_0011_define_plan_test.go +30 -0
  137. package/engine/tests/budget_test.go +19 -8
  138. package/engine/tests/concurrency_cli_test.go +7 -1
  139. package/engine/tests/doctor_cli_test.go +148 -2
  140. package/engine/tests/forge_cli_test.go +463 -0
  141. package/engine/tests/gate_test.go +63 -8
  142. package/engine/tests/hook_test.go +260 -8
  143. package/engine/tests/hooks_io_test.go +94 -3
  144. package/engine/tests/json_contract_test.go +127 -2
  145. package/engine/tests/migrate_cli_test.go +2 -2
  146. package/engine/tests/parity_buildreadiness_test.go +167 -10
  147. package/engine/tests/parity_learnings_test.go +16 -17
  148. package/engine/tests/parity_reconcile_test.go +20 -17
  149. package/engine/tests/parity_resolve_test.go +12 -11
  150. package/engine/tests/parity_test.go +21 -17
  151. package/pack/.claude/agents/devrites-code-reviewer.md +62 -48
  152. package/pack/.claude/agents/devrites-devex-reviewer.md +69 -53
  153. package/pack/.claude/agents/devrites-doubt-reviewer.md +29 -22
  154. package/pack/.claude/agents/devrites-evidence-scout.md +69 -0
  155. package/pack/.claude/agents/devrites-forge-judge.md +74 -61
  156. package/pack/.claude/agents/devrites-frontend-reviewer.md +48 -39
  157. package/pack/.claude/agents/devrites-performance-reviewer.md +49 -40
  158. package/pack/.claude/agents/devrites-plan-drafter.md +73 -0
  159. package/pack/.claude/agents/devrites-plan-reviewer.md +80 -47
  160. package/pack/.claude/agents/devrites-proof-runner.md +74 -0
  161. package/pack/.claude/agents/devrites-retrospector.md +48 -45
  162. package/pack/.claude/agents/devrites-security-auditor.md +46 -36
  163. package/pack/.claude/agents/devrites-simplifier-reviewer.md +50 -46
  164. package/pack/.claude/agents/devrites-slice-wright.md +153 -165
  165. package/pack/.claude/agents/devrites-spec-reviewer.md +34 -32
  166. package/pack/.claude/agents/devrites-strategy-reviewer.md +63 -34
  167. package/pack/.claude/agents/devrites-test-analyst.md +40 -30
  168. package/pack/.claude/agents/devrites-upgrade-planner.md +100 -0
  169. package/pack/.claude/settings.json +2 -1
  170. package/pack/.claude/skills/devrites-audit/SKILL.md +40 -61
  171. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +24 -13
  172. package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  173. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  174. package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  175. package/pack/.claude/skills/devrites-doubt/SKILL.md +25 -17
  176. package/pack/.claude/skills/devrites-interview/SKILL.md +53 -52
  177. package/pack/.claude/skills/devrites-lib/SKILL.md +12 -9
  178. package/pack/.claude/skills/devrites-lib/reference/intent-map.md +4 -2
  179. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  180. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +8 -1
  181. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +38 -55
  182. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  183. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +200 -190
  184. package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  185. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  186. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
  187. package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  188. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  189. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -18
  190. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  191. package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  192. package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  193. package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
  194. package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
  195. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +0 -9
  196. package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +1 -3
  197. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +17 -7
  198. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +1 -27
  199. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
  200. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
  201. package/pack/.claude/skills/devrites-source-driven/SKILL.md +23 -22
  202. package/pack/.claude/skills/rite/SKILL.md +10 -6
  203. package/pack/.claude/skills/rite/reference/menu.md +13 -7
  204. package/pack/.claude/skills/rite-adopt/SKILL.md +33 -37
  205. package/pack/.claude/skills/rite-autocomplete/SKILL.md +33 -28
  206. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +21 -21
  207. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  208. package/pack/.claude/skills/rite-build/SKILL.md +35 -30
  209. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +41 -39
  210. package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -0
  211. package/pack/.claude/skills/rite-build/reference/forge.md +186 -156
  212. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
  213. package/pack/.claude/skills/rite-build/reference/phase-contract.md +96 -175
  214. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +10 -4
  215. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +129 -134
  216. package/pack/.claude/skills/rite-clarify/SKILL.md +90 -0
  217. package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +61 -0
  218. package/pack/.claude/skills/rite-converge/SKILL.md +35 -25
  219. package/pack/.claude/skills/rite-define/SKILL.md +58 -32
  220. package/pack/.claude/skills/rite-define/reference/gates.md +16 -15
  221. package/pack/.claude/skills/rite-define/reference/plan-template.md +18 -8
  222. package/pack/.claude/skills/rite-frame/reference/failure-modes.md +22 -24
  223. package/pack/.claude/skills/rite-plan/SKILL.md +47 -16
  224. package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +4 -0
  225. package/pack/.claude/skills/rite-polish/SKILL.md +27 -23
  226. package/pack/.claude/skills/rite-prototype/SKILL.md +25 -26
  227. package/pack/.claude/skills/rite-prove/SKILL.md +27 -17
  228. package/pack/.claude/skills/rite-resolve/SKILL.md +12 -11
  229. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
  230. package/pack/.claude/skills/rite-review/SKILL.md +37 -28
  231. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +27 -92
  232. package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  233. package/pack/.claude/skills/rite-ship/reference/design-memory.md +31 -36
  234. package/pack/.claude/skills/rite-spec/SKILL.md +84 -135
  235. package/pack/.claude/skills/rite-spec/reference/investigation.md +37 -33
  236. package/pack/.claude/skills/rite-spec/reference/question-protocol.md +6 -2
  237. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +25 -24
  238. package/pack/.claude/skills/rite-spec/reference/spec-template.md +9 -2
  239. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +13 -3
  240. package/pack/.claude/skills/rite-temper/SKILL.md +62 -47
  241. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +24 -22
  242. package/pack/.claude/skills/rite-upgrade/SKILL.md +125 -0
  243. package/pack/.claude/skills/rite-vet/SKILL.md +114 -113
  244. package/pack/.claude/skills/rite-vet/reference/artifacts.md +50 -9
  245. package/pack/.claude/skills/rite-vet/reference/review-axes.md +39 -37
  246. package/pack/generated/claude/agents/devrites-code-reviewer.md +62 -48
  247. package/pack/generated/claude/agents/devrites-devex-reviewer.md +69 -53
  248. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +29 -22
  249. package/pack/generated/claude/agents/devrites-evidence-scout.md +69 -0
  250. package/pack/generated/claude/agents/devrites-forge-judge.md +74 -61
  251. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +48 -39
  252. package/pack/generated/claude/agents/devrites-performance-reviewer.md +49 -40
  253. package/pack/generated/claude/agents/devrites-plan-drafter.md +73 -0
  254. package/pack/generated/claude/agents/devrites-plan-reviewer.md +80 -47
  255. package/pack/generated/claude/agents/devrites-proof-runner.md +74 -0
  256. package/pack/generated/claude/agents/devrites-retrospector.md +48 -45
  257. package/pack/generated/claude/agents/devrites-security-auditor.md +46 -36
  258. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +50 -46
  259. package/pack/generated/claude/agents/devrites-slice-wright.md +153 -165
  260. package/pack/generated/claude/agents/devrites-spec-reviewer.md +34 -32
  261. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +63 -34
  262. package/pack/generated/claude/agents/devrites-test-analyst.md +40 -30
  263. package/pack/generated/claude/agents/devrites-upgrade-planner.md +100 -0
  264. package/pack/generated/claude/settings.json +2 -1
  265. package/pack/generated/claude/skills/devrites-audit/SKILL.md +40 -61
  266. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +24 -13
  267. package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  268. package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  269. package/pack/generated/claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  270. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +25 -17
  271. package/pack/generated/claude/skills/devrites-interview/SKILL.md +53 -52
  272. package/pack/generated/claude/skills/devrites-lib/SKILL.md +12 -9
  273. package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +4 -2
  274. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  275. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +8 -1
  276. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +38 -55
  277. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  278. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +200 -190
  279. package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  280. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  281. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
  282. package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  283. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  284. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -18
  285. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  286. package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  287. package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  288. package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
  289. package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
  290. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +0 -9
  291. package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +1 -3
  292. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +17 -7
  293. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +1 -27
  294. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
  295. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
  296. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +23 -22
  297. package/pack/generated/claude/skills/rite/SKILL.md +10 -6
  298. package/pack/generated/claude/skills/rite/reference/menu.md +13 -7
  299. package/pack/generated/claude/skills/rite-adopt/SKILL.md +33 -37
  300. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +33 -28
  301. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +21 -21
  302. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  303. package/pack/generated/claude/skills/rite-build/SKILL.md +35 -30
  304. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +41 -39
  305. package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +10 -0
  306. package/pack/generated/claude/skills/rite-build/reference/forge.md +186 -156
  307. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
  308. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +96 -175
  309. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +10 -4
  310. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +129 -134
  311. package/pack/generated/claude/skills/rite-clarify/SKILL.md +90 -0
  312. package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +61 -0
  313. package/pack/generated/claude/skills/rite-converge/SKILL.md +35 -25
  314. package/pack/generated/claude/skills/rite-define/SKILL.md +58 -32
  315. package/pack/generated/claude/skills/rite-define/reference/gates.md +16 -15
  316. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +18 -8
  317. package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +22 -24
  318. package/pack/generated/claude/skills/rite-plan/SKILL.md +47 -16
  319. package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +4 -0
  320. package/pack/generated/claude/skills/rite-polish/SKILL.md +27 -23
  321. package/pack/generated/claude/skills/rite-prototype/SKILL.md +25 -26
  322. package/pack/generated/claude/skills/rite-prove/SKILL.md +27 -17
  323. package/pack/generated/claude/skills/rite-resolve/SKILL.md +12 -11
  324. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
  325. package/pack/generated/claude/skills/rite-review/SKILL.md +37 -28
  326. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +27 -92
  327. package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  328. package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +31 -36
  329. package/pack/generated/claude/skills/rite-spec/SKILL.md +84 -135
  330. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +37 -33
  331. package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +6 -2
  332. package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +25 -24
  333. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +9 -2
  334. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +13 -3
  335. package/pack/generated/claude/skills/rite-temper/SKILL.md +62 -47
  336. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +24 -22
  337. package/pack/generated/claude/skills/rite-upgrade/SKILL.md +125 -0
  338. package/pack/generated/claude/skills/rite-vet/SKILL.md +114 -113
  339. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +50 -9
  340. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +39 -37
  341. package/pack/generated/codex/AGENTS.md +5 -2
  342. package/pack/generated/codex/agents/devrites-code-reviewer.toml +69 -47
  343. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +75 -51
  344. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +35 -20
  345. package/pack/generated/codex/agents/devrites-evidence-scout.toml +75 -0
  346. package/pack/generated/codex/agents/devrites-forge-judge.toml +80 -59
  347. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +54 -37
  348. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +55 -38
  349. package/pack/generated/codex/agents/devrites-plan-drafter.toml +79 -0
  350. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +82 -47
  351. package/pack/generated/codex/agents/devrites-proof-runner.toml +80 -0
  352. package/pack/generated/codex/agents/devrites-retrospector.toml +54 -43
  353. package/pack/generated/codex/agents/devrites-security-auditor.toml +53 -35
  354. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +56 -44
  355. package/pack/generated/codex/agents/devrites-slice-wright.toml +159 -163
  356. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +40 -30
  357. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +65 -34
  358. package/pack/generated/codex/agents/devrites-test-analyst.toml +46 -28
  359. package/pack/generated/codex/agents/devrites-upgrade-planner.toml +106 -0
  360. package/pack/generated/codex/hooks.json +4 -14
  361. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +7 -3
  362. package/pack/generated/codex/skills/devrites-audit/SKILL.md +47 -64
  363. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +7 -3
  364. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +31 -16
  365. package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  366. package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  367. package/pack/generated/codex/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  368. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +32 -20
  369. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +7 -3
  370. package/pack/generated/codex/skills/devrites-interview/SKILL.md +60 -55
  371. package/pack/generated/codex/skills/devrites-lib/SKILL.md +19 -12
  372. package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +4 -2
  373. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  374. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +8 -1
  375. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +38 -55
  376. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  377. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +200 -190
  378. package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  379. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  380. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +16 -52
  381. package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  382. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  383. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -18
  384. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  385. package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  386. package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  387. package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -14
  388. package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +9 -25
  389. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +0 -9
  390. package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +1 -3
  391. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +17 -7
  392. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +1 -27
  393. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +46 -50
  394. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
  395. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +7 -3
  396. package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +7 -3
  397. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +29 -24
  398. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +7 -3
  399. package/pack/generated/codex/skills/rite/SKILL.md +21 -13
  400. package/pack/generated/codex/skills/rite/reference/menu.md +13 -7
  401. package/pack/generated/codex/skills/rite-adopt/SKILL.md +40 -40
  402. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +40 -31
  403. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +21 -21
  404. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  405. package/pack/generated/codex/skills/rite-build/SKILL.md +42 -33
  406. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +41 -39
  407. package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +10 -0
  408. package/pack/generated/codex/skills/rite-build/reference/forge.md +186 -156
  409. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +4 -3
  410. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +96 -175
  411. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +10 -4
  412. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +129 -134
  413. package/pack/generated/codex/skills/rite-clarify/SKILL.md +106 -0
  414. package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +61 -0
  415. package/pack/generated/codex/skills/rite-converge/SKILL.md +42 -28
  416. package/pack/generated/codex/skills/rite-customize/SKILL.md +7 -3
  417. package/pack/generated/codex/skills/rite-define/SKILL.md +65 -35
  418. package/pack/generated/codex/skills/rite-define/reference/gates.md +16 -15
  419. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +18 -8
  420. package/pack/generated/codex/skills/rite-doctor/SKILL.md +7 -3
  421. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +7 -3
  422. package/pack/generated/codex/skills/rite-explain/SKILL.md +7 -3
  423. package/pack/generated/codex/skills/rite-frame/SKILL.md +7 -3
  424. package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +22 -24
  425. package/pack/generated/codex/skills/rite-handoff/SKILL.md +7 -3
  426. package/pack/generated/codex/skills/rite-learn/SKILL.md +7 -3
  427. package/pack/generated/codex/skills/rite-plan/SKILL.md +54 -19
  428. package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +5 -1
  429. package/pack/generated/codex/skills/rite-polish/SKILL.md +34 -26
  430. package/pack/generated/codex/skills/rite-pov/SKILL.md +7 -3
  431. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +7 -3
  432. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -3
  433. package/pack/generated/codex/skills/rite-prototype/SKILL.md +32 -29
  434. package/pack/generated/codex/skills/rite-prove/SKILL.md +34 -20
  435. package/pack/generated/codex/skills/rite-quick/SKILL.md +7 -3
  436. package/pack/generated/codex/skills/rite-resolve/SKILL.md +19 -14
  437. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +3 -0
  438. package/pack/generated/codex/skills/rite-review/SKILL.md +44 -31
  439. package/pack/generated/codex/skills/rite-seal/SKILL.md +7 -3
  440. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +27 -92
  441. package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  442. package/pack/generated/codex/skills/rite-ship/SKILL.md +7 -3
  443. package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +31 -36
  444. package/pack/generated/codex/skills/rite-spec/SKILL.md +91 -138
  445. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +37 -33
  446. package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +6 -2
  447. package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +25 -24
  448. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +9 -2
  449. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +13 -3
  450. package/pack/generated/codex/skills/rite-status/SKILL.md +7 -3
  451. package/pack/generated/codex/skills/rite-temper/SKILL.md +69 -50
  452. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +24 -22
  453. package/pack/generated/codex/skills/rite-upgrade/SKILL.md +141 -0
  454. package/pack/generated/codex/skills/rite-upgrade/agents/openai.yaml +2 -0
  455. package/pack/generated/codex/skills/rite-vet/SKILL.md +121 -116
  456. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +50 -9
  457. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +40 -38
  458. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +7 -3
  459. package/package.json +1 -1
  460. package/scripts/build-release-tarball.sh +32 -15
  461. package/scripts/check-authority-drift.py +125 -0
  462. package/scripts/check-instruction-size-baseline.mjs +19 -11
  463. package/scripts/check-invocation-integrity.py +2 -0
  464. package/scripts/codex-generate.sh +69 -33
  465. package/scripts/grade-feature.sh +121 -40
  466. package/scripts/live-hosts/agent-result.schema.json +230 -0
  467. package/scripts/live-hosts/claude.sh +87 -0
  468. package/scripts/live-hosts/codex.sh +81 -0
  469. package/scripts/live-hosts/common.sh +113 -0
  470. package/scripts/live-hosts/fake-host.py +264 -0
  471. package/scripts/live-hosts/host-transport.py +287 -0
  472. package/scripts/release-check.sh +5 -1
  473. package/scripts/run-agent-contract-evals.py +1380 -0
  474. package/scripts/run-behavioral-evals.sh +24 -30
  475. package/scripts/run-evals.sh +1 -5
  476. package/scripts/run-live-behavioral-evals.py +1274 -144
  477. package/scripts/run-outcome-evals.sh +445 -88
  478. package/scripts/run-tests.mjs +30 -2
  479. package/scripts/skills-inventory.mjs +1 -1
  480. package/scripts/validate-workflow-security.py +39 -20
  481. package/scripts/validate-workspace-schema.py +362 -10
  482. package/scripts/validate.sh +21 -15
  483. package/engine/testdata/golden/TestParityWrightScope/devrites-edit-allowed.golden +0 -1
  484. /package/engine/testdata/golden/{TestParityReconcile/check-no-claimed.golden → TestParityBuildReadiness/arg=clarifyopen.golden} +0 -0
@@ -15,19 +15,21 @@ exhaustive current command and hook inventory; see
15
15
  | code | meaning |
16
16
  | ---- | ------------------------------------------------------------- |
17
17
  | `0` | ok / gate passed |
18
+ | `1` | command ran but could not complete its requested operation |
18
19
  | `2` | usage error (bad args, unknown command, unknown `--harness`) |
19
- | `3` | blocked: a gate pause or a version-skew refuse (`doctor`) |
20
+ | `3` | blocked: a gate pause or a safety refuse (`doctor`) |
20
21
 
21
- Exit `3` is always a **pause, not a crash**: a structured, actionable message
22
- naming exactly what to resolve, then retry. This keeps enforcement safe under
23
- AFK. A run pauses rather than hard-failing. Both a completeness gate
24
- (`readiness`/`seal`) and a `doctor` refuse (state schema newer than the binary
25
- supports) use it.
22
+ Exit `3` means the engine paused or refused an unsafe action; it does not mean
23
+ the process crashed. It prints a structured message that names exactly what to
24
+ resolve before retrying. Both a completeness gate (`readiness` or `seal`) and a
25
+ `doctor` refusal for newer state or unsafe root selection use this code. AFK
26
+ treats it as a pause.
26
27
 
27
28
  ## Gates: `readiness` / `seal`
28
29
 
29
- Deterministic completeness gates. Enforcement is **phase-relative** and
30
- **gate-scoped**: a gate checks only the sections it needs, only when run.
30
+ These deterministic completeness gates are **phase-relative** and
31
+ **gate-scoped**. Each command checks only the sections required for that gate
32
+ when it runs.
31
33
 
32
34
  - `devrites-engine readiness <slug>` asks whether the sections required to **leave the
33
35
  feature's current phase** are complete. A section that is not yet required (e.g.
@@ -46,18 +48,29 @@ $ echo $?
46
48
  3
47
49
  ```
48
50
 
49
- ## `doctor`: version triangle
51
+ ## `doctor`: root facts and version triangle
50
52
 
51
- `devrites-engine doctor` reports the three versions that can drift out of alignment and
52
- one legible verdict:
53
+ `devrites-engine doctor` is read-only. It reports the canonical action root,
54
+ why that root was selected, Git's physical topology, and the three versions that
55
+ can drift:
53
56
 
54
57
  ```
58
+ project: /work/example
59
+ root: /work/example/.devrites
60
+ root-selection: git-ancestor
61
+ git: top=/work/example dir=/work/example/.git common=/work/example/.git linked-worktree=false submodule=false
55
62
  binary: X.Y.Z
56
63
  pack: X.Y.Z
57
- state-schema: v1 (binary supports v1)
64
+ state-schema: v2 (binary supports v2)
58
65
  verdict: ok: binary, pack, and state schema are compatible
66
+ hazards: ok
59
67
  ```
60
68
 
69
+ - **Parent `.devrites` beyond the current Git root, a physical path escape, or
70
+ an external `DEVRITES_WORKSPACE`** → a named hazard and `REFUSE` (exit `3`).
71
+ The report includes one pasteable `fix:` command.
72
+ - **Stale `ACTIVE` or canonical/generated residue** → a named warning (exit
73
+ `0`) with its repair command.
61
74
  - **Binary older than the pack** → a `WARN` (exit `0`): an older binary still
62
75
  runs; update it when convenient.
63
76
  - **State schema a newer major than the binary supports** → a `REFUSE` (exit
@@ -66,8 +79,23 @@ verdict: ok: binary, pack, and state schema are compatible
66
79
 
67
80
  The pack version is discovered from `.claude/devrites.version` or the project
68
81
  `package.json`; when neither exists the pack is reported `unknown` and no skew is
69
- asserted. Doctor also warns when project extensions have artifacts but no optional
70
- `provenance.json`.
82
+ asserted. Doctor also reports linked-worktree/submodule identity, merge/rebase
83
+ state, host-artifact drift, and project extensions that have artifacts but no
84
+ optional `provenance.json`.
85
+
86
+ ### Root safety at command dispatch
87
+
88
+ For commands on the shared workspace router, the engine resolves the action
89
+ root once before the command body runs. Read-only and diagnostic forms can still
90
+ degrade cleanly outside a workspace. A form that writes workspace or Git state
91
+ preserves every unsafe-root refusal and exits `3` before its command body runs.
92
+
93
+ Strict forms include `footprint log`, `stuck log`, `recovery record|clear`,
94
+ `clarify-return`, `reconcile`, mutating `resolve` forms, `close-out`,
95
+ `decisions index`, `ledger sync`, `learnings add`, `timeline log|purge`,
96
+ `health run|check|record`, `review-fingerprints --write`,
97
+ `reviewer-stats record`, every `forge` verb, `extensions sync`, `context sync`,
98
+ and `runbook run|resume`. `resolve next-qid` stays read-only.
71
99
 
72
100
  ## `snapshot`: workspace status JSON
73
101
 
@@ -84,9 +112,9 @@ The cache lives under `/tmp/compound-engineering/devrites/repo-profile` by defau
84
112
 
85
113
  ## `migrate`: legacy aliases and old layouts
86
114
 
87
- `devrites-engine migrate` preserves old workspaces while the canonical live location is
88
- `.devrites/work/<slug>/`. Older `.devrites/features/<slug>/` workspaces remain
89
- readable, and the migration path is:
115
+ `devrites-engine migrate` keeps older `.devrites/features/<slug>/` workspaces
116
+ readable while using `.devrites/work/<slug>/` as the canonical live location.
117
+ Migration is:
90
118
 
91
119
  - **idempotent**: a second run is a no-op (`already up to date`);
92
120
  - **backed up**: the pre-migration `work/` and `ACTIVE` are snapshotted to a
@@ -99,10 +127,16 @@ readable, and the migration path is:
99
127
  The phase is derived from the legacy `state.md`, defaulting to `build` when it
100
128
  can't be read.
101
129
 
130
+ `devrites-engine update` refreshes the installed binary and pack. Migration
131
+ stops at structural compatibility and does not certify old planning artifacts
132
+ against current workflow rules. Build readiness routes an active workspace with
133
+ stale semantic artifacts to `/rite-upgrade [slug]`; that public rite preserves
134
+ completed work and reconciles only unfinished planning.
135
+
102
136
  ## Hooks: `hook <name> --harness=claude|codex`
103
137
 
104
- One binary serves both Claude Code and Codex through thin per-harness adapters.
105
- Every hook is **fail-open and read-only unless it explicitly gates**.
138
+ One binary serves Claude Code and Codex through thin per-harness adapters.
139
+ Hooks are **fail-open and read-only unless they explicitly gate**.
106
140
 
107
141
  - `devrites-engine hook orient --harness=H` emits the SessionStart orientation for the
108
142
  active feature (named by `.devrites/ACTIVE`) as the harness's
@@ -112,28 +146,40 @@ Every hook is **fail-open and read-only unless it explicitly gates**.
112
146
  brownfield → `/rite-adopt`, …); the `.devrites/.first-run-shown` marker keeps
113
147
  it from repeating. Silent (exit `0`, no output) outside a workspace or once
114
148
  the marker exists.
115
- - `devrites-engine hook auq` captures an `AskUserQuestion` exchange after tool use.
116
- It appends each question + chosen answer to `.devrites/timeline.jsonl`
117
- and the feature's `events.jsonl`, so HITL decisions are recorded at the
118
- substrate instead of trusting the model's bookkeeping. It only captures data and never
119
- tunes, blocks, or replies; silent outside an active workspace. Claude-only by
120
- design. Codex has an equivalent tool (`request_user_input`) but emits no hook
121
- event for it. Codex PostToolUse matches only Bash/`apply_patch`/MCP calls, and
122
- the user-input-requested event was declined upstream (openai/codex#12524).
149
+ - `devrites-engine hook auq` observes a completed `AskUserQuestion` call. It
150
+ appends one metadata-only `human-wait-resumed` v1 row per question to the root
151
+ and feature event logs. Canonical workflow answers stay in `questions.md`;
152
+ telemetry stores neither the prompt nor the answer. It never tunes, blocks,
153
+ or replies and stays silent outside an active workspace. This is Claude-only
154
+ because the Codex host exposes no equivalent post-user-input hook.
155
+ - `devrites-engine hook git-guard --harness=H` silently passes ordinary Git,
156
+ denies ambiguous high-impact shell forms with a direct-literal remediation,
157
+ and gates an unambiguous destructive operation on one exact digest. With no
158
+ grant it opens one idempotent escalating question. The exact answer
159
+ `Authorize once` is valid for 15 minutes and is atomically consumed before
160
+ the tool runs, so a failed tool call still spends it. Questions, the private
161
+ consumption ledger, events, and diagnostics never retain the raw command,
162
+ normalized tokens, paths, or refs.
123
163
  - `devrites-engine hook stop-gate --harness=H` refuses to end a turn at a provably
124
164
  inconsistent **rest point**, such as a feature in phase `seal` or `ship` with
125
165
  empty `evidence.md` or `proof.md`. It does not check whole-feature completeness,
126
- so normal in-progress work is never blocked. It observes by default: a would-be block is
127
- appended to the feature's `.stop-gate.log` (mirroring `devrites-engine hook stop-gate`)
128
- rather than gating; set `DEVRITES_STOP_GATE=enforce` to block.
129
- Loop-guarded by the harness's `stop_hook_active` so it can never wedge a
130
- session.
166
+ so normal in-progress work is never blocked. By default, it records a
167
+ would-be block in the feature's `.stop-gate.log` (mirroring
168
+ `devrites-engine hook stop-gate`) and allows the stop. Set
169
+ `DEVRITES_STOP_GATE=enforce` to block. The harness's `stop_hook_active` loop
170
+ guard prevents the hook from wedging a session.
171
+
172
+ When a guard makes a real decision, it appends a metadata-only
173
+ `devrites-event/v1` row. The row says which stable rule fired, whether the guard
174
+ was enforced, observed, unavailable, or bypassed, and which host delivered it.
175
+ It never copies the command, tool payload, fetched content, denial prose, or an
176
+ absolute path. Event-write failure stays fail-open and cannot change the hook's
177
+ decision.
131
178
 
132
179
  ### Fail-open guard
133
180
 
134
- Hooks are wired behind an inline POSIX guard so a **missing binary is a no-op**
135
- that never wedges a session (a teammate without `devrites-engine` installed is never
136
- blocked):
181
+ An inline POSIX guard makes a missing binary a no-op, so a teammate without
182
+ `devrites-engine` installed is not blocked:
137
183
 
138
184
  ```sh
139
185
  command -v devrites-engine >/dev/null 2>&1 && devrites-engine hook orient --harness=claude || exit 0
@@ -160,9 +206,10 @@ Prohibitions tables as a blocking spec-gate check.
160
206
 
161
207
  ## `analyze`: cross-artifact coverage & consistency
162
208
 
163
- `devrites-engine analyze [slug]` cross-checks a feature's `spec.md` against its `tasks.md` before
164
- any code is written, so a coverage gap surfaces as a one-line plan edit instead of a reslice
165
- mid-build. It emits a markdown report with four passes:
209
+ Before code is written, `devrites-engine analyze [slug]` compares a feature's
210
+ `spec.md` with its `tasks.md`. This catches coverage gaps while they still need
211
+ only a one-line plan edit instead of a mid-build reslice. The Markdown report
212
+ has four passes:
166
213
 
167
214
  - **Coverage**: a spec `AC-###` that no slice `Satisfies:` (**CRITICAL**; legacy `[ACn]` remains supported).
168
215
  - **Consistency**: a slice that `Satisfies:` an AC the spec never defines (**CRITICAL**).
@@ -178,31 +225,77 @@ duplicated or conflicting requirements on top of this deterministic floor.
178
225
 
179
226
  ## `review-integrity`: the silent-reviewer gate
180
227
 
181
- `devrites-engine review-integrity [slug]` guards the failure opposite to noise: a reviewer that
182
- returns "looks good, nothing found". It parses `review.md`'s `## Spec` / `## Code review` axis
183
- sections and flags any that carry neither a bold-labeled finding nor a `No-findings:` justification.
184
- A zero-count summary line does **not** count as a finding. An all-zero tally is the rubber-stamp
185
- this catches. Exit `0` every axis accounted for (or no/freeform `review.md`) · `1` an axis is silent
186
- and unjustified. `/rite-review` runs it after writing `review.md`; `/rite-seal` treats `rc=1` as an
187
- Important on the review's completeness. The honesty contract mirrors `doubt-coverage` and the
188
- footprint roster: it checks the *account* is present, not its quality.
189
-
190
- ## `timeline`: append-only session trace
191
-
192
- `devrites-engine timeline log|list` records compact session events in `.devrites/timeline.jsonl`.
193
- It is for reconstructing what happened across long agent runs: which rite or skill acted, what
194
- feature it touched, what decision it made, and whether a state transition happened. It does not
195
- gate anything; it is durable context for audits, handoffs, and later learning.
228
+ `devrites-engine review-integrity [slug]` catches reviews that return only
229
+ "looks good, nothing found." It parses the `## Spec` and `## Code review`
230
+ sections of `review.md` and flags any section with neither a bold severity label
231
+ nor a `No-findings:` justification. A zero-count summary does not count as a
232
+ finding, and an all-zero tally is treated as a rubber stamp. Exit `0` means
233
+ every axis is accounted for, or that `review.md` is absent or freeform. Exit
234
+ `1` means an axis is silent and unjustified.
235
+ `/rite-review` runs this check after writing `review.md`; `/rite-seal` treats
236
+ `rc=1` as an Important finding about review completeness. Like
237
+ `doubt-coverage` and the footprint roster, this command checks that the account
238
+ exists, not whether its judgment is correct.
239
+
240
+ ## `timeline`: local, privacy-bounded workflow trace
241
+
242
+ `timeline log` accepts only validated `devrites-event/v1` facts. Legacy
243
+ free-text `--skill`, `--decision`, and `--note` writes are refused; `list`
244
+ continues to print old rows unchanged for compatibility. Canonical traces use a
245
+ stable `DEVRITES_RUN_ID` across related calls and the small event vocabulary
246
+ `run-started`, phase/gate events, `run-interrupted`, `run-resumed`, and
247
+ `run-finished`:
196
248
 
197
249
  ```bash
198
- devrites-engine timeline log completed --skill rite-review --slug auth-tokens --outcome ok --decision "ship"
199
- devrites-engine timeline log state-change --slug auth-tokens --from build --to review --note "tests green"
200
- devrites-engine timeline list --limit 20
250
+ devrites-engine timeline log run-started \
251
+ --slug auth-tokens \
252
+ --execution-mode named \
253
+ --guard-strength n/a \
254
+ --reason-id DRV-ROOT-SELECTED \
255
+ --host codex
256
+
257
+ devrites-engine timeline log run-finished \
258
+ --slug auth-tokens \
259
+ --outcome passed \
260
+ --execution-mode named \
261
+ --guard-strength n/a \
262
+ --reason-id DRV-GATE-SEAL-PASSED \
263
+ --host codex \
264
+ --evidence .devrites/work/auth-tokens/seal.md
201
265
  ```
202
266
 
203
- Records are JSONL, append-only, and safe for concurrent short-lived engine calls. Install and
204
- update DevRites through the npm flow (`npx devrites ...`); this command is part of the installed
205
- engine, not a Claude/Codex plugin distribution path.
267
+ `--execution-mode`, `--guard-strength`, and `--reason-id` are required. Rows may
268
+ also carry phase IDs, rule IDs, project-relative evidence paths, and a host ID.
269
+ They never retain prompts, question/answer text, source or diff bodies, model
270
+ prose, absolute paths, user/external identifiers, auth/config/secrets, or token
271
+ estimates. The current v1 contract exposes host but not model, token, or cost
272
+ fields, so the engine does not infer them.
273
+
274
+ `timeline report [--run <opaque-id>] [--json]` reads at most the last 4 MiB and
275
+ 4,096 valid v1 rows. It reports observed run and phase duration, retry and
276
+ human-wait counts, interruption/resume linkage, active execution/guard mode,
277
+ the last failed gate reason, stale-evidence/degradation counts, and final
278
+ outcome. Missing, corrupt, oversized, legacy, or truncated input degrades the
279
+ report only. Legacy and corrupt rows are counted as ignored and never
280
+ interpreted as v1. The statusline and `progress` reuse these display facts but
281
+ never treat them as lifecycle authority.
282
+
283
+ Each telemetry log stops accepting new rows at 16 MiB. Hitting that bound
284
+ degrades telemetry only; it cannot weaken or strengthen a workflow decision.
285
+
286
+ `timeline purge (--before <RFC3339> | --run <opaque-id>)...` removes only valid
287
+ matching v1 rows from `.devrites/timeline.jsonl` and the live feature
288
+ `events.jsonl` files. When both selectors are present they form an intersection.
289
+ It never touches state, questions, decisions, evidence, recovery, capability,
290
+ or allowlist files. Purge is bounded to 16 MiB per file and refuses symlinks,
291
+ oversized rows, concurrent changes, and unsafe roots without mutation.
292
+
293
+ Telemetry is local instrumentation only; DevRites sends no analytics or remote
294
+ traces. Review the retention needs, then use exact purge selectors. Reports do
295
+ not interpret legacy rows, so manually delete legacy log files if their old
296
+ free-text content must be removed. Deleting only
297
+ `.devrites/timeline.jsonl` and live feature `events.jsonl` files is safe for
298
+ workflow correctness; the engine recreates them as needed.
206
299
 
207
300
  ## `health`: code-health dashboard and history
208
301
 
@@ -224,8 +317,9 @@ devrites-engine health record 8.5 "tests green; one follow-up" --note "review-fi
224
317
  devrites-engine health list --limit 10
225
318
  ```
226
319
 
227
- Scores must be `0..10`. The label should name the evidence, not a vibe. Skill health stays static
228
- until DevRites records per-skill run outcomes; use `scripts/skill-pruning-audit.mjs` for pruning
320
+ Scores must be `0..10`. The label should name the evidence rather than give a
321
+ subjective impression. Skill health stays static until DevRites records
322
+ per-skill run outcomes; use `scripts/skill-pruning-audit.mjs` for pruning
229
323
  signals instead of inventing telemetry.
230
324
 
231
325
  ## `review-fingerprints`: stable IDs for findings
@@ -239,9 +333,10 @@ bold severity labels (`Critical`, `Important`, `Suggestion`, `Nit`, `FYI`) and e
239
333
  devrites-engine review-fingerprints --write auth-tokens
240
334
  ```
241
335
 
242
- The IDs make recurring findings, dismissals, and later learning easier to correlate without
243
- copying full review text into every downstream surface. `review-integrity` remains the gate; this
244
- command only records stable references.
336
+ The IDs let callers correlate recurring findings, dismissals, and later
337
+ learning without copying full review text into every downstream surface.
338
+ `review-integrity` remains the gate; this command records only stable
339
+ references.
245
340
 
246
341
  ## `reviewer-stats`: dispatch outcomes that gate the fan-out
247
342
 
@@ -263,8 +358,9 @@ devrites-engine reviewer-stats record devrites-performance-reviewer 0 auth-token
263
358
  devrites-engine reviewer-stats report
264
359
  ```
265
360
 
266
- Thresholds live in the engine, not the prompt: the caller reads the verdict, it never re-derives
267
- or overrides the streak math (a user-requested full panel dispatches everything regardless).
361
+ Thresholds live in the engine. The caller reads the verdict without
362
+ recalculating or overriding the streak. A user-requested full panel still
363
+ dispatches every reviewer.
268
364
 
269
365
  ## `reviewers list`: bounded reviewer aliases
270
366
 
@@ -282,6 +378,84 @@ surface (`cli` must be `claude` or `codex`; `model` and `agent` are opaque strin
282
378
  }
283
379
  ```
284
380
 
381
+ ## `forge`: isolated candidate worktrees
382
+
383
+ Forge compares two or three implementation strategies without letting a worker
384
+ choose its own worktree, branch, or merge target. The engine owns those paths in
385
+ one `devrites-forge/v1` manifest:
386
+
387
+ ```bash
388
+ devrites-engine forge plan SLICE-004 feature-slug \
389
+ --strategy A='small adapter' \
390
+ --strategy B='native integration' \
391
+ --acceptance-hash <full-sha256> \
392
+ --test-plan-hash <full-sha256> \
393
+ --worker-binding manifest-env-v1
394
+ ```
395
+
396
+ `plan` requires a clean primary checkout, 2 or 3 contiguous candidates, and
397
+ complete hashes for the acceptance and test-plan scorecards. It writes the
398
+ manifest before the first Git side effect, then creates candidate worktrees
399
+ under a sibling directory named `.<repo>.devrites-forge/<run-id>/`. The
400
+ manifest stays under
401
+ `.devrites/work/<slug>/.forge/<run-id>/manifest.json`.
402
+
403
+ Parallel Forge needs an exact host binding. Omitting
404
+ `--worker-binding manifest-env-v1` is a supported fallback, not a partial
405
+ parallel run. The command exits `0` with:
406
+
407
+ ```json
408
+ {"status":"degraded","mode":"serial","reason":"supported worker binding was not declared"}
409
+ ```
410
+
411
+ It creates no manifest, branch, or worktree in that case. An unsafe repository
412
+ topology, dirty primary checkout, in-progress Git operation, unavailable
413
+ process-liveness proof, or path collision also returns a bounded serial
414
+ degradation when it can do so safely. Invalid arguments or a broken manifest
415
+ fail instead of silently choosing a target.
416
+
417
+ Use `forge process-token <pid>` to obtain the process-start token for a real
418
+ worker. A bound candidate wright receives all five variables below and runs
419
+ from the candidate worktree:
420
+
421
+ ```text
422
+ DEVRITES_FORGE_RUN_ID
423
+ DEVRITES_FORGE_CANDIDATE
424
+ DEVRITES_FORGE_WORKER_ID
425
+ DEVRITES_FORGE_WORKER_PID
426
+ DEVRITES_FORGE_PROCESS_START
427
+ ```
428
+
429
+ The binding is all-or-none. `wright-scope` checks the manifest, physical
430
+ working directory, repository common directory, candidate branch, worker ID,
431
+ live PID/start token, and leaf-agent identity before it permits a write. A
432
+ partial, stale, sibling, foreign, or tampered binding is denied.
433
+
434
+ The remaining commands advance only manifest-owned state:
435
+
436
+ ```bash
437
+ devrites-engine forge record <run-id> A running \
438
+ --worker-id <id> --pid <pid> --process-start <token>
439
+ devrites-engine forge record <run-id> A finished --worker-id <id>
440
+ devrites-engine forge extract <run-id> A
441
+ devrites-engine forge record <run-id> winner A --worker-id <judge-id>
442
+ devrites-engine forge merge <run-id> A
443
+ devrites-engine forge record <run-id> verification verified \
444
+ --worker-id <verifier-id>
445
+ devrites-engine forge cleanup <run-id>
446
+ devrites-engine forge reap [feature-slug]
447
+ ```
448
+
449
+ Extract every candidate before recording and merging the judge's winner.
450
+ Extraction snapshots the full candidate tree, pins its commit, tree, and binary
451
+ delta hash, and refuses unrepresentable or still-live state. Merge requires the
452
+ recorded winner, a clean unchanged primary baseline, every candidate extracted,
453
+ and an exact fast-forward result. Cleanup runs only after the winner landed and
454
+ independent verification was recorded as `verified`. It preserves anything
455
+ dirty, live, foreign, ambiguous, or otherwise unsafe. `reap` follows the same
456
+ manifest-only rule for interrupted runs and never deletes a branch by name
457
+ alone.
458
+
285
459
  ## `extensions` / `overrides`: project extensibility
286
460
 
287
461
  Two project-local surfaces let a team extend the pack without forking it. The
@@ -301,10 +475,12 @@ full contract is in [extensions.md](../extensions.md).
301
475
  reads `.devrites/context.yaml` (`context_file:` or `context_files:`), then falls back to existing
302
476
  `AGENTS.md` / `CLAUDE.md`, then `AGENTS.md`. Paths must be project-relative.
303
477
 
304
- `devrites-engine context show [--json]` is read-only. It reports the project root, `.devrites` root,
305
- active workspace, the source of that selection (`ACTIVE`, `DEVRITES_WORKSPACE`, `DEVRITES_ROOT`, or
306
- `none`), and the Claude/Codex menu forms. `--json` emits one direct JSON document for wrappers that
307
- need to know where a command will act.
478
+ `devrites-engine context show [--json]` is read-only. It uses the same physical
479
+ root facts as `doctor`: canonical and lexical roots, selection reason, Git
480
+ top-level/dir/common-dir/superproject facts, active workspace source, and stable
481
+ hazards with pasteable remediations. `--json` emits one direct document for
482
+ wrappers that need to know where a command will act. `context sync` refuses an
483
+ unsafe root instead of writing through a fallback.
308
484
 
309
485
  ## `runbook`: tiny local automation
310
486
 
@@ -321,8 +497,8 @@ steps:
321
497
 
322
498
  `engine` runs a local `devrites-engine` subcommand, `rite` prints the Claude/Codex dispatch form,
323
499
  `shell` runs in the project root, and `gate` writes `.devrites/runs/<id>/state.json` then exits `3`.
324
- Resume with `devrites-engine runbook resume <id>`. This is for repeatable local runbooks, not a
325
- replacement lifecycle.
500
+ Resume with `devrites-engine runbook resume <id>`. This command handles
501
+ repeatable local runbooks; it does not replace the lifecycle.
326
502
 
327
503
  ## Concurrency
328
504
 
@@ -1,10 +1,12 @@
1
- # `.devrites/` state schema (v1)
1
+ # `.devrites/` state schema (v2)
2
2
 
3
- The `devrites-engine` binary reads a project's workflow state from plain files under
4
- `.devrites/`. Those files are the source of truth and are hand-editable. A
5
- human edit always wins.
3
+ The `devrites-engine` binary reads a project's workflow state from plain files
4
+ under `.devrites/`. Those hand-editable files are the source of truth, and the
5
+ engine reads human edits directly.
6
6
 
7
- `schemaVersion: 1`.
7
+ <!-- authority:schema-version:start -->
8
+ `schemaVersion: 2`.
9
+ <!-- authority:schema-version:end -->
8
10
 
9
11
  For the layered load-order diagram, budget table, manifest/alias model, and
10
12
  phase-required section matrix, see [`workspace-schema.md`](workspace-schema.md).
@@ -25,6 +27,9 @@ phase-required section matrix, see [`workspace-schema.md`](workspace-schema.md).
25
27
  decisions.md DEC-### decision log
26
28
  assumptions.md assumption register
27
29
  questions.md Q-### question register
30
+ decision-coverage.md digest-bound clarification verdict
31
+ eng-review.md digest-bound implementation-readiness verdict
32
+ test-plan.md build-entry and acceptance-to-test plan
28
33
  state.md compact cursor
29
34
  evidence.md EVID-### command/action proof
30
35
  touched-files.md implementation file map
@@ -45,9 +50,9 @@ code. A feature's spec groups deltas under `ADDED`, `MODIFIED`, or `REMOVED`
45
50
  Requirements headings tagged with `capability: <c>`. On ship,
46
51
  `devrites-engine ledger sync` folds them in: ADDED appends, MODIFIED replaces by
47
52
  header identity, and REMOVED deletes. Because it lives outside `work/`, the
48
- ledger survives close-out archival. Unlike the rest of
49
- `.devrites/`, it is **git-tracked** (`.devrites/*` + `!.devrites/specs/`), so the
50
- proven contract is shared, not per-clone. Grammar and delta rules:
53
+ ledger survives close-out archival. Unlike the rest of `.devrites/`, it is
54
+ **git-tracked** (`.devrites/*` + `!.devrites/specs/`). Git therefore shares the
55
+ proven contract across clones. Grammar and delta rules:
51
56
  [`spec-grammar.md`](../../pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md).
52
57
 
53
58
  Backward compatibility: `.devrites/features/<slug>/` remains readable as a legacy
@@ -94,19 +99,43 @@ requires only the sections needed to leave it, and the set grows additively down
94
99
  the arc. A section that is not yet required (e.g. `proof` during the `spec`
95
100
  phase) never blocks.
96
101
 
97
- | phase | required sections |
98
- | --- | --- |
99
- | `frame` | *(none)* |
100
- | `spec`, `temper` | `spec` |
101
- | `define`, `plan` | `spec`, `plan` |
102
- | `vet`, `build`, `converge` | `spec`, `plan`, `decisions`, `tasks` |
103
- | `prove`, `polish`, `review` | `spec`, `plan`, `decisions`, `tasks`, `proof` |
104
- | `seal`, `ship`, `done` | `spec`, `plan`, `decisions`, `tasks`, `proof`, `status` |
102
+ <!-- authority:phase-contract:start -->
103
+ | phase | normal resume | required sections | transition right |
104
+ | --- | --- | --- | --- |
105
+ | `frame` | `/rite-frame` | *(none)* | Frame an unstructured request before lifecycle work. |
106
+ | `spec` | `/rite-spec` | `spec` | Author the product specification. |
107
+ | `clarify` | `/rite-clarify` | `spec` | Close decision coverage in the written specification. |
108
+ | `temper` | `/rite-temper` | `spec` | Optionally challenge the clarified specification strategy. |
109
+ | `define` | `/rite-define` | `spec`, `plan` | Author and approve the initial implementation plan. |
110
+ | `plan` | `/rite-vet` | `spec`, `plan` | Hold the approved or repaired plan checkpoint for engineering review. |
111
+ | `vet` | `/rite-vet` | `spec`, `plan`, `decisions`, `tasks` | Review implementation readiness before build. |
112
+ | `build` | `/rite-build` | `spec`, `plan`, `decisions`, `tasks` | Implement the next approved vertical slice. |
113
+ | `converge` | `/rite-converge` | `spec`, `plan`, `decisions`, `tasks` | Recover unmet clarified intent into new slices. |
114
+ | `prove` | `/rite-prove` | `spec`, `plan`, `decisions`, `tasks`, `proof` | Produce acceptance evidence for the implementation. |
115
+ | `polish` | `/rite-polish` | `spec`, `plan`, `decisions`, `tasks`, `proof` | Apply the bounded quality pass. |
116
+ | `review` | `/rite-review` | `spec`, `plan`, `decisions`, `tasks`, `proof` | Review the proven implementation. |
117
+ | `seal` | `/rite-seal` | `spec`, `plan`, `decisions`, `tasks`, `proof`, `status` | Decide the final GO or NO-GO. |
118
+ | `ship` | `/rite-ship` | `spec`, `plan`, `decisions`, `tasks`, `proof`, `status` | Perform authorized release and close-out mutations. |
119
+ | `done` | *(terminal)* | `spec`, `plan`, `decisions`, `tasks`, `proof`, `status` | Represent archived completion with no resume command. |
120
+ <!-- authority:phase-contract:end -->
105
121
 
106
122
  The authoritative typed definitions live in `engine/internal/state/schema.go`.
107
123
  `workflow_manifest.json` is a generated derivative for non-Go release tools;
108
124
  run `go generate ./internal/state` after editing the registry.
109
125
 
126
+ ### Clarify-return field policy
127
+
128
+ <!-- authority:clarify-return-fields:start -->
129
+ | field | policy |
130
+ | --- | --- |
131
+ | `phase` | derived |
132
+ | `status` | derived |
133
+ | `next_action` | derived |
134
+ | `return_phase` | derived |
135
+ | `return_next_action` | curated when present; otherwise derived |
136
+ | `all other state.md content` | curated and preserved byte-for-byte |
137
+ <!-- authority:clarify-return-fields:end -->
138
+
110
139
  ## `devrites-engine status <slug>`
111
140
 
112
141
  Prints the feature's phase and, for each section, its present/empty state and
@@ -130,13 +159,13 @@ result: incomplete (missing: tasks)
130
159
  - Unknown or missing slug → non-zero exit with a clear message on stderr.
131
160
 
132
161
  `status` makes no model or network calls; it is a pure read of the files under
133
- `DEVRITES_ROOT` (or the nearest `.devrites/` above the working directory). A
134
- hand edit wins immediately because there is no status cache. Other workspace
135
- control-plane commands share that deterministic boundary; explicit
162
+ `DEVRITES_ROOT` (or the nearest `.devrites/` above the working directory).
163
+ There is no status cache, so the next read reflects a hand edit immediately.
164
+ Other workspace control-plane commands share that deterministic boundary;
165
+ explicit
136
166
  install/update/source-cache I/O is isolated under `engine/internal/iohooks` as
137
167
  defined by ADR-0008.
138
168
 
139
- `.devrites/` is ignored **except** the capability ledger at `specs/`, which is
140
- committed shared truth. The recommended pattern is `.devrites/*` +
141
- `!.devrites/specs/` (so `work/`, `archive/`, and `ACTIVE` stay per-clone runtime
142
- state while `specs/` is tracked).
169
+ <!-- authority:state-tracking:start -->
170
+ Git-tracked shared state: `.devrites/specs/`. Per-clone runtime state: `.devrites/work/`, `.devrites/archive/`, `.devrites/ACTIVE`.
171
+ <!-- authority:state-tracking:end -->