devrites 3.0.7 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +67 -47
  3. package/SECURITY.md +31 -29
  4. package/docs/adr/0001-go-engine-as-control-plane.md +1 -1
  5. package/docs/adr/0002-dual-host-harness.md +1 -1
  6. package/docs/adr/0004-state-schema-phases-sections.md +1 -2
  7. package/docs/adr/0006-clock-seam-and-engine-ci-gates.md +3 -4
  8. package/docs/adr/0009-prebuild-decision-coverage-and-readiness.md +67 -0
  9. package/docs/adr/0010-agent-first-fresh-context-orchestration.md +71 -0
  10. package/docs/adr/0011-define-plan-transition-rights.md +28 -0
  11. package/docs/adr/README.md +3 -0
  12. package/docs/agents/triage-labels.md +7 -7
  13. package/docs/architecture.md +157 -140
  14. package/docs/cli.md +41 -12
  15. package/docs/command-map.md +49 -35
  16. package/docs/engine/agent-contract.md +92 -15
  17. package/docs/engine/commands.md +242 -72
  18. package/docs/engine/state-schema.md +52 -23
  19. package/docs/engine/workspace-schema.md +94 -15
  20. package/docs/extensions.md +1 -1
  21. package/docs/flow.md +80 -50
  22. package/docs/harness-compliance.md +29 -5
  23. package/docs/orchestration.md +107 -79
  24. package/docs/quick-reference.md +7 -3
  25. package/docs/release.md +4 -3
  26. package/docs/skills.md +64 -38
  27. package/docs/usage.md +57 -38
  28. package/engine/cmd/releasepack/main.go +219 -0
  29. package/engine/cmd/releasepack/main_test.go +170 -0
  30. package/engine/commands.go +170 -23
  31. package/engine/git_guard.go +187 -0
  32. package/engine/git_guard_test.go +283 -0
  33. package/engine/hookpolicy.go +53 -55
  34. package/engine/hookpolicy_test.go +91 -1
  35. package/engine/hooks.go +296 -75
  36. package/engine/hooks_events_test.go +276 -6
  37. package/engine/hooks_workspace.go +640 -159
  38. package/engine/internal/devritespaths/paths.go +65 -10
  39. package/engine/internal/devritespaths/paths_test.go +110 -0
  40. package/engine/internal/doctor/doctor.go +153 -23
  41. package/engine/internal/doctor/doctor_test.go +74 -0
  42. package/engine/internal/forge/forge.go +940 -0
  43. package/engine/internal/forge/forge_test.go +576 -0
  44. package/engine/internal/forge/git.go +245 -0
  45. package/engine/internal/forge/liveness_unix.go +48 -0
  46. package/engine/internal/forge/liveness_windows.go +67 -0
  47. package/engine/internal/forge/manifest.go +402 -0
  48. package/engine/internal/gate/gate.go +90 -71
  49. package/engine/internal/gate/gate_test.go +71 -2
  50. package/engine/internal/harness/compliance.go +18 -24
  51. package/engine/internal/harness/harness.go +37 -44
  52. package/engine/internal/harness/harness_test.go +21 -5
  53. package/engine/internal/install/install.go +486 -38
  54. package/engine/internal/install/install_test.go +383 -10
  55. package/engine/internal/iohooks/iohooks.go +350 -59
  56. package/engine/internal/iohooks/iohooks_test.go +421 -1
  57. package/engine/internal/lib/buildreadiness.go +35 -18
  58. package/engine/internal/lib/clarifyreturn.go +91 -0
  59. package/engine/internal/lib/clarifyreturn_test.go +123 -0
  60. package/engine/internal/lib/context.go +54 -15
  61. package/engine/internal/lib/cursor_compat_test.go +8 -0
  62. package/engine/internal/lib/extensions.go +2 -3
  63. package/engine/internal/lib/gitauthority.go +601 -0
  64. package/engine/internal/lib/gitauthority_test.go +346 -0
  65. package/engine/internal/lib/jsonout.go +25 -11
  66. package/engine/internal/lib/jsonout_test.go +16 -0
  67. package/engine/internal/lib/lanes.go +14 -8
  68. package/engine/internal/lib/observability_test.go +358 -0
  69. package/engine/internal/lib/packageexistence.go +151 -35
  70. package/engine/internal/lib/packageexistence_test.go +163 -0
  71. package/engine/internal/lib/progress.go +11 -9
  72. package/engine/internal/lib/provenance.go +462 -0
  73. package/engine/internal/lib/provenance_test.go +154 -0
  74. package/engine/internal/lib/readiness_contract.json +111 -0
  75. package/engine/internal/lib/readinessartifact.go +510 -0
  76. package/engine/internal/lib/readinessartifact_test.go +321 -0
  77. package/engine/internal/lib/reconcile.go +712 -88
  78. package/engine/internal/lib/reconcile_test.go +335 -16
  79. package/engine/internal/lib/recoveryattempts.go +298 -0
  80. package/engine/internal/lib/recoveryattempts_test.go +215 -0
  81. package/engine/internal/lib/resolve.go +23 -19
  82. package/engine/internal/lib/runbook_context_test.go +20 -0
  83. package/engine/internal/lib/session.go +701 -9
  84. package/engine/internal/lib/session_test.go +80 -13
  85. package/engine/internal/lib/testintegrity.go +33 -37
  86. package/engine/internal/lib/testintegrity_test.go +63 -1
  87. package/engine/internal/migrate/migrate.go +81 -1
  88. package/engine/internal/migrate/migrate_test.go +22 -1
  89. package/engine/internal/reason/reason.go +180 -0
  90. package/engine/internal/reason/reason_test.go +35 -0
  91. package/engine/internal/rootfacts/facts.go +466 -0
  92. package/engine/internal/rootfacts/facts_test.go +306 -0
  93. package/engine/internal/safepath/safepath.go +55 -0
  94. package/engine/internal/safepath/safepath_test.go +69 -0
  95. package/engine/internal/safepath/safepath_windows_test.go +26 -0
  96. package/engine/internal/state/clarify_transition.go +165 -0
  97. package/engine/internal/state/clarify_transition_test.go +130 -0
  98. package/engine/internal/state/cmd/workflowmanifest/main.go +12 -8
  99. package/engine/internal/state/cursor.go +58 -0
  100. package/engine/internal/state/cursor_test.go +42 -1
  101. package/engine/internal/state/feature.go +35 -48
  102. package/engine/internal/state/schema.go +90 -37
  103. package/engine/internal/state/snapshot.go +18 -2
  104. package/engine/internal/state/state_test.go +187 -7
  105. package/engine/internal/state/status.go +48 -11
  106. package/engine/internal/state/workflow_manifest.json +231 -50
  107. package/engine/internal/toolpolicy/classifier.go +533 -0
  108. package/engine/internal/toolpolicy/classifier_test.go +424 -0
  109. package/engine/internal/toolpolicy/git.go +616 -0
  110. package/engine/internal/toolpolicy/scanner.go +382 -0
  111. package/engine/main.go +160 -77
  112. package/engine/observability_cli_test.go +52 -0
  113. package/engine/root_routing_test.go +277 -0
  114. package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
  115. package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
  116. package/engine/testdata/golden/TestParityBuildReadiness/arg=noclarify.golden +1 -0
  117. package/engine/testdata/golden/TestParityBuildReadiness/arg=novet.golden +1 -0
  118. package/engine/testdata/golden/TestParityBuildReadiness/arg=stalevet.golden +1 -0
  119. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
  120. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
  121. package/engine/testdata/golden/TestParityBuildReadiness/arg=vetnotready.golden +1 -0
  122. package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +1 -1
  123. package/engine/testdata/golden/TestParityProgress/arg=done.golden +1 -1
  124. package/engine/testdata/golden/TestParityProgress/arg=mid.golden +1 -1
  125. package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +1 -1
  126. package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +1 -1
  127. package/engine/testdata/golden/TestParityProgress/arg=plan.golden +1 -1
  128. package/engine/testdata/golden/TestParityProgress/arg=seal.golden +1 -1
  129. package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
  130. package/engine/testdata/golden/TestParityReconcile/inline-fallback.golden +1 -0
  131. package/engine/testdata/golden/TestParityReconcile/snapshot-no-allowlist.golden +1 -0
  132. package/engine/testdata/golden/TestParityWrightScope/devrites-edit-denied.golden +2 -0
  133. package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
  134. package/engine/tests/adr_0011_define_plan_test.go +30 -0
  135. package/engine/tests/budget_test.go +19 -8
  136. package/engine/tests/concurrency_cli_test.go +7 -1
  137. package/engine/tests/doctor_cli_test.go +148 -2
  138. package/engine/tests/forge_cli_test.go +463 -0
  139. package/engine/tests/gate_test.go +63 -8
  140. package/engine/tests/hook_test.go +260 -8
  141. package/engine/tests/hooks_io_test.go +94 -3
  142. package/engine/tests/json_contract_test.go +127 -2
  143. package/engine/tests/migrate_cli_test.go +2 -2
  144. package/engine/tests/parity_buildreadiness_test.go +141 -10
  145. package/engine/tests/parity_learnings_test.go +16 -17
  146. package/engine/tests/parity_reconcile_test.go +20 -17
  147. package/engine/tests/parity_resolve_test.go +12 -11
  148. package/engine/tests/parity_test.go +21 -17
  149. package/pack/.claude/agents/devrites-code-reviewer.md +62 -48
  150. package/pack/.claude/agents/devrites-devex-reviewer.md +69 -53
  151. package/pack/.claude/agents/devrites-doubt-reviewer.md +29 -22
  152. package/pack/.claude/agents/devrites-evidence-scout.md +69 -0
  153. package/pack/.claude/agents/devrites-forge-judge.md +74 -61
  154. package/pack/.claude/agents/devrites-frontend-reviewer.md +48 -39
  155. package/pack/.claude/agents/devrites-performance-reviewer.md +49 -40
  156. package/pack/.claude/agents/devrites-plan-drafter.md +71 -0
  157. package/pack/.claude/agents/devrites-plan-reviewer.md +80 -47
  158. package/pack/.claude/agents/devrites-proof-runner.md +74 -0
  159. package/pack/.claude/agents/devrites-retrospector.md +48 -45
  160. package/pack/.claude/agents/devrites-security-auditor.md +46 -36
  161. package/pack/.claude/agents/devrites-simplifier-reviewer.md +50 -46
  162. package/pack/.claude/agents/devrites-slice-wright.md +153 -165
  163. package/pack/.claude/agents/devrites-spec-reviewer.md +34 -32
  164. package/pack/.claude/agents/devrites-strategy-reviewer.md +63 -34
  165. package/pack/.claude/agents/devrites-test-analyst.md +40 -30
  166. package/pack/.claude/settings.json +2 -1
  167. package/pack/.claude/skills/devrites-audit/SKILL.md +40 -61
  168. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +24 -13
  169. package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  170. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  171. package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  172. package/pack/.claude/skills/devrites-doubt/SKILL.md +25 -17
  173. package/pack/.claude/skills/devrites-interview/SKILL.md +53 -52
  174. package/pack/.claude/skills/devrites-lib/SKILL.md +11 -9
  175. package/pack/.claude/skills/devrites-lib/reference/intent-map.md +3 -2
  176. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  177. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +8 -1
  178. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +38 -55
  179. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  180. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +198 -190
  181. package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  182. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  183. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
  184. package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  185. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  186. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -18
  187. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  188. package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  189. package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  190. package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
  191. package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
  192. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +0 -9
  193. package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +1 -3
  194. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +17 -7
  195. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +1 -27
  196. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
  197. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +23 -10
  198. package/pack/.claude/skills/devrites-source-driven/SKILL.md +23 -22
  199. package/pack/.claude/skills/rite/SKILL.md +8 -6
  200. package/pack/.claude/skills/rite/reference/menu.md +8 -6
  201. package/pack/.claude/skills/rite-adopt/SKILL.md +33 -37
  202. package/pack/.claude/skills/rite-autocomplete/SKILL.md +33 -28
  203. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +21 -21
  204. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  205. package/pack/.claude/skills/rite-build/SKILL.md +35 -30
  206. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +38 -38
  207. package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -0
  208. package/pack/.claude/skills/rite-build/reference/forge.md +186 -156
  209. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
  210. package/pack/.claude/skills/rite-build/reference/phase-contract.md +96 -175
  211. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +129 -134
  212. package/pack/.claude/skills/rite-clarify/SKILL.md +89 -0
  213. package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +59 -0
  214. package/pack/.claude/skills/rite-converge/SKILL.md +35 -25
  215. package/pack/.claude/skills/rite-define/SKILL.md +57 -32
  216. package/pack/.claude/skills/rite-define/reference/gates.md +16 -15
  217. package/pack/.claude/skills/rite-define/reference/plan-template.md +16 -8
  218. package/pack/.claude/skills/rite-frame/reference/failure-modes.md +22 -24
  219. package/pack/.claude/skills/rite-plan/SKILL.md +44 -16
  220. package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +4 -0
  221. package/pack/.claude/skills/rite-polish/SKILL.md +27 -23
  222. package/pack/.claude/skills/rite-prototype/SKILL.md +25 -26
  223. package/pack/.claude/skills/rite-prove/SKILL.md +27 -17
  224. package/pack/.claude/skills/rite-resolve/SKILL.md +12 -11
  225. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
  226. package/pack/.claude/skills/rite-review/SKILL.md +37 -28
  227. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +27 -92
  228. package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  229. package/pack/.claude/skills/rite-ship/reference/design-memory.md +31 -36
  230. package/pack/.claude/skills/rite-spec/SKILL.md +84 -135
  231. package/pack/.claude/skills/rite-spec/reference/investigation.md +37 -33
  232. package/pack/.claude/skills/rite-spec/reference/question-protocol.md +6 -2
  233. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +25 -24
  234. package/pack/.claude/skills/rite-spec/reference/spec-template.md +9 -2
  235. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +13 -3
  236. package/pack/.claude/skills/rite-temper/SKILL.md +62 -47
  237. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +24 -22
  238. package/pack/.claude/skills/rite-vet/SKILL.md +110 -113
  239. package/pack/.claude/skills/rite-vet/reference/artifacts.md +42 -9
  240. package/pack/.claude/skills/rite-vet/reference/review-axes.md +39 -37
  241. package/pack/generated/claude/agents/devrites-code-reviewer.md +62 -48
  242. package/pack/generated/claude/agents/devrites-devex-reviewer.md +69 -53
  243. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +29 -22
  244. package/pack/generated/claude/agents/devrites-evidence-scout.md +69 -0
  245. package/pack/generated/claude/agents/devrites-forge-judge.md +74 -61
  246. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +48 -39
  247. package/pack/generated/claude/agents/devrites-performance-reviewer.md +49 -40
  248. package/pack/generated/claude/agents/devrites-plan-drafter.md +71 -0
  249. package/pack/generated/claude/agents/devrites-plan-reviewer.md +80 -47
  250. package/pack/generated/claude/agents/devrites-proof-runner.md +74 -0
  251. package/pack/generated/claude/agents/devrites-retrospector.md +48 -45
  252. package/pack/generated/claude/agents/devrites-security-auditor.md +46 -36
  253. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +50 -46
  254. package/pack/generated/claude/agents/devrites-slice-wright.md +153 -165
  255. package/pack/generated/claude/agents/devrites-spec-reviewer.md +34 -32
  256. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +63 -34
  257. package/pack/generated/claude/agents/devrites-test-analyst.md +40 -30
  258. package/pack/generated/claude/settings.json +2 -1
  259. package/pack/generated/claude/skills/devrites-audit/SKILL.md +40 -61
  260. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +24 -13
  261. package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  262. package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  263. package/pack/generated/claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  264. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +25 -17
  265. package/pack/generated/claude/skills/devrites-interview/SKILL.md +53 -52
  266. package/pack/generated/claude/skills/devrites-lib/SKILL.md +11 -9
  267. package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +3 -2
  268. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  269. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +8 -1
  270. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +38 -55
  271. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  272. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +198 -190
  273. package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  274. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  275. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
  276. package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  277. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  278. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -18
  279. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  280. package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  281. package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  282. package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
  283. package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
  284. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +0 -9
  285. package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +1 -3
  286. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +17 -7
  287. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +1 -27
  288. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
  289. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +23 -10
  290. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +23 -22
  291. package/pack/generated/claude/skills/rite/SKILL.md +8 -6
  292. package/pack/generated/claude/skills/rite/reference/menu.md +8 -6
  293. package/pack/generated/claude/skills/rite-adopt/SKILL.md +33 -37
  294. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +33 -28
  295. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +21 -21
  296. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  297. package/pack/generated/claude/skills/rite-build/SKILL.md +35 -30
  298. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +38 -38
  299. package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +10 -0
  300. package/pack/generated/claude/skills/rite-build/reference/forge.md +186 -156
  301. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
  302. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +96 -175
  303. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +129 -134
  304. package/pack/generated/claude/skills/rite-clarify/SKILL.md +89 -0
  305. package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +59 -0
  306. package/pack/generated/claude/skills/rite-converge/SKILL.md +35 -25
  307. package/pack/generated/claude/skills/rite-define/SKILL.md +57 -32
  308. package/pack/generated/claude/skills/rite-define/reference/gates.md +16 -15
  309. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +16 -8
  310. package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +22 -24
  311. package/pack/generated/claude/skills/rite-plan/SKILL.md +44 -16
  312. package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +4 -0
  313. package/pack/generated/claude/skills/rite-polish/SKILL.md +27 -23
  314. package/pack/generated/claude/skills/rite-prototype/SKILL.md +25 -26
  315. package/pack/generated/claude/skills/rite-prove/SKILL.md +27 -17
  316. package/pack/generated/claude/skills/rite-resolve/SKILL.md +12 -11
  317. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
  318. package/pack/generated/claude/skills/rite-review/SKILL.md +37 -28
  319. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +27 -92
  320. package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  321. package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +31 -36
  322. package/pack/generated/claude/skills/rite-spec/SKILL.md +84 -135
  323. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +37 -33
  324. package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +6 -2
  325. package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +25 -24
  326. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +9 -2
  327. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +13 -3
  328. package/pack/generated/claude/skills/rite-temper/SKILL.md +62 -47
  329. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +24 -22
  330. package/pack/generated/claude/skills/rite-vet/SKILL.md +110 -113
  331. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +42 -9
  332. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +39 -37
  333. package/pack/generated/codex/AGENTS.md +5 -2
  334. package/pack/generated/codex/agents/devrites-code-reviewer.toml +69 -47
  335. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +75 -51
  336. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +35 -20
  337. package/pack/generated/codex/agents/devrites-evidence-scout.toml +75 -0
  338. package/pack/generated/codex/agents/devrites-forge-judge.toml +80 -59
  339. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +54 -37
  340. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +55 -38
  341. package/pack/generated/codex/agents/devrites-plan-drafter.toml +77 -0
  342. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +82 -47
  343. package/pack/generated/codex/agents/devrites-proof-runner.toml +80 -0
  344. package/pack/generated/codex/agents/devrites-retrospector.toml +54 -43
  345. package/pack/generated/codex/agents/devrites-security-auditor.toml +53 -35
  346. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +56 -44
  347. package/pack/generated/codex/agents/devrites-slice-wright.toml +159 -163
  348. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +40 -30
  349. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +65 -34
  350. package/pack/generated/codex/agents/devrites-test-analyst.toml +46 -28
  351. package/pack/generated/codex/hooks.json +4 -14
  352. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +7 -3
  353. package/pack/generated/codex/skills/devrites-audit/SKILL.md +47 -64
  354. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +7 -3
  355. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +31 -16
  356. package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  357. package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  358. package/pack/generated/codex/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  359. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +32 -20
  360. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +7 -3
  361. package/pack/generated/codex/skills/devrites-interview/SKILL.md +60 -55
  362. package/pack/generated/codex/skills/devrites-lib/SKILL.md +18 -12
  363. package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +3 -2
  364. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  365. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +8 -1
  366. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +38 -55
  367. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  368. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +198 -190
  369. package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  370. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  371. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +16 -52
  372. package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  373. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  374. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -18
  375. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  376. package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  377. package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  378. package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -14
  379. package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +9 -25
  380. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +0 -9
  381. package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +1 -3
  382. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +17 -7
  383. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +1 -27
  384. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +46 -50
  385. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +23 -10
  386. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +7 -3
  387. package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +7 -3
  388. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +29 -24
  389. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +7 -3
  390. package/pack/generated/codex/skills/rite/SKILL.md +19 -13
  391. package/pack/generated/codex/skills/rite/reference/menu.md +8 -6
  392. package/pack/generated/codex/skills/rite-adopt/SKILL.md +40 -40
  393. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +40 -31
  394. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +21 -21
  395. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  396. package/pack/generated/codex/skills/rite-build/SKILL.md +42 -33
  397. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +38 -38
  398. package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +10 -0
  399. package/pack/generated/codex/skills/rite-build/reference/forge.md +186 -156
  400. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +4 -3
  401. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +96 -175
  402. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +129 -134
  403. package/pack/generated/codex/skills/rite-clarify/SKILL.md +105 -0
  404. package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +59 -0
  405. package/pack/generated/codex/skills/rite-converge/SKILL.md +42 -28
  406. package/pack/generated/codex/skills/rite-customize/SKILL.md +7 -3
  407. package/pack/generated/codex/skills/rite-define/SKILL.md +64 -35
  408. package/pack/generated/codex/skills/rite-define/reference/gates.md +16 -15
  409. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +16 -8
  410. package/pack/generated/codex/skills/rite-doctor/SKILL.md +7 -3
  411. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +7 -3
  412. package/pack/generated/codex/skills/rite-explain/SKILL.md +7 -3
  413. package/pack/generated/codex/skills/rite-frame/SKILL.md +7 -3
  414. package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +22 -24
  415. package/pack/generated/codex/skills/rite-handoff/SKILL.md +7 -3
  416. package/pack/generated/codex/skills/rite-learn/SKILL.md +7 -3
  417. package/pack/generated/codex/skills/rite-plan/SKILL.md +51 -19
  418. package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +5 -1
  419. package/pack/generated/codex/skills/rite-polish/SKILL.md +34 -26
  420. package/pack/generated/codex/skills/rite-pov/SKILL.md +7 -3
  421. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +7 -3
  422. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -3
  423. package/pack/generated/codex/skills/rite-prototype/SKILL.md +32 -29
  424. package/pack/generated/codex/skills/rite-prove/SKILL.md +34 -20
  425. package/pack/generated/codex/skills/rite-quick/SKILL.md +7 -3
  426. package/pack/generated/codex/skills/rite-resolve/SKILL.md +19 -14
  427. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +3 -0
  428. package/pack/generated/codex/skills/rite-review/SKILL.md +44 -31
  429. package/pack/generated/codex/skills/rite-seal/SKILL.md +7 -3
  430. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +27 -92
  431. package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  432. package/pack/generated/codex/skills/rite-ship/SKILL.md +7 -3
  433. package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +31 -36
  434. package/pack/generated/codex/skills/rite-spec/SKILL.md +91 -138
  435. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +37 -33
  436. package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +6 -2
  437. package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +25 -24
  438. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +9 -2
  439. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +13 -3
  440. package/pack/generated/codex/skills/rite-status/SKILL.md +7 -3
  441. package/pack/generated/codex/skills/rite-temper/SKILL.md +69 -50
  442. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +24 -22
  443. package/pack/generated/codex/skills/rite-vet/SKILL.md +117 -116
  444. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +42 -9
  445. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +40 -38
  446. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +7 -3
  447. package/package.json +1 -1
  448. package/scripts/build-release-tarball.sh +32 -15
  449. package/scripts/check-authority-drift.py +125 -0
  450. package/scripts/check-instruction-size-baseline.mjs +19 -11
  451. package/scripts/check-invocation-integrity.py +2 -0
  452. package/scripts/codex-generate.sh +69 -33
  453. package/scripts/grade-feature.sh +121 -40
  454. package/scripts/live-hosts/agent-result.schema.json +230 -0
  455. package/scripts/live-hosts/claude.sh +87 -0
  456. package/scripts/live-hosts/codex.sh +81 -0
  457. package/scripts/live-hosts/common.sh +113 -0
  458. package/scripts/live-hosts/fake-host.py +264 -0
  459. package/scripts/live-hosts/host-transport.py +287 -0
  460. package/scripts/release-check.sh +5 -1
  461. package/scripts/run-agent-contract-evals.py +1380 -0
  462. package/scripts/run-behavioral-evals.sh +24 -30
  463. package/scripts/run-evals.sh +1 -5
  464. package/scripts/run-live-behavioral-evals.py +1274 -144
  465. package/scripts/run-outcome-evals.sh +414 -88
  466. package/scripts/run-tests.mjs +30 -2
  467. package/scripts/skills-inventory.mjs +1 -1
  468. package/scripts/validate-workflow-security.py +39 -20
  469. package/scripts/validate-workspace-schema.py +362 -10
  470. package/scripts/validate.sh +21 -15
  471. package/engine/testdata/golden/TestParityWrightScope/devrites-edit-allowed.golden +0 -1
  472. /package/engine/testdata/golden/{TestParityReconcile/check-no-claimed.golden → TestParityBuildReadiness/arg=clarifyopen.golden} +0 -0
