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
@@ -11,19 +11,23 @@ This is the Codex mirror of a DevRites skill. In Codex:
11
11
 
12
12
  - Load DevRites engineering standards from `.agents/skills/devrites-lib/reference/standards/`. Read `.agents/skills/devrites-lib/reference/standards/core.md` before workflow work, then load the other `.agents/skills/devrites-lib/reference/standards/*.md` files exactly when this skill asks for them.
13
13
  - Use the installed `devrites-engine` binary as the canonical runtime helper surface for orientation, gates, and state mutation.
14
- - When this skill asks for a DevRites specialist or writer agent, **explicitly** spawn the matching Codex custom agent from `.codex/agents/devrites-*.toml` through Codex subagents (`spawn_agent`), then wait for its result and reconcile it as the skill instructs. Do not do the review inline just because the instruction to spawn is embedded here: Codex under-fires embedded spawn/skill instructions (openai/codex #23496), so treat the spawn as required, not optional.
15
- - The independence of a fresh-context subagent is the point. If Codex genuinely cannot spawn subagents in the current surface, run the documented inline fallback and **label the result an inline fallback, not an independent review**: an inline pass shares the calling context and is weaker evidence.
16
- - Codex project hooks are installed in `.codex/hooks.json`. Review and trust them with `/hooks` before relying on hook enforcement.
14
+ - **Invocation and dispatch are different:** invoke means run a skill in this context; dispatch means start a fresh agent with `spawn_agent`, await it, and reconcile its result. Never describe inline skill work as a dispatch.
15
+ - For every DevRites specialist or writer dispatch, first call `spawn_agent` with the named `devrites-<role>` custom role. The matching project contract is `.codex/agents/devrites-<role>.toml`.
16
+ - If `spawn_agent` is callable but a named read-only role is unavailable, use generic `explorer` only when the host proves that run has a runtime-enforced read-only sandbox. Tell it to read `.codex/agents/devrites-<role>.toml`, follow its `developer_instructions`, and execute the unchanged packet. A missing read-only custom role is not evidence that spawning is unavailable.
17
+ - Never dispatch generic `worker` for `devrites-slice-wright` unless the host proves that worker run carries exact DevRites identity and the same `.wright-allowlist` enforcement as the named role. Codex reports a generic run as `agent_type=worker`, so the generated global hooks cannot prove that binding. Reject that unsafe rung and use the documented labelled inline wright path with `.reconcile-inline` plus the full reconcile gate.
18
+ - If the host cannot prove the generic explorer is runtime read-only, reject that rung too. Only when no spawn primitive exists or a higher-priority policy rejects a safe spawn may the root run the documented discipline inline. Label it `independence: fallback`, never call it independent, and apply every fallback risk gate. An unbound generic wright or unconfined generic explorer is such a safety rejection, not evidence that no agents exist.
19
+ - Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
20
+ - Codex project hooks are installed in `.codex/hooks.json`; declared-leaf hooks are scoped inside `.codex/agents/devrites-*.toml`. Review and trust them with `/hooks` before relying on hook enforcement.
17
21
  - When this skill asks a HITL question via `AskUserQuestion`: Codex's equivalent (`request_user_input`) exists only in Plan mode. Outside Plan mode, render the option set as a plain numbered list in chat and **end the turn** so the human answers: NEVER silently pick an option yourself; auto-picking is AFK's contract, gated by the `.devrites/AFK` sentinel.
18
22
 
19
23
 
20
24
  # $rite-prove: prove the completed feature
21
25
 
22
- Turn "I think it works" into recorded evidence for the **whole feature**. Read the active
23
- workspace first; if none, run `$rite-spec <feature>`.
26
+ Record evidence for the **whole feature**. Read the active workspace first; if none,
27
+ run `$rite-spec <feature>`.
24
28
 
25
- > **Differs from built-in `/verify` and `/run`:** those prove a single change /
26
- > launch the app. `$rite-prove` is feature-scoped. It walks `spec.md` acceptance
29
+ > **Scope:** built-in `/verify` proves one change and `/run` launches the app.
30
+ > `$rite-prove` covers a feature. It walks `spec.md` acceptance
27
31
  > criteria one-by-one, runs the full relevant test suite + build/typecheck/lint,
28
32
  > ascends the browser-proof ladder (step 4),
29
33
  > and writes `evidence.md` + `browser-evidence.md` keyed to the active
@@ -33,12 +37,13 @@ workspace first; if none, run `$rite-spec <feature>`.
33
37
  Read `tasks.md` + `state.md`. **If ANY slice is still pending/unbuilt, STOP** and tell the
34
38
  user to finish it with `$rite-build`: `$rite-prove` runs once, when the full task is
35
39
  complete, not after each slice. (Each slice already got its own targeted tests during
36
- `$rite-build`; this phase is the comprehensive proof of the assembled feature.)
40
+ `$rite-build`; this phase proves the assembled feature as a whole.)
37
41
 
38
- **Never report a pass you didn't observe.** If a command couldn't run, say so and give exact manual steps.
42
+ **Never report an unobserved pass.** If a command could not run, report that and give
43
+ exact manual steps.
39
44
 
40
- **Re-runnable, scoped.** `$rite-prove` runs once when the full feature is assembled, but
41
- it can be **re-run scoped** afterwards: when `$rite-polish` or `$rite-review` edit code,
45
+ **Scoped reruns are allowed.** `$rite-prove` runs once when the full feature is assembled.
46
+ After `$rite-polish` or `$rite-review` edits code,
42
47
  the existing `evidence.md` no longer post-dates the change, so re-run `$rite-prove` over
43
48
  the affected criteria/routes to refresh proof before `$rite-seal`.
44
49
 
@@ -54,7 +59,7 @@ Pull these via `Read` when relevant:
54
59
  user flow): telemetry must be present **and observed to emit**, not assumed.
55
60
  - `developer-experience.md`: when the change ships a developer-facing surface (API / CLI / SDK /
56
61
  webhook / config / error messages / getting-started): **measure** the DX scorecard (run the flow,
57
- time time-to-hello-world, capture the verbatim error text), don't assert it.
62
+ measure time-to-hello-world, and capture verbatim error text), rather than asserting it.
58
63
  - `definition-of-done.md`: standing Done bar: acceptance mapped, fresh proof, no open hard gates, scoped edits, rollback/docs where needed.
59
64
 
60
65
 
