devrites 3.2.1 → 3.2.3

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 (197) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -1
  3. package/docs/architecture.md +6 -2
  4. package/docs/command-map.md +3 -3
  5. package/docs/engine/agent-contract.md +3 -2
  6. package/docs/harness-compliance.md +2 -2
  7. package/docs/orchestration.md +15 -12
  8. package/docs/porting-to-a-new-harness.md +2 -1
  9. package/docs/skills.md +7 -2
  10. package/engine/hooks.go +56 -7
  11. package/engine/hooks_agent_dispatch.go +1193 -0
  12. package/engine/hooks_workspace.go +92 -9
  13. package/engine/internal/forge/forge.go +0 -2
  14. package/engine/internal/harness/compliance.go +1 -1
  15. package/engine/internal/harness/harness.go +3 -0
  16. package/engine/internal/lib/doubtcoverage.go +2 -12
  17. package/engine/internal/lib/reconcile.go +4 -29
  18. package/engine/internal/lib/reconcile_test.go +14 -10
  19. package/engine/main.go +4 -1
  20. package/engine/tests/hook_test.go +966 -0
  21. package/engine/tests/lib_parity_test.go +5 -17
  22. package/engine/tests/parity_reconcile_test.go +1 -1
  23. package/engine/tests/parity_test.go +2 -6
  24. package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -0
  25. package/pack/.claude/skills/devrites-audit/SKILL.md +5 -6
  26. package/pack/.claude/skills/devrites-browser-proof/SKILL.md +1 -0
  27. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +1 -0
  28. package/pack/.claude/skills/devrites-doubt/SKILL.md +2 -1
  29. package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +1 -0
  30. package/pack/.claude/skills/devrites-interview/SKILL.md +1 -0
  31. package/pack/.claude/skills/devrites-lib/SKILL.md +1 -0
  32. package/pack/.claude/skills/devrites-lib/reference/model-tiers.md +4 -3
  33. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +4 -5
  34. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +14 -8
  35. package/pack/.claude/skills/devrites-prose-craft/SKILL.md +1 -0
  36. package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +1 -0
  37. package/pack/.claude/skills/devrites-source-driven/SKILL.md +1 -0
  38. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -0
  39. package/pack/.claude/skills/rite/SKILL.md +1 -0
  40. package/pack/.claude/skills/rite-adopt/SKILL.md +1 -0
  41. package/pack/.claude/skills/rite-autocomplete/SKILL.md +1 -0
  42. package/pack/.claude/skills/rite-build/SKILL.md +2 -1
  43. package/pack/.claude/skills/rite-build/reference/phase-contract.md +3 -4
  44. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +11 -12
  45. package/pack/.claude/skills/rite-clarify/SKILL.md +1 -0
  46. package/pack/.claude/skills/rite-converge/SKILL.md +1 -0
  47. package/pack/.claude/skills/rite-customize/SKILL.md +1 -0
  48. package/pack/.claude/skills/rite-define/SKILL.md +1 -0
  49. package/pack/.claude/skills/rite-doctor/SKILL.md +1 -0
  50. package/pack/.claude/skills/rite-dogfood/SKILL.md +1 -0
  51. package/pack/.claude/skills/rite-explain/SKILL.md +4 -2
  52. package/pack/.claude/skills/rite-frame/SKILL.md +1 -0
  53. package/pack/.claude/skills/rite-handoff/SKILL.md +1 -0
  54. package/pack/.claude/skills/rite-learn/SKILL.md +1 -0
  55. package/pack/.claude/skills/rite-plan/SKILL.md +1 -0
  56. package/pack/.claude/skills/rite-polish/SKILL.md +1 -0
  57. package/pack/.claude/skills/rite-pov/SKILL.md +1 -0
  58. package/pack/.claude/skills/rite-pr-feedback/SKILL.md +1 -0
  59. package/pack/.claude/skills/rite-pressure-test/SKILL.md +1 -0
  60. package/pack/.claude/skills/rite-prototype/SKILL.md +1 -0
  61. package/pack/.claude/skills/rite-prove/SKILL.md +1 -0
  62. package/pack/.claude/skills/rite-quick/SKILL.md +1 -0
  63. package/pack/.claude/skills/rite-resolve/SKILL.md +1 -0
  64. package/pack/.claude/skills/rite-review/SKILL.md +1 -0
  65. package/pack/.claude/skills/rite-seal/SKILL.md +1 -0
  66. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +2 -3
  67. package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +10 -12
  68. package/pack/.claude/skills/rite-ship/SKILL.md +1 -0
  69. package/pack/.claude/skills/rite-spec/SKILL.md +1 -0
  70. package/pack/.claude/skills/rite-status/SKILL.md +1 -0
  71. package/pack/.claude/skills/rite-temper/SKILL.md +3 -2
  72. package/pack/.claude/skills/rite-upgrade/SKILL.md +3 -1
  73. package/pack/.claude/skills/rite-vet/SKILL.md +1 -0
  74. package/pack/.claude/skills/rite-zoom-out/SKILL.md +1 -0
  75. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -0
  76. package/pack/generated/claude/skills/devrites-audit/SKILL.md +5 -6
  77. package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +1 -0
  78. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +1 -0
  79. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +2 -1
  80. package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +1 -0
  81. package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -0
  82. package/pack/generated/claude/skills/devrites-lib/SKILL.md +1 -0
  83. package/pack/generated/claude/skills/devrites-lib/reference/model-tiers.md +4 -3
  84. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +4 -5
  85. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +14 -8
  86. package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +1 -0
  87. package/pack/generated/claude/skills/devrites-refresh-indexes/SKILL.md +1 -0
  88. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +1 -0
  89. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -0
  90. package/pack/generated/claude/skills/rite/SKILL.md +1 -0
  91. package/pack/generated/claude/skills/rite-adopt/SKILL.md +1 -0
  92. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +1 -0
  93. package/pack/generated/claude/skills/rite-build/SKILL.md +2 -1
  94. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +3 -4
  95. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +11 -12
  96. package/pack/generated/claude/skills/rite-clarify/SKILL.md +1 -0
  97. package/pack/generated/claude/skills/rite-converge/SKILL.md +1 -0
  98. package/pack/generated/claude/skills/rite-customize/SKILL.md +1 -0
  99. package/pack/generated/claude/skills/rite-define/SKILL.md +1 -0
  100. package/pack/generated/claude/skills/rite-doctor/SKILL.md +1 -0
  101. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +1 -0
  102. package/pack/generated/claude/skills/rite-explain/SKILL.md +4 -2
  103. package/pack/generated/claude/skills/rite-frame/SKILL.md +1 -0
  104. package/pack/generated/claude/skills/rite-handoff/SKILL.md +1 -0
  105. package/pack/generated/claude/skills/rite-learn/SKILL.md +1 -0
  106. package/pack/generated/claude/skills/rite-plan/SKILL.md +1 -0
  107. package/pack/generated/claude/skills/rite-polish/SKILL.md +1 -0
  108. package/pack/generated/claude/skills/rite-pov/SKILL.md +1 -0
  109. package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +1 -0
  110. package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +1 -0
  111. package/pack/generated/claude/skills/rite-prototype/SKILL.md +1 -0
  112. package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -0
  113. package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -0
  114. package/pack/generated/claude/skills/rite-resolve/SKILL.md +1 -0
  115. package/pack/generated/claude/skills/rite-review/SKILL.md +1 -0
  116. package/pack/generated/claude/skills/rite-seal/SKILL.md +1 -0
  117. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +2 -3
  118. package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +10 -12
  119. package/pack/generated/claude/skills/rite-ship/SKILL.md +1 -0
  120. package/pack/generated/claude/skills/rite-spec/SKILL.md +1 -0
  121. package/pack/generated/claude/skills/rite-status/SKILL.md +1 -0
  122. package/pack/generated/claude/skills/rite-temper/SKILL.md +3 -2
  123. package/pack/generated/claude/skills/rite-upgrade/SKILL.md +3 -1
  124. package/pack/generated/claude/skills/rite-vet/SKILL.md +1 -0
  125. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +1 -0
  126. package/pack/generated/codex/AGENTS.md +2 -3
  127. package/pack/generated/codex/hooks.json +38 -4
  128. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +6 -4
  129. package/pack/generated/codex/skills/devrites-audit/SKILL.md +10 -10
  130. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +6 -4
  131. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +6 -4
  132. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +7 -5
  133. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +6 -4
  134. package/pack/generated/codex/skills/devrites-interview/SKILL.md +6 -4
  135. package/pack/generated/codex/skills/devrites-lib/SKILL.md +6 -4
  136. package/pack/generated/codex/skills/devrites-lib/reference/model-tiers.md +4 -3
  137. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +4 -5
  138. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +14 -8
  139. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +6 -4
  140. package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +6 -4
  141. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +6 -4
  142. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +6 -4
  143. package/pack/generated/codex/skills/rite/SKILL.md +6 -4
  144. package/pack/generated/codex/skills/rite-adopt/SKILL.md +6 -4
  145. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +6 -4
  146. package/pack/generated/codex/skills/rite-build/SKILL.md +7 -5
  147. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +3 -4
  148. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +11 -12
  149. package/pack/generated/codex/skills/rite-clarify/SKILL.md +6 -4
  150. package/pack/generated/codex/skills/rite-converge/SKILL.md +6 -4
  151. package/pack/generated/codex/skills/rite-customize/SKILL.md +6 -4
  152. package/pack/generated/codex/skills/rite-define/SKILL.md +6 -4
  153. package/pack/generated/codex/skills/rite-doctor/SKILL.md +6 -4
  154. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +6 -4
  155. package/pack/generated/codex/skills/rite-explain/SKILL.md +9 -6
  156. package/pack/generated/codex/skills/rite-frame/SKILL.md +6 -4
  157. package/pack/generated/codex/skills/rite-handoff/SKILL.md +6 -4
  158. package/pack/generated/codex/skills/rite-learn/SKILL.md +6 -4
  159. package/pack/generated/codex/skills/rite-plan/SKILL.md +6 -4
  160. package/pack/generated/codex/skills/rite-polish/SKILL.md +6 -4
  161. package/pack/generated/codex/skills/rite-pov/SKILL.md +6 -4
  162. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +6 -4
  163. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +6 -4
  164. package/pack/generated/codex/skills/rite-prototype/SKILL.md +6 -4
  165. package/pack/generated/codex/skills/rite-prove/SKILL.md +6 -4
  166. package/pack/generated/codex/skills/rite-quick/SKILL.md +6 -4
  167. package/pack/generated/codex/skills/rite-resolve/SKILL.md +6 -4
  168. package/pack/generated/codex/skills/rite-review/SKILL.md +6 -4
  169. package/pack/generated/codex/skills/rite-seal/SKILL.md +6 -4
  170. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +2 -3
  171. package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +10 -12
  172. package/pack/generated/codex/skills/rite-ship/SKILL.md +6 -4
  173. package/pack/generated/codex/skills/rite-spec/SKILL.md +6 -4
  174. package/pack/generated/codex/skills/rite-status/SKILL.md +6 -4
  175. package/pack/generated/codex/skills/rite-temper/SKILL.md +8 -6
  176. package/pack/generated/codex/skills/rite-upgrade/SKILL.md +8 -5
  177. package/pack/generated/codex/skills/rite-vet/SKILL.md +6 -4
  178. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +6 -4
  179. package/package.json +1 -1
  180. package/scripts/codex-generate.sh +46 -16
  181. package/scripts/live-hosts/agent-result.schema.json +2 -1
  182. package/scripts/live-hosts/claude.sh +2 -2
  183. package/scripts/live-hosts/codex.sh +4 -0
  184. package/scripts/live-hosts/fake-host.py +1 -8
  185. package/scripts/live-hosts/host-transport.py +1 -2
  186. package/scripts/npm-audit-exceptions.json +12 -0
  187. package/scripts/run-agent-contract-evals.py +3 -3
  188. package/scripts/run-evals.sh +3 -34
  189. package/scripts/validate-frontmatter.py +34 -1
  190. package/engine/testdata/golden/TestParityA1Guard/inline-fallback-silent.golden +0 -1
  191. package/engine/testdata/golden/TestParityDoubtCoverage/arg=inline.golden +0 -3
  192. package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing-inline.golden +0 -3
  193. package/scripts/eval-runner.py +0 -275
  194. package/scripts/eval-scorer.mjs +0 -46
  195. package/scripts/render-eval-summary.py +0 -48
  196. /package/engine/testdata/golden/TestParityReconcile/{inline-fallback → close-window}/snapshot.golden +0 -0
  197. /package/engine/testdata/golden/TestParityReconcile/{inline-fallback.golden → close-window.golden} +0 -0
