devrites 3.0.7 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +82 -50
  3. package/SECURITY.md +31 -29
  4. package/docs/adr/0001-go-engine-as-control-plane.md +1 -1
  5. package/docs/adr/0002-dual-host-harness.md +1 -1
  6. package/docs/adr/0004-state-schema-phases-sections.md +1 -2
  7. package/docs/adr/0006-clock-seam-and-engine-ci-gates.md +3 -4
  8. package/docs/adr/0009-prebuild-decision-coverage-and-readiness.md +67 -0
  9. package/docs/adr/0010-agent-first-fresh-context-orchestration.md +71 -0
  10. package/docs/adr/0011-define-plan-transition-rights.md +28 -0
  11. package/docs/adr/0012-semantic-workspace-upgrades.md +77 -0
  12. package/docs/adr/README.md +4 -0
  13. package/docs/agents/triage-labels.md +7 -7
  14. package/docs/architecture.md +179 -141
  15. package/docs/cli.md +47 -12
  16. package/docs/command-map.md +61 -38
  17. package/docs/engine/agent-contract.md +92 -15
  18. package/docs/engine/commands.md +248 -72
  19. package/docs/engine/state-schema.md +52 -23
  20. package/docs/engine/workspace-schema.md +103 -15
  21. package/docs/extensions.md +1 -1
  22. package/docs/flow.md +86 -51
  23. package/docs/harness-compliance.md +29 -5
  24. package/docs/orchestration.md +107 -79
  25. package/docs/quick-reference.md +11 -3
  26. package/docs/release.md +4 -3
  27. package/docs/skills.md +67 -38
  28. package/docs/usage.md +84 -39
  29. package/engine/cmd/releasepack/main.go +219 -0
  30. package/engine/cmd/releasepack/main_test.go +170 -0
  31. package/engine/commands.go +170 -23
  32. package/engine/git_guard.go +187 -0
  33. package/engine/git_guard_test.go +283 -0
  34. package/engine/hookpolicy.go +53 -55
  35. package/engine/hookpolicy_test.go +91 -1
  36. package/engine/hooks.go +296 -75
  37. package/engine/hooks_events_test.go +276 -6
  38. package/engine/hooks_workspace.go +640 -159
  39. package/engine/internal/devritespaths/paths.go +65 -10
  40. package/engine/internal/devritespaths/paths_test.go +110 -0
  41. package/engine/internal/doctor/doctor.go +153 -23
  42. package/engine/internal/doctor/doctor_test.go +74 -0
  43. package/engine/internal/forge/forge.go +940 -0
  44. package/engine/internal/forge/forge_test.go +576 -0
  45. package/engine/internal/forge/git.go +245 -0
  46. package/engine/internal/forge/liveness_unix.go +48 -0
  47. package/engine/internal/forge/liveness_windows.go +67 -0
  48. package/engine/internal/forge/manifest.go +402 -0
  49. package/engine/internal/gate/gate.go +90 -71
  50. package/engine/internal/gate/gate_test.go +71 -2
  51. package/engine/internal/harness/compliance.go +18 -24
  52. package/engine/internal/harness/harness.go +37 -44
  53. package/engine/internal/harness/harness_test.go +21 -5
  54. package/engine/internal/install/install.go +486 -38
  55. package/engine/internal/install/install_test.go +383 -10
  56. package/engine/internal/iohooks/iohooks.go +350 -59
  57. package/engine/internal/iohooks/iohooks_test.go +421 -1
  58. package/engine/internal/lib/buildreadiness.go +43 -18
  59. package/engine/internal/lib/clarifyreturn.go +91 -0
  60. package/engine/internal/lib/clarifyreturn_test.go +123 -0
  61. package/engine/internal/lib/context.go +54 -15
  62. package/engine/internal/lib/cursor_compat_test.go +8 -0
  63. package/engine/internal/lib/extensions.go +2 -3
  64. package/engine/internal/lib/gitauthority.go +601 -0
  65. package/engine/internal/lib/gitauthority_test.go +346 -0
  66. package/engine/internal/lib/jsonout.go +25 -11
  67. package/engine/internal/lib/jsonout_test.go +16 -0
  68. package/engine/internal/lib/lanes.go +14 -8
  69. package/engine/internal/lib/observability_test.go +358 -0
  70. package/engine/internal/lib/packageexistence.go +151 -35
  71. package/engine/internal/lib/packageexistence_test.go +163 -0
  72. package/engine/internal/lib/progress.go +11 -9
  73. package/engine/internal/lib/provenance.go +462 -0
  74. package/engine/internal/lib/provenance_test.go +154 -0
  75. package/engine/internal/lib/readiness_contract.json +118 -0
  76. package/engine/internal/lib/readinessartifact.go +533 -0
  77. package/engine/internal/lib/readinessartifact_test.go +422 -0
  78. package/engine/internal/lib/reconcile.go +712 -88
  79. package/engine/internal/lib/reconcile_test.go +335 -16
  80. package/engine/internal/lib/recoveryattempts.go +298 -0
  81. package/engine/internal/lib/recoveryattempts_test.go +215 -0
  82. package/engine/internal/lib/resolve.go +23 -19
  83. package/engine/internal/lib/runbook_context_test.go +20 -0
  84. package/engine/internal/lib/session.go +701 -9
  85. package/engine/internal/lib/session_test.go +80 -13
  86. package/engine/internal/lib/testintegrity.go +33 -37
  87. package/engine/internal/lib/testintegrity_test.go +63 -1
  88. package/engine/internal/migrate/migrate.go +81 -1
  89. package/engine/internal/migrate/migrate_test.go +22 -1
  90. package/engine/internal/reason/reason.go +180 -0
  91. package/engine/internal/reason/reason_test.go +35 -0
  92. package/engine/internal/rootfacts/facts.go +466 -0
  93. package/engine/internal/rootfacts/facts_test.go +306 -0
  94. package/engine/internal/safepath/safepath.go +55 -0
  95. package/engine/internal/safepath/safepath_test.go +69 -0
  96. package/engine/internal/safepath/safepath_windows_test.go +26 -0
  97. package/engine/internal/state/clarify_transition.go +165 -0
  98. package/engine/internal/state/clarify_transition_test.go +130 -0
  99. package/engine/internal/state/cmd/workflowmanifest/main.go +12 -8
  100. package/engine/internal/state/cursor.go +58 -0
  101. package/engine/internal/state/cursor_test.go +42 -1
  102. package/engine/internal/state/feature.go +35 -48
  103. package/engine/internal/state/schema.go +90 -37
  104. package/engine/internal/state/snapshot.go +18 -2
  105. package/engine/internal/state/state_test.go +187 -7
  106. package/engine/internal/state/status.go +48 -11
  107. package/engine/internal/state/workflow_manifest.json +231 -50
  108. package/engine/internal/toolpolicy/classifier.go +533 -0
  109. package/engine/internal/toolpolicy/classifier_test.go +424 -0
  110. package/engine/internal/toolpolicy/git.go +616 -0
  111. package/engine/internal/toolpolicy/scanner.go +382 -0
  112. package/engine/main.go +160 -77
  113. package/engine/observability_cli_test.go +52 -0
  114. package/engine/root_routing_test.go +277 -0
  115. package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
  116. package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
  117. package/engine/testdata/golden/TestParityBuildReadiness/arg=legacycontract.golden +1 -0
  118. package/engine/testdata/golden/TestParityBuildReadiness/arg=noclarify.golden +1 -0
  119. package/engine/testdata/golden/TestParityBuildReadiness/arg=novet.golden +1 -0
  120. package/engine/testdata/golden/TestParityBuildReadiness/arg=stalevet.golden +1 -0
  121. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
  122. package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
  123. package/engine/testdata/golden/TestParityBuildReadiness/arg=vetnotready.golden +1 -0
  124. package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +1 -1
  125. package/engine/testdata/golden/TestParityProgress/arg=done.golden +1 -1
  126. package/engine/testdata/golden/TestParityProgress/arg=mid.golden +1 -1
  127. package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +1 -1
  128. package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +1 -1
  129. package/engine/testdata/golden/TestParityProgress/arg=plan.golden +1 -1
  130. package/engine/testdata/golden/TestParityProgress/arg=seal.golden +1 -1
  131. package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
  132. package/engine/testdata/golden/TestParityReconcile/inline-fallback.golden +1 -0
  133. package/engine/testdata/golden/TestParityReconcile/snapshot-no-allowlist.golden +1 -0
  134. package/engine/testdata/golden/TestParityWrightScope/devrites-edit-denied.golden +2 -0
  135. package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
  136. package/engine/tests/adr_0011_define_plan_test.go +30 -0
  137. package/engine/tests/budget_test.go +19 -8
  138. package/engine/tests/concurrency_cli_test.go +7 -1
  139. package/engine/tests/doctor_cli_test.go +148 -2
  140. package/engine/tests/forge_cli_test.go +463 -0
  141. package/engine/tests/gate_test.go +63 -8
  142. package/engine/tests/hook_test.go +260 -8
  143. package/engine/tests/hooks_io_test.go +94 -3
  144. package/engine/tests/json_contract_test.go +127 -2
  145. package/engine/tests/migrate_cli_test.go +2 -2
  146. package/engine/tests/parity_buildreadiness_test.go +167 -10
  147. package/engine/tests/parity_learnings_test.go +16 -17
  148. package/engine/tests/parity_reconcile_test.go +20 -17
  149. package/engine/tests/parity_resolve_test.go +12 -11
  150. package/engine/tests/parity_test.go +21 -17
  151. package/pack/.claude/agents/devrites-code-reviewer.md +62 -48
  152. package/pack/.claude/agents/devrites-devex-reviewer.md +69 -53
  153. package/pack/.claude/agents/devrites-doubt-reviewer.md +29 -22
  154. package/pack/.claude/agents/devrites-evidence-scout.md +69 -0
  155. package/pack/.claude/agents/devrites-forge-judge.md +74 -61
  156. package/pack/.claude/agents/devrites-frontend-reviewer.md +48 -39
  157. package/pack/.claude/agents/devrites-performance-reviewer.md +49 -40
  158. package/pack/.claude/agents/devrites-plan-drafter.md +73 -0
  159. package/pack/.claude/agents/devrites-plan-reviewer.md +80 -47
  160. package/pack/.claude/agents/devrites-proof-runner.md +74 -0
  161. package/pack/.claude/agents/devrites-retrospector.md +48 -45
  162. package/pack/.claude/agents/devrites-security-auditor.md +46 -36
  163. package/pack/.claude/agents/devrites-simplifier-reviewer.md +50 -46
  164. package/pack/.claude/agents/devrites-slice-wright.md +153 -165
  165. package/pack/.claude/agents/devrites-spec-reviewer.md +34 -32
  166. package/pack/.claude/agents/devrites-strategy-reviewer.md +63 -34
  167. package/pack/.claude/agents/devrites-test-analyst.md +40 -30
  168. package/pack/.claude/agents/devrites-upgrade-planner.md +100 -0
  169. package/pack/.claude/settings.json +2 -1
  170. package/pack/.claude/skills/devrites-audit/SKILL.md +40 -61
  171. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +24 -13
  172. package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  173. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  174. package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  175. package/pack/.claude/skills/devrites-doubt/SKILL.md +25 -17
  176. package/pack/.claude/skills/devrites-interview/SKILL.md +53 -52
  177. package/pack/.claude/skills/devrites-lib/SKILL.md +12 -9
  178. package/pack/.claude/skills/devrites-lib/reference/intent-map.md +4 -2
  179. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  180. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +8 -1
  181. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +38 -55
  182. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  183. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +200 -190
  184. package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  185. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  186. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
  187. package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  188. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  189. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -18
  190. package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  191. package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  192. package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  193. package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
  194. package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
  195. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +0 -9
  196. package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +1 -3
  197. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +17 -7
  198. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +1 -27
  199. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
  200. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
  201. package/pack/.claude/skills/devrites-source-driven/SKILL.md +23 -22
  202. package/pack/.claude/skills/rite/SKILL.md +10 -6
  203. package/pack/.claude/skills/rite/reference/menu.md +13 -7
  204. package/pack/.claude/skills/rite-adopt/SKILL.md +33 -37
  205. package/pack/.claude/skills/rite-autocomplete/SKILL.md +33 -28
  206. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +21 -21
  207. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  208. package/pack/.claude/skills/rite-build/SKILL.md +35 -30
  209. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +41 -39
  210. package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -0
  211. package/pack/.claude/skills/rite-build/reference/forge.md +186 -156
  212. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
  213. package/pack/.claude/skills/rite-build/reference/phase-contract.md +96 -175
  214. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +10 -4
  215. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +129 -134
  216. package/pack/.claude/skills/rite-clarify/SKILL.md +90 -0
  217. package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +61 -0
  218. package/pack/.claude/skills/rite-converge/SKILL.md +35 -25
  219. package/pack/.claude/skills/rite-define/SKILL.md +58 -32
  220. package/pack/.claude/skills/rite-define/reference/gates.md +16 -15
  221. package/pack/.claude/skills/rite-define/reference/plan-template.md +18 -8
  222. package/pack/.claude/skills/rite-frame/reference/failure-modes.md +22 -24
  223. package/pack/.claude/skills/rite-plan/SKILL.md +47 -16
  224. package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +4 -0
  225. package/pack/.claude/skills/rite-polish/SKILL.md +27 -23
  226. package/pack/.claude/skills/rite-prototype/SKILL.md +25 -26
  227. package/pack/.claude/skills/rite-prove/SKILL.md +27 -17
  228. package/pack/.claude/skills/rite-resolve/SKILL.md +12 -11
  229. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
  230. package/pack/.claude/skills/rite-review/SKILL.md +37 -28
  231. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +27 -92
  232. package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  233. package/pack/.claude/skills/rite-ship/reference/design-memory.md +31 -36
  234. package/pack/.claude/skills/rite-spec/SKILL.md +84 -135
  235. package/pack/.claude/skills/rite-spec/reference/investigation.md +37 -33
  236. package/pack/.claude/skills/rite-spec/reference/question-protocol.md +6 -2
  237. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +25 -24
  238. package/pack/.claude/skills/rite-spec/reference/spec-template.md +9 -2
  239. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +13 -3
  240. package/pack/.claude/skills/rite-temper/SKILL.md +62 -47
  241. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +24 -22
  242. package/pack/.claude/skills/rite-upgrade/SKILL.md +125 -0
  243. package/pack/.claude/skills/rite-vet/SKILL.md +114 -113
  244. package/pack/.claude/skills/rite-vet/reference/artifacts.md +50 -9
  245. package/pack/.claude/skills/rite-vet/reference/review-axes.md +39 -37
  246. package/pack/generated/claude/agents/devrites-code-reviewer.md +62 -48
  247. package/pack/generated/claude/agents/devrites-devex-reviewer.md +69 -53
  248. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +29 -22
  249. package/pack/generated/claude/agents/devrites-evidence-scout.md +69 -0
  250. package/pack/generated/claude/agents/devrites-forge-judge.md +74 -61
  251. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +48 -39
  252. package/pack/generated/claude/agents/devrites-performance-reviewer.md +49 -40
  253. package/pack/generated/claude/agents/devrites-plan-drafter.md +73 -0
  254. package/pack/generated/claude/agents/devrites-plan-reviewer.md +80 -47
  255. package/pack/generated/claude/agents/devrites-proof-runner.md +74 -0
  256. package/pack/generated/claude/agents/devrites-retrospector.md +48 -45
  257. package/pack/generated/claude/agents/devrites-security-auditor.md +46 -36
  258. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +50 -46
  259. package/pack/generated/claude/agents/devrites-slice-wright.md +153 -165
  260. package/pack/generated/claude/agents/devrites-spec-reviewer.md +34 -32
  261. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +63 -34
  262. package/pack/generated/claude/agents/devrites-test-analyst.md +40 -30
  263. package/pack/generated/claude/agents/devrites-upgrade-planner.md +100 -0
  264. package/pack/generated/claude/settings.json +2 -1
  265. package/pack/generated/claude/skills/devrites-audit/SKILL.md +40 -61
  266. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +24 -13
  267. package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  268. package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  269. package/pack/generated/claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  270. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +25 -17
  271. package/pack/generated/claude/skills/devrites-interview/SKILL.md +53 -52
  272. package/pack/generated/claude/skills/devrites-lib/SKILL.md +12 -9
  273. package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +4 -2
  274. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  275. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +8 -1
  276. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +38 -55
  277. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  278. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +200 -190
  279. package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  280. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  281. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
  282. package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  283. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  284. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -18
  285. package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  286. package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  287. package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  288. package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
  289. package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
  290. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +0 -9
  291. package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +1 -3
  292. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +17 -7
  293. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +1 -27
  294. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
  295. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
  296. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +23 -22
  297. package/pack/generated/claude/skills/rite/SKILL.md +10 -6
  298. package/pack/generated/claude/skills/rite/reference/menu.md +13 -7
  299. package/pack/generated/claude/skills/rite-adopt/SKILL.md +33 -37
  300. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +33 -28
  301. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +21 -21
  302. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  303. package/pack/generated/claude/skills/rite-build/SKILL.md +35 -30
  304. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +41 -39
  305. package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +10 -0
  306. package/pack/generated/claude/skills/rite-build/reference/forge.md +186 -156
  307. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
  308. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +96 -175
  309. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +10 -4
  310. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +129 -134
  311. package/pack/generated/claude/skills/rite-clarify/SKILL.md +90 -0
  312. package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +61 -0
  313. package/pack/generated/claude/skills/rite-converge/SKILL.md +35 -25
  314. package/pack/generated/claude/skills/rite-define/SKILL.md +58 -32
  315. package/pack/generated/claude/skills/rite-define/reference/gates.md +16 -15
  316. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +18 -8
  317. package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +22 -24
  318. package/pack/generated/claude/skills/rite-plan/SKILL.md +47 -16
  319. package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +4 -0
  320. package/pack/generated/claude/skills/rite-polish/SKILL.md +27 -23
  321. package/pack/generated/claude/skills/rite-prototype/SKILL.md +25 -26
  322. package/pack/generated/claude/skills/rite-prove/SKILL.md +27 -17
  323. package/pack/generated/claude/skills/rite-resolve/SKILL.md +12 -11
  324. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
  325. package/pack/generated/claude/skills/rite-review/SKILL.md +37 -28
  326. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +27 -92
  327. package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  328. package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +31 -36
  329. package/pack/generated/claude/skills/rite-spec/SKILL.md +84 -135
  330. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +37 -33
  331. package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +6 -2
  332. package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +25 -24
  333. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +9 -2
  334. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +13 -3
  335. package/pack/generated/claude/skills/rite-temper/SKILL.md +62 -47
  336. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +24 -22
  337. package/pack/generated/claude/skills/rite-upgrade/SKILL.md +125 -0
  338. package/pack/generated/claude/skills/rite-vet/SKILL.md +114 -113
  339. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +50 -9
  340. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +39 -37
  341. package/pack/generated/codex/AGENTS.md +5 -2
  342. package/pack/generated/codex/agents/devrites-code-reviewer.toml +69 -47
  343. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +75 -51
  344. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +35 -20
  345. package/pack/generated/codex/agents/devrites-evidence-scout.toml +75 -0
  346. package/pack/generated/codex/agents/devrites-forge-judge.toml +80 -59
  347. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +54 -37
  348. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +55 -38
  349. package/pack/generated/codex/agents/devrites-plan-drafter.toml +79 -0
  350. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +82 -47
  351. package/pack/generated/codex/agents/devrites-proof-runner.toml +80 -0
  352. package/pack/generated/codex/agents/devrites-retrospector.toml +54 -43
  353. package/pack/generated/codex/agents/devrites-security-auditor.toml +53 -35
  354. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +56 -44
  355. package/pack/generated/codex/agents/devrites-slice-wright.toml +159 -163
  356. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +40 -30
  357. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +65 -34
  358. package/pack/generated/codex/agents/devrites-test-analyst.toml +46 -28
  359. package/pack/generated/codex/agents/devrites-upgrade-planner.toml +106 -0
  360. package/pack/generated/codex/hooks.json +4 -14
  361. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +7 -3
  362. package/pack/generated/codex/skills/devrites-audit/SKILL.md +47 -64
  363. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +7 -3
  364. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +31 -16
  365. package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
  366. package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
  367. package/pack/generated/codex/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
  368. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +32 -20
  369. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +7 -3
  370. package/pack/generated/codex/skills/devrites-interview/SKILL.md +60 -55
  371. package/pack/generated/codex/skills/devrites-lib/SKILL.md +19 -12
  372. package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +4 -2
  373. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
  374. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +8 -1
  375. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +38 -55
  376. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
  377. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +200 -190
  378. package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
  379. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
  380. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +16 -52
  381. package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +2 -10
  382. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
  383. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -18
  384. package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +17 -57
  385. package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
  386. package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
  387. package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -14
  388. package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +9 -25
  389. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +0 -9
  390. package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +1 -3
  391. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +17 -7
  392. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +1 -27
  393. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +46 -50
  394. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
  395. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +7 -3
  396. package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +7 -3
  397. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +29 -24
  398. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +7 -3
  399. package/pack/generated/codex/skills/rite/SKILL.md +21 -13
  400. package/pack/generated/codex/skills/rite/reference/menu.md +13 -7
  401. package/pack/generated/codex/skills/rite-adopt/SKILL.md +40 -40
  402. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +40 -31
  403. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +21 -21
  404. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
  405. package/pack/generated/codex/skills/rite-build/SKILL.md +42 -33
  406. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +41 -39
  407. package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +10 -0
  408. package/pack/generated/codex/skills/rite-build/reference/forge.md +186 -156
  409. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +4 -3
  410. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +96 -175
  411. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +10 -4
  412. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +129 -134
  413. package/pack/generated/codex/skills/rite-clarify/SKILL.md +106 -0
  414. package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +61 -0
  415. package/pack/generated/codex/skills/rite-converge/SKILL.md +42 -28
  416. package/pack/generated/codex/skills/rite-customize/SKILL.md +7 -3
  417. package/pack/generated/codex/skills/rite-define/SKILL.md +65 -35
  418. package/pack/generated/codex/skills/rite-define/reference/gates.md +16 -15
  419. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +18 -8
  420. package/pack/generated/codex/skills/rite-doctor/SKILL.md +7 -3
  421. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +7 -3
  422. package/pack/generated/codex/skills/rite-explain/SKILL.md +7 -3
  423. package/pack/generated/codex/skills/rite-frame/SKILL.md +7 -3
  424. package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +22 -24
  425. package/pack/generated/codex/skills/rite-handoff/SKILL.md +7 -3
  426. package/pack/generated/codex/skills/rite-learn/SKILL.md +7 -3
  427. package/pack/generated/codex/skills/rite-plan/SKILL.md +54 -19
  428. package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +5 -1
  429. package/pack/generated/codex/skills/rite-polish/SKILL.md +34 -26
  430. package/pack/generated/codex/skills/rite-pov/SKILL.md +7 -3
  431. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +7 -3
  432. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -3
  433. package/pack/generated/codex/skills/rite-prototype/SKILL.md +32 -29
  434. package/pack/generated/codex/skills/rite-prove/SKILL.md +34 -20
  435. package/pack/generated/codex/skills/rite-quick/SKILL.md +7 -3
  436. package/pack/generated/codex/skills/rite-resolve/SKILL.md +19 -14
  437. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +3 -0
  438. package/pack/generated/codex/skills/rite-review/SKILL.md +44 -31
  439. package/pack/generated/codex/skills/rite-seal/SKILL.md +7 -3
  440. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +27 -92
  441. package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +13 -0
  442. package/pack/generated/codex/skills/rite-ship/SKILL.md +7 -3
  443. package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +31 -36
  444. package/pack/generated/codex/skills/rite-spec/SKILL.md +91 -138
  445. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +37 -33
  446. package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +6 -2
  447. package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +25 -24
  448. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +9 -2
  449. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +13 -3
  450. package/pack/generated/codex/skills/rite-status/SKILL.md +7 -3
  451. package/pack/generated/codex/skills/rite-temper/SKILL.md +69 -50
  452. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +24 -22
  453. package/pack/generated/codex/skills/rite-upgrade/SKILL.md +141 -0
  454. package/pack/generated/codex/skills/rite-upgrade/agents/openai.yaml +2 -0
  455. package/pack/generated/codex/skills/rite-vet/SKILL.md +121 -116
  456. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +50 -9
  457. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +40 -38
  458. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +7 -3
  459. package/package.json +1 -1
  460. package/scripts/build-release-tarball.sh +32 -15
  461. package/scripts/check-authority-drift.py +125 -0
  462. package/scripts/check-instruction-size-baseline.mjs +19 -11
  463. package/scripts/check-invocation-integrity.py +2 -0
  464. package/scripts/codex-generate.sh +69 -33
  465. package/scripts/grade-feature.sh +121 -40
  466. package/scripts/live-hosts/agent-result.schema.json +230 -0
  467. package/scripts/live-hosts/claude.sh +87 -0
  468. package/scripts/live-hosts/codex.sh +81 -0
  469. package/scripts/live-hosts/common.sh +113 -0
  470. package/scripts/live-hosts/fake-host.py +264 -0
  471. package/scripts/live-hosts/host-transport.py +287 -0
  472. package/scripts/release-check.sh +5 -1
  473. package/scripts/run-agent-contract-evals.py +1380 -0
  474. package/scripts/run-behavioral-evals.sh +24 -30
  475. package/scripts/run-evals.sh +1 -5
  476. package/scripts/run-live-behavioral-evals.py +1274 -144
  477. package/scripts/run-outcome-evals.sh +445 -88
  478. package/scripts/run-tests.mjs +30 -2
  479. package/scripts/skills-inventory.mjs +1 -1
  480. package/scripts/validate-workflow-security.py +39 -20
  481. package/scripts/validate-workspace-schema.py +362 -10
  482. package/scripts/validate.sh +21 -15
  483. package/engine/testdata/golden/TestParityWrightScope/devrites-edit-allowed.golden +0 -1
  484. /package/engine/testdata/golden/{TestParityReconcile/check-no-claimed.golden → TestParityBuildReadiness/arg=clarifyopen.golden} +0 -0
