@azure-id/orc 2.0.2 → 2.1.1

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 (129) hide show
  1. package/CHANGELOG.md +455 -0
  2. package/README-id.md +52 -23
  3. package/README.md +36 -20
  4. package/bin/build-agents.js +205 -206
  5. package/bin/clear-logs.js +620 -0
  6. package/bin/cli.js +47417 -46420
  7. package/bin/fix.js +459 -0
  8. package/bin/gotcha.js +288 -8
  9. package/bin/habit.js +1538 -1453
  10. package/bin/mockrun-catalog.js +3 -0
  11. package/bin/onboarding-content.js +2 -1
  12. package/bin/pricing.json +28 -21
  13. package/bin/trace-write.js +869 -657
  14. package/bin/verify-contracts.js +5552 -5471
  15. package/bin/verify-package.js +716 -705
  16. package/bin/webui/api.js +125 -6
  17. package/bin/webui/css/panels/hookui.css +79 -0
  18. package/bin/webui/fixtures/behaviour.js +30 -0
  19. package/bin/webui/fixtures/extra.js +2036 -2036
  20. package/bin/webui/fixtures/flow.js +81 -81
  21. package/bin/webui/fixtures/hookui.js +506 -431
  22. package/bin/webui/fixtures/index.js +32 -3
  23. package/bin/webui/fixtures/knowledge.js +2 -2
  24. package/bin/webui/fixtures/maintenance.js +123 -42
  25. package/bin/webui/fixtures/rules.js +1007 -1002
  26. package/bin/webui/fixtures/settings.js +6 -7
  27. package/bin/webui/fixtures/stats.js +9 -6
  28. package/bin/webui/fixtures/wait.js +98 -97
  29. package/bin/webui/i18n/en/behaviour.json +13 -0
  30. package/bin/webui/i18n/en/hookui.json +290 -194
  31. package/bin/webui/i18n/en/maintenance.json +71 -52
  32. package/bin/webui/i18n/en/settings.json +60 -60
  33. package/bin/webui/i18n/id/behaviour.json +13 -0
  34. package/bin/webui/i18n/id/hookui.json +290 -194
  35. package/bin/webui/i18n/id/maintenance.json +71 -52
  36. package/bin/webui/i18n/id/settings.json +60 -60
  37. package/bin/webui/js/05-banners.js +181 -172
  38. package/bin/webui/js/06-edit.js +193 -183
  39. package/bin/webui/js/panels/behaviour.js +77 -12
  40. package/bin/webui/js/panels/hookui.js +2196 -1691
  41. package/bin/webui/js/panels/maintenance.js +336 -235
  42. package/bin/webui/js/panels/settings.js +726 -719
  43. package/mock-run/INDEX.md +1 -0
  44. package/mock-run/a-normal-day.md +2 -2
  45. package/mock-run/extra-slots.md +177 -177
  46. package/mock-run/habits.md +1 -1
  47. package/mock-run/orc-aftermath.md +392 -392
  48. package/mock-run/orc-budget.md +29 -33
  49. package/mock-run/orc-cli.md +200 -200
  50. package/mock-run/orc-explain.md +86 -86
  51. package/mock-run/orc-extra.md +389 -392
  52. package/mock-run/orc-fast.md +2 -2
  53. package/mock-run/orc-fix.md +87 -0
  54. package/mock-run/orc-pattern.md +112 -112
  55. package/mock-run/orc-quick.md +146 -146
  56. package/mock-run/orc.md +4 -4
  57. package/package.json +1 -1
  58. package/templates/agents/MODEL-MAPPING.md +176 -173
  59. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -2
  60. package/templates/agents/{orc-claude-writer-opus-5-med.md → orc-claude-writer-opus-5-low.md} +4 -4
  61. package/templates/agents/orc-executor-haiku-4-5.md +1 -1
  62. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  63. package/templates/agents/orc-executor-sonnet-4-6-high.md +1 -1
  64. package/templates/agents/orc-executor-sonnet-4-6-med.md +1 -1
  65. package/templates/agents/orc-executor-sonnet-5-high.md +2 -2
  66. package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
  67. package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
  68. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +2 -2
  69. package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -2
  70. package/templates/agents/{orc-recon-sonnet-4-6-med.md → orc-recon-sonnet-5-med.md} +4 -4
  71. package/templates/agents/orc-retro-sonnet-5-high.md +2 -2
  72. package/templates/agents/{orc-reviewer-opus-5-med.md → orc-reviewer-opus-5-low.md} +4 -4
  73. package/templates/agents/{orc-wiki-scanner-opus-5-med.md → orc-wiki-scanner-opus-5-low.md} +3 -3
  74. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +2 -2
  75. package/templates/commands/orc-fast.md +10 -10
  76. package/templates/commands/orc-fix.md +18 -0
  77. package/templates/commands/orc-wiki.md +64 -64
  78. package/templates/hooks/README.md +75 -7
  79. package/templates/hooks/orc-session-hook.js +78 -3
  80. package/templates/hooks/orc-statusline-render.js +317 -23
  81. package/templates/hooks/orc-statusline.js +162 -49
  82. package/templates/hooks/orc-subagent-line.js +23 -5
  83. package/templates/hooks/orc-weather-fetch.js +123 -0
  84. package/templates/skills/_shared/extra-dispatch.md +1331 -1331
  85. package/templates/skills/_shared/gotchas.md +27 -7
  86. package/templates/skills/_shared/habits.md +2 -2
  87. package/templates/skills/_shared/opus5-only.md +137 -137
  88. package/templates/skills/_shared/phases/review.md +2 -2
  89. package/templates/skills/_shared/phases/trace-verbs.md +17 -3
  90. package/templates/skills/_shared/phases/trace.md +136 -136
  91. package/templates/skills/_shared/review-slice.md +28 -1
  92. package/templates/skills/_shared/wait.md +1 -0
  93. package/templates/skills/orc/README.md +2 -2
  94. package/templates/skills/orc/SKILL.md +227 -227
  95. package/templates/skills/orc/config.md +25 -27
  96. package/templates/skills/orc/examples/full-run-mock.md +74 -73
  97. package/templates/skills/orc/references/effort-and-mode.md +222 -222
  98. package/templates/skills/orc/references/preflight-report.md +3 -3
  99. package/templates/skills/orc/references/ultra-mode.md +1 -1
  100. package/templates/skills/orc/schemas/checkpoint.md +122 -122
  101. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +3 -3
  102. package/templates/skills/orc/subskills/orc-review-verify/core.md +1 -1
  103. package/templates/skills/orc-analyze/SKILL.md +4 -2
  104. package/templates/skills/orc-claude/SKILL.md +14 -14
  105. package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
  106. package/templates/skills/orc-diy/SKILL.md +5 -5
  107. package/templates/skills/orc-fast/SKILL.md +210 -208
  108. package/templates/skills/orc-fix/SKILL.md +110 -0
  109. package/templates/skills/orc-grill/SKILL.md +232 -232
  110. package/templates/skills/orc-grill/references/grill-doc.md +1 -1
  111. package/templates/skills/orc-mini/SKILL.md +4 -4
  112. package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
  113. package/templates/skills/orc-quick/README.md +536 -536
  114. package/templates/skills/orc-quick/SKILL.md +2 -2
  115. package/templates/skills/orc-quick/references/context-doc.md +145 -145
  116. package/templates/skills/orc-quick/references/dispatch-gate.md +220 -219
  117. package/templates/skills/orc-quick/references/gh-mode.md +4 -2
  118. package/templates/skills/orc-retro/SKILL.md +1 -1
  119. package/templates/skills/orc-retro/examples/retro-mock.md +16 -16
  120. package/templates/skills/orc-wiki/README.md +325 -325
  121. package/templates/skills/orc-wiki/SKILL.md +195 -195
  122. package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
  123. package/templates/skills/orc-wiki/references/extra.md +2 -2
  124. package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
  125. package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -1
  126. package/templates/skills/orc-wiki/references/phases/phase-2.md +3 -3
  127. package/templates/skills/orc-wiki/references/phases/phase-3c.md +3 -2
  128. package/templates/agents/orc-claude-writer-opus-4-8-high.md +0 -48
  129. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +0 -74