@@ -45,8 +45,7 @@
45
45
  against the ledger: an every-slice-trivial feature (`- none`) is a valid pass; a stood triggering
46
46
  decision (boundary / data-model / auth / public-API / migration / branching) with no verdict is
47
47
  the finding, same severity as rc=3.
48
- - **rc=0:** covered, or not assessable (an inline build logs no dispatch: verify the ledger's
49
- verdicts by hand).
48
+ - **rc=0:** covered, or not assessable because no wright was logged.
50
49
  Either way, walk the `## Decisions stood` ledger yourself: severity rides the unverified
51
50
  **decision**, never the exit code alone.
52
51
  5. Check **security, data, migration, rollback**, strategy scope, principles,
@@ -61,7 +60,7 @@
61
60
  [`parallel-dispatch.md`](../../devrites-lib/reference/parallel-dispatch.md). Await
62
61
  fresh-context batches of at most three and give reviewers only the workspace path plus
63
62
  immutable diff, without author reasoning. Use named role → safely enforced generic fresh
64
- agent labelled inline; inline output is never independent. Carry Spec/Code verdicts only
63
+ agent; if neither is available, seal remains NO-GO. Carry Spec/Code verdicts only
65
64
  for an unchanged post-review diff; rerun the other applicable axes.
66
65
  **Footprint: account for the whole roster.** For each reviewer you dispatch, append