@@ -1,57 +1,53 @@
1
- # The vet review: scope challenge, four axes, required outputs
1
+ # Vet review: scope, four axes, and outputs
2
2
 
3
- The body of `$rite-vet`. Run §0 first as a blocking gate, then the four axes one at a time,
4
- then the required outputs. Apply the senior-engineer lenses in [`eng-lenses.md`](eng-lenses.md)
5
- throughout. They're how you *see* the findings, not a separate checklist. Every finding is
6
- calibrated and gated (see "Confidence + verification gate" below) before it reaches the human.
3
+ Run §0 first as a blocking gate, then review the four axes in order and produce the
4
+ required outputs. Apply the engineering lenses in [`eng-lenses.md`](eng-lenses.md)
5
+ throughout rather than as a separate checklist. Calibrate every finding through the
6
+ confidence and verification gate before presenting it.
7
7
 
8
8
  ---
9
9
 
10
- ## §0. Scope Challenge (blocking gate: runs before any axis)
10
+ ## §0. Scope challenge (blocking gate)
11
11
 
12
- Before reviewing *how* the plan builds, challenge *whether it should build this much*. This is
13
- implementation-scope discipline (the spec's ambition is settled, that was `$rite-temper`).
12
+ Before reviewing implementation details, check whether the plan includes more work than
13
+ the settled spec requires.
14
14
 
15
15
  1. **What already exists?** For each sub-problem in the plan, find the existing code/flow that
16
16
  already solves it (use a code-intelligence index if available: see `../../devrites-lib/reference/standards/tooling.md`).
17
17
  Can the plan **capture outputs from an existing
18
18
  flow** instead of building a parallel one? Reuse → extend → build new, in that order
19
19
  (`coding-style.md`). List every reuse opportunity the plan misses.
20
- 2. **Minimum diff.** What's the smallest set of changes that meets the spec's *acceptance
21
- criteria*? Flag any planned work that can be deferred without blocking acceptance. Be ruthless
22
- about implementation scope creep, but never cut an acceptance criterion (that's a Drift Guard
23
- matter, not a trim).
20
+ 2. **Minimum diff.** Find the smallest set of changes that meets the spec's acceptance
21
+ criteria. Flag work that can be deferred without blocking acceptance. Do not cut an
22
+ acceptance criterion; that requires the Drift Guard.
24
23
  3. **Complexity smell.** If `plan.md` touches **>8 files** or adds **>2 new services / modules /
25
24
  classes**, treat it as a smell. Check the plan's complexity gate justifies it. If it doesn't
26
- **STOP**: name what's overbuilt, propose a smaller version that meets acceptance, and ask
27
- via `AskUserQuestion` whether to reduce or proceed. Do not start the axes until answered.
25
+ harden to the smallest acceptance-preserving plan. Ask only if reduction changes
26
+ acceptance or explicit architecture policy; never start the axes unresolved.
28
27
  4. **Built-in check.** For each new pattern / infra component / concurrency approach the plan
29
28
  introduces, verify a framework/runtime built-in doesn't already do it, and that the choice is
30
- current best practice with no known footgun: dispatch `devrites-source-driven` to confirm at
29
+ current best practice with no known footgun: invoke `devrites-source-driven` to confirm at
31
30
  the source and record the citation. A custom roll where a built-in exists is a scope-reduction
32
31
  finding.
33
- 5. **Completeness check.** Is the plan doing the complete version or a shortcut? With AI-assisted
34
- coding the cost of completeness (full edge-case handling, complete error paths, real test
35
- coverage) is a fraction of what it was: a shortcut that saves human-hours but only saves
36
- minutes here is a false economy. Prefer the complete option; flag shortcuts that exist only to
37
- save effort that AI has already made cheap.
32
+ 5. **Completeness check.** Identify shortcuts in edge-case handling, error paths, and
33
+ test coverage. Prefer the complete option when AI-assisted implementation makes the
34
+ additional work small. Flag shortcuts that save little time but leave known gaps.
38
35
  6. **Distribution check.** If the plan introduces a new artifact (CLI binary, package, container,
39
36
  deployable), does it include how it gets built / published / installed? If distribution is
40
37
  deferred, say so explicitly in "NOT in scope": don't let it silently drop.
41
38
 
42
- > **STOP discipline.** If the complexity smell trips, the `AskUserQuestion` is a tool call, not
43
- > prose. Naming the 80%-solution in chat and continuing is the failure this gate exists to prevent.
39
+ > **STOP discipline.** Fold technical reduction into the plan; ask and stop only for a
40
+ > human-owned choice.
44
41
 
45
42
  If the smell does not trip, present the §0 findings and proceed to Axis 1.
46
43
 
47
44
  ---
48
45
 
49
- ## The four axes (one at a time, 8 findings each)
46
+ ## Four axes (one at a time, at most 8 findings each)
50
47
 
51
- For each axis: evaluate, then **walk each finding WITH the human** via `AskUserQuestion` (one
52
- issue per call: see "How to ask" below). HITL pauses on each material finding; AFK auto-applies
53
- within the gate ceiling (`depth.md`). If an axis genuinely has no issue, say "No issues,
54
- moving on" and continue: don't manufacture findings.
48
+ For each axis, fold verified technical findings into the plan, then walk each human-owned
49
+ decision via one coherent `AskUserQuestion` packet. Supporting findings may combine only
50
+ with one owner/trade-off. HITL pauses there; AFK follows `depth.md`. Never invent findings.
55
51
 
56
52
  ### 1. Architecture
57
53
  - Component boundaries, coupling, data-flow patterns, single points of failure. Architecture records invariants, not scaffolding: each medium+ decision should state `Binds:` and `Prevents:` so the builder knows what divergence it prevents.
@@ -72,7 +68,7 @@ moving on" and continue: don't manufacture findings.
72
68
  change will make stale.
73
69
 
74
70
  ### 3. Test-coverage design
75
- The differentiator: design the tests *before* the code, so the build writes them alongside.
71
+ Design tests before code so the build writes them alongside the implementation.
76
72
  - **Framework detection:** find the project's existing test runner + conventions; match them
77
73
  (never introduce a new runner to prove one change: `testing.md`).
78
74
  - **Map acceptance → tests.** Every spec acceptance criterion must map to ≥1 planned, surface-anchored test (the API response/UI state/CLI output the criterion names, not an internal proxy).
@@ -117,22 +113,21 @@ acceptance criteria covered ✓" and continue.
117
113
 
118
114
  ---
119
115
 
120
- ## Confidence + verification gate (applies to every finding, all axes)
116
+ ## Confidence and verification gate
121
117
  Tag each finding `[severity] (confidence: N/10) <plan/task/spec ref> — finding`:
122
118
  - **9-10** verified against a quoted line · **7-8** strong pattern match → report normally.
123
119
  - **5-6** moderate → report with "verify this is real".
124
120
  - **≤4** speculative → **suppress from the walk-through**, appendix only.
125
121
 
126
- **The gate:** before raising a finding, quote the line(s) that motivate it. Can't quote it
127
- force confidence 4 and suppress. This kills the "the plan doesn't handle X" finding when the
128
- plan *does* and you skimmed. Don't fabricate 7+ to dodge it. (Same discipline the reviewer agent
129
- runs: `devrites-plan-reviewer`.)
122
+ Before raising a finding, quote the lines that support it. If no line supports it, set
123
+ confidence to 4 or lower and suppress it. Do not inflate confidence to avoid suppression.
124
+ `devrites-plan-reviewer` follows the same rule.
130
125
 
