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,180 +1,210 @@
1
- # Forge: competing candidate builds for one slice
2
-
3
- How `$rite-build` builds a slice that `$rite-vet` flagged `Forge: yes`: instead of one wright,
4
- **K = 2-3 candidate wrights** each build the slice a genuinely different way in **isolation**, a
5
- read-only judge scores them, and exactly **one** winner's diff lands in the working tree. Loaded
6
- on demand by `$rite-build` step 3; the sibling of single-path
7
- [`wright-dispatch.md`](wright-dispatch.md).
8
-
9
- Forge is the **rare** path. Most slices are single-path (cheaper, and the default). A slice
10
- forges only when the work is a genuine architecture fork: two or three approaches that differ, no clear winner on paper, at high enough stakes that building the wrong one costs more
11
- than building all of them. That judgment is made at `$rite-vet` and recorded as the slice's
12
- `Forge:` field; build acts on the flag, it does not invent it.
13
-
14
- ## Why this doesn't break the single-writer invariant
15
-
16
- DevRites forbids a parallel fan-out of writers **sharing one tree**: concurrent writers on one
17
- working tree make conflicting implicit decisions and produce incoherent code
18
- ([`wright-dispatch.md`](wright-dispatch.md)). Forge keeps that invariant intact by **isolation**:
19
- every candidate writes in its own worktree (or its own throwaway branch), never touching another
20
- candidate's tree, and the orchestrator lands exactly one. No tree ever has two authors; exactly
21
- one author's work ships. "N isolated complete attempts, winner-takes-all" is not "N writers on
22
- one slice."
23
-
24
- ## Trust the flag, but clear a stale one
25
-
26
- Before competing anything, confirm the flag still earns its cost: `$rite-vet` set it, but the
27
- plan may have moved:
28
-
29
- - **No objective scorecard:** the slice has no acceptance criteria and no `test-plan.md`
30
- coverage the judge can score against clear `Forge` to `no`, build single-path. A competition
31
- with no rubric is a coin toss with the cost.
32
- - **Can't name two genuinely different strategies:** if the candidates would be variations of
33
- one approach, there is nothing to compete → single-path.
34
- - **Slice shrank below the bar** (now Complexity ≤3, or a dependency landed that picks the
35
- approach) → single-path.
36
-
37
- A cleared flag is recorded in `decisions.md` (one line: why forge was dropped). Never forge a
38
- slice you can't score, and never forge to avoid making a decision the plan already made.
39
-
40
- ## Mechanics
41
-
42
- The orchestrator runs F1-F7. Steps 4-7 of the [one-slice-cycle](one-slice-cycle.md) (doubt,
43
- fail-on-red, reconcile, record, stop) then run **unchanged** on the winner.
44
-
45
- ### F1: Confirm the K strategies
46
- Take the 2-3 candidate strategies `$rite-vet` named (in the slice brief). Each must be a
47
- **distinct, complete approach** to the same slice contract (a different seam, data shape,
48
- reuse-vs-build call, or algorithm) not a tweak of one. Name them `A`, `B`, (`C`) with a
49
- one-line description each. K is capped at 3: a fourth candidate rarely changes the winner and
50
- multiplies cost.
51
-
52
- ### F2: Snapshot, then isolate each candidate
53
- Snapshot the working tree first (the winner's landing is reconciled against it later), then give
54
- each candidate its own isolated tree. **Prefer parallel isolated worktrees** when the harness can
55
- dispatch a sub-agent with worktree isolation; the **always-available** path is one throwaway git
56
- branch per candidate, built sequentially (slower, universally works: the
57
- [`tooling.md`](../../devrites-lib/reference/standards/tooling.md) "fallback is first-class" discipline):
1
+ # Forge: isolated candidate builds
2
+
3
+ Forge is the rare `$rite-build` branch for a vetted architecture fork. Two or
4
+ three wrights implement the same slice in separate, manifest-owned worktrees; a
5
+ read-only judge selects one; only that candidate lands.
6
+
7
+ The engine manifest (`devrites-forge/v1`) is the sole authority for run,
8
+ candidate, branch, worktree, worker, merge, verification, and cleanup identity.
9
+ `forge-report.md`, names, paths, and prompts are records or inputs, never
10
+ ownership.
11
+
12
+ ## Entry contract
13
+
14
+ `$rite-vet` may set `Forge: yes` only when the slice has all three:
15
+
16
+ ```markdown
17
+ Forge: yes <why building the wrong architecture costs more than 2–3 attempts>
18
+ Forge strategies: A=<complete approach> | B=<complete approach> [| C=<complete approach>]
19
+ Forge scorecard: acceptance=<AC-### list>; test-plan=<exact test-plan.md rows/commands>
20
+ ```
21
+
22
+ Strategies are distinct seams, data shapes, reuse choices, or algorithms, not
23
+ wording variants. The scorecard covers every slice AC and every required test.
24
+ Otherwise set `Forge: no`, both Forge detail fields to `none`, and dispatch one
25
+ wright.
26
+
27
+ Before `forge plan`, also require a Git checkout and a real host adapter that can
28
+ declare `manifest-env-v1` and:
29
+
30
+ - start each candidate in its exact worktree;
31
+ - expose its stable worker ID, live PID, and matching process-start token before
32
+ its first tool call;
33
+ - set all five Forge binding variables; and
34
+ - end that process before extraction.
35
+
36
+ Never claim that binding on the adapter's behalf. Without it, an unbound
37
+ `forge plan` returns typed `degraded` / `serial` JSON and creates nothing; accept
38
+ that result and use the normal serial wright.
39
+
40
+ ## Lifecycle
41
+
42
+ ### 1. Plan, then snapshot
43
+
44
+ Write the normal root-owned `.wright-allowlist`. Hash the complete scorecard
45
+ owners, not excerpts:
46
+
47
+ ```bash
48
+ SLUG="$(cat .devrites/ACTIVE)"
49
+ WORK=".devrites/work/$SLUG"
50
+ hash_file() {
51
+ if command -v shasum >/dev/null 2>&1; then
52
+ shasum -a 256 "$1" | awk '{print $1}'
53
+ elif command -v sha256sum >/dev/null 2>&1; then
54
+ sha256sum "$1" | awk '{print $1}'
55
+ else
56
+ return 127
57
+ fi
58
+ }
59
+ ACCEPTANCE_HASH="$(hash_file "$WORK/spec.md")"
60
+ TEST_PLAN_HASH="$(hash_file "$WORK/test-plan.md")"
61
+
62
+ devrites-engine forge plan "<SLICE-###>" "$SLUG" \
63
+ --strategy "A=<strategy A>" \
64
+ --strategy "B=<strategy B>" \
65
+ --acceptance-hash "$ACCEPTANCE_HASH" \
66
+ --test-plan-hash "$TEST_PLAN_HASH" \
67
+ --worker-binding=manifest-env-v1
68
+ ```
69
+
70
+ Add `--strategy "C=<strategy C>"` only for a third vetted strategy. Both hashes
71
+ must be the complete 64-hex SHA-256 values of the current files. The command
72
+ shown is only for an adapter that really provides the binding. Otherwise omit
73
+ `--worker-binding`; the engine returns the side-effect-free serial result.
74
+
75
+ Read the JSON result:
76
+
77
+ - `status: planned`: take the run ID and every candidate path from its
78
+ manifest; then run `devrites-engine reconcile snapshot`.
79
+ - `status: degraded, mode: serial`: record the reason and use one normal
80
+ wright. The engine created no Forge state.
81
+ - non-zero exit: classify it as a technical defect. Preserve any manifest
82
+ state and recover it; never infer paths or silently start a serial writer.
83
+
84
+ `forge plan` must precede `reconcile snapshot`: validated operational manifests
85
+ are reconciliation-private, while `forge-report.md` and every other `.forge`
86
+ path remain visible.
87
+
88
+ ### 2. Bind and dispatch every candidate
89
+
90
+ For each candidate, the host starts a fresh worker at the manifest's exact
91
+ `worktree`, pauses it before its first tool call, and obtains the engine token
92
+ for its live PID:
58
93
 
59
94
  ```bash
60
- SLUG="$(cat .devrites/ACTIVE 2>/dev/null)"
61
- git rev-parse --is-inside-work-tree >/dev/null 2>&1 || echo "(not a git repo — forge needs git for isolation; degrade to single-path)"
62
- BASE="$(git rev-parse --abbrev-ref HEAD)"
63
- # one isolated worktree per candidate (parallel-capable); falls back to branches if worktrees are unavailable
64
- for C in A B; do
65
- git worktree add ".devrites/work/$SLUG/forge/cand-$C" -b "forge/$SLUG/cand-$C" 2>/dev/null \
66
- || git branch "forge/$SLUG/cand-$C" "$BASE"
67
- done
95
+ devrites-engine forge process-token "$WORKER_PID"
68
96
  ```
69
97
 
70
- ### F3: Dispatch K candidate wrights
71
- Send **each** candidate the identical single-path slice contract from
72
- [`wright-dispatch.md`](wright-dispatch.md), with **one** line added naming its assigned strategy
73
- and its isolated tree:
98
+ Read `process_start` from the JSON; never reproduce the token algorithm in
99
+ shell. Record that exact identity, then release the worker:
74
100
 
101
+ ```bash
102
+ devrites-engine forge record "$RUN_ID" "$CANDIDATE" started \
103
+ --worker-id "$WORKER_ID" \
104
+ --pid "$WORKER_PID" \
105
+ --process-start "$PROCESS_START"
75
106
  ```
76
- Forge candidate <A|B|C> of <K>. Build this slice using ONLY this approach:
77
- Strategy: <the distinct approach, one or two sentences — the seam / data shape / reuse call>
78
- Work in your isolated tree: <worktree path | branch name>. Do not consult or merge another
79
- candidate's work. Same discipline as always — orient → RED → implement smallest complete →
80
- verify → return your structured artifact. Code + tests only.
107
+
108
+ The candidate process receives this all-or-none environment:
109
+
110
+ ```text
111
+ DEVRITES_FORGE_RUN_ID=<manifest run_id>
112
+ DEVRITES_FORGE_CANDIDATE=<A|B|C>
113
+ DEVRITES_FORGE_WORKER_ID=<recorded worker id>
114
+ DEVRITES_FORGE_WORKER_PID=<recorded live pid>
115
+ DEVRITES_FORGE_PROCESS_START=<recorded start token>
81
116
  ```
82
117
 
83
- Each is still **one wright, one tree**: the invariant holds per candidate. Parallel where the
84
- harness isolates them; otherwise build candidate A to green, capture its diff, reset to `BASE`,
85
- then candidate B. A candidate that hits an irreversible-risk item escalates exactly as a
86
- single-path wright does: **forge never bypasses a gate** (see AFK below).
87
-
88
- ### F4: Judge (read-only, fresh context)
89
- Dispatch [`devrites-forge-judge`](.codex/agents/devrites-forge-judge.toml) with the K finished
90
- candidate diffs and the scorecard inputs (slice acceptance, `test-plan.md`, `.devrites/principles.md`,
91
- the anti-slop charter). It scores each candidate, ranks them, names the **winner** and the
92
- specific runner-up ideas worth grafting, and returns the structured verdict. The judge **never
93
- writes code**. It reads the diffs and returns findings, like every reviewer agent. If sub-agent
94
- dispatch is unavailable, do the judge's rubric pass yourself in a fresh read, discarding your
95
- authoring reasoning (a flagged fallback, not an independent judgment).
96
-
97
- ### F5: Land the winner, graft sparingly
98
- Apply **only** the winner's diff to the working tree (merge its worktree / cherry-pick its
99
- branch). If the judge named a cheap, specific improvement in a runner-up, graft it by
100
- **continuing the winning wright once** with that instruction: never hand-merge two candidates'
101
- code (that re-creates the incoherent-tree failure the invariant exists to prevent). The landed
102
- tree has exactly one author: the winner (plus its own grafted follow-up).
103
-
104
- ### F6: Write `forge-report.md`
105
- The durable record of the competition (template below). One per forged slice; archived with the
106
- feature.
107
-
108
- ### F7: Clean up, then return to the cycle
109
- Remove only clean losing worktrees / delete their candidate branches. If a losing worktree is dirty,
110
- preserve it and record the path in `forge-report.md`; never `--force` away unlanded work.
118
+ Its cwd is the exact manifest worktree. Give it the normal
119
+ [`wright-dispatch.md`](wright-dispatch.md) packet plus its one recorded
120
+ strategy. The same project-relative allowlist applies inside that candidate
121
+ tree. Any missing, partial, stale, wrong-tree, wrong-branch, or wrong-worker
122
+ binding is a denial, not a reason to widen scope.
123
+
124
+ After the worker returns and its process exits:
111
125
 