67
66
  `devrites-engine footprint log <slug> reviewer devrites-<x>-reviewer` (the reviewer's **exact agent name**:
@@ -25,18 +25,16 @@ For each risky step, state how to back it out:
25
25
  - A new external dependency with no failure handling is at least **Important**.
26
26
  - Record the chosen rollback path in `seal.md` → "Rollback / Recovery".
27
27
 
28
- ## Fresh-context fallback weighting
29
-
30
- An inline final-rung review is useful signal but **not independent evidence**:
31
-
32
- - Record `independence: fallback` and a roster skip reason; never log it as a dispatched
33
- reviewer or a clean fresh-context pass.
34
- - Preserve its findings at their normal severity. A clean inline result still leaves an
35
- **Important assurance gap** and cannot silently satisfy a required axis.
36
- - Seal remains NO-GO until that axis runs through a fresh-context spawn, or the human
37
- explicitly accepts the reduced assurance in `seal.md`. AFK never auto-accepts it.
38
- - Security or irreversible-risk scope has no reduced-assurance override: unavailable
39
- independent review remains NO-GO.
28
+ ## Fresh-context availability
29
+
30
+ A required review must run in a fresh spawned agent:
31
+
32
+ - If neither a named role nor a guarded generic agent is available, record the roster
33
+ skip reason and keep seal **NO-GO**.
34
+ - Never run the reviewer in the root context or log root work as a dispatched review.
35
+ - AFK never auto-accepts a missing reviewer.
36
+ - Security or irreversible-risk scope remains NO-GO while independent review is
37
+ unavailable.
40
38
 
41
39
  ## Destructive operations
42
40
  Confirm any destructive step with the user before shipping. Verify backups exist where
@@ -3,6 +3,7 @@ name: rite-ship
3
3
  description: Ship the sealed feature: commit, push, tag, archive, close. Use when the user says "ship it", "push the branch", "tag the release", or "close the task" after /rite-seal GO. Not for GO/NO-GO readiness.
4
4
  argument-hint: "[feature-slug]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-ship: ship + close the task
@@ -3,6 +3,7 @@ name: rite-spec
3
3
  description: Spec new or high-risk behavior before code and write its `.devrites/work/<slug>/` workspace. Use for a feature/app, vague product idea, auth or migration work, or a public-API change. Not for approved-spec planning.
4
4
  argument-hint: "<feature or idea>"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-spec: investigate and write the spec
@@ -4,6 +4,7 @@ description: User-invoked read-only active-feature report: phase, active slice,
4
4
  argument-hint: "[feature-slug]"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-status: active feature status
@@ -3,6 +3,7 @@ name: rite-temper
3
3
  description: Temper a readied spec before planning. Use when the user says "temper this", "strategy review", "pre-mortem the spec", or asks if we are over/under-building. Not for code review or final seal.
4
4
  argument-hint: "[feature-slug] [--mode expand|selective|hold|reduce]"
5
5
  user-invocable: true
6
+ required-agent-roles: devrites-strategy-reviewer
6
7
  ---
7
8
 
8
9
  # /rite-temper: review scope and risk before planning
@@ -112,8 +113,8 @@ that needs more than the default pre-mortem) selected by the section's risk).
112
113
  dimension still below bar after 3 is classified by decision ownership: a product/scope/risk