@@ -1,26 +1,45 @@
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.
18
36
 
19
37
  Canonical live workspace:
20
38
 
21
39
  ```text
22
40
  .devrites/
23
41
  ACTIVE
42
+ timeline.jsonl # local metadata-only v1 workflow trace
24
43
  work/
25
44
  <slug>/
26
45
  README.md # compact workspace map; feature.md/index.md aliases allowed
@@ -31,10 +50,19 @@ Canonical live workspace:
31
50
  decisions.md # ADR-style decision log
32
51
  assumptions.md # assumptions and validation status
33
52
  questions.md # open/resolved human questions
53
+ decision-coverage.md # topology-first clarification verdict
34
54
  plan.md # technical approach and slice strategy
35
55
  tasks.md # vertical slices
36
56
  traceability.md # AC/REQ -> slices -> tests/evidence/files matrix
57
+ eng-review.md # implementation-readiness verdict
58
+ test-plan.md # executable proof target
37
59
  state.md # compact cursor; status.md alias allowed
60
+ events.jsonl # feature-local copy of v1 workflow trace
61
+ recovery-attempts.jsonl # durable bounded technical-recovery ledger
62
+ .git-authority-consumption.jsonl # private one-shot Git grant consumption
63
+ .wright-allowlist # root-owned exact source/test write scope
64
+ .forge/
65
+ <run-id>/manifest.json # engine-owned Forge lifecycle and path authority
38
66
  evidence.md # command/action proof; proof.md alias allowed
39
67
  browser-evidence.md # optional UI/runtime browser proof
40
68
  drift.md # optional spec/plan drift register
@@ -50,17 +78,18 @@ Canonical live workspace:
50
78
  Backward compatibility: `.devrites/features/<slug>/` remains readable as an alias
51
79
  for `.devrites/work/<slug>/`; `feature.md` and `index.md` remain valid workspace
52
80
  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.
81
+ proof alias for `evidence.md`. Migration normalizes compatible metadata without
82
+ deleting aliases or inventing evidence.
55
83
 
56
84
  ## Read order
57
85
 
58
86
  | Phase / role | Read first | Then read | Usually skip |
59
87
  | --- | --- | --- | --- |
60
88
  | 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` |