131
126
  ---
132
127
 
133
- ## How to ask (the interactive walk)
128
+ ## Present human-owned decisions
134
129
  Use `AskUserQuestion` per the pack's standard. Plan-review specifics:
135
- - **One finding = one call.** Never batch findings into one question.
130
+ - **One decision = one call.** Never ask about agent work or batch unrelated choices.
136
131
  - Concrete: name the plan/task section + the quoted line.
137
132
  - 2-3 options, including "do nothing / proceed as-is" where reasonable.
138
133
  - Per option, one line: **effort** (human ~X / with the build agent ~Y), **risk**, **maintenance**.
@@ -144,8 +139,10 @@ Use `AskUserQuestion` per the pack's standard. Plan-review specifics:
144
139
  happy-path), add `Completeness: N/10` per option. If they differ in *kind* (two different
145
140
  architectures), skip the score and note "options differ in kind, not coverage". Never fabricate
146
141
  a score on a kind question.
147
- - Every material finding ends as a **recorded decision**: a resolved `questions.md` qid for HITL
148
- or a `decisions.md` ADR for AFK. The walk must leave an auditable trail, not just chat.
142
+ - Every material call ends as a **recorded decision**: behavior-preserving technical hardening
143
+ goes to `decisions.md`; a human-owned HITL choice gets a resolved `questions.md` qid; AFK
144
+ records the allowed recommendation in `decisions.md`. The review must leave an auditable
145
+ trail without turning agent work into questions.
149
146
 