113
114
  choice becomes a blocking question; an objective spec defect stays blocked with the exact
114
115
  required edit and routes to `/rite-spec`, not `/rite-resolve`. Irreversible-risk findings
115
- always pause. Use the shared capability ladder; an inline final-rung pass is labeled
116
- `independence: fallback`, never an independent review. After an accepted edit to a
116
+ always pause. Use the shared capability ladder; if no fresh-agent rung is available,
117
+ stop for HITL. After an accepted edit to a
117
118
  coverage-bound input, repeat step 6's revalidation and digest refresh before handoff.
118
119
  8. **STOP.** Report the mode, the scope deltas, and the floor verdict; recommend `/rite-define`.
119
120
 
@@ -4,6 +4,7 @@ description: User-invoked semantic upgrade for an active legacy DevRites workspa
4
4
  argument-hint: "[feature-slug]"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: devrites-upgrade-planner
7
8
  ---
8
9
 
9
10
  # /rite-upgrade: bring an active workspace onto the current contract
@@ -58,7 +59,8 @@ Plan, Vet, Converge, and Build phase contracts needed by the assessment.
58
59
  devrites-engine snapshot [feature-slug]
59
60
  ```
60
61
  If every semantic artifact names the current contract and `build-readiness` passes,
61
- report a no-op.
62
+ mark the candidate as a likely no-op; the fresh upgrade assessment in step 2 must
63
+ confirm that before reporting it.
62
64
  1. **Freeze the preservation baseline.** Create the standard orchestrator-controlled
63
65
  `agent-packet/v1` baseline. Include exact paths for current phase/artifact contracts,
64
66
  `state.md`, `spec.md`, `decision-coverage.md`, `architecture.md`, `plan.md`, `tasks.md`,
@@ -3,6 +3,7 @@ name: rite-vet
3
3
  description: Vet a defined plan before code with senior-engineer engineering review. Use when the user says "vet the plan", "engineering review", "lock in the plan", or before building. Not for code review or final seal.
4
4
  argument-hint: "[slug] [--cross-model] [--full]"
5
5
  user-invocable: true
6
+ required-agent-roles: devrites-plan-reviewer
6
7
  ---
7
8
 
8
9
  # /rite-vet: review the plan before build
@@ -4,6 +4,7 @@ description: User-invoked read-only structural map of unfamiliar code: modules,
4
4
  argument-hint: "[symbol | file | area to map]"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-zoom-out: step up one abstraction layer
@@ -2,6 +2,7 @@
2
2
  name: devrites-api-interface
3
3
  description: Design stable API/interface contracts before implementation: REST/GraphQL endpoints, module boundaries, type contracts, FE/BE splits. Use when the user says "design the API" or a slice crosses a boundary. Not for helpers.
4
4
  user-invocable: false
5
+ required-agent-roles: none
5
6
  ---
6
7
 
7
8
  # devrites-api-interface: contract before implementation
@@ -3,6 +3,7 @@ name: devrites-audit
3
3
  description: Read-only feature audit on security/perf/simplify: auth trust boundary, injection, secrets, hot-path, payload-size, perf budget, Chesterton delete/cleanup. Use when auditing one axis. Not for writes.
4
4
  argument-hint: "<security | perf | simplify>"
5
5
  user-invocable: false
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # devrites-audit: read-only audit dispatch
@@ -39,14 +40,12 @@ no cross-pollination and the shared maximum of three concurrent read-only roles.
39
40
 
40
41
  ## Fallback and scope
41
42
 
42
- Use the capability ladder; inline is allowed only when no safe fresh-context rung
43
- preserves the role's read-only boundary or policy rejects it, and must say
44
- `independence: fallback`. Use these role contracts:
43
+ Use the capability ladder. If no safe fresh-context rung preserves the role's
44
+ read-only boundary, stop for HITL. Use these role contracts:
45
45
 
46
46
  - `.claude/agents/devrites-security-auditor.md`
47
47
  - `.claude/agents/devrites-performance-reviewer.md`
48
48
  - `.claude/agents/devrites-simplifier-reviewer.md`
49
49
 
50
- Seal weights that fallback under
51
- [`risk-and-rollback.md`](../rite-seal/reference/risk-and-rollback.md). Stay inside the
52
- active feature. Critical findings block seal; simplification never changes behavior.
50
+ Stay inside the active feature. Critical findings block seal; simplification never
51
+ changes behavior.
@@ -2,6 +2,7 @@
2
2
  name: devrites-browser-proof
3
3
  description: Observe and prove working UI behavior in a real browser with screenshots, interactions, network evidence, and Core Web Vitals. Use for browser proof or performance after the page works.
4
4
  user-invocable: false
5
+ required-agent-roles: none
5
6
  ---
6
7
 
7
8
  # devrites-browser-proof: runtime evidence for UI
@@ -2,6 +2,7 @@
2
2
  name: devrites-debug-recovery
3
3
  description: Debug application failures: tests, builds, CI, runtime exceptions, browser errors, app 500s. Reproduce, rank hypotheses, fix root cause, regression-test. Use when "debug", "build is red", "tests fail", or the app is broken. Not for DevRites install health.
4
4
  user-invocable: false
5
+ required-agent-roles: none
5
6
  ---
6
7
 
7
8
  # devrites-debug-recovery: fix the root cause, not the symptom
@@ -2,6 +2,7 @@
2
2
  name: devrites-doubt
3
3
  description: Stress-test one non-trivial decision with an adversarial independent take. Use when the user says "are we sure", "double-check", "what could go wrong", or before boundary/data/auth/API/migration choices. Not for trivial choices.
4
4
  user-invocable: false
5
+ required-agent-roles: devrites-doubt-reviewer
5
6
  ---
6
7
 
7
8
  # devrites-doubt: CLAIM → EXTRACT → DOUBT → RECONCILE → STOP
@@ -22,7 +23,7 @@ code · claiming "this is safe", "this scales", or "this matches the spec".
22
23
  `agent-packet/v1` and the adversarial objective *"find what's wrong; do not
23
24
  validate."* Follow
24
25
  [`agents.md`](../devrites-lib/reference/standards/agents.md). Inline does not satisfy
25
- independence; it is a labeled fallback only at the final capability-ladder rung.
26
+ independence; if no fresh-agent rung is available, stop for HITL.
26
27
  - [ ] **4. RECONCILE**: classify EVERY finding: contract misread | valid & actionable |
27
28
  valid trade-off | noise. **Doubt-theater check:** if two or more cycles find substantive
28
29
  issues but classify **zero** as actionable, the review is too agreeable. Sharpen the
@@ -2,6 +2,7 @@
2
2
  name: devrites-frontend-craft
3
3
  description: Implement frontend at senior designer-engineer quality: every state covered, anti-AI-slop, WCAG 2.2 AA. Use when the user says "build the UI", "design system", "a11y", or `/rite-build` detects UI. Not for polishing a built feature or design exploration.
4
4
  user-invocable: false
5
+ required-agent-roles: none
5
6
  ---
6
7
 
7
8
  # devrites-frontend-craft: UI like a senior designer-engineer
@@ -2,6 +2,7 @@
2
2
  name: devrites-interview
3
3
  description: Interview the user one question at a time to extract intent. Use when the user says "interview me", "I am not sure what I want", or the ask is underspecified. Not for casual clarification.
4
4
  user-invocable: false
5
+ required-agent-roles: none
5
6
  ---
6
7
 
7
8
  # devrites-interview: extract intent
@@ -3,6 +3,7 @@ name: devrites-lib
3
3
  description: Internal shared DevRites helper library. Documents cross-cutting engine commands and references; not a user workflow. Do not invoke directly.
4
4
  user-invocable: false
5
5
  disable-model-invocation: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # devrites-lib: internal shared helpers (not a command)
@@ -21,13 +21,14 @@ one to a reviewer to save cost. The tier a scout runs on is where savings are sa
21
21
  ## The degradation rule
22
22
 
23
23
  Tiers are an optimization, never a correctness dependency. A skill written against tiers must run
24
- correctly on a harness that cannot select models per agent, or has no subagent primitive at all:
24
+ correctly on a harness that cannot select models per agent:
25
25
 
26
26
  1. **Per-agent model override unavailable** → dispatch the scout on the **inherited** model and
27
27
  keep its **read budget and output cap**. The cost control falls back to structure, not model
28
28
  choice. This is why every scout dispatch also carries an explicit read budget.
29
- 2. **No subagent primitive at all** → run the scout work **inline** in the orchestrator, with the
30
- same budgets. The tier still tells you how much to spend, even with nothing to dispatch to.
29
+ 2. **No safe fresh-agent rung** → stop for HITL when the scout is required, or record the
30
+ explicitly optional scout as skipped. Never relabel root-context work as independent
31
+ specialist dispatch.
31
32
 
32
33
  A skill that only works when it can pick a cheap model is broken. The tier names the *intent*; the
33
34
  budget enforces it regardless of what the harness can do.
@@ -91,9 +91,8 @@ devrites-engine footprint roster <slug>
91
91
  ```
