devrites 3.0.6 → 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 +18 -0
  2. package/README.md +67 -45
  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 +575 -58
  54. package/engine/internal/install/install_test.go +490 -9
  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
@@ -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
@@ -101,8 +129,8 @@ can't be read.
101
129
 
102
130
  ## Hooks: `hook <name> --harness=claude|codex`
103
131
 
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**.
132
+ One binary serves Claude Code and Codex through thin per-harness adapters.
133
+ Hooks are **fail-open and read-only unless they explicitly gate**.
106
134
 
107
135
  - `devrites-engine hook orient --harness=H` emits the SessionStart orientation for the
108
136
  active feature (named by `.devrites/ACTIVE`) as the harness's
@@ -112,28 +140,40 @@ Every hook is **fail-open and read-only unless it explicitly gates**.
112
140
  brownfield → `/rite-adopt`, …); the `.devrites/.first-run-shown` marker keeps
113
141
  it from repeating. Silent (exit `0`, no output) outside a workspace or once
114
142
  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).
143
+ - `devrites-engine hook auq` observes a completed `AskUserQuestion` call. It
144
+ appends one metadata-only `human-wait-resumed` v1 row per question to the root
145
+ and feature event logs. Canonical workflow answers stay in `questions.md`;
146
+ telemetry stores neither the prompt nor the answer. It never tunes, blocks,
147
+ or replies and stays silent outside an active workspace. This is Claude-only
148
+ because the Codex host exposes no equivalent post-user-input hook.
149
+ - `devrites-engine hook git-guard --harness=H` silently passes ordinary Git,
150
+ denies ambiguous high-impact shell forms with a direct-literal remediation,
151
+ and gates an unambiguous destructive operation on one exact digest. With no
152
+ grant it opens one idempotent escalating question. The exact answer
153
+ `Authorize once` is valid for 15 minutes and is atomically consumed before
154
+ the tool runs, so a failed tool call still spends it. Questions, the private
155
+ consumption ledger, events, and diagnostics never retain the raw command,
156
+ normalized tokens, paths, or refs.
123
157
  - `devrites-engine hook stop-gate --harness=H` refuses to end a turn at a provably
124
158
  inconsistent **rest point**, such as a feature in phase `seal` or `ship` with
125
159
  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.
160
+ so normal in-progress work is never blocked. By default, it records a
161
+ would-be block in the feature's `.stop-gate.log` (mirroring
162
+ `devrites-engine hook stop-gate`) and allows the stop. Set
163
+ `DEVRITES_STOP_GATE=enforce` to block. The harness's `stop_hook_active` loop
164
+ guard prevents the hook from wedging a session.
165
+
166
+ When a guard makes a real decision, it appends a metadata-only
167
+ `devrites-event/v1` row. The row says which stable rule fired, whether the guard
168
+ was enforced, observed, unavailable, or bypassed, and which host delivered it.
169
+ It never copies the command, tool payload, fetched content, denial prose, or an
170
+ absolute path. Event-write failure stays fail-open and cannot change the hook's
171
+ decision.
131
172
 
132
173
  ### Fail-open guard
133
174
 
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):
175
+ An inline POSIX guard makes a missing binary a no-op, so a teammate without
176
+ `devrites-engine` installed is not blocked:
137
177
 
138
178
  ```sh
139
179
  command -v devrites-engine >/dev/null 2>&1 && devrites-engine hook orient --harness=claude || exit 0
@@ -160,9 +200,10 @@ Prohibitions tables as a blocking spec-gate check.
160
200
 
161
201
  ## `analyze`: cross-artifact coverage & consistency
162
202
 
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:
203
+ Before code is written, `devrites-engine analyze [slug]` compares a feature's
204
+ `spec.md` with its `tasks.md`. This catches coverage gaps while they still need
205
+ only a one-line plan edit instead of a mid-build reslice. The Markdown report
206
+ has four passes:
166
207
 
167
208
  - **Coverage**: a spec `AC-###` that no slice `Satisfies:` (**CRITICAL**; legacy `[ACn]` remains supported).