150
147
  ---
151
148
 
@@ -164,4 +161,9 @@ Use `AskUserQuestion` per the pack's standard. Plan-review specifics:
164
161
  parallel lanes (shared module → same lane/sequential; independent → separate lanes), execution
165
162
  order, and conflict flags where two lanes touch the same module dir. This feeds `$rite-build`'s
166
163
  isolation strategy and the autocomplete loop. (Shape in [`artifacts.md`](artifacts.md).)
167
- 5. **Completion summary:** the one-glance recap (shape in [`artifacts.md`](artifacts.md)).
164
+ 5. **Build-entry preflight:** commands/cwds, tools, package state, parser/browser smoke,
165
+ prerequisites, and provenance ([`artifacts.md`](artifacts.md)).
166
+ 6. **Implementation readiness:** goal-backward coverage, wiring, dependency simulation,
167
+ alignment, operations, and rollback verdict.
168
+ 7. **Completion summary:** the compact recap defined in
169
+ [`artifacts.md`](artifacts.md).
@@ -12,9 +12,13 @@ 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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devrites",
3
- "version": "3.0.7",
3
+ "version": "3.2.0",
4
4
  "description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code and Codex",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
- # Build the DevRites release tarball: the artifact attached to the GitHub Release
3
- # by semantic-release. Extracting yields a `devrites-v<version>/` directory with
4
- # everything an end-user needs (pack/, install.sh, uninstall.sh, scripts/, docs).
2
+ # Build the archive that semantic-release attaches to a GitHub Release.
3
+ # It extracts to `devrites-v<version>/` with the pack, engine, scripts,
4
+ # documentation, and install tools.
5
5
  #