92
92
 
93
93
  `roster` rc=3 means an unaccounted reviewer: dispatch or record why it does not apply.
94
- rc=1 means an always-on skip; this is valid only for an unchanged-candidate carry-forward
95
- or the explicit independence fallback in
96
- [`../../rite-seal/reference/risk-and-rollback.md`](../../rite-seal/reference/risk-and-rollback.md).
94
+ rc=1 means an always-on skip; this is valid only for an unchanged-candidate
95
+ carry-forward. A required reviewer that cannot be dispatched blocks the phase.
97
96
 
98
97
  ## Reconciliation
99
98
 
@@ -106,5 +105,5 @@ or the explicit independence fallback in
106
105
  6. Apply the caller's gate; do not invent a composite score.
107
106
 
108
107
  Every panel reviewer runs at the ceiling or inherited tier. If the named role is
109
- unavailable, use the universal ladder. Record an inline fallback as non-independent
110
- under the seal risk rule, never as a fresh-context pass.
108
+ unavailable, use the universal ladder. If no fresh-agent rung is available, stop for
109
+ HITL; never execute the reviewer in the root context.
@@ -50,7 +50,7 @@ review fan-out. Phase skills own their phase-locked role choice.
50
50
 
51
51
  ## Fresh-context dispatch ladder