168
209
  - **Consistency**: a slice that `Satisfies:` an AC the spec never defines (**CRITICAL**).
@@ -178,31 +219,77 @@ duplicated or conflicting requirements on top of this deterministic floor.
178
219
 
179
220
  ## `review-integrity`: the silent-reviewer gate
180
221
 
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.
222
+ `devrites-engine review-integrity [slug]` catches reviews that return only
223
+ "looks good, nothing found." It parses the `## Spec` and `## Code review`
224
+ sections of `review.md` and flags any section with neither a bold severity label
225
+ nor a `No-findings:` justification. A zero-count summary does not count as a
226
+ finding, and an all-zero tally is treated as a rubber stamp. Exit `0` means
227
+ every axis is accounted for, or that `review.md` is absent or freeform. Exit
228
+ `1` means an axis is silent and unjustified.
229
+ `/rite-review` runs this check after writing `review.md`; `/rite-seal` treats
230
+ `rc=1` as an Important finding about review completeness. Like
231
+ `doubt-coverage` and the footprint roster, this command checks that the account
232
+ exists, not whether its judgment is correct.
233
+
234
+ ## `timeline`: local, privacy-bounded workflow trace
235
+
236
+ `timeline log` accepts only validated `devrites-event/v1` facts. Legacy
237
+ free-text `--skill`, `--decision`, and `--note` writes are refused; `list`
238
+ continues to print old rows unchanged for compatibility. Canonical traces use a
239
+ stable `DEVRITES_RUN_ID` across related calls and the small event vocabulary
240
+ `run-started`, phase/gate events, `run-interrupted`, `run-resumed`, and
241
+ `run-finished`:
196
242
 
197
243
  ```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
244
+ devrites-engine timeline log run-started \
245
+ --slug auth-tokens \
246
+ --execution-mode named \
247
+ --guard-strength n/a \
248
+ --reason-id DRV-ROOT-SELECTED \
249
+ --host codex
250
+
251
+ devrites-engine timeline log run-finished \
252
+ --slug auth-tokens \
253
+ --outcome passed \
254
+ --execution-mode named \
255
+ --guard-strength n/a \
256
+ --reason-id DRV-GATE-SEAL-PASSED \
257
+ --host codex \
258
+ --evidence .devrites/work/auth-tokens/seal.md
201
259
  ```
202
260
 
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.
261
+ `--execution-mode`, `--guard-strength`, and `--reason-id` are required. Rows may
262
+ also carry phase IDs, rule IDs, project-relative evidence paths, and a host ID.
263
+ They never retain prompts, question/answer text, source or diff bodies, model
264
+ prose, absolute paths, user/external identifiers, auth/config/secrets, or token
265
+ estimates. The current v1 contract exposes host but not model, token, or cost
266
+ fields, so the engine does not infer them.
267
+
268
+ `timeline report [--run <opaque-id>] [--json]` reads at most the last 4 MiB and
269
+ 4,096 valid v1 rows. It reports observed run and phase duration, retry and
270
+ human-wait counts, interruption/resume linkage, active execution/guard mode,
271
+ the last failed gate reason, stale-evidence/degradation counts, and final
272
+ outcome. Missing, corrupt, oversized, legacy, or truncated input degrades the
273
+ report only. Legacy and corrupt rows are counted as ignored and never
274
+ interpreted as v1. The statusline and `progress` reuse these display facts but
275
+ never treat them as lifecycle authority.
276
+
277
+ Each telemetry log stops accepting new rows at 16 MiB. Hitting that bound
278
+ degrades telemetry only; it cannot weaken or strengthen a workflow decision.
279
+
280
+ `timeline purge (--before <RFC3339> | --run <opaque-id>)...` removes only valid
281
+ matching v1 rows from `.devrites/timeline.jsonl` and the live feature
282
+ `events.jsonl` files. When both selectors are present they form an intersection.
283
+ It never touches state, questions, decisions, evidence, recovery, capability,
284
+ or allowlist files. Purge is bounded to 16 MiB per file and refuses symlinks,
285
+ oversized rows, concurrent changes, and unsafe roots without mutation.
286
+
287
+ Telemetry is local instrumentation only; DevRites sends no analytics or remote
288
+ traces. Review the retention needs, then use exact purge selectors. Reports do
289
+ not interpret legacy rows, so manually delete legacy log files if their old
290
+ free-text content must be removed. Deleting only
291
+ `.devrites/timeline.jsonl` and live feature `events.jsonl` files is safe for
292
+ workflow correctness; the engine recreates them as needed.
206
293
 