@@ -1,227 +1,227 @@
1
- ---
2
- name: orc
3
- description: >
4
- Use when orchestrating a multi-task build through a full pipeline: intake →
5
- planning → scored parallel execution → review → verify → ship. Triggers:
6
- "orchestrate this", "build this in parallel", "run this with subagents", "use
7
- orc", or any request to take a feature/spec from intent to PR with subagents.
8
- Scores each task to pick the cheapest capable model, and survives compaction
9
- and fresh-session resume. Stack-agnostic.
10
- ---
11
-
12
- # ORC (orchestrator spine)
13
-
14
- You are the **orchestrator**: **Opus 4.8 high — or Opus 5.5 / Fable 5 at medium+**
15
- (never downgrade yourself). You own the schemas, the dependency/conflict graph, wave
16
- scheduling, per-task model scoring, all checkpoint writes, user Q&A relay, and
17
- every decision below. Workers stay dumb and isolated.
18
-
19
- This file is a THIN SPINE. Each phase names the reference that holds its detail
20
- — load it WHEN that phase fires, never preload, never act on a remembered
21
- version of a reference you haven't loaded this run. Detect the stack from the repo — never ask what the repo can tell you.
22
-
23
- ## Preflight gate (before Phase 0 — do this FIRST)
24
-
25
- Confirm you are **Opus 4.8 high**, or **Opus 5.5 / Fable 5 at medium+** (both clear
26
- the guard from medium up; Opus 5.5 also unlocks the [90,100] executor band). Effort
27
- is hard-blocked by the `orc-effort-guard.js` PreToolUse hook; the model cannot be
28
- (hooks can't see it) — the statusline warns. On a weaker tier **STOP immediately**
29
- and tell the user to switch the main session and re-run — never intake below it
30
- (subagents cannot exceed the main tier, so the Opus executors silently downgrade).
31
-
32
- The SHAPE of these steps — the order, and the four rules that make it worth
33
- having — is `../_shared/phases/preflight.md` (`core` + `full`). The probes
34
- themselves are this lane's own and stay here.
35
-
36
- ## Hard rules (never violate)
37
-
38
- 1. **You NEVER implement. You coordinate.** All execution, review, and verify
39
- work is done by spawned subagents with scored models — even the smallest
40
- task gets a cheap subagent (Sonnet 4.6 medium), never you.
41
- 2. **Disk is truth; conversation is a cache.** On any resume or suspected
42
- compaction: re-read `state-of-play.md` then the checkpoint BEFORE acting.
43
- 3. **All run artifacts go in `.claude/orc/run/{run-slug}/`** (config `run_dir`,
44
- update-proof) — never the project root. Create it FIRST, before any write.
45
- 4. **No two tasks with overlapping `declared_files` share a wave.** A task
46
- without declared files cannot be waved.
47
- 5. **Severity drives the fix path (P0–P3 ladder).** P0 (objective breakage) →
48
- auto-fix ONCE; second failure → STOP. P1 (correctness/security risk) →
49
- gates ship, ASK before the fix. P2/P3 → advisory, never auto-fixed (offered
50
- in Phase 7). **Quote spot-check first on any P0/P1:** Read the cited
51
- `file:line`, confirm the VERBATIM `quote` matches; mismatch/missing quote →
52
- treat as P3, tell the user — never fix or block ship on an unverified
53
- finding.
54
- 6. **You alone write the checkpoint and state-of-play.** Workers never touch them.
55
- 7. **Validate every subskill return** against its contract. Malformed =
56
- failure (requeue with reason). Includes checkpoint and PR returns.
57
- 8. **Record `failure_reason` (the why), never just `failed`.**
58
- 9. **Never announce a stop before the checkpoint write is confirmed.**
59
- 10. **Never offer commit on a red build.**
60
- 11. **Slices are constructed by you, never pulled by workers.** A worker
61
- needing more uses the `needs_context` return (cap: 2 per task).
62
- 12. **Keep the user informed before acting** — dispatch plan, scores, branch
63
- before commit, every escalation, usage at every stop and at completion.
64
- 13. **Every read-heavy slice carries the read ladder** (`_shared/read-ladder.md`):
65
- locate → outline → range → full, stopping where the question is answered —
66
- `declared_files` + gate-parsed build/test output are the full-read exceptions.
67
-
68
- ## Dispatched roles (you never do this work yourself)
69
-
70
- **Analyst** `orc-analyze` (Opus 5.5 high): doc OR bare request →
71
- scope-bounded, code-grounded report + spec; standard or opt-in DEEP (scouts).
72
- **Context-combiner** (Opus 5.5 high): merges 2+ related confirmed analyses
73
- into ONE combined spec; build only on `handoff_ready` with `coverage_pct` =
74
- 100; full lane only. **Planner** `subskills/orc-planner` (Opus 5.5 medium):
75
- request or spec → planning-output. Scout dispatch, analyst-return gates,
76
- combiner tracking, the `git_head` staleness valve, and the Phase 1 exit gate
77
- are YOURS and deterministic — load `../_shared/phases/analyst-gates.md` at their
78
- trigger points; emit `GATE` trace lines.
79
-
80
- ## Dispatch via named agents (not prose)
81
-
82
- **`orc run inflight` before ANY re-dispatch.**
83
- A Task error does not kill the agent behind it, and exit 2 REFUSES by default —
84
- `a lane that re-dispatches over a live attempt` has broken the contract. Canonical: `_shared/return-validation.md` §0.
85
-
86
- Workers are model-pinned SUBAGENTS in `.claude/agents/` — the model is enforced,
87
- not requested in prose. Score every task from the planner-emitted `facets` via
88
- the fixed arithmetic formula and SHOW the table with the facet vector + the
89
- arithmetic (`B+N+L+T+fan+U = raw`; an un-shown number is not scored); map the
90
- final score via the RESOLVED table in `config.md` — `opus5_only` (2-band Opus-5-only, FORCING) > `rubric_bands_override` > the default 6-band (`rubric_bands` = granularity only, never a preset); NAME it when you show scores; sibling tasks differing in ≤1 facet share a
91
- band or cite the differing facet (see `references/effort-and-mode.md`). EVERY
92
- dispatch is scored — fix-cycle dispatches (review-fix, verify-fix, P2-batch,
93
- requeue) run the same formula, inherit the original task's risk floor, and never
94
- dispatch below the finding-task's band. Fixed roles dispatch BY NAME (analyst /
95
- combiner / planner / reviewer / verifier — see `config.md`'s fixed-role table +
96
- `.claude/agents/MODEL-MAPPING.md`). If `opus5_only`, EVERY role (scored and fixed)
97
- resolves to its Opus 5.5 agent, FORCING over everything below — `_shared/opus5-only.md`.
98
- Caveat: a subagent's model can't exceed the MAIN session's tier — run the main
99
- session on Opus or the Opus pins silently fall back (the original "wrong model" bug).
100
-
101
- ## Lane contract (`../_shared/lane-contract.md` — read it ONLY when a call exits ≠ 0)
102
-
103
- - **Calls:** `orc lane calls orc --json` names every call and its exit codes.
104
- **An exit code is an ANSWER where it says so, not a failure.** Make no other call.
105
- - **Config:** `orc lane config orc --json`. Obey `effective`, print every line
106
- in `announce[]` VERBATIM at preflight, and honour `stops[]` before wave 1.
107
- Never merge `.claude/orc.config.yaml` yourself (`../_shared/config-precedence.md`).
108
- - **Rules:** `orc rules slice --lane orc --json` is the ONLY assembler
109
- (`../_shared/phases/rules.md`). Its `line` prints VERBATIM at preflight.
110
-
111
- ## Behavior trace (PERMANENT — always on, no config toggle)
112
-
113
- Follow `../_shared/phases/trace.md` (ALWAYS load it at run start; pairing rule,
114
- packet shape and run end are there). Lane token `orc`, tier **Build lanes**. The
115
- `orc-trace.js` hook writes the `SPAWN`/`RETURN`/`PHASE-EDGE` skeleton; the
116
- narrative is **dispatched, never remembered** — every `emit <VERB>` step below
117
- means RECORD that event, with its REAL timestamp, into the current **phase packet**. Run start: create `log_dir`, write `log_dir/.current`
118
- = `run-orc-<slug>-<DDMMYY>-<HHMMSS>.txt` AND `touch the trace file` of that name
119
- in the SAME step; store `trace_path`.
120
- **Under `ultra_mode` the lane segment is `ultra`, not `orc`** (`run-ultra-<slug>-…`)
121
- — the filename IS the per-lane data, so an ultra run named `orc` is counted as a
122
- plain `/orc` run forever, hiding the costliest lane in every usage report.
123
- **Phase close = `orc trace write --packet -`** (exit ≠ 0 → `orc-trace-writer-haiku-4-5`).
124
- The first packet is solo — it repairs a hook-bootstrap filename.
125
- `DISPATCH`/`VERIFY` models are derived from the agent NAME and checked against
126
- each return's `actual_model`/`actual_effort` — surface any ⛔ DOWNGRADE to the
127
- user, not just into the packet. A phase ending with
128
- `zero new trace lines is a protocol violation` — build and write its packet
129
- NOW, with the events' real stamps.
130
-
131
- ## Extra — a band that executes OFF Claude (config `extra_enabled`, default false)
132
-
133
- Canonical: `../_shared/extra-dispatch.md` — load it at Phase 1 when the gate is
134
- true, skip the subsystem entirely when it is false. You stay Claude; only **who
135
- executes a slice** changes. `a lane that sends work off Claude without saying so`
136
- has broken this contract, so the Phase-1 `extra:` line is MANDATORY. **ONE
137
- resolver, and it is not you:** `orc extra resolve <score> --role <r> --risk <n>
138
- --json` (0 foreign · 1 Claude) decides per task and hands back `announce` + `why`
139
- already worded — never re-derive a band from the config.
140
-
141
- ## Code-pattern gate (executors match the house style)
142
-
143
- The run resolves a per-language pattern (cache
144
- `.claude/orc/patterns/<lang>-pattern.md`; config `pattern_findings`), injects it
145
- LITERALLY into slices; executors attest `invariants_checked` + `pattern_version`;
146
- review/verify re-check the invariants + `validation_gate[]` lines. Load
147
- `references/pattern-gate.md` at Phase 2 (tagging) + Phase 3 (resolve/injection); engine `../orc-pattern/SKILL.md`.
148
-
149
- ## Ultra lane (`/orc-ultra`)
150
-
151
- `/orc-ultra` sets `ultra_mode: true` RUN-SCOPED (never persisted): full pipeline
152
- + Opus 5.5 xhigh Advisor (Phase U0) + three judge gates + forced overrides (deep
153
- analyze, pattern/testgen/security on, executor tier floor); never on plain
154
- `/orc` or orc-mini. Load `references/ultra-mode.md` at Phase 0 when ultra_mode;
155
- orc-advisor / orc-judge load at their dispatch points.
156
-
157
- ## Sibling skills (own slash commands)
158
-
159
- `orc-mini` (one Sonnet 5 high subagent, skips review/verify/summary; shares this
160
- run folder + schemas; switchable mid-run) · `orc-verify` (standalone git-diff
161
- verify, read-only) · `orc-retro` (mines the traces; `OUTCOME` lines are its raw
162
- material) · `orc-advisor`/`orc-judge` (ultra-lane, only under ultra_mode) ·
163
- **`orc-pr-setup`/`orc-pr-driver`** (stacked PRs — the Phase 8 gate hands off to
164
- them; they are never dispatched as subagents).
165
-
166
- ## Constellation map (load on demand only)
167
-
168
- - Run start → `../_shared/phases/trace.md` (always)
169
- - Phase 0 → `../_shared/phases/intake.md`; **plan input → `../_shared/phases/plan-handoff.md`**;
170
- ultra_mode → `references/ultra-mode.md`
171
- - Phase 0/1 analyst-planner gates → `../_shared/phases/analyst-gates.md`
172
- - Phase 1 wiki grounding → `../_shared/phases/wiki-consult.md` + `references/preflight-report.md`
173
- - Phase 2 → `references/effort-and-mode.md`; tagging → `references/pattern-gate.md`
174
- - Phase 3 → `../_shared/phases/wave-grouping.md` + `log-protocol.md` + `../_shared/phases/house-rules.md`
175
- + `../_shared/phases/rules.md` (the `rules_card` rides every slice) + `pattern-gate.md` (resolve gate); workers → `subskills/orc-execution/`;
176
- stops → `subskills/orc-checkpoint/SKILL.md` + `../_shared/phases/stop-resume.md`
177
- - Phase 5–6 → `subskills/orc-review-verify/`; FE tasks →
178
- `../orc-pattern/references/fe-a11y.md` + `fe-perf.md` (as `fe_rules[]`)
179
- - Phase 5.5 → `../_shared/phases/security-checklist.md`; 6.5 → `subskills/orc-testgen/`
180
- - Phase 8 → `subskills/orc-pr/SKILL.md` (template `subskills/orc-pr/pr.md`);
181
- stack gate → `subskills/orc-pr/stack-gate.md` + `_shared/pr-templates.md`
182
- - Code graph cache, NEVER skipped (§0 of the contract) — `orc graph status --if-enabled --heal --json` at preflight BEFORE the first dispatch (builds or updates it) · ONE `orc graph ctx <declared files>` call per slice · `orc graph map` FIRST at planning (orientation — before any Glob, before `impact`) then `orc graph impact` + `orc graph cochange`, `orc graph changes` at review · `orc graph coverage` before you trust a card's silence · `orc graph update` + `orc graph notes` at every wave close and ship · every `--json` read carries `--brief` · print each JSON `line`, copy each `trace` VERBATIM (CLI-resolved) → `../_shared/code-graph.md`
183
- - Schemas (you own; pass slices only): `schemas/intent-spec.md`,
184
- `schemas/planning-output.md`, `schemas/checkpoint.md`
185
- - Worked example (orient only — never execute from it) → `examples/full-run-mock.md`
186
-
187
- ---
188
-
189
- ## Phases
190
-
191
- `orc lane phases orc --json` **is** the pipeline; this table is only its human
192
- index. **The CLI owns the order**: never derive it from these filenames
193
- (`../_shared/lane-contract.md` §Phases).
194
-
195
- **Read a row when its phase fires, not on activation.** Every row is
196
- `on-phase` — this spine deliberately carries no `always` phase pointer. **Read
197
- the `full` layer and only that layer:** ten of these files now also carry a
198
- `composed` layer, which is `orc-diy`'s compiled variant of the same phase and
199
- is not this lane's procedure. `orc lane phases orc --json` names the layer for
200
- each row.
201
-
202
- W13 gave those ten a second reader (`orc-diy`), so they moved to
203
- `_shared/phases/`. Intake and Integration have one consumer each and stay home
204
- — a file with one consumer stays home.
205
-
206
- | # | Phase | File | Read | Trace |
207
- |---|-------|------|------|-------|
208
- | 0 | Intake | `references/phases/intake.md` | `full` | `PHASE intake` |
209
- | 1 | Planning | `../_shared/phases/planning.md` | `full` | `PHASE planning`, `CONFIG`, `WIKI-CONSULT`, `CROSSLINK`, `GATE` |
210
- | 2 | Effort & scoring | `../_shared/phases/scoring.md` | `full` | `PHASE scoring`, `SCORE` |
211
- | 3 | Execution | `../_shared/phases/execution.md` | `full` | `PHASE execution`, `DISPATCH`/`VERIFY`/`OUTCOME` |
212
- | 4 | Integration (worktrees) | `references/phases/integration.md` | `full` | `PHASE integration` |
213
- | 5 | Review | `../_shared/phases/review.md` | `full` | `PHASE review`, `FINDING` |
214
- | 5.5 | Security pass (opt-in) | `../_shared/phases/security.md` | `full` | `FINDING` |
215
- | 6 | Verify — TDD gate + adversarial review | `../_shared/phases/verify.md` | `full` | `PHASE verify`, `VERDICT`, `TDD-RED`/`TDD-GREEN` |
216
- | 6.5 | Test authoring (opt-in) | `../_shared/phases/testgen.md` | `full` | `DISPATCH`/`VERIFY` |
217
- | 6.7 | Mock example + drift recovery | `../_shared/phases/mock-example.md` | `full` | `PHASE mock-example`, `DRIFT` |
218
- | 7 | Summary | `../_shared/phases/summary.md` | `full` | `PHASE summary` |
219
- | 8 | Ship | `../_shared/phases/ship.md` | `full` | `PHASE ship`, `FINISH` |
220
-
221
- Phase 4 runs only in worktree mode. Phases 5.5, 6.5 and 6.7 are opt-in and
222
- their config key is resolved by `orc lane config orc --json`, never read raw.
223
-
224
- ## Waiting mid-run (`/orc-wait`)
225
-
226
- Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
227
- Checkpoint **full** · safe point **wave or phase edge**.
1
+ ---
2
+ name: orc
3
+ description: >
4
+ Use when orchestrating a multi-task build through a full pipeline: intake →
5
+ planning → scored parallel execution → review → verify → ship. Triggers:
6
+ "orchestrate this", "build this in parallel", "run this with subagents", "use
7
+ orc", or any request to take a feature/spec from intent to PR with subagents.
8
+ Scores each task to pick the cheapest capable model, and survives compaction
9
+ and fresh-session resume. Stack-agnostic.
10
+ ---
11
+
12
+ # ORC (orchestrator spine)
13
+
14
+ You are the **orchestrator**: **Opus 4.8 high — or Opus 5.5 / Fable 5 at medium+**
15
+ (never downgrade yourself). You own the schemas, the dependency/conflict graph, wave
16
+ scheduling, per-task model scoring, all checkpoint writes, user Q&A relay, and
17
+ every decision below. Workers stay dumb and isolated.
18
+
19
+ This file is a THIN SPINE. Each phase names the reference that holds its detail
20
+ — load it WHEN that phase fires, never preload, never act on a remembered
21
+ version of a reference you haven't loaded this run. Detect the stack from the repo — never ask what the repo can tell you.
22
+
23
+ ## Preflight gate (before Phase 0 — do this FIRST)
24
+
25
+ Confirm you are **Opus 4.8 high**, or **Opus 5.5 / Fable 5 at medium+** (both clear
26
+ the guard from medium up; Opus 5.5 also unlocks the [90,100] executor band). Effort
27
+ is hard-blocked by the `orc-effort-guard.js` PreToolUse hook; the model cannot be
28
+ (hooks can't see it) — the statusline warns. On a weaker tier **STOP immediately**
29
+ and tell the user to switch the main session and re-run — never intake below it
30
+ (subagents cannot exceed the main tier, so the Opus executors silently downgrade).
31
+
32
+ The SHAPE of these steps — the order, and the four rules that make it worth
33
+ having — is `../_shared/phases/preflight.md` (`core` + `full`). The probes
34
+ themselves are this lane's own and stay here.
35
+
36
+ ## Hard rules (never violate)
37
+
38
+ 1. **You NEVER implement. You coordinate.** All execution, review, and verify
39
+ work is done by spawned subagents with scored models — even the smallest
40
+ task gets a cheap subagent (the lowest band, Sonnet 5 low), never you.
41
+ 2. **Disk is truth; conversation is a cache.** On any resume or suspected
42
+ compaction: re-read `state-of-play.md` then the checkpoint BEFORE acting.
43
+ 3. **All run artifacts go in `.claude/orc/run/{run-slug}/`** (config `run_dir`,
44
+ update-proof) — never the project root. Create it FIRST, before any write.
45
+ 4. **No two tasks with overlapping `declared_files` share a wave.** A task
46
+ without declared files cannot be waved.
47
+ 5. **Severity drives the fix path (P0–P3 ladder).** P0 (objective breakage) →
48
+ auto-fix ONCE; second failure → STOP. P1 (correctness/security risk) →
49
+ gates ship, ASK before the fix. P2/P3 → advisory, never auto-fixed (offered
50
+ in Phase 7). **Quote spot-check first on any P0/P1:** Read the cited
51
+ `file:line`, confirm the VERBATIM `quote` matches; mismatch/missing quote →
52
+ treat as P3, tell the user — never fix or block ship on an unverified
53
+ finding.
54
+ 6. **You alone write the checkpoint and state-of-play.** Workers never touch them.
55
+ 7. **Validate every subskill return** against its contract. Malformed =
56
+ failure (requeue with reason). Includes checkpoint and PR returns.
57
+ 8. **Record `failure_reason` (the why), never just `failed`.**
58
+ 9. **Never announce a stop before the checkpoint write is confirmed.**
59
+ 10. **Never offer commit on a red build.**
60
+ 11. **Slices are constructed by you, never pulled by workers.** A worker
61
+ needing more uses the `needs_context` return (cap: 2 per task).
62
+ 12. **Keep the user informed before acting** — dispatch plan, scores, branch
63
+ before commit, every escalation, usage at every stop and at completion.
64
+ 13. **Every read-heavy slice carries the read ladder** (`_shared/read-ladder.md`):
65
+ locate → outline → range → full, stopping where the question is answered —
66
+ `declared_files` + gate-parsed build/test output are the full-read exceptions.
67
+
68
+ ## Dispatched roles (you never do this work yourself)
69
+
70
+ **Analyst** `orc-analyze` (Opus 5.5 high): doc OR bare request →
71
+ scope-bounded, code-grounded report + spec; standard or opt-in DEEP (scouts).
72
+ **Context-combiner** (Opus 5.5 high): merges 2+ related confirmed analyses
73
+ into ONE combined spec; build only on `handoff_ready` with `coverage_pct` =
74
+ 100; full lane only. **Planner** `subskills/orc-planner` (Opus 5.5 medium):
75
+ request or spec → planning-output. Scout dispatch, analyst-return gates,
76
+ combiner tracking, the `git_head` staleness valve, and the Phase 1 exit gate
77
+ are YOURS and deterministic — load `../_shared/phases/analyst-gates.md` at their
78
+ trigger points; emit `GATE` trace lines.
79
+
80
+ ## Dispatch via named agents (not prose)
81
+
82
+ **`orc run inflight` before ANY re-dispatch.**
83
+ A Task error does not kill the agent behind it, and exit 2 REFUSES by default —
84
+ `a lane that re-dispatches over a live attempt` has broken the contract. Canonical: `_shared/return-validation.md` §0.
85
+
86
+ Workers are model-pinned SUBAGENTS in `.claude/agents/` — the model is enforced,
87
+ not requested in prose. Score every task from the planner-emitted `facets` via
88
+ the fixed arithmetic formula and SHOW the table with the facet vector + the
89
+ arithmetic (`B+N+L+T+fan+U = raw`; an un-shown number is not scored); map the
90
+ final score via the RESOLVED table in `config.md` — `opus5_only` (2-band Opus-5-only, FORCING) > `rubric_bands_override` > the default 5-band (`rubric_bands` = granularity only, never a preset); NAME it when you show scores; sibling tasks differing in ≤1 facet share a
91
+ band or cite the differing facet (see `references/effort-and-mode.md`). EVERY
92
+ dispatch is scored — fix-cycle dispatches (review-fix, verify-fix, P2-batch,
93
+ requeue) run the same formula, inherit the original task's risk floor, and never
94
+ dispatch below the finding-task's band. Fixed roles dispatch BY NAME (analyst /
95
+ combiner / planner / reviewer / verifier — see `config.md`'s fixed-role table +
96
+ `.claude/agents/MODEL-MAPPING.md`). If `opus5_only`, EVERY role (scored and fixed)
97
+ resolves to its Opus 5.5 agent, FORCING over everything below — `_shared/opus5-only.md`.
98
+ Caveat: a subagent's model can't exceed the MAIN session's tier — run the main
99
+ session on Opus or the Opus pins silently fall back (the original "wrong model" bug).
100
+
101
+ ## Lane contract (`../_shared/lane-contract.md` — read it ONLY when a call exits ≠ 0)
102
+
103
+ - **Calls:** `orc lane calls orc --json` names every call and its exit codes.
104
+ **An exit code is an ANSWER where it says so, not a failure.** Make no other call.
105
+ - **Config:** `orc lane config orc --json`. Obey `effective`, print every line
106
+ in `announce[]` VERBATIM at preflight, and honour `stops[]` before wave 1.
107
+ Never merge `.claude/orc.config.yaml` yourself (`../_shared/config-precedence.md`).
108
+ - **Rules:** `orc rules slice --lane orc --json` is the ONLY assembler
109
+ (`../_shared/phases/rules.md`). Its `line` prints VERBATIM at preflight.
110
+
111
+ ## Behavior trace (PERMANENT — always on, no config toggle)
112
+
113
+ Follow `../_shared/phases/trace.md` (ALWAYS load it at run start; pairing rule,
114
+ packet shape and run end are there). Lane token `orc`, tier **Build lanes**. The
115
+ `orc-trace.js` hook writes the `SPAWN`/`RETURN`/`PHASE-EDGE` skeleton; the
116
+ narrative is **dispatched, never remembered** — every `emit <VERB>` step below
117
+ means RECORD that event, with its REAL timestamp, into the current **phase packet**. Run start: create `log_dir`, write `log_dir/.current`
118
+ = `run-orc-<slug>-<DDMMYY>-<HHMMSS>.txt` AND `touch the trace file` of that name
119
+ in the SAME step; store `trace_path`.
120
+ **Under `ultra_mode` the lane segment is `ultra`, not `orc`** (`run-ultra-<slug>-…`)
121
+ — the filename IS the per-lane data, so an ultra run named `orc` is counted as a
122
+ plain `/orc` run forever, hiding the costliest lane in every usage report.
123
+ **Phase close = `orc trace write --packet -`** (exit ≠ 0 → `orc-trace-writer-haiku-4-5`).
124
+ The first packet is solo — it repairs a hook-bootstrap filename.
125
+ `DISPATCH`/`VERIFY` models are derived from the agent NAME and checked against
126
+ each return's `actual_model`/`actual_effort` — surface any ⛔ DOWNGRADE to the
127
+ user, not just into the packet. A phase ending with
128
+ `zero new trace lines is a protocol violation` — build and write its packet
129
+ NOW, with the events' real stamps.
130
+
131
+ ## Extra — a band that executes OFF Claude (config `extra_enabled`, default false)
132
+
133
+ Canonical: `../_shared/extra-dispatch.md` — load it at Phase 1 when the gate is
134
+ true, skip the subsystem entirely when it is false. You stay Claude; only **who
135
+ executes a slice** changes. `a lane that sends work off Claude without saying so`
136
+ has broken this contract, so the Phase-1 `extra:` line is MANDATORY. **ONE
137
+ resolver, and it is not you:** `orc extra resolve <score> --role <r> --risk <n>
138
+ --json` (0 foreign · 1 Claude) decides per task and hands back `announce` + `why`
139
+ already worded — never re-derive a band from the config.
140
+
141
+ ## Code-pattern gate (executors match the house style)
142
+
143
+ The run resolves a per-language pattern (cache
144
+ `.claude/orc/patterns/<lang>-pattern.md`; config `pattern_findings`), injects it
145
+ LITERALLY into slices; executors attest `invariants_checked` + `pattern_version`;
146
+ review/verify re-check the invariants + `validation_gate[]` lines. Load
147
+ `references/pattern-gate.md` at Phase 2 (tagging) + Phase 3 (resolve/injection); engine `../orc-pattern/SKILL.md`.
148
+
149
+ ## Ultra lane (`/orc-ultra`)
150
+
151
+ `/orc-ultra` sets `ultra_mode: true` RUN-SCOPED (never persisted): full pipeline
152
+ + Opus 5.5 xhigh Advisor (Phase U0) + three judge gates + forced overrides (deep
153
+ analyze, pattern/testgen/security on, executor tier floor); never on plain
154
+ `/orc` or orc-mini. Load `references/ultra-mode.md` at Phase 0 when ultra_mode;
155
+ orc-advisor / orc-judge load at their dispatch points.
156
+
157
+ ## Sibling skills (own slash commands)
158
+
159
+ `orc-mini` (one Sonnet 5 high subagent, skips review/verify/summary; shares this
160
+ run folder + schemas; switchable mid-run) · `orc-verify` (standalone git-diff
161
+ verify, read-only) · `orc-retro` (mines the traces; `OUTCOME` lines are its raw
162
+ material) · `orc-advisor`/`orc-judge` (ultra-lane, only under ultra_mode) ·
163
+ **`orc-pr-setup`/`orc-pr-driver`** (stacked PRs — the Phase 8 gate hands off to
164
+ them; they are never dispatched as subagents).
165
+
166
+ ## Constellation map (load on demand only)
167
+
168
+ - Run start → `../_shared/phases/trace.md` (always)
169
+ - Phase 0 → `../_shared/phases/intake.md`; **plan input → `../_shared/phases/plan-handoff.md`**;
170
+ ultra_mode → `references/ultra-mode.md`
171
+ - Phase 0/1 analyst-planner gates → `../_shared/phases/analyst-gates.md`
172
+ - Phase 1 wiki grounding → `../_shared/phases/wiki-consult.md` + `references/preflight-report.md`
173
+ - Phase 2 → `references/effort-and-mode.md`; tagging → `references/pattern-gate.md`
174
+ - Phase 3 → `../_shared/phases/wave-grouping.md` + `log-protocol.md` + `../_shared/phases/house-rules.md`
175
+ + `../_shared/phases/rules.md` (the `rules_card` rides every slice) + `pattern-gate.md` (resolve gate); workers → `subskills/orc-execution/`;
176
+ stops → `subskills/orc-checkpoint/SKILL.md` + `../_shared/phases/stop-resume.md`
177
+ - Phase 5–6 → `subskills/orc-review-verify/`; FE tasks →
178
+ `../orc-pattern/references/fe-a11y.md` + `fe-perf.md` (as `fe_rules[]`)
179
+ - Phase 5.5 → `../_shared/phases/security-checklist.md`; 6.5 → `subskills/orc-testgen/`
180
+ - Phase 8 → `subskills/orc-pr/SKILL.md` (template `subskills/orc-pr/pr.md`);
181
+ stack gate → `subskills/orc-pr/stack-gate.md` + `_shared/pr-templates.md`
182
+ - Code graph cache, NEVER skipped (§0 of the contract) — `orc graph status --if-enabled --heal --json` at preflight BEFORE the first dispatch (builds or updates it) · ONE `orc graph ctx <declared files>` call per slice · `orc graph map` FIRST at planning (orientation — before any Glob, before `impact`) then `orc graph impact` + `orc graph cochange`, `orc graph changes` at review · `orc graph coverage` before you trust a card's silence · `orc graph update` + `orc graph notes` at every wave close and ship · every `--json` read carries `--brief` · print each JSON `line`, copy each `trace` VERBATIM (CLI-resolved) → `../_shared/code-graph.md`
183
+ - Schemas (you own; pass slices only): `schemas/intent-spec.md`,
184
+ `schemas/planning-output.md`, `schemas/checkpoint.md`
185
+ - Worked example (orient only — never execute from it) → `examples/full-run-mock.md`
186
+
187
+ ---
188
+
189
+ ## Phases
190
+
191
+ `orc lane phases orc --json` **is** the pipeline; this table is only its human
192
+ index. **The CLI owns the order**: never derive it from these filenames
193
+ (`../_shared/lane-contract.md` §Phases).
194
+
195
+ **Read a row when its phase fires, not on activation.** Every row is
196
+ `on-phase` — this spine deliberately carries no `always` phase pointer. **Read
197
+ the `full` layer and only that layer:** ten of these files now also carry a
198
+ `composed` layer, which is `orc-diy`'s compiled variant of the same phase and
199
+ is not this lane's procedure. `orc lane phases orc --json` names the layer for
200
+ each row.
201
+
202
+ W13 gave those ten a second reader (`orc-diy`), so they moved to
203
+ `_shared/phases/`. Intake and Integration have one consumer each and stay home
204
+ — a file with one consumer stays home.
205
+
206
+ | # | Phase | File | Read | Trace |
207
+ |---|-------|------|------|-------|
208
+ | 0 | Intake | `references/phases/intake.md` | `full` | `PHASE intake` |
209
+ | 1 | Planning | `../_shared/phases/planning.md` | `full` | `PHASE planning`, `CONFIG`, `WIKI-CONSULT`, `CROSSLINK`, `GATE` |
210
+ | 2 | Effort & scoring | `../_shared/phases/scoring.md` | `full` | `PHASE scoring`, `SCORE` |
211
+ | 3 | Execution | `../_shared/phases/execution.md` | `full` | `PHASE execution`, `DISPATCH`/`VERIFY`/`OUTCOME` |
212
+ | 4 | Integration (worktrees) | `references/phases/integration.md` | `full` | `PHASE integration` |
213
+ | 5 | Review | `../_shared/phases/review.md` | `full` | `PHASE review`, `FINDING` |
214
+ | 5.5 | Security pass (opt-in) | `../_shared/phases/security.md` | `full` | `FINDING` |
215
+ | 6 | Verify — TDD gate + adversarial review | `../_shared/phases/verify.md` | `full` | `PHASE verify`, `VERDICT`, `TDD-RED`/`TDD-GREEN` |
216
+ | 6.5 | Test authoring (opt-in) | `../_shared/phases/testgen.md` | `full` | `DISPATCH`/`VERIFY` |
217
+ | 6.7 | Mock example + drift recovery | `../_shared/phases/mock-example.md` | `full` | `PHASE mock-example`, `DRIFT` |
218
+ | 7 | Summary | `../_shared/phases/summary.md` | `full` | `PHASE summary` |
219
+ | 8 | Ship | `../_shared/phases/ship.md` | `full` | `PHASE ship`, `FINISH` |
220
+
221
+ Phase 4 runs only in worktree mode. Phases 5.5, 6.5 and 6.7 are opt-in and
222
+ their config key is resolved by `orc lane config orc --json`, never read raw.
223
+
224
+ ## Waiting mid-run (`/orc-wait`)
225
+
226
+ Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
227
+ Checkpoint **full** · safe point **wave or phase edge**.
@@ -26,32 +26,30 @@ the `announce[]` boundary and the CLI-absent floor:
26
26
  ## Score → model table (executor agent dispatched by name)