52
52
 
53
- Use the first available rung; capability failure never changes the contract:
53
+ Use the first safe rung:
54
54
 
55
55
  1. Dispatch the named custom role with the host's spawn primitive.
56
56
  2. If spawning works but that role is unavailable, use a generic fresh agent only when
@@ -59,13 +59,19 @@ Use the first available rung; capability failure never changes the contract:
59
59
  allowlist (or an isolated/staged checkout) for a `worker`. Tell it to read the
60
60
  generated role contract, then give it the same packet. An instruction-only shared-tree
61
61
  writer is not an available rung.
62
- 3. When no safe fresh-context rung exists or policy rejects spawning, run the discipline
63
- inline under the same budgets and label it `independence: fallback`. It is not an
64
- independent review; seal applies
65
- [`risk-and-rollback.md`](../../../rite-seal/reference/risk-and-rollback.md).
66
-
67
- Host mapping: Claude Code uses `Agent` (`Task` is its legacy alias); Codex uses
68
- `spawn_agent`. Use the host-neutral term **fresh-context dispatch** in shared guidance.
62
+ 3. Otherwise stop for HITL; specialist work never runs in the root context.
63
+
64
+ Every canonical skill declares `required-agent-roles` in its frontmatter. Use `none`
65
+ when no fresh agent is unconditionally required for that invocation. Codex reads this
66
+ field from the installed skill at `UserPromptSubmit` and arms a fail-closed completion
67
+ receipt for every listed role; the engine derives roles from skill metadata.
68
+ Conditional scouts and reviewers remain owned by their explicit phase triggers.
69
+
70
+ Claude uses `Agent` (`Task` alias); Codex uses `spawn_agent`. V2 sends the exact named
71
+ role, a unique `task_name`, and `fork_turns="none"`; Codex loads its TOML natively.
72
+ Because V2 lifecycle calls bypass hooks, Stop/reconcile verify the durable rollout's
73
+ role, instructions, wait, completion, and delivered result. V1 uses guarded
74
+ `explorer`/`worker` with injected rules and a lifecycle receipt. Prose isn't evidence.
69
75
 
70
76
  ## File-backed dispatch contract
71
77
 
@@ -2,6 +2,7 @@
2
2
  name: devrites-prose-craft
3
3
  description: Humanize prose without losing technical content. Use when asked to remove AI-writing tells, match a writing sample or project voice, edit artifacts/replies/commit or PR prose, or run `/rite-polish`'s prose pass. Not for code comments or UI craft.
4
4
  user-invocable: false
5
+ required-agent-roles: none
5
6
  ---
6
7
 
7
8
  # devrites-prose-craft: prose that reads human
@@ -2,6 +2,7 @@
2
2
  name: devrites-refresh-indexes
3
3
  description: Refresh stale optional indexes. Use when structural lookup disagrees with live code or rite-doctor requests a synchronous reindex.
4
4
  user-invocable: false
5
+ required-agent-roles: none
5
6
  ---
6
7
 
7
8
  # devrites-refresh-indexes: keep the code-intelligence indexes fresh
@@ -2,6 +2,7 @@
2
2
  name: devrites-source-driven
3
3
  description: Verify uncertain framework/library behavior against official docs or installed source before relying on it. Use when the user says "check the docs", "verify this assumption", or hits an unfamiliar API. Not for internal code.
4
4
  user-invocable: false
5
+ required-agent-roles: devrites-evidence-scout
5
6
  ---
6
7
 
7
8
  # devrites-source-driven: verify, don't guess
@@ -2,6 +2,7 @@
2
2
  name: devrites-ux-shape
3
3
  description: Plan UX/UI before code: design direction, design brief, visual direction, key states, interaction model for screens/forms/dashboards/settings pages. Use when shaping UI. Not for building/polish.
4
4
  user-invocable: false
5
+ required-agent-roles: none
5
6
  ---
6
7
 
7
8
  # devrites-ux-shape: plan the UX/UI before code
@@ -4,6 +4,7 @@ description: User-invoked DevRites menu and router; no args renders the menu, a
4
4
  argument-hint: "[verb [args...]]"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite: DevRites menu + router
@@ -3,6 +3,7 @@ name: rite-adopt
3
3
  description: Adopt an existing or legacy codebase into DevRites by reverse-engineering current behavior, seeding conventions, and establishing the workflow. Use for inherited or live applications.
4
4
  argument-hint: "[path or area to adopt] [+ what you want to build next]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-adopt: onboard existing code
@@ -3,6 +3,7 @@ name: rite-autocomplete
3
3
  description: Run the DevRites lifecycle end-to-end unattended; --ship confirms the final gate. Use when the user says "autocomplete", "one-shot this feature", or "ship it autonomously". Not for a single phase.
4
4
  argument-hint: "[idea] [--ship|--yolo] [--max-slices N]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-autocomplete: full lifecycle, unattended
@@ -3,6 +3,7 @@ name: rite-build
3
3
  description: Build one approved vertical slice, then stop with evidence. Use when the next planned slice should be implemented. Not for multiple slices.
4
4
  argument-hint: "[slice number or name]"
5
5
  user-invocable: true
6
+ required-agent-roles: devrites-slice-wright
6
7
  ---
7
8
 