89
+ | Clarify | `README.md`, `state.md` | `spec.md`, `decisions.md`, `assumptions.md`, `questions.md` | plan/proof artifacts |
90
+ | Define / plan | `README.md`, `state.md` | `spec.md`, `decision-coverage.md`, `architecture.md`, `decisions.md`, `assumptions.md` | `evidence.md` |
62
91
  | 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 |
92
+ | 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
93
  | Prove | `traceability.md`, `tasks.md` | `evidence.md`, `browser-evidence.md`, `touched-files.md` | long plan rationale |
65
94
  | Review / seal | `README.md`, `traceability.md` | `spec.md`, `evidence.md`, `decisions.md`, `drift.md`, `touched-files.md` | raw logs unless needed |
66
95
  | Handoff | `README.md`, `state.md` | `handoff.md`, then linked source files | duplicated summaries |
@@ -72,6 +101,7 @@ deleting aliases.
72
101
  | `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
102
  | `brief.md` | required | `/rite-spec` | clarify objective | 80 lines | Objective, Non-goals, Success definition | One-screen request and scope summary. |
74
103
  | `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. |
104
+ | `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
105
  | `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
106
  | `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
107
  | `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 +111,14 @@ deleting aliases.
81
111
  | `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
112
  | `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
113
  | `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. |
114
+ | `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. |
115
+ | `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. |
116
+ | `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. |
117
+ | 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. |
118
+ | `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. |
119
+ | `.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. |
120
+ | `.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. |
121
+ | `.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
122
  | `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
123
  | `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