207
294
  ## `health`: code-health dashboard and history
208
295
 
@@ -224,8 +311,9 @@ devrites-engine health record 8.5 "tests green; one follow-up" --note "review-fi
224
311
  devrites-engine health list --limit 10
225
312
  ```
226
313
 
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
314
+ Scores must be `0..10`. The label should name the evidence rather than give a
315
+ subjective impression. Skill health stays static until DevRites records
316
+ per-skill run outcomes; use `scripts/skill-pruning-audit.mjs` for pruning
229
317
  signals instead of inventing telemetry.
230
318
 
231
319
  ## `review-fingerprints`: stable IDs for findings
@@ -239,9 +327,10 @@ bold severity labels (`Critical`, `Important`, `Suggestion`, `Nit`, `FYI`) and e
239
327
  devrites-engine review-fingerprints --write auth-tokens
240
328
  ```
241
329
 
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.
330
+ The IDs let callers correlate recurring findings, dismissals, and later
331
+ learning without copying full review text into every downstream surface.
332
+ `review-integrity` remains the gate; this command records only stable
333
+ references.
245
334
 
246
335
  ## `reviewer-stats`: dispatch outcomes that gate the fan-out
247
336
 
@@ -263,8 +352,9 @@ devrites-engine reviewer-stats record devrites-performance-reviewer 0 auth-token
263
352
  devrites-engine reviewer-stats report
264
353
  ```
265
354
 
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).
355
+ Thresholds live in the engine. The caller reads the verdict without
356
+ recalculating or overriding the streak. A user-requested full panel still
357
+ dispatches every reviewer.
268
358
 
269
359
  ## `reviewers list`: bounded reviewer aliases
270
360
 
@@ -282,6 +372,84 @@ surface (`cli` must be `claude` or `codex`; `model` and `agent` are opaque strin
282
372
  }
283
373
  ```
284
374
 