8
9
  # /rite-build: one verified slice
@@ -19,7 +20,7 @@ doubt, fail-on-red, recording, and stop checks. See
19
20
  ## Rules consulted (read on demand from `.claude/skills/devrites-lib/reference/standards/`)
20
21
  Read `.claude/skills/devrites-lib/reference/standards/core.md` first (workflow step 0). The
21
22
  following load on demand: **the wright reads them** (they are named in its contract) while it
22
- writes; read them yourself for the doubt/record gates or in the inline fallback:
23
+ writes; read them yourself for the doubt/record gates:
23
24
  - `coding-style.md`: naming, function shape, guard clauses, comments, reuse-first.
24
25
  - `error-handling.md`: fail fast, no silent catches, fail closed.
25
26
  - `testing.md`: pyramid, behaviour over implementation, see-it-fail-first.
@@ -55,9 +55,8 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
55
55
  **Default serial branch.** Follow
56
56
  [`wright-dispatch.md`](wright-dispatch.md) end to end; it owns snapshot timing, stuck
57
57
  logging, the exact packet, conditional skill loading, and return checks. Dispatch through
58
- named wright → safely enforced generic fresh worker labelled inline fallback. Inline is
59
- allowed only when no fresh worker preserves recognized wright identity plus exact allowlist
60
- enforcement or isolated staging; it never skips reconciliation. Before any canonical
58
+ named wright → safely enforced generic fresh worker. If neither is available, stop for
59
+ HITL; the root never performs wright work. Before any canonical
61
60
  `.devrites/` mutation, validate the typed result and require a clean immediate
62
61
  `devrites-engine reconcile check`; exit `5` rejects the writer result.
63
62
  4. **Doubt every stood decision before accepting the slice.** The writer never grades its
@@ -176,4 +175,4 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
176
175
  just built. **When every slice is built** (`✅ ALL BUILT`) say so explicitly (the build
177
176
  phase is complete, the next phase is `/rite-prove`) don't leave completion implicit.
178
177
 
179
- > **Mid-flight discipline.** The wright (or you, in the inline fallback) must resist doing two slices, skipping TDD, adding a defensive check, or wandering outside `touched-files.md`; you must resist skipping the post-return `devrites-doubt` because the wright "seems confident": see [`anti-patterns.md`](anti-patterns.md). Load it the moment you reach for the excuse.
178
+ > **Mid-flight discipline.** The wright must resist doing two slices, skipping TDD, adding a defensive check, or wandering outside `touched-files.md`; you must resist skipping the post-return `devrites-doubt` because the wright "seems confident": see [`anti-patterns.md`](anti-patterns.md). Load it the moment you reach for the excuse.
@@ -121,15 +121,14 @@ Only then persist `state.md`, `evidence.md`, `touched-files.md`, decision/doubt
121
121
  and browser evidence. Keep the retained window across a genuine human wait that will
122
122
  resume the same slice. Close it before abandoning the slice for a scope/plan transition.
123
123
 
124
- ## Host fallback
125
-
126
- Use named wright → safely enforced generic fresh worker labelled inline fallback from
127
- `standards/agents.md`. A generic worker is eligible only when the host preserves
128
- recognized wright identity plus exact allowlist enforcement, or contains it in an
129
- isolated/staged checkout. Post-hoc reconciliation alone cannot authorize an
130
- instruction-only shared-tree writer.
131
-
132
- When no safe fresh-context writer rung is callable, the root may execute the same bounded
133
- wright discipline inline. Write `.reconcile-inline` after the initial snapshot so the legacy
134
- A1 pre-hook recognizes the authorized fallback; reconciliation does **not** skip. The
135
- same allowlist, baseline, integrity gates, and close command remain mandatory.
124
+ ## Host dispatch
125
+
126
+ Use named wright → enforced V1 generic worker from `standards/agents.md`. On Codex
127
+ MultiAgent V2, dispatch the exact named `devrites-slice-wright` with a unique
128
+ `task_name` and `fork_turns="none"`; its durable child rollout must prove the native
129
+ wright role, wait, completion, and non-empty result from the current reconcile window.
130
+ Any generic worker still needs the exact allowlist or an isolated checkout;
131
+ reconciliation alone is insufficient. If no safe fresh-agent rung is available, stop
132
+ for HITL. On Codex, `reconcile check` and `reconcile close` require the completed
133
+ wright receipt bound to the current reconcile snapshot.
134
+ The root never performs wright work.
@@ -3,6 +3,7 @@ name: rite-clarify
3
3
  description: Run the topology-first decision-coverage scan after rite-spec and before strategy or architecture. Audit actors, journeys, states, data, integrations, operations, proof, assumptions, and must-NOT boundaries; close Partial/Missing rows and emit decision-coverage.md CLEAR. Use for missing/stale coverage or a missed pre-build product decision.
4
4
  argument-hint: "[feature-slug]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-clarify: resolve product decisions
@@ -3,6 +3,7 @@ name: rite-converge
3
3
  description: Converge intent and live code. Use when resuming a half-built feature, after `/rite-adopt` drift, or the user asks "what's left to build". Not for initial planning.
4
4
  argument-hint: "[feature-slug]"
5
5
  user-invocable: true
6
+ required-agent-roles: devrites-evidence-scout
6
7
  ---
7
8
 
8
9
  # /rite-converge: compare live code with intent
@@ -4,6 +4,7 @@ description: User-invoked helper for authoring DevRites overrides or extensions.
4
4
  argument-hint: "[override <agent> | extension <name>]"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-customize: guided project customization