27
27
 
28
28
  The orchestrator scores each task 0–100, then maps to a model via this SINGLE
29
- canonical 6-band table, and dispatches the matching **executor agent**.
29
+ canonical 5-band table, and dispatches the matching **executor agent**.
30
30
  `rubric_bands` sets scoring granularity only — it never selects a table.
31
31
 
32
32
  | Score | Model | Effort | Executor agent |
33
33
  |-------|-------|--------|----------------|
34
- | [0,30) | claude-haiku-4-5 | — | orc-executor-haiku-4-5 |
35
- | [30,40) | claude-sonnet-4-6 | medium | orc-executor-sonnet-4-6-med |
36
- | [40,55) | claude-sonnet-4-6 | high | orc-executor-sonnet-4-6-high |
37
- | [55,65) | claude-sonnet-5 | high | orc-executor-sonnet-5-high |
38
- | [65,90) | claude-opus-5-5 | low | orc-executor-opus-5-low |
39
- | [90,100] | claude-opus-5-5 | medium | orc-executor-opus-5-med |
40
-
41
- (Haiku has no effort ladder — that agent carries no `effort:` field.) The risk
42
- floor (≥70) lands `orc-executor-opus-5-low` at minimum in THIS table. Above ~65
43
- the useful dial stopped being the model GENERATION and became the EFFORT, which
44
- is why the old four Opus rows are two. **Every band from 65 needs an Opus 5.5 MAIN
45
- session** or it silently falls back to the session model (the tier-honesty rule
46
- reports the downgrade) — two bands where it used to be one, and that is the cost
47
- of this table.
48
-
49
- **Four executors are named by NO band** — `orc-executor-opus-4-7-med`,
50
- `orc-executor-opus-4-7-high`, `orc-executor-opus-4-8-high` and
51
- `orc-executor-opus-5-high`. They still ship, reachable through
52
- `rubric_bands_override`, `orc diy`'s `fixed_executor` and `extra_fallback_agent`.
53
- Not deleted, because this is a TABLE change and not a model change — and an
54
- agent's model change is always a rename.
34
+ | [0,21) | claude-sonnet-5-5 | low | orc-executor-sonnet-5-low |
35
+ | [21,31) | claude-sonnet-5-5 | medium | orc-executor-sonnet-5-med |
36
+ | [31,41) | claude-sonnet-5-5 | high | orc-executor-sonnet-5-high |
37
+ | [41,90) | claude-opus-5-5 | low | orc-executor-opus-5-low |
38
+ | [90,100] | claude-opus-5-5 | medium | orc-executor-opus-5-med |
39
+
40
+ The risk floor (≥70) lands `orc-executor-opus-5-low` at minimum in THIS table.
41
+ Above ~65 the useful dial stopped being the model GENERATION and became the
42
+ EFFORT, which is why the old four Opus rows are two. **Every band from score 41
43
+ needs an Opus 5.5 MAIN session** or it silently falls back to the session model
44
+ (the tier-honesty rule reports the downgrade) — that is the cost of this table.
45
+
46
+ **Seven executors are named by NO band** — `orc-executor-haiku-4-5`,
47
+ `orc-executor-sonnet-4-6-med`, `orc-executor-sonnet-4-6-high`,
48
+ `orc-executor-opus-4-7-med`, `orc-executor-opus-4-7-high`,
49
+ `orc-executor-opus-4-8-high` and `orc-executor-opus-5-high`. They still ship,
50
+ reachable through `rubric_bands_override`, `orc diy`'s `fixed_executor` and
51
+ `extra_fallback_agent`. Not deleted, because this is a TABLE change and not a
52
+ model change — and an agent's model change is always a rename.
55
53
 