112
126
  ```bash
113
- SLUG="$(cat .devrites/ACTIVE 2>/dev/null)"
114
- for C in A B; do
115
- WT=".devrites/work/$SLUG/forge/cand-$C"
116
- if [ -d "$WT/.git" ] || git -C "$WT" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
117
- if git -C "$WT" diff --quiet && git -C "$WT" diff --cached --quiet; then
118
- git worktree remove "$WT" 2>/dev/null || true
119
- git branch -D "forge/$SLUG/cand-$C" 2>/dev/null || true
120
- else
121
- echo "preserved dirty forge worktree: $WT"
122
- fi
123
- else
124
- git branch -D "forge/$SLUG/cand-$C" 2>/dev/null || true
125
- fi
126
- done
127
+ devrites-engine forge record "$RUN_ID" "$CANDIDATE" finished \
128
+ --worker-id "$WORKER_ID"
129
+ devrites-engine forge extract "$RUN_ID" "$CANDIDATE"
127
130
  ```
128
131
 
129
- Then hand the **winner's** structured artifact to [one-slice-cycle](one-slice-cycle.md) step 4 as
130
- if a single wright produced it. Doubt, fail-on-red, reconcile (against the F2 snapshot, claimed =
131
- the winner's files), record, and stop all run unchanged.
132
+ Extraction makes the complete tracked, staged, unstaged, untracked, deletion,
133
+ mode, and symlink delta reachable by the recorded candidate commit and binds
134
+ its SHA-256. Ignored, dirty, mismatched, live, or ambiguous content is
135
+ preserved. A crashed worker is recorded `failed`; the run stays preserved for
136
+ technical recovery and does not degrade in place.
132
137
 
133
- ## `forge-report.md` template
138
+ ### 3. Judge, record, and merge
134
139
 
135
- ```markdown
136
- # Forge report: <slice id — name>
137
- Forged on <iso>. Reason: <the architecture fork $rite-vet flagged>.
140
+ After **every** candidate is extracted, dispatch
141
+ [`devrites-forge-judge`](.codex/agents/devrites-forge-judge.toml) in fresh,
142
+ read-only context. Give it the manifest, slice scorecard, base commit, and each
143
+ recorded candidate commit/tree/delta hash. It scores the immutable diffs against
144
+ the same acceptance, tests, principles, reuse, simplicity, and anti-slop bar.
138
145
 
139
- ## Candidates
140
- | # | Strategy | Gates | Score | Notes |
141
- |---|---|---|---|---|
142
- | A | <approach> | green/red | <judge score> | <one line> |
143
- | B | <approach> | green/red | <judge score> | <one line> |
146
+ For one qualifying winner:
144
147
 
145
- ## Verdict
146
- Winner: <A|B|C> — <why it won, in the judge's terms: acceptance coverage, simplicity, principle
147
- fit, anti-slop, reuse>.
148
- Grafted from runner-up: <specific idea + which candidate | none>.
149
- Discarded: <the losing approaches + the one-line reason each lost — load-bearing for a later
150
- slice that might be tempted to retry one>.
148
+ ```bash
149
+ devrites-engine forge record "$RUN_ID" winner "<A|B|C>" \
150
+ --worker-id "<judge result id>"
151
+ devrites-engine forge merge "$RUN_ID" "<A|B|C>"
151
152
  ```
152
153
 
153
- The **Discarded** section matters: it is a dead-end record at the slice level, the same role
154
- `decisions.md` "Dead ends" plays for the feature: a later slice shouldn't re-litigate an
155
- approach forge already rejected.
154
+ Merge revalidates every extract and the unchanged primary baseline, performs a
155
+ no-side-effect conflict preflight, then fast-forwards to exactly the recorded
156
+ winner. A mismatch or conflict leaves the primary tree unchanged. Runner-up
157
+ ideas remain report notes; never hand-merge candidates or mutate the landed
158
+ winner inside this run.
156
159
 
157
- ## AFK & budget
160
+ If no candidate qualifies, preserve the run and route the actual finding:
161
+ product/acceptance ambiguity returns to planning; implementation or proof
162
+ defects use bounded technical recovery. Retry authorization is not a human
163
+ decision.
158
164
 
159
- - **Cost.** Forge multiplies the build by K. Under `.devrites/AFK`, each candidate counts against
160
- the slice budget (`devrites-engine tick-afk` once per candidate dispatched), so a forge slice can exhaust the
161
- cap faster, that is intended back-pressure, not a bug.
162
- - **Gates are unchanged.** Forge changes *how many candidates build*, never *what pauses*. An
163
- irreversible-risk item, a blocking/escalating gate, or a red-on-completion in **any** candidate
164
- pauses per [`afk-hitl.md`](../../devrites-lib/reference/standards/afk-hitl.md) exactly as single-path. AFK widens what is
165
- automatic, never what is irreversible: forge included.
166
- - **Stuck loop still applies.** Re-dispatching the same candidate without progress trips
167
- `devrites-engine stuck` the same as a single wright.
165
+ ### 4. Verify, clean, then record
168
166
 
169
- ## When isolation is impossible
167
+ Hand the winner's structured artifact to the normal cycle. Run immediate
168
+ reconciliation, doubt every stood decision, and complete test-integrity,
169
+ package-existence, targeted, browser, and other slice proof. Only after every
170
+ required gate is green:
170
171
 
171
- No git, or neither worktrees nor throwaway branches are usable → **degrade to single-path** and
172
- say so. Forge is an accelerator for choosing between real alternatives; it is never a requirement
173
- for building the slice. A slice always has a single-path build available: the competition is the
174
- optional part.
172
+ ```bash
173
+ devrites-engine forge record "$RUN_ID" verification verified \
174
+ --worker-id "<verifier result id>"
175
+ devrites-engine forge cleanup "$RUN_ID"
176
+ devrites-engine reconcile close
177
+ ```
178
+
179
+ Cleanup reads only the manifest. It removes an exact terminal, dead, clean,
180
+ reachable worktree; preserves live, dirty, mismatched, unreachable, or
181
+ ambiguous state with a reason; and never deletes candidate branches.
182
+
183
+ Now write `.devrites/work/<slug>/forge-report.md` alongside the normal Build
184
+ records. The report is written after reconciliation and verification, includes
185
+ cleanup preservation results, and never authorizes merge, cleanup, or reap.
186
+
187
+ ```markdown
188
+ # Forge report: <SLICE-### — name>
189
+ Run: <run-id> · scorecard: <acceptance hash> / <test-plan hash>
190
+
191
+ ## Candidates
192
+ | # | Strategy | Gates | Delta SHA-256 | Judge result |
193
+ |---|---|---|---|---|
194
+ | A | <approach> | <green/red> | <hash> | <score + decisive evidence> |
195
+ | B | <approach> | <green/red> | <hash> | <score + decisive evidence> |
196
+
197
+ ## Verdict
198
+ Winner: <A|B|C> — <rubric-based reason>
199
+ Discarded: <one reason per loser>
200
+ Runner-up notes: <ideas for later | none>
201
+ Cleanup: <complete | preserved candidate + exact engine reason>
202
+ ```
175
203
 
176
- ## Anti-patterns
204
+ ## Interrupted runs
177
205
 
178
- See [`anti-patterns.md`](anti-patterns.md) § Forge: the short version: don't forge a decided or
179
- trivial slice, don't forge to dodge a decision, don't hand-merge candidates, don't exceed K=3,
180
- and don't let a forged slice skip the post-return doubt because "the judge already looked."
206
+ Use `devrites-engine forge reap [slug]` only for recovery. It enumerates
207
+ validated manifests rather than matching directories or branch names. It applies the
208
+ same exact identity, liveness, cleanliness, and reachability checks as cleanup.
209
+ Foreign, live, dirty, malformed, mismatched, or ambiguous state is reported and
210
+ preserved. Never infer a path, suppress a failure, or delete a branch.
@@ -9,8 +9,8 @@ The orchestrator (`$rite-build`) gates and records; the **wright** writes. See
9
9
  ```
10
10
  SELECT → orchestrator: restate slice goal + acceptance + scope boundary; HITL gate (pause pre-code)
11
11
  (SHAPE) → orchestrator: if UI and no design-brief.md, shape it (devrites-ux-shape) before dispatch
12
- (FORGE) → orchestrator: if slice is Forge: yes, compete K=2–3 isolated candidate wrights
13
- devrites-forge-judge → land one winner → forge-report.md, then continue at DOUBT (forge.md)
12
+ (FORGE) → orchestrator: if slice is Forge: yes, engine plan snapshot bound isolated
13
+ candidates → extract → judge → record + merge one winner, then continue at DOUBT (forge.md)
14
14
  DISPATCH → hand the slice contract to devrites-slice-wright (fresh context). Inside the wright:
15
15
  ORIENT → load only the files this slice touches; learn the project's idiom; reuse-first
16
16
  (RED) → if behavior change: write the failing test first
@@ -18,7 +18,8 @@ DISPATCH → hand the slice contract to devrites-slice-wright (fresh context).
18
18
  VERIFY → targeted tests (+ types/lint/build); fail-on-red; return artifact — code + tests only
19
19
  (DOUBT) → orchestrator, on return: devrites-doubt each non-trivial decision the wright stood up
20
20
  PROVE → orchestrator: fail-on-red check on the wright's gates; browser proof for UI
21
- RECORD → orchestrator: state.md, evidence.md, touched-files.md (the canonical writer)
21
+ RECORD → orchestrator: after green verification, Forge cleanup/report if used; then
22
+ state.md, evidence.md, touched-files.md (the canonical writer)
22
23
  (CHECKPOINT) → orchestrator: if .devrites/CHECKPOINT is set, commit the proven slice
23
24
  local-only as WIP(<slug>) with a [devrites-context] body → survives a crash (checkpoint.md)
24
25
  STOP → report + recommend next; do not start slice N+1