124
  | `drift.md` | drift only | Spec Drift Guard | spec/plan reality mismatch | 160 lines | Drift register | `DRIFT-###`, status, evidence found, resolution, related IDs. |
@@ -90,23 +127,62 @@ deleting aliases.
90
127
  | `handoff.md` | optional | `/rite-handoff` | cold resume | 120 lines | Resume, Read next, Next action | Links to source artifacts instead of copying them. |
91
128
  | `references.md` + `references/` | optional | `/rite-spec` | external/user-supplied material | 160 lines | Reference index | Links must resolve or be external URLs. |
92
129
 
130
+ Telemetry is deliberately outside the correctness contract. Missing or corrupt
131
+ `timeline.jsonl` / `events.jsonl` may degrade `timeline report`, `progress`, or
132
+ the statusline, but can never change a gate, cursor, question, evidence verdict,
133
+ recovery budget, capability decision, or destructive-action authority. Reports
134
+ read a bounded tail; `timeline purge --before ...` and/or `--run ...` rewrites
135
+ only these logs. The engine sends no remote telemetry. Remove old unversioned
136
+ logs manually when their legacy free text should not be retained.
137
+
93
138
  Files may exceed budgets only with a visible `Budget override: <reason>` line.
94
139
 
140
+ ## Readiness gate binding
141
+
142
+ The typed verdict is necessary but not sufficient:
143
+
144
+ - `Coverage inputs SHA-256` binds `decision-coverage.md` to `brief.md`,
145
+ `spec.md`, `decisions.md`, `assumptions.md`, and `questions.md`.
146
+ - `Readiness inputs SHA-256` binds `eng-review.md` to `spec.md`,
147
+ `decision-coverage.md`, `architecture.md`, `plan.md`, `tasks.md`,
148
+ `traceability.md`, and `test-plan.md`.
149
+
150
+ `devrites-engine readiness-digest coverage|engineering [slug]` emits the
151
+ canonical field line. `build-readiness` rejects stale digests, malformed or
152
+ contradictory content, and missing markers. A later-phase clarification
153
+ retrofit uses `clarify-return enter|restore`; restore requires fresh `CLEAR`
154
+ coverage, while an acceptance-changing result keeps the cursor for plan repair.
155
+
95
156
  ## Required vs optional