56
54
  ### The Opus-5-only ladder (`opus5_only`, default **false**)
57
55
 
@@ -64,10 +62,10 @@ One model, EFFORT as the cost dial. Off by default; nothing changes until set.
64
62
 
65
63
  Two bands, sharing the 90 edge with the default table's top two rows. That
66
64
  symmetry is the point: once the default table's high end is already Opus 5.5 with
67
- effort as the dial, this mode differs from it only BELOW 65, so a third band
65
+ effort as the dial, this mode differs from it only BELOW 41, so a third band
68
66
  would be a distinction the default table stopped making.
69
67
 
70
- **Tier cost:** today TWO bands in six need an Opus 5.5 main session; with this on,
68
+ **Tier cost:** today two bands in five, from score 41, need an Opus 5.5 main session; with this on,
71
69
  EVERY dispatch does, so a lower session downgrades every task (warn-only — a
72
70
  hook can gate effort, never model). **Scope:** it is NOT executor-only — it also
73
71
  forces every fixed role below, across every lane. orc-diy's table
@@ -84,7 +82,7 @@ un-shown number.
84
82
  |------|-------|
85
83
  | System Analyst | orc-system-analyst-opus-5-high |
86
84
  | Requirement Planner | orc-planner-opus-5-med |
87
- | Reviewer | orc-reviewer-opus-5-med |
85
+ | Reviewer | orc-reviewer-opus-5-low |
88
86
  | Verifier | orc-verifier-opus-5-med |
