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
@@ -1,26 +1,49 @@
1
1
  # DevRites workspace artifact schema
2
2
 
3
- DevRites workspaces are durable source-of-truth folders for a feature. Chat is
4
- temporary; the workspace must be enough for a fresh human or AI to resume without
5
- guessing. The schema follows three rules:
3
+ A DevRites workspace is the durable record for a feature. Chat is temporary,
4
+ so a fresh human or AI must be able to resume from the files alone. The schema
5
+ follows three rules:
6
6
 
7
7
  - Keep each Markdown file single-purpose and compact.
8
8
  - Read the index first, then load only the files needed for the current phase.
9
9
  - Trace every acceptance criterion through slices, proof, evidence, and touched files.
10
10
 
11
- Root selection has two axes:
11
+ Root and workspace selection use these inputs:
12
12
 
13
- - `DEVRITES_ROOT` selects the project root or `.devrites/` directory. When unset, the engine walks up
14
- from cwd to the nearest `.devrites/`.
13
+ - `DEVRITES_ROOT` selects the project root or `.devrites/` directory and is
14
+ canonicalized to its physical path.
15
+ - Without an override, the engine walks from cwd only to the current Git
16
+ top-level. A nested repository, worktree, or submodule never inherits
17
+ `.devrites/` from its parent or superproject. Outside Git, the filesystem
18
+ ancestor walk remains available.
15
19
  - `.devrites/ACTIVE` selects the active feature workspace.
16
20
  - `DEVRITES_WORKSPACE` optionally names an explicit workspace path for CI/agents and overrides
17
- `.devrites/ACTIVE` for commands that default to the active feature.
21
+ `.devrites/ACTIVE` for commands that default to the active feature. Its
22
+ resolved path must stay inside the selected `.devrites/` root. Setting it
23
+ without a selectable root is a refusing `DRV-WORKSPACE-WITHOUT-ROOT` hazard.
24
+
25
+ `devrites-engine context show --json` and `doctor` expose the same canonical
26
+ facts: lexical/physical project and root, selection reason, Git top-level,
27
+ physical Git dir/common dir/superproject, linked-worktree/submodule flags, and
28
+ stable hazards. The engine refuses writes when root selection is unsafe or
29
+ ambiguous. `doctor` reports ordinary absence without treating it as a crash.
30
+
31
+ The canonical workspace-map frontmatter declares `schemaVersion: 2`. The
32
+ engine reads missing/v1 declarations and legacy aliases additively, refuses a
33
+ version newer than it supports, and keeps the snapshot wire schema separate.
34
+ `devrites-engine migrate` upgrades the declaration and layout metadata; it does
35
+ not manufacture decision coverage, vet readiness, test plans, or proof.
36
+ Semantic planning compatibility uses a separate readiness-artifact contract.
37
+ The current value is `devrites.readiness-artifacts.v2`; `/rite-upgrade [slug]`
38
+ reconciles an active unfinished workspace when build readiness reports an older
39
+ or unknown contract.
18
40
 
19
41
  Canonical live workspace:
20
42
 
21
43
  ```text
22
44
  .devrites/
23
45
  ACTIVE
46
+ timeline.jsonl # local metadata-only v1 workflow trace
24
47
  work/
25
48
  <slug>/
26
49
  README.md # compact workspace map; feature.md/index.md aliases allowed
@@ -31,10 +54,19 @@ Canonical live workspace:
31
54
  decisions.md # ADR-style decision log
32
55
  assumptions.md # assumptions and validation status
33
56
  questions.md # open/resolved human questions
57
+ decision-coverage.md # topology-first clarification verdict
34
58
  plan.md # technical approach and slice strategy
35
59
  tasks.md # vertical slices
36
60
  traceability.md # AC/REQ -> slices -> tests/evidence/files matrix
61
+ eng-review.md # implementation-readiness verdict
62
+ test-plan.md # executable proof target
37
63
  state.md # compact cursor; status.md alias allowed
64
+ events.jsonl # feature-local copy of v1 workflow trace
65
+ recovery-attempts.jsonl # durable bounded technical-recovery ledger
66
+ .git-authority-consumption.jsonl # private one-shot Git grant consumption
67
+ .wright-allowlist # root-owned exact source/test write scope
68
+ .forge/
69
+ <run-id>/manifest.json # engine-owned Forge lifecycle and path authority
38
70
  evidence.md # command/action proof; proof.md alias allowed
39
71
  browser-evidence.md # optional UI/runtime browser proof
40
72
  drift.md # optional spec/plan drift register
@@ -50,17 +82,18 @@ Canonical live workspace:
50
82
  Backward compatibility: `.devrites/features/<slug>/` remains readable as an alias
51
83
  for `.devrites/work/<slug>/`; `feature.md` and `index.md` remain valid workspace
52
84
  maps; `status.md` remains a cursor alias for `state.md`; `proof.md` remains a
53
- proof alias for `evidence.md`. Migration should add the canonical files without
54
- deleting aliases.
85
+ proof alias for `evidence.md`. Migration normalizes compatible metadata without
86
+ deleting aliases or inventing evidence.
55
87
 
56
88
  ## Read order
57
89
 
58
90
  | Phase / role | Read first | Then read | Usually skip |
59
91
  | --- | --- | --- | --- |
60
92
  | Spec | `README.md`, `brief.md` | `spec.md`, `references.md`, `questions.md` | `plan.md`, `evidence.md` |
61
- | Define / plan | `README.md`, `state.md` | `spec.md`, `architecture.md`, `decisions.md`, `assumptions.md` | `evidence.md` |
93
+ | Clarify | `README.md`, `state.md` | `spec.md`, `decisions.md`, `assumptions.md`, `questions.md` | plan/proof artifacts |
94
+ | Define / plan | `README.md`, `state.md` | `spec.md`, `decision-coverage.md`, `architecture.md`, `decisions.md`, `assumptions.md` | `evidence.md` |
62
95
  | Vet | `README.md`, `traceability.md` | `plan.md`, `tasks.md`, `architecture.md`, `decisions.md` | browser proof unless UI |
63
- | Build | `state.md`, `tasks.md` | `plan.md`, `architecture.md`, `traceability.md`, `questions.md` | full evidence history |
96
+ | Build | `state.md`, `tasks.md` | `decision-coverage.md`, `eng-review.md`, `test-plan.md`, `plan.md`, `architecture.md`, `traceability.md`, `questions.md` | full evidence history |
64
97
  | Prove | `traceability.md`, `tasks.md` | `evidence.md`, `browser-evidence.md`, `touched-files.md` | long plan rationale |
65
98
  | Review / seal | `README.md`, `traceability.md` | `spec.md`, `evidence.md`, `decisions.md`, `drift.md`, `touched-files.md` | raw logs unless needed |
66
99
  | Handoff | `README.md`, `state.md` | `handoff.md`, then linked source files | duplicated summaries |
@@ -72,6 +105,7 @@ deleting aliases.
72
105
  | `README.md` / `index.md` / `feature.md` | required | `/rite-spec` | always first | 120 lines | current phase, status, next action, artifact map, read-next table, blocking gates, last updated | Must not duplicate full spec/plan/evidence. |
73
106
  | `brief.md` | required | `/rite-spec` | clarify objective | 80 lines | Objective, Non-goals, Success definition | One-screen request and scope summary. |
74
107
  | `spec.md` | required | `/rite-spec` | product contract | 260 lines | Problem, Goal, Non-goals, Users / actors, Requirements, Acceptance criteria, Edge Coverage, Prohibitions (must-NOT), Edge cases, Measurable success, Scope boundaries | Must use stable `REQ-###` and `AC-###`; no deep implementation details. |