@@ -63,6 +68,10 @@ Pull these via `Read` when relevant:
63
68
  blocker; don't refactor unrelated code.
64
69
  - Spec Drift Guard applies: if tests/evidence reveal the spec is wrong, stop and handle
65
70
  drift (`rite-build/reference/spec-drift-guard.md`).
71
+ - **Runner observes; root records; wright fixes.** Use the file-backed fresh-context
72
+ contract in [`agents.md`](../devrites-lib/reference/standards/agents.md). The root owns
73
+ the evidence verdict and canonical writes. Every accepted source/test correction is one
74
+ bounded `devrites-slice-wright` packet, never an inline edit.
66
75
 
67
76
  ## Workflow
68
77
  0. Read `.agents/skills/devrites-lib/reference/standards/core.md` first (the always-on operating rules); pull the
@@ -75,23 +84,28 @@ Pull these via `Read` when relevant:
75
84
  [test-command-discovery](reference/test-command-discovery.md): README, package
76
85
  scripts, Makefile, CI configs, Gemfile/Rakefile, pyproject, go.mod, Cargo.toml.
77
86
  **Completion:** exact runnable test/build/typecheck/lint commands are recorded or explicitly unavailable.
78
- 3. **Run the full relevant test suite** for the feature (not a single slice), then the
79
- relevant **build / typecheck / lint**.
80
- 4. **UI feature?** Read `design-brief.md` + `references.md`, then run the browser proof ladder over the feature's routes:
87
+ 3. **Run proof in fresh context.** Freeze the candidate and dispatch
88
+ `devrites-proof-runner` with the exact commands, cwd, prerequisites, acceptance map,
89
+ and scratch boundary. Await and validate its observed full relevant test suite plus
90
+ **build / typecheck / lint** report. The runner writes no canonical evidence.
91
+ 4. **UI feature?** Include `design-brief.md`, `references.md`, routes, browser harness, and
92
+ allowed scratch path in the proof packet, then have the runner apply the browser proof ladder:
81
93
  [proof-ladder](reference/proof-ladder.md) + [browser-proof](reference/browser-proof.md)
82
94
  (`devrites-browser-proof`): routes, viewports, screenshots (opened + described),
83
95
  console, network, interaction paths, and the brief's proof targets. Compare screenshots
84
- with target references, record deltas, fix/re-render, and do not pass with an unresolved
85
- material mismatch.
96
+ with target references and record deltas. An unresolved material mismatch is a failed
97
+ result; the root handles any accepted correction at step 6 before re-rendering.
86
98
  5. **Map proof completely.** Follow
87
99
  [`reference/acceptance-proof.md`](reference/acceptance-proof.md) for acceptance/scenario
88
100
  coverage and the conditional critical-path, observability, developer-surface, and wiring
89
101
  branches. Completion: every criterion, planned interaction, and declared key link has a
90
102
  proof class plus passing evidence, or is recorded as a blocker.
91
103
  6. **On failure** → [failure-triage](reference/failure-triage.md) +
92
- `devrites-debug-recovery`. Reproduce isolate fix within scope → re-run; if a fix
93
- would exceed scope, record a blocker.
94
- 7. Update `evidence.md`, `browser-evidence.md` (if UI), `traceability.md`, and
104
+ `devrites-debug-recovery`. The root reconciles the reproduction. Send an accepted,
105
+ in-scope correction to the sole writer, `devrites-slice-wright`; then freeze the new
106
+ candidate and dispatch a fresh proof runner for affected checks. If a fix would exceed
107
+ scope, record a blocker.
108
+ 7. The root updates `evidence.md`, `browser-evidence.md` (if UI), `traceability.md`, and
95
109
  `state.md`. New proof goes to `evidence.md` (`proof.md` is a read-only alias:
96
110
  see `devrites-lib/reference/workspace-artifact-schema.md`).
97
111
 
@@ -11,9 +11,13 @@ This is the Codex mirror of a DevRites skill. In Codex:
11
11
 
12
12
  - Load DevRites engineering standards from `.agents/skills/devrites-lib/reference/standards/`. Read `.agents/skills/devrites-lib/reference/standards/core.md` before workflow work, then load the other `.agents/skills/devrites-lib/reference/standards/*.md` files exactly when this skill asks for them.
13
13
  - Use the installed `devrites-engine` binary as the canonical runtime helper surface for orientation, gates, and state mutation.