@@ -3,6 +3,7 @@ name: rite-define
3
3
  description: Define the first build plan from an approved spec: architecture, task slices, traceability, and state. Use when turning approved intent into its initial plan.
4
4
  argument-hint: "[feature-slug]"
5
5
  user-invocable: true
6
+ required-agent-roles: devrites-plan-drafter
6
7
  ---
7
8
 
8
9
  # /rite-define: plan from the spec
@@ -3,6 +3,7 @@ name: rite-doctor
3
3
  description: Doctor DevRites setup or index health. Use when workflow wiring is broken, the user asks to check DevRites, or says "reindex". Not for application bugs.
4
4
  argument-hint: "[--code | --reindex]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-doctor: health check
@@ -4,6 +4,7 @@ description: Explicit browser dogfood QA for the active feature or branch.
4
4
  argument-hint: "[feature-slug|branch] [--port N]"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-dogfood: diff-scoped browser QA
@@ -4,6 +4,7 @@ description: User-invoked explainer that teaches one concept, diff, idea, or rec
4
4
  argument-hint: "[a concept | a diff ref | an idea | \"what did I do this week?\"], or bare to be asked"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-explain: the human half of the learning loop
@@ -42,8 +43,9 @@ Dispatch by task shape, per [`devrites-lib/reference/model-tiers.md`](../devrite
42
43
  orchestrator's own model; nothing is dispatched down. Teaching quality is the whole product: do
43
44
  not cheapen it.
44
45
 
45
- The degradation rule in that file applies: no per-agent model control run the scout inline under
46
- the same budget.
46
+ No per-agent model control means dispatch the scout as a same-model fresh agent under the
47
+ same budget. If no fresh-agent rung is available, stop with the missing capability; never run
48
+ the scout in the root context.
47
49
 
48
50
  ## Workflow
49
51
 
@@ -3,6 +3,7 @@ name: rite-frame
3
3
  description: Frame an ad-hoc ask before coding, then audit the diff. Use for underspecified imperative asks, raw-diff self-audits, or `/rite-quick` setup. Not a lifecycle gate.
4
4
  argument-hint: "[task to frame | diff to audit]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-frame: frame the goal, audit the diff
@@ -4,6 +4,7 @@ description: User-invoked handoff writer: sync chat-only context into `.devrites
4
4
  user-invocable: true
5
5
  disable-model-invocation: true
6
6
  argument-hint: "[what the next session will focus on]"
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-handoff: chat-only context, into a fresh-agent doc
@@ -4,6 +4,7 @@ description: User-invoked review of the learning ledger; promotes recurring less
4
4
  argument-hint: "[--mine | \"<lesson to record>\"]"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-learn: the cross-feature learning loop
@@ -3,6 +3,7 @@ name: rite-plan
3
3
  description: Re-plan existing work when reality invalidates the plan: reslice a slice that is too big, repair drift, reorder dependencies, split boundaries, or unblock work. Not first-pass decomposition.
4
4
  argument-hint: "[mode: decompose|reslice|repair|reorder|split|unblock|course-correct|revise]"
5
5
  user-invocable: true
6
+ required-agent-roles: devrites-plan-drafter
6
7
  ---
7
8
 
8
9
  # /rite-plan: (re)plan an active feature
@@ -3,6 +3,7 @@ name: rite-polish
3
3
  description: Polish the active feature before review: code always, UI when touched. Use when the user says "polish this", "finish before review", "normalize the UI", or "make it bolder/quieter". Not for repo-wide refactors.
4
4
  argument-hint: "[target | bolder | quieter | distill | harden | normalize-only]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-polish: finish before review
@@ -3,6 +3,7 @@ name: rite-pov
3
3
  description: Project-grounded verdict for adopting, switching, rejecting, or revisiting a named external technology, library, platform, CVE, or pattern. Use when deciding whether this project should commit to an outside option.
4
4
  argument-hint: "[candidate/link/question]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-pov: project-grounded external verdict
@@ -4,6 +4,7 @@ description: Explicit utility for resolving GitHub PR review feedback.
4
4
  argument-hint: "[PR number|thread URL|blank for current branch]"
5
5
  user-invocable: true
6
6
  disable-model-invocation: true
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-pr-feedback: resolve PR review threads
@@ -3,6 +3,7 @@ name: rite-pressure-test
3
3
  description: Pressure-test a rough/vague idea: ideate, explore 3-5 approaches, radically different shapes, diverge then converge on direction before spec. Not for writing spec.
4
4
  argument-hint: "[rough idea or plan to stress-test]"
5
5
  user-invocable: true
6
+ required-agent-roles: none
6
7
  ---
7
8
 
8
9
  # /rite-pressure-test: diverge then converge
@@ -4,6 +4,7 @@ description: User-invoked throwaway prototype for one logic or UI design questio
4
4
  user-invocable: true
5
5
  disable-model-invocation: true
6
6
  argument-hint: "[the question the prototype is answering]"
7
+ required-agent-roles: none
7
8
  ---
8
9
 
9
10
  # /rite-prototype: answer one question with throwaway code
@@ -3,6 +3,7 @@ name: rite-prove
3
3
  description: Prove a completed feature with tests and the full test suite, build/typecheck/lint, end-to-end/browser evidence, screenshots, commands, and outputs for seal. Not for single-slice proof.
4
4
  argument-hint: "[feature-slug]"
5
5
  user-invocable: true
6
+ required-agent-roles: devrites-proof-runner
6
7
  ---
7
8
 
8
9
  # /rite-prove: prove the completed feature