108
+ | `decision-coverage.md` | required from clarify | `/rite-clarify` | decision/readiness audit | 200 lines | Topology, Coverage matrix, Assumption audit, Residual uncertainty, Readiness verdict | Exactly one semantic `Decision coverage: CLEAR` plus a fresh canonical input digest. Partial, Missing, unowned, open-human-gate, placeholder, or incomplete rows block. |
75
109
  | `architecture.md` | required from plan | `/rite-define` | placement/integration work | 180 lines | Owning module / layer, Integration points, Data / API / events, Dependencies, Risks, Affected boundaries | Carries topology and boundaries, not product acceptance. |
76
110
  | `flows.md` | optional | `/rite-spec` or `/rite-define` | lifecycle/state/sequence/data flow is hard to infer | 160 lines | diagram-specific headings | Mermaid only when it clarifies behavior; each diagram states why it matters and related IDs. |
77
111
  | `decisions.md` | required | all phases | non-trivial product/technical choice | 200 lines | Decision log | Entries use `DEC-###`, status, context, options, decision, consequences, related IDs. |
@@ -81,7 +115,14 @@ deleting aliases.
81
115
  | `plan.md` | required from plan | `/rite-define` | implementation approach | 220 lines | Approach, Slice strategy, Validation strategy, Rollback | HOW lives here, not in `spec.md`. `Validation strategy` names the Key links: cross-slice wiring `/rite-prove` walks (or `none` for single-slice features). |
82
116
  | `tasks.md` | required from plan | `/rite-define` | build one slice | 280 lines | Slice index | Each `SLICE-###` has goal, AC IDs, likely files, tests/proof, mode, gate, dependencies, done condition. |
83
117
  | `traceability.md` | required from plan | `/rite-define` | coverage/review/seal | 220 lines | Coverage matrix | Matrix maps AC/REQ ID, slice IDs, test/proof, evidence ID, touched files, status. |