6
6
  # Usage: build-release-tarball.sh <version>
7
7
  set -euo pipefail
@@ -11,20 +11,31 @@ if [[ -z "$VERSION" ]]; then
11
11
  echo "usage: build-release-tarball.sh <version>" >&2
12
12
  exit 1
13
13
  fi
14
+ if [[ ! "$VERSION" =~ ^[0-9A-Za-z][0-9A-Za-z._+-]*$ ]]; then
15
+ echo "error: version must be a portable release asset name" >&2
16
+ exit 1
17
+ fi
14
18
 
15
- ROOT="$(cd "$(dirname "$0")/.." && pwd)"
19
+ ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
16
20
  DIST="${DEVRITES_RELEASE_DIST_DIR:-$ROOT/dist}"
17
21
  NAME="devrites-v${VERSION}"
18
- STAGE="$DIST/$NAME"
19
22
 
20
23
  cd "$ROOT"
24
+ mkdir -p "$DIST"
25
+ DIST="$(cd "$DIST" && pwd -P)"
26
+ case "$DIST/" in
27
+ "$ROOT/pack/"* | "$ROOT/engine/"* | "$ROOT/scripts/"* | "$ROOT/mcp/"* | "$ROOT/docs/"*)
28
+ echo "error: release output directory overlaps the release payload" >&2
29
+ exit 1
30
+ ;;
31
+ esac
32
+ STAGE="$(mktemp -d "$DIST/.devrites-release-stage.XXXXXX")"
33
+ cleanup() { rm -rf "$STAGE"; }
34
+ trap cleanup EXIT
21
35
 