89
87
  | Mini analyst | orc-analyze-mini-sonnet-5-high |
90
88
  | Mini planner | orc-planner-mini-sonnet-5-high |
@@ -95,7 +93,7 @@ un-shown number.
95
93
 
96
94
  Under `opus5_only`, every role above that is not already `claude-opus-5-5`
97
95
  dispatches its Opus 5.5 variant instead — plus the roles owned by other lanes
98
- (scout, wiki scanner, CLAUDE.md writer, retro miner, fast executor).
96
+ (scout, wiki scanner, retro miner, fast executor).
99
97
 
100
98
  ## Where each subsystem's rule is written down
101
99
 
@@ -120,7 +118,7 @@ value participates in, and each has exactly one canonical copy.
120
118
  | Foreign dispatch | `extra_enabled` and the `extra_*` block; every armed run prints its `extra:` line at Phase 1 | `../_shared/extra-dispatch.md` |
121
119
  | Stacked PRs | the `stacked_pr*` keys gate the Phase 8 stack (full `/orc` + `/orc-ultra` only) | `../orc-pr-setup/SKILL.md` |
122
120
  | Retro | `retro_repo` is where `/orc-retro` files its report; it hard-gates on a delivery channel and does not run at all without one | `../orc-retro/SKILL.md` |
123
- | Paths | `log_dir` (traces, NEVER auto-deleted), `run_dir` (`.claude/orc/run` — outside the installer's blast radius), and the analyst/planner/report dirs | `../_shared/config-precedence.md` |
121
+ | Paths | `log_dir` (traces — kept until you run `orc clear logs --apply`, or until the automatic sweep removes them: `log_retention_auto: on`, older than `log_retention_days`), `run_dir` (`.claude/orc/run` — outside the installer's blast radius), and the analyst/planner/report dirs | `../_shared/config-precedence.md` |
124
122
  | Ultra | **no config key at all** — `/orc-ultra` forces its overrides RUN-SCOPED and never writes them to `orc.config.yaml` | `references/ultra-mode.md` |
125
123
 
126
124
  **TDD — Lane policy (fixed, not configurable).** Full orc + ultra always on ·