84
- | `state.md` / `status.md` | required | all phases | current cursor | 120 lines | Cursor | `state.md` is canonical; `status.md` is a compatibility alias. Compact table/key-value cursor; not an append-only narrative. |
118
+ | `eng-review.md` | required from vet | `/rite-vet` | build readiness | 240 lines | Depth, Scope challenge, Build-entry preflight, Implementation readiness, Completion summary | Exactly one semantic `Implementation readiness: READY` plus a fresh canonical input digest. Non-passing preflight/readiness rows, placeholders, empty tables, or unmapped acceptance block. |
119
+ | `test-plan.md` | required from vet | `/rite-vet` | build/prove coverage target | 260 lines | Build-entry preflight, Coverage diagram, Per-gap test requirements, Acceptance → test map | Commands, cwd, expected signal, prerequisites, and provenance are executable. |
120
+ | `state.md` / `status.md` | required | all phases | current cursor | 120 lines | Cursor | `state.md` is canonical; `status.md` is a compatibility alias. Compact table/key-value cursor; later-phase clarification durably stores `return_phase` and `return_next_action` until fresh coverage restores or replans it. |
121
+ | root `timeline.jsonl` + feature `events.jsonl` | local telemetry only | engine/hooks | bounded report, audit, manual retention | JSONL | n/a | New writes are validated `devrites-event/v1` metadata only. Reports ignore legacy/corrupt rows and never make events lifecycle-authoritative. Exact purge may delete only these telemetry files. |
122
+ | `recovery-attempts.jsonl` | technical recovery only | root orchestrator | retry budget | generated | n/a | Fingerprinted, append-only failed/cleared records cap the same objective root cause at three failed attempts across agents and sessions. |
123
+ | `.git-authority-consumption.jsonl` | destructive Git only | `git-guard` | one-shot replay prevention | generated | n/a | `devrites-git-authority-consumption/v1` JSONL, bounded and mode `0600` where POSIX modes exist; stores only qid, exact digest, classifier reason IDs, and consumption time. |
124
+ | `.wright-allowlist` | build only | root orchestrator | writer scope | generated | n/a | Exact normalized project-relative files only; no directories, globs, traversal, duplicates, or `.devrites/**`. Writer self-report never expands it. |
125
+ | `.forge/<run-id>/manifest.json` | Forge runs only | engine | candidate ownership and lifecycle | generated | n/a | One `devrites-forge/v1` manifest owns the primary baseline, scorecard hashes, candidate paths/branches/states, worker bindings, judge winner, merge, verification, and cleanup. Duplicate, symlinked, escaped, or tampered ownership fails closed. |
85
126
  | `evidence.md` / `proof.md` | required from prove | `/rite-build`, `/rite-prove` | proof and seal | 280 lines | Evidence log | `EVID-###`, command/action, result, related AC/slice IDs, limitations. Each acceptance criterion carries a proof class: `test` / `command` / `browser` / `judgment` (untagged reads `judgment`; `judgment` needs its one-line why). |
86
127
  | `browser-evidence.md` | UI only | `/rite-prove`, `/rite-polish` | UI/browser proof | 220 lines | Browser evidence, Visual Verdict | Must reference real route/viewports/actions and related IDs. |
87
128
  | `drift.md` | drift only | Spec Drift Guard | spec/plan reality mismatch | 160 lines | Drift register | `DRIFT-###`, status, evidence found, resolution, related IDs. |
@@ -90,23 +131,67 @@ deleting aliases.
90
131
  | `handoff.md` | optional | `/rite-handoff` | cold resume | 120 lines | Resume, Read next, Next action | Links to source artifacts instead of copying them. |
91
132
  | `references.md` + `references/` | optional | `/rite-spec` | external/user-supplied material | 160 lines | Reference index | Links must resolve or be external URLs. |
92
133
 
134
+ Telemetry is deliberately outside the correctness contract. Missing or corrupt
135
+ `timeline.jsonl` / `events.jsonl` may degrade `timeline report`, `progress`, or
136
+ the statusline, but can never change a gate, cursor, question, evidence verdict,
137
+ recovery budget, capability decision, or destructive-action authority. Reports
138
+ read a bounded tail; `timeline purge --before ...` and/or `--run ...` rewrites
139
+ only these logs. The engine sends no remote telemetry. Remove old unversioned
140
+ logs manually when their legacy free text should not be retained.
141
+
93
142
  Files may exceed budgets only with a visible `Budget override: <reason>` line.
94
143
 
144
+ ## Readiness gate binding
145
+
146
+ The typed verdict is necessary but not sufficient:
147
+
148
+ - `decision-coverage.md`, `eng-review.md`, and `test-plan.md` declare
149
+ `DevRites contract: devrites.readiness-artifacts.v2`.
150
+ - `Coverage inputs SHA-256` binds `decision-coverage.md` to `brief.md`,
151
+ `spec.md`, `decisions.md`, `assumptions.md`, and `questions.md`.
152
+ - `Readiness inputs SHA-256` binds `eng-review.md` to `spec.md`,
153
+ `decision-coverage.md`, `architecture.md`, `plan.md`, `tasks.md`,
154
+ `traceability.md`, and `test-plan.md`.
155
+
156
+ `devrites-engine readiness-digest coverage|engineering [slug]` emits the
157
+ canonical field line. `build-readiness` rejects stale digests, malformed or
158
+ contradictory content, missing markers, and older or unknown semantic contracts.
159
+ Contract failures use code `8` and route to `/rite-upgrade`; missing coverage or
160
+ vet artifacts keep their existing `/rite-clarify` and `/rite-vet` routes. A
161
+ later-phase clarification
162
+ retrofit uses `clarify-return enter|restore`; restore requires fresh `CLEAR`
163
+ coverage, while an acceptance-changing result keeps the cursor for plan repair.
164
+
95
165
  ## Required vs optional
96
166
 
97
167
  Required at `/rite-spec`: workspace map, `brief.md`, `spec.md`, `state.md`,
98
168
  `decisions.md`, `assumptions.md`, `questions.md`.
99
169
 
100
- Required at `/rite-define` and later: all spec files plus `architecture.md`,
170
+ Required at `/rite-clarify` and later: all spec files plus `decision-coverage.md`.
171
+
172
+ Required at `/rite-define` and later: all clarified spec files plus `architecture.md`,
101
173
  `plan.md`, `tasks.md`, and `traceability.md`.
102
174
 