96
157
 
97
158
  Required at `/rite-spec`: workspace map, `brief.md`, `spec.md`, `state.md`,
98
159
  `decisions.md`, `assumptions.md`, `questions.md`.
99
160
 
100
- Required at `/rite-define` and later: all spec files plus `architecture.md`,
161
+ Required at `/rite-clarify` and later: all spec files plus `decision-coverage.md`.
162
+
163
+ Required at `/rite-define` and later: all clarified spec files plus `architecture.md`,
101
164
  `plan.md`, `tasks.md`, and `traceability.md`.
102
165
 
103
- Required at `/rite-prove` and later: all plan files plus `evidence.md` (or
166
+ Required at `/rite-vet` and later: all plan files plus `eng-review.md` and `test-plan.md`.
167
+
168
+ Required at `/rite-prove` and later: all vetted plan files plus `evidence.md` (or
104
169
  `proof.md`) and `touched-files.md`.
105
170
 
106
171
  Optional/conditional files are generated only by their producing phase:
107
172
  `flows.md` when diagrams clarify behavior, `design-brief.md` and
108
173
  `browser-evidence.md` for UI, `drift.md` for drift, `handoff.md` for handoff,
109
- and `references.md` / `references/` when references exist.
174
+ and `references.md` / `references/` when references exist. The build runtime
175
+ creates `.wright-allowlist` and, only when needed, `recovery-attempts.jsonl`.
176
+ Forge creates `.forge/<run-id>/manifest.json` only after a clean, bound
177
+ parallel plan passes. A serial degradation creates no Forge state.
178
+
179
+ Forge candidate worktrees do not live inside `.devrites`. The manifest binds
180
+ them to the sibling
181
+ `.<repo>.devrites-forge/<run-id>/candidate-<a|b|c>` paths before Git creates
182
+ them. Every later extract, merge, cleanup, and reap command reloads the unique
183
+ manifest instead of accepting a caller-supplied path or branch. Cleanup
184
+ requires a landed winner and recorded successful verification, and it
185
+ preserves dirty, live, foreign, or ambiguous state.
110
186
 
111
187
  ## Compactness rules
112
188
 
@@ -132,6 +208,7 @@ Use these forms in generated artifacts:
132
208
  | Question | `Q-001` | `questions.md` |
133
209
  | Drift event | `DRIFT-001` | `drift.md` |
134
210
  | Evidence | `EVID-001` | `evidence.md`, `browser-evidence.md` |
211
+ | Forge run | `forge-` plus 24 lowercase hex characters | `.forge/<run-id>/manifest.json` |
135
212
 
136
213
  ## Validation
137
214
 
@@ -141,6 +218,8 @@ project-wide validation path runs it against representative fixtures.
141
218
  The validator checks:
142
219
 
143
220
  - required files and headings for the current phase;
221
+ - supported workspace `schemaVersion` and additive legacy aliases;
222
+ - semantic, fresh digest-bound `CLEAR` and `READY` readiness artifacts;
144
223
  - stable IDs and old `AC1` / `Slice 1` style regressions;
145
224
  - acceptance criteria referenced by at least one slice;
146
225
  - 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,51 @@
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`, or `devrites-debug-recovery`. `/rite-clarify` always runs
14
+ but may ask zero questions; `/rite-temper` is the optional strategic branch;
15
+ `/rite-vet` runs on every defined plan, with depth scaled to risk. Build asks
16
+ the human only for genuine
17
+ product/scope/policy decisions, irreversible risk, or human-only access/actions;
18
+ `/rite-resolve` is the resume verb.
16
19
 
17
20
  ```mermaid
18
21
  flowchart LR
19
22
  Start([user has an idea]) --> Spec[/rite-spec/]
20
23
  Spec -.->|UI detected| Shape[devrites-ux-shape<br/>plan UX/UI → design-brief.md]
21
24
  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/]