22
36
  echo "Building release tarball: ${NAME}.tar.gz"
23
37
 
24
- rm -rf "$STAGE"
25
- mkdir -p "$STAGE"
26
-
27
- # Files and directories shipped to end-users.
38
+ # Release contents.
28
39
  PAYLOAD=(
29
40
  pack
30
41
  engine
@@ -60,17 +71,23 @@ for item in "${PAYLOAD[@]}"; do
60
71
  fi
61
72
  done
62
73
 
63
- # Ship the same prebuilt host-native artifacts that npm pack includes.
74
+ # Include the same prebuilt host artifacts as the npm package.
64
75
  DEVRITES_HOST_ARTIFACT_DIR="$STAGE/pack/generated" bash "$ROOT/scripts/build-host-artifacts.sh" >/dev/null
65
76
 
66
- # Drop dev-only artifacts that may have been copied transitively.
77
+ # Remove development files copied with the payload.
67
78
  rm -rf "$STAGE/docs/internal" "$STAGE/scripts/.cache" 2>/dev/null || true
68
79
 
69
- tar -C "$DIST" -czf "$DIST/${NAME}.tar.gz" "$NAME"
70
- rm -rf "$STAGE"
80
+ (
81
+ cd "$ROOT/engine"
82
+ go run ./cmd/releasepack \
83
+ -root "$STAGE" \
84
+ -output "$DIST/${NAME}.tar.gz" \
85
+ -prefix "$NAME" \
86
+ -epoch "${SOURCE_DATE_EPOCH:-0}"
87
+ )
71
88
 
72
- # Emit a sibling checksum so install.sh can verify the artifact when present.
73
- # Write just "<sha256> <filename>" (no path) so it verifies from any cwd.
89
+ # Write a sibling checksum for install.sh to verify when available.
90
+ # Store only "<sha256> <filename>" so verification works from any directory.
74
91
  (
75
92
  cd "$DIST"
76
93
  if command -v shasum >/dev/null 2>&1; then
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env python3
2
+ """Compare generated JSON authorities with their short documentation blocks."""
3
+
4
+ import argparse
5
+ import json
6
+ import re
7
+ import sys
8
+ from pathlib import Path
9
+
10
+
11
+ def table(headers, rows):
12
+ return "\n".join(
13
+ [
14
+ "| " + " | ".join(headers) + " |",
15
+ "| " + " | ".join("---" for _ in headers) + " |",
16
+ *["| " + " | ".join(row) + " |" for row in rows],
17
+ ]
18
+ )
19
+
20
+
21
+ def replace_block(path, name, wanted, write):
22
+ text = path.read_text()
23
+ start = f"<!-- authority:{name}:start -->"
24
+ end = f"<!-- authority:{name}:end -->"
25
+ pattern = re.compile(re.escape(start) + r"\n.*?\n" + re.escape(end), re.DOTALL)
26
+ replacement = f"{start}\n{wanted}\n{end}"
27
+ if not pattern.search(text):
28
+ raise ValueError(f"{path}: missing {name} authority markers")
29
+ if pattern.search(text).group(0) == replacement:
30
+ return
31
+ if write:
32
+ path.write_text(pattern.sub(replacement, text, count=1))
33
+ return
34
+ raise ValueError(f"{path}: {name} authority block is stale")
35
+
36
+
37
+ def main():
38
+ parser = argparse.ArgumentParser()
39
+ parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[1])
40
+ parser.add_argument("--write", action="store_true")
41
+ args = parser.parse_args()
42
+ root = args.root.resolve()
43
+
44
+ manifest = json.loads((root / "engine/internal/state/workflow_manifest.json").read_text())
45
+ readiness = json.loads((root / "engine/internal/lib/readiness_contract.json").read_text())
46
+ phases = manifest["phases"]
47
+ reasons = readiness["reasons"]
48
+ policy = manifest["authorityPolicy"]
49
+
50
+ ids = [phase["id"] for phase in phases]
51
+ rights = [phase["transitionRight"] for phase in phases]
52
+ if len(ids) != len(set(ids)) or len(rights) != len(set(rights)):
53
+ raise ValueError("workflow manifest has duplicate phase IDs or transition rights")
54
+ resumes = {phase["id"]: phase.get("resumeVerb", "") for phase in phases}
55
+ if resumes.get("define") != "define" or resumes.get("plan") != "vet":
56
+ raise ValueError("workflow manifest violates ADR-0011 define/plan routing")
57
+ codes = [reason["code"] for reason in reasons]
58
+ if len(codes) != len(set(codes)):
59
+ raise ValueError("readiness contract has duplicate exit codes")
60
+
61
+ lifecycle = "`" + " → ".join(phase.upper() for phase in ids) + "`"
62
+ phase_rows = []
63
+ for phase in phases:
64
+ required = ", ".join(f"`{section}`" for section in phase.get("requiredSections", [])) or "*(none)*"
65
+ resume = f"`/rite-{phase['resumeVerb']}`" if phase.get("resumeVerb") else "*(terminal)*"
66
+ phase_rows.append([f"`{phase['id']}`", resume, required, phase["transitionRight"]])
67
+ reason_rows = [
68
+ [
69
+ f"`{reason['code']}`",
70
+ f"`{reason['id']}`",
71
+ reason["condition"],
72
+ f"`/rite-{reason['remediationVerb']}`" if reason["remediationVerb"] else "*(none)*",
73
+ ]
74
+ for reason in reasons
75
+ ]
76
+ tracking = (
77
+ "Git-tracked shared state: "
78
+ + ", ".join(f"`{path}`" for path in policy["trackedState"])
79
+ + ". Per-clone runtime state: "
80
+ + ", ".join(f"`{path}`" for path in policy["localState"])
81
+ + "."
82
+ )
83
+ clarify_rows = [[f"`{item['field']}`", item["policy"]] for item in manifest["clarifyReturnFields"]]
84
+
85
+ blocks = [
86
+ ("docs/quick-reference.md", "lifecycle", lifecycle),
87
+ ("docs/engine/state-schema.md", "schema-version", f"`schemaVersion: {manifest['schemaVersion']}`."),
88
+ (
89
+ "docs/engine/state-schema.md",
90
+ "phase-contract",
91
+ table(["phase", "normal resume", "required sections", "transition right"], phase_rows),
92
+ ),
93
+ ("docs/engine/state-schema.md", "state-tracking", tracking),
94
+ (
95
+ "docs/engine/state-schema.md",
96
+ "clarify-return-fields",
97
+ table(["field", "policy"], clarify_rows),
98
+ ),
99
+ (
100
+ "docs/cli.md",
101
+ "readiness-reasons",
102
+ table(["exit", "reason", "condition", "remediation"], reason_rows),
103
+ ),
104
+ ("SECURITY.md", "principles-trust", policy["principlesTrust"]),
105
+ (
106
+ "pack/.claude/skills/devrites-lib/reference/standards/core.md",
107
+ "principles-trust",
108
+ policy["principlesTrust"],
109
+ ),
110
+ ]
111
+ for relative, name, wanted in blocks:
112
+ replace_block(root / relative, name, wanted, args.write)
113
+
114
+ state_schema = (root / "docs/engine/state-schema.md").read_text()
115
+ if re.search(r"schema(?:Version| version| v)[: ]+1\b", state_schema, re.IGNORECASE):
116
+ raise ValueError("docs/engine/state-schema.md still claims schema v1")
117
+ print("authority-drift: current docs match workflow and readiness authorities")
118
+
119
+
120
+ if __name__ == "__main__":
121
+ try:
122
+ main()
123
+ except (KeyError, OSError, ValueError, json.JSONDecodeError) as exc:
124
+ print(f"authority-drift: {exc}", file=sys.stderr)
125
+ sys.exit(1)
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // Per-file and aggregate byte ratchet for canonical prompt/instruction docs.
2
+ // Track canonical instruction files individually and skills as a group.
3
3
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
4
4
  import { dirname, join, relative, resolve } from 'node:path';
5
5
 
@@ -12,6 +12,7 @@ function option(name, fallback) {
12
12
  const root = resolve(option('--root', defaultRoot));
13
13
  const baselinePath = resolve(option('--baseline', join(root, 'tests', 'instruction-size-baseline.json')));
14
14
  const write = argv.includes('--write');
15
+ const ratchetLimit = 855_000;
15
16
 
16
17
  function lfBytes(text) {
17
18
  return Buffer.byteLength(text.replace(/\r\n/g, '\n'));
@@ -28,12 +29,7 @@ function markdownFiles(dir) {
28
29
  return files;
29
30
  }
30
31
 
31
- function collect() {
32
- const roots = [
33
- join(root, 'pack', '.claude', 'skills'),
34
- join(root, 'pack', '.claude', 'agents'),
35
- join(root, 'pack', '.claude', 'rules'),
36
- ];
32
+ function collect(roots) {
37
33
  const out = {};
38
34
  for (const file of roots.flatMap(markdownFiles)) {
39
35
  out[relative(root, file)] = lfBytes(readFileSync(file, 'utf8'));
@@ -41,13 +37,25 @@ function collect() {
41
37
  return Object.fromEntries(Object.entries(out).sort(([a], [b]) => a.localeCompare(b)));
42
38
  }
43
39
 
44
- const files = collect();
45
- const totalBytes = Object.values(files).reduce((sum, bytes) => sum + bytes, 0);
40
+ const skillRoot = join(root, 'pack', '.claude', 'skills');
41
+ const files = collect([
42
+ skillRoot,
43
+ join(root, 'pack', '.claude', 'agents'),
44
+ join(root, 'pack', '.claude', 'rules'),
45
+ ]);
46
+ const skillFiles = collect([skillRoot]);
47
+ const totalBytes = Object.values(skillFiles).reduce((sum, bytes) => sum + bytes, 0);
46
48
  const current = { version: 2, total_bytes: totalBytes, files };
49
+ if (totalBytes > ratchetLimit) {
50
+ console.error(`FAIL: canonical skill Markdown is ${totalBytes} bytes (ratchet ${ratchetLimit})`);
51
+ process.exit(1);
52
+ }
47
53
  if (write) {
48
54
  mkdirSync(dirname(baselinePath), { recursive: true });
49
55
  writeFileSync(baselinePath, JSON.stringify(current, null, 2) + '\n');
50
- console.log(`instruction-size: wrote ${relative(root, baselinePath)} (${Object.keys(files).length} files, ${totalBytes} bytes)`);
56
+ console.log(
57
+ `instruction-size: wrote ${relative(root, baselinePath)} (${Object.keys(files).length} instruction files, ${totalBytes} skill bytes)`,
58
+ );
51
59
  process.exit(0);
52
60
  }
53
61
 
@@ -75,5 +83,5 @@ for (const file of Object.keys(baseline.files)) {
75
83
  if (totalBytes > baseline.total_bytes) {
76
84
  fail(`aggregate instruction payload grew by ${totalBytes - baseline.total_bytes} bytes (${baseline.total_bytes} -> ${totalBytes})`);
77
85
  }
78
- console.log(`instruction-size: ${Object.keys(files).length} files checked, ${totalBytes} bytes`);
86
+ console.log(`instruction-size: ${Object.keys(files).length} instruction files checked, ${totalBytes} skill bytes`);
79
87
  process.exit(failures ? 1 : 0);
@@ -26,6 +26,8 @@ NONSKILL = {
26
26
  "devrites-engine",
27
27
  # a git commit-trailer marker ("[devrites-context]" body in a WIP checkpoint), not a skill
28
28
  "devrites-context",
29
+ # typed contract schemas and a generated-hook diagnostic marker, not skills
30
+ "devrites-forge", "devrites-git-authority", "devrites-codex-leaf-guard",
29
31
  }
30
32
  # names a skill deliberately mentions as NON-existent (self-documenting prose).
31
33
  DOCUMENTED_NONEXISTENT = {"rite-use"}