103
- Required at `/rite-prove` and later: all plan files plus `evidence.md` (or
175
+ Required at `/rite-vet` and later: all plan files plus `eng-review.md` and `test-plan.md`.
176
+
177
+ Required at `/rite-prove` and later: all vetted plan files plus `evidence.md` (or
104
178
  `proof.md`) and `touched-files.md`.
105
179
 
106
180
  Optional/conditional files are generated only by their producing phase:
107
181
  `flows.md` when diagrams clarify behavior, `design-brief.md` and
108
182
  `browser-evidence.md` for UI, `drift.md` for drift, `handoff.md` for handoff,
109
- and `references.md` / `references/` when references exist.
183
+ and `references.md` / `references/` when references exist. The build runtime
184
+ creates `.wright-allowlist` and, only when needed, `recovery-attempts.jsonl`.
185
+ Forge creates `.forge/<run-id>/manifest.json` only after a clean, bound
186
+ parallel plan passes. A serial degradation creates no Forge state.
187
+
188
+ Forge candidate worktrees do not live inside `.devrites`. The manifest binds
189
+ them to the sibling
190
+ `.<repo>.devrites-forge/<run-id>/candidate-<a|b|c>` paths before Git creates
191
+ them. Every later extract, merge, cleanup, and reap command reloads the unique
192
+ manifest instead of accepting a caller-supplied path or branch. Cleanup
193
+ requires a landed winner and recorded successful verification, and it
194
+ preserves dirty, live, foreign, or ambiguous state.
110
195
 
111
196
  ## Compactness rules
112
197
 
@@ -132,6 +217,7 @@ Use these forms in generated artifacts:
132
217
  | Question | `Q-001` | `questions.md` |
133
218
  | Drift event | `DRIFT-001` | `drift.md` |
134
219
  | Evidence | `EVID-001` | `evidence.md`, `browser-evidence.md` |
220
+ | Forge run | `forge-` plus 24 lowercase hex characters | `.forge/<run-id>/manifest.json` |
135
221
 
136
222
  ## Validation
137
223
 
@@ -141,6 +227,8 @@ project-wide validation path runs it against representative fixtures.
141
227
  The validator checks:
142
228
 
143
229
  - required files and headings for the current phase;
230
+ - supported workspace `schemaVersion` and additive legacy aliases;
231
+ - semantic, fresh digest-bound `CLEAR` and `READY` readiness artifacts;
144
232
  - stable IDs and old `AC1` / `Slice 1` style regressions;
145
233
  - acceptance criteria referenced by at least one slice;
146
234
  - completed slices referenced by evidence;
@@ -66,7 +66,7 @@ devrites-engine extensions sync # mirror valid extensions into .claude/ f
66
66
  Public schemas live in [`../schemas/`](../schemas/): `extension-component.schema.json` and
67
67
  `provenance.schema.json` for extension metadata, plus workspace/hook schemas for editor tooling.
68
68
 
69
- `component.yaml` is the DevRites-native answer to Spec Kit-style extension/preset/bundle metadata.
69
+ `component.yaml` is DevRites' native extension, preset, and bundle metadata.
70
70
  It is **not** a plugin package descriptor; it documents what the npm-installed engine may copy or
71
71
  validate inside the current project.
72
72
 
package/docs/flow.md CHANGED
@@ -1,43 +1,55 @@
1
1
  # DevRites flow diagrams
2
2
 
3
- Visual reference for how the skills, agents, and rules fit together. GitHub
4
- renders Mermaid natively: open this file on the repo to see the graphs.
3
+ These diagrams show how the skills, agents, and rules interact. GitHub renders
4
+ the Mermaid blocks when you open this file in the repository.
5
5
 
6
6
  For the full per-skill table, see [`command-map.md`](command-map.md). For the
7
7
  "why" behind each piece, see [`architecture.md`](architecture.md).
8
8
 
9
9
  ## 1. Feature lifecycle
10
10
 
11
- The happy path. Every arrow assumes the readiness gate of the previous phase
12
- passed; failures route through `/rite-plan repair` or `devrites-debug-recovery`.
13
- `/rite-temper` is the optional strategic branch; `/rite-vet` runs on every
14
- defined plan, with depth scaled to risk. HITL slices pause before code is
15
- written; `/rite-resolve` is the resume verb.
11
+ This diagram shows the normal path. Each arrow assumes that the previous
12
+ phase's readiness gate passed. Failures route through `/rite-clarify`,
13
+ `/rite-plan repair`, `/rite-upgrade`, or `devrites-debug-recovery`.
14
+ `/rite-upgrade` is conditional maintenance rather than a lifecycle phase: build
15
+ readiness uses it only when existing semantic artifacts are stale.
16
+ `/rite-clarify` always runs but may ask zero questions; `/rite-temper` is the
17
+ optional strategic branch; `/rite-vet` runs on every defined plan, with depth
18
+ scaled to risk. Build asks the human only for genuine
19
+ product/scope/policy decisions, irreversible risk, or human-only access/actions;
20
+ `/rite-resolve` is the resume verb.
16
21
 
17
22
  ```mermaid
18
23
  flowchart LR
19
24
  Start([user has an idea]) --> Spec[/rite-spec/]
20
25
  Spec -.->|UI detected| Shape[devrites-ux-shape<br/>plan UX/UI → design-brief.md]
21
26
  Shape -.->|brief confirmed| Spec
22
- Spec -.->|big / risky| Temper[/rite-temper/] -.->|strategy.md| Define
23
- Spec -->|spec.md ready| Define[/rite-define/]
24
- Define -->|plan.md + tasks.md<br/>each slice tagged AFK/HITL| Vet[/rite-vet/]
25
- Vet -->|every plan; light or full<br/>eng-review.md + test-plan.md| Build[/rite-build/]
27
+ Spec -->|spec.md ready| Clarify[/rite-clarify/]
28
+ Clarify -->|fresh digest-bound CLEAR<br/>big / risky| Temper[/rite-temper/] -.->|strategy.md| Define
29
+ Clarify -->|fresh digest-bound CLEAR<br/>low stakes| Define[/rite-define/]
30
+ Define -->|plan.md + tasks.md<br/>approved| Plan[(plan checkpoint)]
31
+ Plan -->|normal resume| Vet[/rite-vet/]
32
+ Vet -->|fresh digest-bound READY<br/>+ test-plan.md| Build[/rite-build/]
33
+ Build -.->|build-readiness code 8<br/>stale semantic contract| Upgrade[/rite-upgrade/]
34
+ Upgrade -.->|contract v2<br/>current gates pass| Build
35
+ Build -.->|exact .wright-allowlist<br/>retained baseline| Wright[devrites-slice-wright]
36
+ Wright -.->|typed result| Build
26
37
  Build -->|one slice done<br/>+ evidence| Build
27
38
  Build -.->|"Forge: yes slice"| Forge[forge: K candidates<br/>→ devrites-forge-judge → 1 winner]
28
39
  Forge -.->|winner lands<br/>forge-report.md| Build
29
- Build -->|HITL gate fires| Await{{Awaiting human<br/>state.md + questions.md}}
40
+ Build -->|product / risk / access gate| Await{{Awaiting human<br/>state.md + questions.md}}
30
41
  Await -->|"/rite-resolve &lt;qid&gt; &lt;answer&gt;"| Build
31
42
  Build -->|all slices built| Prove[/rite-prove/]
32
43
  Build -.->|resumed / adopted / stalled<br/>code vs intent| Converge[/rite-converge/]
33
- Converge -.->|appends remaining slices| Build
44
+ Converge -.->|appends remaining slices<br/>invalidates old READY| Vet
45
+ Converge -.->|already converged| Prove
34
46
  Prove -->|evidence captured| Polish[/rite-polish/]
35
47
  Polish -->|polish-report.md| Review[/rite-review/]
36
48
  Review -->|review.md<br/>Critical == 0| Seal[/rite-seal/]
37
49
  Seal -->|GO| Ship2[/rite-ship/]
38
50
  Ship2 -->|type-GO| Shipped([commit · push · tag · archive])
39
51
  Seal -->|NO-GO| Repair[/rite-plan repair/]
40
- Repair --> Build
52
+ Repair --> Plan
41
53
 
42
54
  Build -.->|Spec Drift Guard| Repair
43
55
  Prove -.->|drift / failure| Repair
@@ -49,11 +61,11 @@ flowchart LR
49
61
  classDef repair fill:#4c1d95,stroke:#a78bfa,color:#f5f3ff
50
62
  classDef gate fill:#4c1d95,stroke:#a78bfa,color:#f5f3ff
51
63
  classDef internal fill:#0f172a,stroke:#9ca3af,color:#f9fafb
52
- class Spec,Temper,Define,Vet,Build,Prove,Polish,Review,Seal,Ship2 phase
64
+ class Spec,Clarify,Temper,Define,Plan,Vet,Build,Prove,Polish,Review,Seal,Ship2 phase
53
65
  class Shipped done
54
- class Repair repair
66
+ class Repair,Upgrade repair
55
67
  class Await gate
56
- class Shape,Forge internal
68
+ class Shape,Forge,Wright internal
57
69
  ```
58
70
 
59
71
  ## 2. `/rite-polish` orchestrator
@@ -85,13 +97,14 @@ emphasis dials. `normalize-only` stops after Phase 3.
85
97
 
86
98
  ## 3. `/rite-review` parallel axes
87
99
 
88
- Review runs Spec coverage and Standards compliance in parallel sub-agents so
89
- neither masks the other.
100
+ Review assigns Spec coverage and Standards compliance to separate
101
+ fresh-context agents and runs them in parallel. This prevents one axis from
102
+ masking the other.
90
103
 
91
104
  ```mermaid
92
105
  flowchart LR
93
- R[/rite-review/] -->|spawn parallel<br/>via Task tool| S[devrites-spec-reviewer<br/>**Spec axis**]
94
- R -->|spawn parallel<br/>via Task tool| C[devrites-code-reviewer<br/>**Standards axis**]
106
+ R[/rite-review/] -->|fresh-context dispatch<br/>in parallel| S[devrites-spec-reviewer<br/>**Spec axis**]
107
+ R -->|fresh-context dispatch<br/>in parallel| C[devrites-code-reviewer<br/>**Standards axis**]
95
108
  S -->|missing / partial / wrong /<br/>scope-creep findings| Combine
96
109
  C -->|standards violations<br/>cite rule + file| Combine
97
110
  R --> Sec[devrites-audit security]
@@ -110,10 +123,11 @@ flowchart LR
110
123
 
111
124
  ## 4. `/rite-seal` fan-out
112
125
 
113
- The seal fans out **all** relevant reviewers in parallel and reconciles their
114
- findings, then **decides** GO / NO-GO and stops. It no longer runs git: on GO
115
- it hands off to `/rite-ship`, which renders the type-GO prompt and runs the
116
- irreversible commit · push · tag · archive. The old advisory score has been removed: the gate is severity + acceptance + drift.
126
+ The seal runs all relevant reviewers in parallel, reconciles their findings,
127
+ decides GO or NO-GO, and stops without running git. On GO, `/rite-ship` renders
128
+ the type-GO prompt and runs the irreversible commit · push · tag · archive
129
+ sequence. The gate uses severity, acceptance, and drift rather than an advisory
130
+ score.
117
131
 
118
132
  ```mermaid
119
133
  flowchart TB
@@ -156,36 +170,45 @@ flowchart TB
156
170
 
157
171
  ## 5. `devrites-debug-recovery` seven-step loop
158
172
 
159
- Failure recovery: the loop construction in Phase 1 is the load-bearing piece.
173
+ Failure recovery starts by routing the faulty layer. `recovery route <class>`
174
+ returns its owner, action, and whether a human decision is actually needed.
175
+ The root-cause fingerprint and three-failure budget persist across agents and
176
+ sessions in `recovery-attempts.jsonl`; typed entries keep independent defects
177
+ on independent budgets.
160
178
 
161
179
  ```mermaid
162
180
  flowchart LR
163
- F([failing test /<br/>build / runtime]) --> L1[Step 1<br/>Build the loop]
181
+ F([failing test /<br/>build / runtime]) --> Route{Route faulty layer}
182
+ Route -->|technical class<br/>humanPause: false| L1[Step 1<br/>Build the loop]
183
+ Route -->|intent / missing decision| Clarify([Clarify with the human])
164
184
  L1 -->|fast deterministic signal| R[Step 2<br/>Reproduce]
165
185
  R -->|exact error text| H[Step 3<br/>Ranked hypotheses 3-5]
166
186
  H --> T[Step 4<br/>Trace when ambiguous]
167
187
  T -->|discriminating probe| I[Step 5<br/>Instrument]
168
188
  I -->|change one variable| Fix[Step 6<br/>Fix + regression test]
169
189
  Fix --> C[Step 7<br/>Cleanup + classify]
170
- L1 -.->|can't build loop| Ask([STOP: ask user])
190
+ C -->|green: recovery clear --class| Done([verified])
191
+ C -->|same root cause red:<br/>recovery record --class| Budget{3 failures<br/>used?}
192
+ Budget -->|no: recovery check<br/>+ exact failure| L1
193
+ Budget -->|yes| Block([technical blocker<br/>reproduction + dead ends])
171
194
 
172
195
  classDef phase fill:#1f2937,stroke:#60a5fa,color:#f9fafb
173
196
  classDef stop fill:#7f1d1d,stroke:#f87171,color:#fee2e2
174
197
  class L1,R,H,T,I,Fix,C phase
175
- class Ask stop
198
+ class Block,Clarify stop
176
199
  ```
177
200
 
178
- Each step's detail lives in a separate reference file under
179
- `pack/.claude/skills/devrites-debug-recovery/reference/` so the SKILL.md body
180
- stays small.
201
+ A separate file under
202
+ `pack/.claude/skills/devrites-debug-recovery/reference/` documents each step.
203
+ This keeps the `SKILL.md` body small.
181
204
 
182
205
  ## 6. Engineering-rules carrier
183
206
 
184
207
  Workspace-operating lifecycle skills read
185
208
  `.claude/skills/devrites-lib/reference/standards/core.md` in step 0; compact utilities
186
- keep their narrower contract local. The other rule files load on demand. Per-phase
187
- skills pull additional rule files via plain `Read` as their workflow
188
- demands. No carrier skill, no session-start autoload.
209
+ keep their narrower contract local. The other rule files load on demand.
210
+ Per-phase skills use plain `Read` calls to load any additional rule files their
211
+ workflows need. There is no carrier skill or session-start autoload.
189
212
 
190
213
  ```mermaid
191
214
  flowchart TD
@@ -229,9 +252,9 @@ flowchart TD
229
252
 
230
253
  ## 7. Workspace state model
231
254
 
232
- `.devrites/work/<feature-slug>/` is the durable memory each phase reads
233
- before doing anything. **Every** rite-* skill reads the workspace first; if
234
- no `ACTIVE` is set, it tells the user to run `/rite-spec`. The optional
255
+ Each phase reads its durable state from `.devrites/work/<feature-slug>/` before
256
+ acting. Every `rite-*` skill checks the workspace first; if `ACTIVE` is unset,
257
+ it tells the user to run `/rite-spec`. The optional
235
258
  `.devrites/AFK` sentinel sits beside `ACTIVE` and toggles the session-level
236
259
  run mode for all skills.
237
260
 
@@ -242,10 +265,11 @@ erDiagram
242
265
  WORKSPACE ||--|| state : has
243
266
  WORKSPACE ||--|| brief : has
244
267
  WORKSPACE ||--|| spec : has
268
+ WORKSPACE ||--o| decision-coverage : "has (semantic + digest-bound CLEAR before planning)"
245
269
  WORKSPACE ||--o| strategy : "has (optional: from /rite-temper)"
246
270
  WORKSPACE ||--|| plan : "has (from /rite-define)"
247
271
  WORKSPACE ||--|| tasks : "has: slices tagged Mode + Gate"
248
- WORKSPACE ||--o| eng-review : "has (from /rite-vet: every plan, light or full)"
272
+ WORKSPACE ||--o| eng-review : "has (semantic + digest-bound READY from /rite-vet)"
249
273
  WORKSPACE ||--o| test-plan : "has (from /rite-vet; build + prove read it)"
250
274
  WORKSPACE ||--o{ references : "has (design refs)"
251
275
  WORKSPACE ||--o| design-brief : "has (UI features: from /rite-spec via devrites-ux-shape; the build target)"
@@ -260,6 +284,8 @@ erDiagram
260
284
  WORKSPACE ||--o| review : "has (from /rite-review)"
261
285
  WORKSPACE ||--o| seal : "has (from /rite-seal)"
262
286
  WORKSPACE ||--o| ship : "has (from /rite-ship; archived on close)"
287
+ WORKSPACE ||--o| recovery_attempts : "durable three-failure budget per root cause"
288
+ WORKSPACE ||--o| wright_allowlist : "root-owned exact source/test paths"
263
289
 
264
290
  ACTIVE {
265
291
  string slug "names the current workspace"
@@ -272,12 +298,15 @@ erDiagram
272
298
  }
273
299
  WORKSPACE {
274
300
  string slug PK ".devrites/work/<slug>/"
301
+ int schemaVersion "2; older additive layouts remain readable"
275
302
  }
276
303
  state {
277
- string phase "frame | spec | temper | define | plan | vet | build | converge | prove | polish | review | seal | ship | done"
304
+ string phase "frame | spec | clarify | temper | define | plan | vet | build | converge | prove | polish | review | seal | ship | done"
278
305
  string status "running | awaiting_human | blocked | done"
279
306
  string active_slice "N: name"
280
307
  int afk_slices_remaining "from .devrites/AFK max_slices on first AFK build"
308
+ string return_phase "durable later-phase clarify return"
309
+ string return_next_action "restored only after fresh CLEAR"
281
310
  block awaiting_human "qid, gate, question, proposed, raised_at (only when paused)"
282
311
  }
283
312
  questions {
@@ -300,10 +329,11 @@ separately by `disable-model-invocation`.
300
329
 
301
330
  ```mermaid
302
331
  flowchart TB
303
- subgraph Public["Public (user-invocable: true): 30 skills"]
332
+ subgraph Public["Public (user-invocable: true): 32 skills"]
304
333
  direction TB
305
334
  R1[/rite/]
306
335
  R2[/rite-spec/]
336
+ RCL[/rite-clarify/]
307
337
  RT[/rite-temper/]
308
338
  R3[/rite-define/]
309
339
  RV[/rite-vet/]
@@ -323,6 +353,7 @@ flowchart TB
323
353
  RA[/rite-adopt/]
324
354
  RL[/rite-learn/]
325
355
  RD[/rite-doctor/]
356
+ RU[/rite-upgrade/]
326
357
  RE[/rite-explain/]
327
358
  RCU[/rite-customize/]
328
359
  RDO[/rite-dogfood/]
@@ -351,23 +382,25 @@ flowchart TB
351
382
 
352
383
  classDef pub fill:#064e3b,stroke:#34d399,color:#ecfdf5
353
384
  classDef int fill:#1f2937,stroke:#9ca3af,color:#f9fafb
354
- class R1,R2,RT,R3,RV,R4,R5,RC,R6,R7,R8,R9,R12,R13,R10,R11,RQ,RF,RA,RL,RD,RE,RCU,RDO,RPOV,RPF,IPT,D1,D2,D3 pub
385
+ class R1,R2,RCL,RT,R3,RV,R4,R5,RC,R6,R7,R8,R9,R12,R13,R10,R11,RQ,RF,RA,RL,RD,RU,RE,RCU,RDO,RPOV,RPF,IPT,D1,D2,D3 pub
355
386
  class I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12 int
356
387
  ```
357
388
 
358
389
  ## 9. AFK & HITL state machine
359
390
 
360
- The pause/resume primitive for HITL gates and the AFK loop discipline. The
361
- gate firing on `/rite-build` is the only writer of `Awaiting human`;
362
- `/rite-resolve` is the only canonical clearer.
391
+ This state machine shows pauses for HITL gates and the AFK loop. Only the root
392
+ `/rite-build` orchestrator writes `Awaiting human`, and only `/rite-resolve`
393
+ clears it.
363
394
 
364
395
  ```mermaid
365
396
  stateDiagram-v2
366
397
  [*] --> running: /rite-build starts
367
398
  running --> running: AFK slice + advisory finding<br/>(log to questions.md, proceed)
368
- running --> awaiting_human: HITL gate fires<br/>(blocking / escalating / out-of-gate)
369
- running --> awaiting_human: Fail-on-red<br/>(tests/types/lint)
370
- running --> awaiting_human: Irreversible risk<br/>(destructive · auth · public API)
399
+ running --> recovery: objective red<br/>(tests · types · lint · runtime · coverage)
400
+ recovery --> running: green<br/>recovery clear --class
401
+ recovery --> blocked: 3 failed attempts<br/>reproduction + dead ends; no question
402
+ running --> awaiting_human: product / scope / policy choice
403
+ running --> awaiting_human: irreversible risk or<br/>human-only access / action
371
404
  awaiting_human --> running: /rite-resolve qid "<answer>"
372
405
  awaiting_human --> running: /rite-resolve --drop qid
373
406
  awaiting_human --> blocked: /rite-plan repair (scope change)
@@ -383,6 +416,8 @@ stateDiagram-v2
383
416
  end note
384
417
  ```
385
418
 
386
- `AFK` mode (`.devrites/AFK` present) widens which transitions stay in
387
- `running` via `allow_gates`, but `blocking`, `escalating`, fail-on-red, and
388
- the irreversible-risk list always transition to `awaiting_human` regardless.
419
+ `AFK` mode (`.devrites/AFK` present) widens which advisory/validating
420
+ transitions stay in `running`. It never turns objective technical failures into
421
+ human questions: bounded recovery either returns green or records a technical
422
+ blocker. Genuine human-owned decisions and actions still transition to
423
+ `awaiting_human`.
@@ -1,10 +1,10 @@
1
1
  # Harness adapter compliance
2
2
 
3
- DevRites drives more than one agent runtime from a single `devrites-engine`
4
- binary, but the runtimes do not expose identical enforcement surfaces. This page
5
- states, for each surface, whether a supported harness enforces it natively,
6
- through an adapter, or only by instruction the model may ignore. It is the honest
7
- answer to "does DevRites work the same on Codex as on Claude Code?"
3
+ A single `devrites-engine` binary supports multiple agent runtimes, but those
4
+ runtimes expose different enforcement surfaces. For each surface, this page
5
+ states whether a supported harness provides native enforcement, uses an
6
+ adapter, or relies on instructions that the model may ignore. The matrix shows
7
+ where Codex and Claude Code behavior differs.
8
8
 
9
9
  Host support is enumerated in `engine/internal/harness/harness.go`, with the
10
10
  frozen capability matrix in `compliance.go`. New hosts must pass
@@ -15,6 +15,8 @@ The table below is **generated**. Its tiers describe whether the host exposes an
15
15
  event surface; they do not by themselves mean that every hook blocks. `a1-guard`,
16
16
  `reviewer-readonly`, `wright-scope`, and `stop-gate` are observe-only by default and become
17
17
  blocking only when the documented strict-enforcement environment switch is enabled.
18
+ `git-guard` is different: standard and strict profiles enforce it; only minimal
19
+ profile or its explicit kill-list entry disables it.
18
20
 
19
21
  The single source of truth is the frozen matrix
20
22
  in `engine/internal/harness/compliance.go`; regenerate this block with:
@@ -32,7 +34,9 @@ the table and the code can never silently drift apart.
32
34
  | --- | --- | --- | --- | --- | --- | --- | --- |
33
35
  | SessionStart orientation | Native | Native | all phases | manual preamble/snapshot | yes | high | Both wire the orient hook; identical additionalContext envelope. |
34
36
  | PreToolUse policy (allow, a1-guard, reviewer-readonly, wright-scope) | Conditional | Conditional | build/review safety | observe-only findings + human review | yes | high | Both deliver the event, but these policies are non-blocking by default; DEVRITES_HOOK_PROFILE=strict enables every guard, or each guard can be enabled through its documented specific variable. |
37
+ | Destructive Git authority | Conditional | Conditional | all shell tool calls | human permission review; no exact one-shot proof | yes | high | Both wire git-guard at PreToolUse. Standard and strict profiles enforce exact 15-minute one-shot authority; minimal profile or the explicit kill list disables the hook. |
35
38
  | PostToolUse sentinel (redwatch) | Native | Native | prove/build rest points | manual red/green check | yes | high | Fail-on-red sentinel wired on both. |
39
+ | WebFetch ingestion warning trial | Conditional | Instruction-backed | external research | inspect retrieved content as untrusted data | no | medium | Claude WebFetch PostToolUse can emit an opt-in metadata-only warning with DEVRITES_INGEST_WARNING=warn; a flagged result remains in context and is omitted from the local source cache. Codex has no matching result event, so this trial is unavailable and silent. |
36
40
  | Stop gate | Conditional | Conditional | all rest points | observe-only finding + manual host-specific rite-status | yes | high | Both deliver Stop; stop-gate blocks with DEVRITES_STOP_GATE=enforce or DEVRITES_HOOK_PROFILE=strict. |
37
41
  | SubagentStart discipline injection | Native | Native | review/build fan-out | agent file preamble | yes | high | subagent-orient wired on both. |
38
42
  | Skill invocation | Native | Adapter-backed | all public rites | explicit file read | yes | high | Claude: native /rite. Codex: $rite over the mirrored .agents/skills tree. |
@@ -43,3 +47,23 @@ the table and the code can never silently drift apart.
43
47
  Tiers: **Native** (the harness exposes and delivers the surface directly; policy notes state whether it blocks) · **Adapter-backed** (supported through a translation shim) · **Instruction-backed** (no runtime surface: rides on a directive the model may under-fire) · **Conditional** (native but gated on an operator precondition).
44
48
 
45
49
  <!-- END harness-matrix -->
50
+
51
+ ## Contract evidence
52
+
53
+ The matrix above records what each host can support. The agent-contract eval
54
+ checks whether the complete dispatch path behaves as claimed. Its 12 scenarios
55
+ cover named reviewer and wright runs, generic and inline fallbacks, denial
56
+ paths, stale or malformed results, session orientation, interruption, and
57
+ post-compaction recovery. Every scenario runs once on Claude and once on
58
+ Codex, for 24 isolated cells.
59
+
60
+ ```bash
61
+ python3 scripts/run-agent-contract-evals.py --fake
62
+ ```
63
+
64
+ Fake mode is the only project gate. It uses hermetic host wrappers without a
65
+ network, model, or credential. The matrix verifies transport, isolation,
66
+ fallback, and scoring behavior, but it does not prove behavior on a real Claude
67
+ or Codex host. DevRites records that limit instead of running provider-backed
68
+ sessions. See [the eval guide](../evals/README.md) for the deterministic
69
+ commands.