14
- - When this skill asks for a DevRites specialist or writer agent, **explicitly** spawn the matching Codex custom agent from `.codex/agents/devrites-*.toml` through Codex subagents (`spawn_agent`), then wait for its result and reconcile it as the skill instructs. Do not do the review inline just because the instruction to spawn is embedded here: Codex under-fires embedded spawn/skill instructions (openai/codex #23496), so treat the spawn as required, not optional.
15
- - The independence of a fresh-context subagent is the point. If Codex genuinely cannot spawn subagents in the current surface, run the documented inline fallback and **label the result an inline fallback, not an independent review**: an inline pass shares the calling context and is weaker evidence.
16
- - Codex project hooks are installed in `.codex/hooks.json`. Review and trust them with `/hooks` before relying on hook enforcement.
14
+ - **Invocation and dispatch are different:** invoke means run a skill in this context; dispatch means start a fresh agent with `spawn_agent`, await it, and reconcile its result. Never describe inline skill work as a dispatch.
15
+ - For every DevRites specialist or writer dispatch, first call `spawn_agent` with the named `devrites-<role>` custom role. The matching project contract is `.codex/agents/devrites-<role>.toml`.
16
+ - If `spawn_agent` is callable but a named read-only role is unavailable, use generic `explorer` only when the host proves that run has a runtime-enforced read-only sandbox. Tell it to read `.codex/agents/devrites-<role>.toml`, follow its `developer_instructions`, and execute the unchanged packet. A missing read-only custom role is not evidence that spawning is unavailable.
17
+ - Never dispatch generic `worker` for `devrites-slice-wright` unless the host proves that worker run carries exact DevRites identity and the same `.wright-allowlist` enforcement as the named role. Codex reports a generic run as `agent_type=worker`, so the generated global hooks cannot prove that binding. Reject that unsafe rung and use the documented labelled inline wright path with `.reconcile-inline` plus the full reconcile gate.
18
+ - If the host cannot prove the generic explorer is runtime read-only, reject that rung too. Only when no spawn primitive exists or a higher-priority policy rejects a safe spawn may the root run the documented discipline inline. Label it `independence: fallback`, never call it independent, and apply every fallback risk gate. An unbound generic wright or unconfined generic explorer is such a safety rejection, not evidence that no agents exist.
19
+ - Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
20
+ - Codex project hooks are installed in `.codex/hooks.json`; declared-leaf hooks are scoped inside `.codex/agents/devrites-*.toml`. Review and trust them with `/hooks` before relying on hook enforcement.
17
21
  - When this skill asks a HITL question via `AskUserQuestion`: Codex's equivalent (`request_user_input`) exists only in Plan mode. Outside Plan mode, render the option set as a plain numbered list in chat and **end the turn** so the human answers: NEVER silently pick an option yourself; auto-picking is AFK's contract, gated by the `.devrites/AFK` sentinel.
18
22
 
19
23
 
@@ -12,24 +12,28 @@ This is the Codex mirror of a DevRites skill. In Codex:
12
12
 
13
13
  - Load DevRites engineering standards from `.agents/skills/devrites-lib/reference/standards/`. Read `.agents/skills/devrites-lib/reference/standards/core.md` before workflow work, then load the other `.agents/skills/devrites-lib/reference/standards/*.md` files exactly when this skill asks for them.
14
14
  - Use the installed `devrites-engine` binary as the canonical runtime helper surface for orientation, gates, and state mutation.
15
- - When this skill asks for a DevRites specialist or writer agent, **explicitly** spawn the matching Codex custom agent from `.codex/agents/devrites-*.toml` through Codex subagents (`spawn_agent`), then wait for its result and reconcile it as the skill instructs. Do not do the review inline just because the instruction to spawn is embedded here: Codex under-fires embedded spawn/skill instructions (openai/codex #23496), so treat the spawn as required, not optional.
16
- - The independence of a fresh-context subagent is the point. If Codex genuinely cannot spawn subagents in the current surface, run the documented inline fallback and **label the result an inline fallback, not an independent review**: an inline pass shares the calling context and is weaker evidence.
17
- - Codex project hooks are installed in `.codex/hooks.json`. Review and trust them with `/hooks` before relying on hook enforcement.
15
+ - **Invocation and dispatch are different:** invoke means run a skill in this context; dispatch means start a fresh agent with `spawn_agent`, await it, and reconcile its result. Never describe inline skill work as a dispatch.
16
+ - For every DevRites specialist or writer dispatch, first call `spawn_agent` with the named `devrites-<role>` custom role. The matching project contract is `.codex/agents/devrites-<role>.toml`.
17
+ - If `spawn_agent` is callable but a named read-only role is unavailable, use generic `explorer` only when the host proves that run has a runtime-enforced read-only sandbox. Tell it to read `.codex/agents/devrites-<role>.toml`, follow its `developer_instructions`, and execute the unchanged packet. A missing read-only custom role is not evidence that spawning is unavailable.
18
+ - Never dispatch generic `worker` for `devrites-slice-wright` unless the host proves that worker run carries exact DevRites identity and the same `.wright-allowlist` enforcement as the named role. Codex reports a generic run as `agent_type=worker`, so the generated global hooks cannot prove that binding. Reject that unsafe rung and use the documented labelled inline wright path with `.reconcile-inline` plus the full reconcile gate.
19
+ - If the host cannot prove the generic explorer is runtime read-only, reject that rung too. Only when no spawn primitive exists or a higher-priority policy rejects a safe spawn may the root run the documented discipline inline. Label it `independence: fallback`, never call it independent, and apply every fallback risk gate. An unbound generic wright or unconfined generic explorer is such a safety rejection, not evidence that no agents exist.
20
+ - Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
21
+ - Codex project hooks are installed in `.codex/hooks.json`; declared-leaf hooks are scoped inside `.codex/agents/devrites-*.toml`. Review and trust them with `/hooks` before relying on hook enforcement.
18
22
  - When this skill asks a HITL question via `AskUserQuestion`: Codex's equivalent (`request_user_input`) exists only in Plan mode. Outside Plan mode, render the option set as a plain numbered list in chat and **end the turn** so the human answers: NEVER silently pick an option yourself; auto-picking is AFK's contract, gated by the `.devrites/AFK` sentinel.
19
23
 
20
24
 
21
25
  # $rite-resolve: answer the human gate
22
26
 
23
- `$rite-resolve` is the canonical resume verb for **async** human gates: a checkpoint that
24
- already paused and **stopped the session** (an AFK blocking/escalating/irreversible queue, or a
25
- HITL pause the human walked away from), plus `--batch`. When `$rite-build` asks a gap **inline**
27
+ `$rite-resolve` resumes an **async** human gate: a checkpoint that already paused and
28
+ **stopped the session** (an AFK blocking/escalating/irreversible queue, or a HITL pause
29
+ left unanswered), plus `--batch`. When `$rite-build` asks a question **inline**
26
30
  via `AskUserQuestion` and the human is present, that pick resolves the gate **in place** through
27
31
  the same `devrites-engine resolve` writer. You don't type `$rite-resolve` for it. For the async case this
28
32
  skill takes the human's answer (or `--drop` / `--batch`), writes it to `questions.md`, updates
29
33
  `state.md` (clears `Awaiting human`, sets `Status: running`), and recommends the next command.
30
34
 
31
- It is **deliberately small**: one verb, one source of truth (`questions.md`), one cursor
32
- (`state.md`). The full AFK / HITL contract lives in
35
+ It has one verb, one source of truth (`questions.md`), and one cursor (`state.md`). The
36
+ full AFK / HITL contract lives in
33
37
  [`afk-hitl.md`](../devrites-lib/reference/standards/afk-hitl.md).
34
38
 
35
39
  ## Rules consulted (read on demand from `.agents/skills/devrites-lib/reference/standards/`)
@@ -57,9 +61,9 @@ Pull these via `Read` when shaping the resolve:
57
61
  unblocked slice's `Slice mode` (step 4, the named exception); everything else goes through
58
62
  the script, never by hand.
59
63
  - **Human gates are for human-only decisions, not the agent's work.** A `questions.md` entry the
60
- human must answer is a genuine *decision* (a scope / design / risk call only the human can make).
61
- Not a task the agent can do itself. If a question is really agent-doable ("should I write the
62
- test?", "go implement X"), don't record a human answer that punts the agent's own job back to it:
64
+ human must answer is a genuine decision (a scope / design / risk call only the human can make),
65
+ not a task the agent can do. If a question is really agent-doable ("should I write the
66
+ test?", "go implement X"), do not record a human answer that returns the agent's work to it:
63
67
  flag the mis-tag and route it to the right skill (`$rite-build`, `$rite-plan unblock`,
64
68
  `devrites-debug-recovery`). The human resolves decisions; the agent does the work.
65
69
 
@@ -79,9 +83,10 @@ Pull these via `Read` when shaping the resolve:
79
83
  `tasks.md`. Confirm the qid is `status: open`. If `state.md` `Status` is not
80
84
  `awaiting_human` and the question's `gate` is `blocking`, surface the inconsistency
81
85
  before proceeding (don't auto-repair: flag it).
82
- 3. **Render preview.** Echo the qid, the question, the proposed answer (if any), the
83
- user's answer, and which slice unblocks. Stop here and ask `confirm? (y/N)` **unless**
84
- the answer was provided non-interactively via `--batch`.
86
+ 3. **Apply explicit consent.** Supplying `<qid> "<answer>"`, `--drop`, or `--batch` is the
87
+ user's explicit consent for this local workspace mutation. Echo the qid, answer/drop,
88
+ and slice being unblocked, then continue immediately; do not ask the user to confirm the
89
+ command they just typed.
85
90
  4. **Mutate.** Run `devrites-engine resolve` with the same
86
91
  arguments. The script:
87
92
  - flips the qid's `status` to `answered` / `dropped` and stamps `answered_at` + `answer`;
@@ -6,6 +6,9 @@ shapes, the batch file format, and the rules the underlying `devrites-engine res
6
6
 
7
7
  ## Three input shapes
8
8
 
9
+ Each form is an explicit local mutation command. Supplying it is the confirmation; the
10
+ skill applies it once after validation and reports the result instead of asking for `y` again.
11
+
9
12
  ### 1. Single answer
10
13
 
11
14
  ```
@@ -11,21 +11,25 @@ This is the Codex mirror of a DevRites skill. In Codex:
11
11
 
12
12
  - Load DevRites engineering standards from `.agents/skills/devrites-lib/reference/standards/`. Read `.agents/skills/devrites-lib/reference/standards/core.md` before workflow work, then load the other `.agents/skills/devrites-lib/reference/standards/*.md` files exactly when this skill asks for them.
13
13
  - Use the installed `devrites-engine` binary as the canonical runtime helper surface for orientation, gates, and state mutation.
14
- - When this skill asks for a DevRites specialist or writer agent, **explicitly** spawn the matching Codex custom agent from `.codex/agents/devrites-*.toml` through Codex subagents (`spawn_agent`), then wait for its result and reconcile it as the skill instructs. Do not do the review inline just because the instruction to spawn is embedded here: Codex under-fires embedded spawn/skill instructions (openai/codex #23496), so treat the spawn as required, not optional.
15
- - The independence of a fresh-context subagent is the point. If Codex genuinely cannot spawn subagents in the current surface, run the documented inline fallback and **label the result an inline fallback, not an independent review**: an inline pass shares the calling context and is weaker evidence.
16
- - Codex project hooks are installed in `.codex/hooks.json`. Review and trust them with `/hooks` before relying on hook enforcement.
14
+ - **Invocation and dispatch are different:** invoke means run a skill in this context; dispatch means start a fresh agent with `spawn_agent`, await it, and reconcile its result. Never describe inline skill work as a dispatch.
15
+ - For every DevRites specialist or writer dispatch, first call `spawn_agent` with the named `devrites-<role>` custom role. The matching project contract is `.codex/agents/devrites-<role>.toml`.
16
+ - If `spawn_agent` is callable but a named read-only role is unavailable, use generic `explorer` only when the host proves that run has a runtime-enforced read-only sandbox. Tell it to read `.codex/agents/devrites-<role>.toml`, follow its `developer_instructions`, and execute the unchanged packet. A missing read-only custom role is not evidence that spawning is unavailable.
17
+ - Never dispatch generic `worker` for `devrites-slice-wright` unless the host proves that worker run carries exact DevRites identity and the same `.wright-allowlist` enforcement as the named role. Codex reports a generic run as `agent_type=worker`, so the generated global hooks cannot prove that binding. Reject that unsafe rung and use the documented labelled inline wright path with `.reconcile-inline` plus the full reconcile gate.
18
+ - If the host cannot prove the generic explorer is runtime read-only, reject that rung too. Only when no spawn primitive exists or a higher-priority policy rejects a safe spawn may the root run the documented discipline inline. Label it `independence: fallback`, never call it independent, and apply every fallback risk gate. An unbound generic wright or unconfined generic explorer is such a safety rejection, not evidence that no agents exist.
19
+ - Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
20
+ - Codex project hooks are installed in `.codex/hooks.json`; declared-leaf hooks are scoped inside `.codex/agents/devrites-*.toml`. Review and trust them with `/hooks` before relying on hook enforcement.
17
21
  - When this skill asks a HITL question via `AskUserQuestion`: Codex's equivalent (`request_user_input`) exists only in Plan mode. Outside Plan mode, render the option set as a plain numbered list in chat and **end the turn** so the human answers: NEVER silently pick an option yourself; auto-picking is AFK's contract, gated by the `.devrites/AFK` sentinel.
18
22
 
19
23
 
20
24
  # $rite-review: feature-scoped review
21
25
 
22
- Senior review of the **active feature scope only**. **Read the active workspace first**;
23
- if none, tell the user to run `$rite-spec <feature>`.
26
+ Review the **active feature scope only**. **Read the active workspace first**; if none,
27
+ tell the user to run `$rite-spec <feature>`.
24
28
 
25
- > **Differs from built-in `/code-review` in:** `/code-review` is a generic
26
- > diff review with no workspace context. `$rite-review` reads
29
+ > **Scope:** `/code-review` is a generic diff review with no workspace context.
30
+ > `$rite-review` reads
27
31
  > `.devrites/work/<slug>/spec.md` first, runs Spec ↔ Code-review axes as
28
- > parallel subagents (see [`parallel-dispatch.md`](../devrites-lib/reference/parallel-dispatch.md)), and gates feeding
32
+ > parallel fresh-context reviewers (see [`parallel-dispatch.md`](../devrites-lib/reference/parallel-dispatch.md)), and gates feeding
29
33
  > into `$rite-seal`. Use `/code-review` for a one-off diff; use
30
34
  > `$rite-review` for a DevRites feature where the spec is the contract.
31
35
 
@@ -34,7 +38,7 @@ Pull these via `Read` when the diff demands them:
34
38
  - `code-review.md`: small PRs, severity labels, tests-first review focus.
35
39
  - `review-checklist.md`: compact pass/fail sweep before reporting the verdict.
36
40
  - `principles.md`: declared project invariants (`.devrites/principles.md`); a diff that violates one with no recorded exception is a Critical, blocking finding.
37
- - `testing.md`: confirm the tests prove the spec, not just pass.
41
+ - `testing.md`: confirm that passing tests actually prove the spec.
38
42
  - `agents.md`: when to fan out to which review subagent.
39
43
  - `security.md`: when input / auth / data / integrations / secrets are in scope.
40
44
  - `security-checklist.md`: for the same security-sensitive scope, the compact trust-boundary sweep.
@@ -44,10 +48,14 @@ Pull these via `Read` when the diff demands them:
44
48
  - **Feature scope only.** Review touched files + the diff. **NO whole-project refactors,
45
49
  NO drive-by cleanup.** DO NOT delete suspected dead code outside this feature without
46
50
  asking. Spec Drift Guard applies.
47
- - **Reviews the finished product.** `$rite-polish` has already done **code simplification**
48
- + UI normalize/polish. Review judges; if it reveals a real complexity issue polish
49
- missed, flag it as a finding: don't re-run a simplification sweep here.
50
- - Findings are labeled (below). Re-prove after any change you make.
51
+ - **Review the finished product.** `$rite-polish` has already simplified code and
52
+ normalized or polished UI. If review finds a remaining complexity issue, record it as
53
+ a finding rather than rerunning a simplification pass.
54
+ - Findings are labeled (below). Re-prove after any accepted correction.
55
+ - **Reviewers judge; root reconciles; wright fixes.** Follow
56
+ [`agents.md`](../devrites-lib/reference/standards/agents.md). The root owns the verdict and
57
+ canonical writes; every accepted source/test correction routes to
58
+ `devrites-slice-wright`.
51
59
 
52
60
  ## Workflow
53
61
  0. Read `.agents/skills/devrites-lib/reference/standards/core.md` first (the always-on operating rules); pull the
@@ -64,13 +72,14 @@ Pull these via `Read` when the diff demands them:
64
72
  2. **Review tests first:** do they prove the acceptance criteria? Missing,
65
73
  weak, or wrong tests are the first findings.
66
74
  **Completion:** every acceptance criterion maps to a proven test or a labeled finding.
67
- 3. **Spec Code-review split (parallel sub-agents, fresh context).** A change can pass
75
+ 3. **Review spec and code separately in parallel.** A change can pass
68
76
  one axis and fail the other: code that follows every project standard but
69
77
  implements the wrong thing (Code-review pass, Spec fail), or code that does exactly
70
78
  what the spec asked but breaks project conventions (Spec pass, Code-review fail).
71
- Running them serially in one context lets one mask the other. So:
72
- - Dispatch **two** read-only reviewers in **parallel** via the `Task` tool, each
73
- with its own narrow brief and no cross-pollination:
79
+ Separate contexts prevent one axis from masking the other:
80
+ - Freeze the candidate and fresh-context dispatch **two** read-only reviewers in
81
+ parallel, each with its own `agent-packet/v1`, narrow brief, and no
82
+ cross-pollination:
74
83
  - **Spec axis** → `devrites-spec-reviewer`: "Apply your documented discipline on
75
84
  the active feature workspace + diff. Report (a) criteria the spec asked for that
76
85
  are missing or partial, (b) behaviour in the diff the spec did not ask for
@@ -113,15 +122,20 @@ Pull these via `Read` when the diff demands them:
113
122
  6. **Performance:** apply `devrites-audit perf`
114
123
  ([performance-review](reference/performance-review.md)) only when performance is
115
124
  relevant or a regression risk is visible (measure first).
116
- 7. Apply only in-scope fixes; **run verification after changes** (`$rite-prove` logic).
117
- 8. Update `review.md`, `evidence.md`, and `state.md`.
118
- 9. **Guard against the silent reviewer.** After `review.md` is written, run:
125
+ 7. Reconcile and accept only in-scope fixes. Consolidate them into one bounded wright
126
+ correction packet; never edit source in the reviewing context. Freeze the new candidate
127
+ and **run affected verification after changes** (`$rite-prove` logic), then perform at
128
+ most one narrow recheck of affected findings.
129
+ 8. The root updates `review.md`, `evidence.md`, and `state.md`.
130
+ **Completion:** the records name the reviewed candidate identity and every accepted
131
+ correction has affected proof plus its narrow recheck.
132
+ 9. **Require an account from every reviewer.** After `review.md` is written, run:
119
133
  ```bash
120
134
  devrites-engine review-integrity
121
135
  devrites-engine review-fingerprints --write
122
136
  ```
123
- Exit 1 means an adversarial axis reported nothing and justified nothing: a suspected
124
- rubber-stamp. Re-run that axis or add its `No-findings:` justification; do not carry a silent
137
+ Exit 1 means an adversarial axis reported neither findings nor a justification. Re-run
138
+ that axis or add its `No-findings:` justification; do not carry a silent
125
139
  axis into `$rite-seal` (where it surfaces as an Important).
126
140
 
127
141
  ## Finding labels
@@ -131,13 +145,13 @@ Pull these via `Read` when the diff demands them:
131
145
  - **Nit:** trivial/style.
132
146
  - **FYI:** context, no action implied.
133
147
 
134
- **Action decoration (orthogonal to severity).** Also tag each finding with how to act on it:
148
+ **Action tag (separate from severity).** Tag each finding with how to act on it:
135
149
  `blocking` (fix before seal), `non-blocking` (fix when convenient), or `if-minor` (fix only if the
136
150
  change is already small: a pure noise-economics lever). Only a **`blocking` Critical** gates the
137
151
  seal; a `non-blocking` / `if-minor` finding is recorded, not a stop.
138
152
 
139
- ## Confidence + signal-to-noise
140
- Borrow `$rite-vet`'s discipline so review stays **trusted, not noisy**: a reviewer that posts
153
+ ## Confidence and signal-to-noise
154
+ Apply `$rite-vet`'s confidence rules. A reviewer that posts
141
155
  18 comments per PR teaches the team to ignore every one (below ~10% false-positive rate devs
142
156
  investigate each finding; past ~30% they label the tool noisy and skip it):
143
157
  - **Confidence-band each finding** (1-10) and state the band. A low-confidence finding (≤4)
@@ -145,21 +159,20 @@ investigate each finding; past ~30% they label the tool noisy and skip it):
145
159
  (low-confidence): n` line, never raised as Critical/Important.
146
160
  - **Verify before you escalate.** Every Critical/Important quotes the spec line or cites the
147
161
  `file:line` that proves it: no unverified blockers.
148
- - **Budget the noise.** Roll up trivia ("N style nits") into a single line; tooling already
162
+ - **Limit low-value comments.** Roll up trivia ("N style nits") into a single line; tooling already
149
163
  catches style. Review's job is correctness + spec fidelity, not a lint dump.
150
164
  - **A silent axis is suspicious, not clean.** An adversarial axis that raises nothing must earn
151
165
  it: end its `## Spec` / `## Code review` section with a **`No-findings:`** line naming the
152
166
  passes it ran (missing/partial/incorrect for spec; edge cases, error paths, the riskiest
153
167
  decision, a changed behavior whose test may not cover it for code) and why each came back
154
- empty. This is the mirror of confidence-banding: banding kills the false positive, this catches
155
- the false negative ([`code-review.md` § Zero findings is suspicious](../devrites-lib/reference/standards/code-review.md)).
168
+ empty. Confidence bands suppress false positives; this requirement catches silent false
169
+ negatives ([`code-review.md` § Zero findings is suspicious](../devrites-lib/reference/standards/code-review.md)).
156
170
 
157
171
  ## Severity orientation (labels, not score)
158
172
 
159
173
  After labeling, summarize findings as `Critical / Important / Suggestion / Nit /
160
- FYI` counts. There is no composite number `$rite-seal` gates on
161
- `Critical == 0` and on acceptance + drift. Inventing a number invites gaming;
162
- the labels do the work.
174
+ FYI` counts. There is no composite number. `$rite-seal` gates on
175
+ `Critical == 0` and on acceptance plus drift. Do not invent a composite score.
163
176
 
164
177
  > **Mid-flight discipline.** When tempted to demote a Critical, hide a finding, fix without re-verification, or wander out of scope: see [`anti-patterns`](reference/anti-patterns.md). Load it the moment you reach for the excuse.
165
178
 
@@ -11,9 +11,13 @@ This is the Codex mirror of a DevRites skill. In Codex:
11
11
 
12
12
  - Load DevRites engineering standards from `.agents/skills/devrites-lib/reference/standards/`. Read `.agents/skills/devrites-lib/reference/standards/core.md` before workflow work, then load the other `.agents/skills/devrites-lib/reference/standards/*.md` files exactly when this skill asks for them.
13
13
  - Use the installed `devrites-engine` binary as the canonical runtime helper surface for orientation, gates, and state mutation.
14
- - When this skill asks for a DevRites specialist or writer agent, **explicitly** spawn the matching Codex custom agent from `.codex/agents/devrites-*.toml` through Codex subagents (`spawn_agent`), then wait for its result and reconcile it as the skill instructs. Do not do the review inline just because the instruction to spawn is embedded here: Codex under-fires embedded spawn/skill instructions (openai/codex #23496), so treat the spawn as required, not optional.
15
- - The independence of a fresh-context subagent is the point. If Codex genuinely cannot spawn subagents in the current surface, run the documented inline fallback and **label the result an inline fallback, not an independent review**: an inline pass shares the calling context and is weaker evidence.
16
- - Codex project hooks are installed in `.codex/hooks.json`. Review and trust them with `/hooks` before relying on hook enforcement.
14
+ - **Invocation and dispatch are different:** invoke means run a skill in this context; dispatch means start a fresh agent with `spawn_agent`, await it, and reconcile its result. Never describe inline skill work as a dispatch.
15
+ - For every DevRites specialist or writer dispatch, first call `spawn_agent` with the named `devrites-<role>` custom role. The matching project contract is `.codex/agents/devrites-<role>.toml`.
16
+ - If `spawn_agent` is callable but a named read-only role is unavailable, use generic `explorer` only when the host proves that run has a runtime-enforced read-only sandbox. Tell it to read `.codex/agents/devrites-<role>.toml`, follow its `developer_instructions`, and execute the unchanged packet. A missing read-only custom role is not evidence that spawning is unavailable.
17
+ - Never dispatch generic `worker` for `devrites-slice-wright` unless the host proves that worker run carries exact DevRites identity and the same `.wright-allowlist` enforcement as the named role. Codex reports a generic run as `agent_type=worker`, so the generated global hooks cannot prove that binding. Reject that unsafe rung and use the documented labelled inline wright path with `.reconcile-inline` plus the full reconcile gate.
18
+ - If the host cannot prove the generic explorer is runtime read-only, reject that rung too. Only when no spawn primitive exists or a higher-priority policy rejects a safe spawn may the root run the documented discipline inline. Label it `independence: fallback`, never call it independent, and apply every fallback risk gate. An unbound generic wright or unconfined generic explorer is such a safety rejection, not evidence that no agents exist.
19
+ - Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
20
+ - Codex project hooks are installed in `.codex/hooks.json`; declared-leaf hooks are scoped inside `.codex/agents/devrites-*.toml`. Review and trust them with `/hooks` before relying on hook enforcement.
17
21
  - When this skill asks a HITL question via `AskUserQuestion`: Codex's equivalent (`request_user_input`) exists only in Plan mode. Outside Plan mode, render the option set as a plain numbered list in chat and **end the turn** so the human answers: NEVER silently pick an option yourself; auto-picking is AFK's contract, gated by the `.devrites/AFK` sentinel.
18
22
 
19
23
 
@@ -1,36 +1,5 @@
1
1
  # rite-seal phase contract
2
2
 
3
- ## Execution spine
4
-
5
- Run the engine gates at these moments:
6
-
7
- ```bash
8
- devrites-engine preamble
9
-
10
- devrites-engine spec-validate .devrites/work/<slug>; echo "spec-validate rc=$?"
11
- devrites-engine check-acceptance .devrites/work/<slug>; echo "check-acceptance rc=$?"
12
- devrites-engine evidence-fresh <slug>; echo "evidence-fresh rc=$?"
13
- devrites-engine doubt-coverage <slug>; echo "doubt-coverage rc=$?"
14
-
15
- devrites-engine footprint log <slug> reviewer devrites-<x>-reviewer
16
- devrites-engine footprint log <slug> skip devrites-<x>-reviewer
17
- devrites-engine footprint roster <slug>; echo "roster rc=$?"
18
- devrites-engine review-integrity <slug>; echo "review-integrity rc=$?"
19
- devrites-engine review-fingerprints --write <slug>
20
-
21
- devrites-engine footprint render <slug>
22
- devrites-engine learnings add "<slug>" "<dismissed-as-intentional class or dead-end>" dismiss
23
- devrites-engine health record <0..10> "<GO|NO-GO evidence summary>" --note "<top blocker or green proof>"
24
- devrites-engine timeline log completed --skill rite-seal --slug <slug> --outcome "<go|no-go>" --decision "<verdict>"
25
-
26
- devrites-engine progress
27
- ```
28
-
29
- Conditional calls still obey the detailed rules below: reviewer and skip
30
- footprints must account for the whole roster; learnings run only on GO; progress
31
- is rendered before the final response from [`output.md`](output.md). Seal decides
32
- only; `$rite-ship` owns irreversible git/publish/deploy actions.
33
-
34
3
  1. **Run the shared orientation preamble:** it prints `state.md`, the artifacts present,
35
4
  the run mode (HITL/AFK), and the open-question tally by gate, so you orient deterministically
36
5
  instead of re-deriving state from raw Markdown:
@@ -80,50 +49,20 @@ only; `$rite-ship` owns irreversible git/publish/deploy actions.
80
49
  verdicts by hand).
81
50
  Either way, walk the `## Decisions stood` ledger yourself: severity rides the unverified
82
51
  **decision**, never the exit code alone.
83
- 5. Check **security, data, migration, rollback** risk:
84
- [risk-and-rollback](risk-and-rollback.md). If `strategy.md` exists (from
85
- `$rite-temper`), confirm its **top pre-mortem risks are mitigated** in the diff/evidence and
86
- that no **Non-goal / deferred item crept into the diff** (scope creep): either is a finding
87
- (an unmitigated top risk or smuggled-in out-of-scope work).
88
- - **Principles** (`principles.md`): score the final diff against each declared invariant in
89
- `.devrites/principles.md`. A violation with no matching, human-approved exception in the
90
- register is a **Critical** finding and a NO-GO; an exception that is stale (past its review
91
- trigger) or wider than its stated scope is itself a finding. No file / no principles → skip.
92
- - **Observability** (`observability.md`): if the diff added a runtime surface (endpoint,
93
- job, integration, user flow, error path), a feature shipping with no way to debug it in
94
- prod is an **Important** finding, not a pass: `evidence.md` should show telemetry observed
95
- to emit (`$rite-prove` step 5b).
96
- - **Developer experience** (`developer-experience.md`): if the diff ships a developer-facing
97
- surface, reconcile `devex.md` (the `$rite-vet` predicted scorecard vs the `$rite-prove`
98
- measured one: the boomerang). A broken public dev contract (a documented command that errors,
99
- a getting-started flow that can't complete) or an unexplained measured DX regression is
100
- **Important**. **Critical** on a frozen public surface (`principles.md`). No surface → skip.
101
- - **Removal / migration** (`deprecation.md`): if the diff deletes or migrates code, an API,
102
- or data, confirm it followed expand→contract, proved the old path unused before removing it,
103
- and carries a rollback for every destructive step. A surprise deletion or a one-shot
104
- breaking migration is a finding (and trips the irreversible-risk gate, `afk-hitl.md`).
52
+ 5. Check **security, data, migration, rollback**, strategy scope, principles,
53
+ observability, developer experience, and removal using
54
+ [risk-and-rollback](risk-and-rollback.md) and the named standards. Unmitigated top risks,
55
+ scope creep, missing runtime diagnostics, broken developer contracts, or unsafe removals
56
+ are findings. An unexcepted declared-principle violation is Critical and NO-GO.
105
57
  6. Check **frontend polish** if UI is involved (states, a11y, responsive, design-system,
106
58
  browser evidence).
107
- 7. **Independent review:** seal is the final gate, not a re-run of `$rite-review`.
108
- It **always re-spawns** the axes `$rite-review` did not cover: `devrites-test-analyst`,
109
- `devrites-security-auditor`, `devrites-performance-reviewer`, and
110
- `devrites-frontend-reviewer` (UI). It **only re-runs the Spec and Code-review axes**
111
- (`devrites-spec-reviewer`, `devrites-code-reviewer`) when the diff changed since
112
- `$rite-review` ran (compare against `review.md`); if the diff is unchanged, carry
113
- review's verdicts on those axes forward rather than re-litigating them.
114
- If subagents are available, fan out **in parallel** (one `Task` block, multiple tool
115
- calls) to the **roster**: the seven reviewers and their checkable triggers are the single
116
- source in [`parallel-dispatch.md`](../../devrites-lib/reference/parallel-dispatch.md) (dispatch
117
- shape + reconciliation there too; `.agents/skills/devrites-lib/reference/standards/agents.md`. "Run independent reviewers in
118
- parallel"). Dispatch every always-on reviewer and every conditional whose trigger the diff
119
- meets; `devrites-devex-reviewer` runs in **measure mode**: grade the measured DX scorecard
120
- and reconcile the boomerang against the `$rite-vet` prediction. Give each the workspace path +
121
- diff *without the author's reasoning*. If subagents are unavailable, run the equivalent
122
- reviews sequentially yourself and flag each as a fallback.
123
- The reviewer **AGENTS** here (fresh context, no author reasoning) are the seal
124
- GATE; `devrites-audit` is the inline single-axis pass run during build/polish.
125
- The two paths are intentional, not divergent: the inline audit catches issues
126
- early; the fresh-context agents are the independent gate before ship.
59
+ 7. **Independent review:** apply the complete roster, triggers, dispatch shape, and
60
+ reconciliation from
61
+ [`parallel-dispatch.md`](../../devrites-lib/reference/parallel-dispatch.md). Await
62
+ fresh-context batches of at most three and give reviewers only the workspace path plus
63
+ immutable diff, without author reasoning. Use named role → safely enforced generic fresh
64
+ agent labelled inline; inline output is never independent. Carry Spec/Code verdicts only
65
+ for an unchanged post-review diff; rerun the other applicable axes.
127
66
  **Footprint: account for the whole roster.** For each reviewer you dispatch, append
128
67
  `devrites-engine footprint log <slug> reviewer devrites-<x>-reviewer` (the reviewer's **exact agent name**:
129
68
  the roster gate matches on it, so a freehand label like `spec` will read as unaccounted); for
@@ -131,13 +70,12 @@ only; `$rite-ship` owns irreversible git/publish/deploy actions.
131
70
  `devrites-engine footprint log <slug> skip devrites-<x>-reviewer` and note the one-line reason in `seal.md`.
132
71
  A conditional reviewer that does not apply is a *recorded skip*, never a silent omission: step 7b
133
72
  proves the roster complete before the verdict.
134
- 7a. **Reconcile findings: confidence over volume.** Band each reviewer finding by confidence
73
+ 7a. **Reconcile findings by confidence.** Band each reviewer finding by confidence
135
74
  (1-10); a low-confidence (≤4) finding that can't be verified against the diff is **suppressed**
136
75
  to a `Suppressed (low-confidence): n` line, not a blocker. Every Critical/Important must cite
137
76
  the `file:line` (or spec line) that proves it. Surface genuine cross-reviewer disagreement
138
77
  **explicitly** rather than averaging it away, and don't let a pile of low-confidence nits
139
- inflate the verdict: the gate is `Critical == 0` + acceptance + drift, not "few findings".
140
- (A seal that fires noise teaches the next one to be ignored.)
78
+ inflate the verdict. The gate is `Critical == 0` + acceptance + drift, not "few findings".
141
79
  7b. **Account for the roster: no reviewer silently skipped.** Before the verdict, prove every
142
80
  roster reviewer carries a decision (dispatched or skip-recorded in step 7's footprint):
143
81
  ```bash
@@ -158,7 +96,7 @@ only; `$rite-ship` owns irreversible git/publish/deploy actions.
158
96
  ```
159
97
  - **rc=1:** an axis in `review.md` is silent (no finding, no justification): **Important** on the
160
98
  review's completeness. Re-run that axis or record its `No-findings:` account, then re-seal.
161
- - **rc=0:** every axis has findings or a justified clean bill; proceed. (No `review.md`, or a
99
+ - **rc=0:** every axis has findings or a justified no-findings result; proceed. (No `review.md`, or a
162
100
  freeform one, is a clean pass: the gate keys on per-axis sections.)
163
101
  Then write stable finding IDs for learning and recurring-dismissal correlation:
164
102
  ```bash
@@ -178,20 +116,10 @@ only; `$rite-ship` owns irreversible git/publish/deploy actions.
178
116
  "acceptance": "<proven>/<total>", "test_integrity": "ok | weakened", "mutation": "<score | n/a>",
179
117
  "blockers": ["<one line each, empty on GO>"] }
180
118
  ```
181
- 9. **On GO only: record proven conventions** to the local ledger
182
- (`.devrites/conventions.md`) so later slices stop re-deriving this project's idioms:
183
- the durable, *evidence-proven* commands / idioms / placement / gotchas this feature
184
- established. Evidence-gated like the seal itself; the band is earned, not guessed; the
185
- step degrades gracefully when unavailable. Full contract + command:
186
- [conventions-ledger](conventions-ledger.md). (Skip entirely on NO-GO.)
187
- 9a. **On GO only: auto-capture learnings** (`.devrites/learnings.md`). Learning is automatic, not a
188
- command anyone must remember: append this feature's durable signal so the **next** feature's
189
- review starts warmer: (a) any reviewer finding the gate **dismissed as intentional here** (a
190
- "don't re-flag X in this project" class, tag `dismiss`); (b) a recurring correction or dead-end
191
- worth not repeating (tag `note`). The review skills load this ledger **before** they fan out, so a
192
- dismissed-finding class stops recurring. It is an untrusted prior: live code always overrides
193
- (`.agents/skills/devrites-lib/reference/standards/security.md`). Promotion of a recurring lesson to a *project rule* stays the
194
- human's call (`$rite-learn`: propose, don't impose). Skip on NO-GO.
119
+ 9. **On GO only:** record evidence-proven conventions through
120
+ [conventions-ledger](conventions-ledger.md).
121
+ 9a. **On GO only:** append durable dismissed-finding or dead-end learnings as untrusted
122
+ priors. Promotion to a project rule remains human-owned.
195
123
  ```bash
196
124
  devrites-engine learnings add "<slug>" "<dismissed-as-intentional class or dead-end>" dismiss
197
125
  ```
@@ -200,7 +128,14 @@ only; `$rite-ship` owns irreversible git/publish/deploy actions.
200
128
  lower for NO-GO or unresolved blockers.
201
129
  ```bash
202
130
  devrites-engine health record <0..10> "<GO|NO-GO evidence summary>" --note "<top blocker or green proof>"
203
- devrites-engine timeline log completed --skill rite-seal --slug <slug> --outcome "<go|no-go>" --decision "<verdict>"
131
+ devrites-engine timeline log run-finished \
132
+ --slug <slug> \
133
+ --outcome "<passed|blocked>" \
134
+ --execution-mode named \
135
+ --guard-strength n/a \
136
+ --reason-id "<DRV-GATE-SEAL-PASSED on GO; otherwise the blocking DRV-* reason>" \
137
+ --host "<claude|codex>" \
138
+ --evidence .devrites/work/<slug>/seal.md
204
139
  ```
205
140
 
206
141
  ## `seal.md` template
@@ -25,6 +25,19 @@ For each risky step, state how to back it out:
25
25
  - A new external dependency with no failure handling is at least **Important**.
26
26
  - Record the chosen rollback path in `seal.md` → "Rollback / Recovery".
27
27
 
28
+ ## Fresh-context fallback weighting
29
+
30
+ An inline final-rung review is useful signal but **not independent evidence**:
31
+
32
+ - Record `independence: fallback` and a roster skip reason; never log it as a dispatched
33
+ reviewer or a clean fresh-context pass.
34
+ - Preserve its findings at their normal severity. A clean inline result still leaves an
35
+ **Important assurance gap** and cannot silently satisfy a required axis.
36
+ - Seal remains NO-GO until that axis runs through a fresh-context spawn, or the human
37
+ explicitly accepts the reduced assurance in `seal.md`. AFK never auto-accepts it.
38
+ - Security or irreversible-risk scope has no reduced-assurance override: unavailable
39
+ independent review remains NO-GO.
40
+
28
41
  ## Destructive operations
29
42
  Confirm any destructive step with the user before shipping. Verify backups exist where
30
43
  relevant. Never treat an irreversible action as routine.