25
+ Spec -->|spec.md ready| Clarify[/rite-clarify/]
26
+ Clarify -->|fresh digest-bound CLEAR<br/>big / risky| Temper[/rite-temper/] -.->|strategy.md| Define
27
+ Clarify -->|fresh digest-bound CLEAR<br/>low stakes| Define[/rite-define/]
28
+ Define -->|plan.md + tasks.md<br/>approved| Plan[(plan checkpoint)]
29
+ Plan -->|normal resume| Vet[/rite-vet/]
30
+ Vet -->|fresh digest-bound READY<br/>+ test-plan.md| Build[/rite-build/]
31
+ Build -.->|exact .wright-allowlist<br/>retained baseline| Wright[devrites-slice-wright]
32
+ Wright -.->|typed result| Build
26
33
  Build -->|one slice done<br/>+ evidence| Build
27
34
  Build -.->|"Forge: yes slice"| Forge[forge: K candidates<br/>→ devrites-forge-judge → 1 winner]
28
35
  Forge -.->|winner lands<br/>forge-report.md| Build
29
- Build -->|HITL gate fires| Await{{Awaiting human<br/>state.md + questions.md}}
36
+ Build -->|product / risk / access gate| Await{{Awaiting human<br/>state.md + questions.md}}
30
37
  Await -->|"/rite-resolve &lt;qid&gt; &lt;answer&gt;"| Build