375
+ ## `forge`: isolated candidate worktrees
376
+
377
+ Forge compares two or three implementation strategies without letting a worker
378
+ choose its own worktree, branch, or merge target. The engine owns those paths in
379
+ one `devrites-forge/v1` manifest:
380
+
381
+ ```bash
382
+ devrites-engine forge plan SLICE-004 feature-slug \
383
+ --strategy A='small adapter' \
384
+ --strategy B='native integration' \
385
+ --acceptance-hash <full-sha256> \
386
+ --test-plan-hash <full-sha256> \
387
+ --worker-binding manifest-env-v1
388
+ ```
389
+
390
+ `plan` requires a clean primary checkout, 2 or 3 contiguous candidates, and
391
+ complete hashes for the acceptance and test-plan scorecards. It writes the
392
+ manifest before the first Git side effect, then creates candidate worktrees
393
+ under a sibling directory named `.<repo>.devrites-forge/<run-id>/`. The
394
+ manifest stays under
395
+ `.devrites/work/<slug>/.forge/<run-id>/manifest.json`.
396
+
397
+ Parallel Forge needs an exact host binding. Omitting
398
+ `--worker-binding manifest-env-v1` is a supported fallback, not a partial
399
+ parallel run. The command exits `0` with:
400
+
401
+ ```json
402
+ {"status":"degraded","mode":"serial","reason":"supported worker binding was not declared"}
403
+ ```
404
+
405
+ It creates no manifest, branch, or worktree in that case. An unsafe repository
406
+ topology, dirty primary checkout, in-progress Git operation, unavailable
407
+ process-liveness proof, or path collision also returns a bounded serial
408
+ degradation when it can do so safely. Invalid arguments or a broken manifest
409
+ fail instead of silently choosing a target.
410
+
411
+ Use `forge process-token <pid>` to obtain the process-start token for a real
412
+ worker. A bound candidate wright receives all five variables below and runs
413
+ from the candidate worktree:
414
+
415
+ ```text
416
+ DEVRITES_FORGE_RUN_ID
417
+ DEVRITES_FORGE_CANDIDATE
418
+ DEVRITES_FORGE_WORKER_ID
419
+ DEVRITES_FORGE_WORKER_PID
420
+ DEVRITES_FORGE_PROCESS_START
421
+ ```
422
+
423
+ The binding is all-or-none. `wright-scope` checks the manifest, physical
424
+ working directory, repository common directory, candidate branch, worker ID,
425
+ live PID/start token, and leaf-agent identity before it permits a write. A
426
+ partial, stale, sibling, foreign, or tampered binding is denied.
427
+
428
+ The remaining commands advance only manifest-owned state:
429
+
430
+ ```bash
431
+ devrites-engine forge record <run-id> A running \
432
+ --worker-id <id> --pid <pid> --process-start <token>
433
+ devrites-engine forge record <run-id> A finished --worker-id <id>
434
+ devrites-engine forge extract <run-id> A
435
+ devrites-engine forge record <run-id> winner A --worker-id <judge-id>
436
+ devrites-engine forge merge <run-id> A
437
+ devrites-engine forge record <run-id> verification verified \
438
+ --worker-id <verifier-id>
439
+ devrites-engine forge cleanup <run-id>
440
+ devrites-engine forge reap [feature-slug]
441
+ ```
442
+
443
+ Extract every candidate before recording and merging the judge's winner.
444
+ Extraction snapshots the full candidate tree, pins its commit, tree, and binary
445
+ delta hash, and refuses unrepresentable or still-live state. Merge requires the
446
+ recorded winner, a clean unchanged primary baseline, every candidate extracted,
447
+ and an exact fast-forward result. Cleanup runs only after the winner landed and
448
+ independent verification was recorded as `verified`. It preserves anything
449
+ dirty, live, foreign, ambiguous, or otherwise unsafe. `reap` follows the same
450
+ manifest-only rule for interrupted runs and never deletes a branch by name
451
+ alone.
452
+
285
453
  ## `extensions` / `overrides`: project extensibility
286
454
 
287
455
  Two project-local surfaces let a team extend the pack without forking it. The
@@ -301,10 +469,12 @@ full contract is in [extensions.md](../extensions.md).
301
469
  reads `.devrites/context.yaml` (`context_file:` or `context_files:`), then falls back to existing
302
470
  `AGENTS.md` / `CLAUDE.md`, then `AGENTS.md`. Paths must be project-relative.
303
471
 
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.
472
+ `devrites-engine context show [--json]` is read-only. It uses the same physical
473
+ root facts as `doctor`: canonical and lexical roots, selection reason, Git
474
+ top-level/dir/common-dir/superproject facts, active workspace source, and stable
475
+ hazards with pasteable remediations. `--json` emits one direct document for
476
+ wrappers that need to know where a command will act. `context sync` refuses an
477
+ unsafe root instead of writing through a fallback.
308
478
 
309
479
  ## `runbook`: tiny local automation
310
480
 
@@ -321,8 +491,8 @@ steps:
321
491
 
322
492
  `engine` runs a local `devrites-engine` subcommand, `rite` prints the Claude/Codex dispatch form,
323
493
  `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.
494
+ Resume with `devrites-engine runbook resume <id>`. This command handles
495
+ repeatable local runbooks; it does not replace the lifecycle.
326
496
 
327
497
  ## Concurrency
328
498
 
@@ -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 -->