31
38
  Build -->|all slices built| Prove[/rite-prove/]
32
39
  Build -.->|resumed / adopted / stalled<br/>code vs intent| Converge[/rite-converge/]
33
- Converge -.->|appends remaining slices| Build
40
+ Converge -.->|appends remaining slices<br/>invalidates old READY| Vet
41
+ Converge -.->|already converged| Prove
34
42
  Prove -->|evidence captured| Polish[/rite-polish/]
35
43
  Polish -->|polish-report.md| Review[/rite-review/]
36
44
  Review -->|review.md<br/>Critical == 0| Seal[/rite-seal/]
37
45
  Seal -->|GO| Ship2[/rite-ship/]
38
46
  Ship2 -->|type-GO| Shipped([commit · push · tag · archive])
39
47
  Seal -->|NO-GO| Repair[/rite-plan repair/]
40
- Repair --> Build
48
+ Repair --> Plan
41
49
 
42
50
  Build -.->|Spec Drift Guard| Repair
43
51
  Prove -.->|drift / failure| Repair
@@ -49,11 +57,11 @@ flowchart LR
49
57
  classDef repair fill:#4c1d95,stroke:#a78bfa,color:#f5f3ff
50
58
  classDef gate fill:#4c1d95,stroke:#a78bfa,color:#f5f3ff
51
59
  classDef internal fill:#0f172a,stroke:#9ca3af,color:#f9fafb
52
- class Spec,Temper,Define,Vet,Build,Prove,Polish,Review,Seal,Ship2 phase
60
+ class Spec,Clarify,Temper,Define,Plan,Vet,Build,Prove,Polish,Review,Seal,Ship2 phase
53
61
  class Shipped done
54
62
  class Repair repair
55
63
  class Await gate
56
- class Shape,Forge internal
64
+ class Shape,Forge,Wright internal
57
65
  ```
58
66
 
59
67
  ## 2. `/rite-polish` orchestrator
@@ -85,13 +93,14 @@ emphasis dials. `normalize-only` stops after Phase 3.
85
93
 
86
94
  ## 3. `/rite-review` parallel axes
87
95
 
88
- Review runs Spec coverage and Standards compliance in parallel sub-agents so
89
- neither masks the other.
96
+ Review assigns Spec coverage and Standards compliance to separate
97
+ fresh-context agents and runs them in parallel. This prevents one axis from
98
+ masking the other.
90
99
 
91
100
  ```mermaid
92
101
  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**]
102
+ R[/rite-review/] -->|fresh-context dispatch<br/>in parallel| S[devrites-spec-reviewer<br/>**Spec axis**]
103
+ R -->|fresh-context dispatch<br/>in parallel| C[devrites-code-reviewer<br/>**Standards axis**]
95
104
  S -->|missing / partial / wrong /<br/>scope-creep findings| Combine
96
105
  C -->|standards violations<br/>cite rule + file| Combine
97
106
  R --> Sec[devrites-audit security]
@@ -110,10 +119,11 @@ flowchart LR
110
119
 
111
120
  ## 4. `/rite-seal` fan-out
112
121
 
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.
122
+ The seal runs all relevant reviewers in parallel, reconciles their findings,
123
+ decides GO or NO-GO, and stops without running git. On GO, `/rite-ship` renders
124
+ the type-GO prompt and runs the irreversible commit · push · tag · archive
125
+ sequence. The gate uses severity, acceptance, and drift rather than an advisory
126
+ score.
117
127
 
118
128
  ```mermaid
119
129
  flowchart TB
@@ -156,36 +166,45 @@ flowchart TB
156
166
 
157
167
  ## 5. `devrites-debug-recovery` seven-step loop
158
168
 
159
- Failure recovery: the loop construction in Phase 1 is the load-bearing piece.
169
+ Failure recovery starts by routing the faulty layer. `recovery route <class>`
170
+ returns its owner, action, and whether a human decision is actually needed.
171
+ The root-cause fingerprint and three-failure budget persist across agents and
172
+ sessions in `recovery-attempts.jsonl`; typed entries keep independent defects
173
+ on independent budgets.
160
174
 
161
175
  ```mermaid
162
176
  flowchart LR
163
- F([failing test /<br/>build / runtime]) --> L1[Step 1<br/>Build the loop]
177
+ F([failing test /<br/>build / runtime]) --> Route{Route faulty layer}
178
+ Route -->|technical class<br/>humanPause: false| L1[Step 1<br/>Build the loop]
179
+ Route -->|intent / missing decision| Clarify([Clarify with the human])
164
180
  L1 -->|fast deterministic signal| R[Step 2<br/>Reproduce]
165
181
  R -->|exact error text| H[Step 3<br/>Ranked hypotheses 3-5]
166
182
  H --> T[Step 4<br/>Trace when ambiguous]
167
183
  T -->|discriminating probe| I[Step 5<br/>Instrument]
168
184
  I -->|change one variable| Fix[Step 6<br/>Fix + regression test]
169
185
  Fix --> C[Step 7<br/>Cleanup + classify]
170
- L1 -.->|can't build loop| Ask([STOP: ask user])
186
+ C -->|green: recovery clear --class| Done([verified])
187
+ C -->|same root cause red:<br/>recovery record --class| Budget{3 failures<br/>used?}
188
+ Budget -->|no: recovery check<br/>+ exact failure| L1
189
+ Budget -->|yes| Block([technical blocker<br/>reproduction + dead ends])
171
190
 
172
191
  classDef phase fill:#1f2937,stroke:#60a5fa,color:#f9fafb
173
192
  classDef stop fill:#7f1d1d,stroke:#f87171,color:#fee2e2
174
193
  class L1,R,H,T,I,Fix,C phase
175
- class Ask stop
194
+ class Block,Clarify stop
176
195
  ```
177
196
 
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.
197
+ A separate file under
198
+ `pack/.claude/skills/devrites-debug-recovery/reference/` documents each step.
199
+ This keeps the `SKILL.md` body small.
181
200
 
182
201
  ## 6. Engineering-rules carrier
183
202
 
184
203
  Workspace-operating lifecycle skills read
185
204
  `.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.
205
+ keep their narrower contract local. The other rule files load on demand.
206
+ Per-phase skills use plain `Read` calls to load any additional rule files their
207
+ workflows need. There is no carrier skill or session-start autoload.
189
208
 
190
209
  ```mermaid
191
210
  flowchart TD
@@ -229,9 +248,9 @@ flowchart TD
229
248
 
230
249
  ## 7. Workspace state model
231
250
 
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
251
+ Each phase reads its durable state from `.devrites/work/<feature-slug>/` before
252
+ acting. Every `rite-*` skill checks the workspace first; if `ACTIVE` is unset,
253
+ it tells the user to run `/rite-spec`. The optional
235
254
  `.devrites/AFK` sentinel sits beside `ACTIVE` and toggles the session-level
236
255
  run mode for all skills.
237
256
 
@@ -242,10 +261,11 @@ erDiagram
242
261
  WORKSPACE ||--|| state : has
243
262
  WORKSPACE ||--|| brief : has
244
263
  WORKSPACE ||--|| spec : has
264
+ WORKSPACE ||--o| decision-coverage : "has (semantic + digest-bound CLEAR before planning)"
245
265
  WORKSPACE ||--o| strategy : "has (optional: from /rite-temper)"
246
266
  WORKSPACE ||--|| plan : "has (from /rite-define)"
247
267
  WORKSPACE ||--|| tasks : "has: slices tagged Mode + Gate"
248
- WORKSPACE ||--o| eng-review : "has (from /rite-vet: every plan, light or full)"
268
+ WORKSPACE ||--o| eng-review : "has (semantic + digest-bound READY from /rite-vet)"
249
269
  WORKSPACE ||--o| test-plan : "has (from /rite-vet; build + prove read it)"
250
270
  WORKSPACE ||--o{ references : "has (design refs)"
251
271
  WORKSPACE ||--o| design-brief : "has (UI features: from /rite-spec via devrites-ux-shape; the build target)"
@@ -260,6 +280,8 @@ erDiagram
260
280
  WORKSPACE ||--o| review : "has (from /rite-review)"
261
281
  WORKSPACE ||--o| seal : "has (from /rite-seal)"
262
282
  WORKSPACE ||--o| ship : "has (from /rite-ship; archived on close)"
283
+ WORKSPACE ||--o| recovery_attempts : "durable three-failure budget per root cause"
284
+ WORKSPACE ||--o| wright_allowlist : "root-owned exact source/test paths"
263
285
 
264
286
  ACTIVE {
265
287
  string slug "names the current workspace"
@@ -272,12 +294,15 @@ erDiagram
272
294
  }
273
295
  WORKSPACE {
274
296
  string slug PK ".devrites/work/<slug>/"
297
+ int schemaVersion "2; older additive layouts remain readable"
275
298
  }
276
299
  state {
277
- string phase "frame | spec | temper | define | plan | vet | build | converge | prove | polish | review | seal | ship | done"
300
+ string phase "frame | spec | clarify | temper | define | plan | vet | build | converge | prove | polish | review | seal | ship | done"
278
301
  string status "running | awaiting_human | blocked | done"
279
302
  string active_slice "N: name"
280
303
  int afk_slices_remaining "from .devrites/AFK max_slices on first AFK build"
304
+ string return_phase "durable later-phase clarify return"
305
+ string return_next_action "restored only after fresh CLEAR"
281
306
  block awaiting_human "qid, gate, question, proposed, raised_at (only when paused)"
282
307
  }
283
308
  questions {
@@ -300,10 +325,11 @@ separately by `disable-model-invocation`.
300
325
 
301
326
  ```mermaid
302
327
  flowchart TB
303
- subgraph Public["Public (user-invocable: true): 30 skills"]
328
+ subgraph Public["Public (user-invocable: true): 31 skills"]
304
329
  direction TB
305
330
  R1[/rite/]
306
331
  R2[/rite-spec/]
332
+ RCL[/rite-clarify/]
307
333
  RT[/rite-temper/]
308
334
  R3[/rite-define/]
309
335
  RV[/rite-vet/]
@@ -351,23 +377,25 @@ flowchart TB
351
377
 
352
378
  classDef pub fill:#064e3b,stroke:#34d399,color:#ecfdf5
353
379
  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
380
+ class R1,R2,RCL,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
355
381
  class I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12 int
356
382
  ```
357
383
 
358
384
  ## 9. AFK & HITL state machine
359
385
 
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.
386
+ This state machine shows pauses for HITL gates and the AFK loop. Only the root
387
+ `/rite-build` orchestrator writes `Awaiting human`, and only `/rite-resolve`
388
+ clears it.
363
389
 
364
390
  ```mermaid
365
391
  stateDiagram-v2
366
392
  [*] --> running: /rite-build starts
367
393
  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)
394
+ running --> recovery: objective red<br/>(tests · types · lint · runtime · coverage)
395
+ recovery --> running: green<br/>recovery clear --class
396
+ recovery --> blocked: 3 failed attempts<br/>reproduction + dead ends; no question
397
+ running --> awaiting_human: product / scope / policy choice
398
+ running --> awaiting_human: irreversible risk or<br/>human-only access / action
371
399
  awaiting_human --> running: /rite-resolve qid "<answer>"
372
400
  awaiting_human --> running: /rite-resolve --drop qid
373
401
  awaiting_human --> blocked: /rite-plan repair (scope change)
@@ -383,6 +411,8 @@ stateDiagram-v2
383
411
  end note
384
412
  ```
385
413
 
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.
414
+ `AFK` mode (`.devrites/AFK` present) widens which advisory/validating
415
+ transitions stay in `running`. It never turns objective technical failures into
416
+ human questions: bounded recovery either returns green or records a technical
417
+ blocker. Genuine human-owned decisions and actions still transition to
418
+ `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.