@azure-id/orc 1.9.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/CHANGELOG.md +722 -0
  2. package/README-id.md +56 -42
  3. package/README.md +58 -41
  4. package/bin/build-agents.js +125 -29
  5. package/bin/clear-logs.js +620 -0
  6. package/bin/cli.js +1873 -180
  7. package/bin/fix.js +459 -0
  8. package/bin/gotcha-import.js +1081 -0
  9. package/bin/gotcha.js +1566 -0
  10. package/bin/graph-query.js +1 -1
  11. package/bin/graph.js +717 -717
  12. package/bin/habit.js +1538 -0
  13. package/bin/mockrun-catalog.js +284 -276
  14. package/bin/onboarding-content.js +2 -1
  15. package/bin/pricing.json +28 -21
  16. package/bin/run-undo.js +398 -0
  17. package/bin/trace-write.js +869 -0
  18. package/bin/verify-contracts.js +627 -100
  19. package/bin/verify-package.js +68 -10
  20. package/bin/webui/api.js +151 -6
  21. package/bin/webui/app.html +239 -232
  22. package/bin/webui/css/00-tokens.css +110 -92
  23. package/bin/webui/css/04-motion.css +87 -0
  24. package/bin/webui/css/06-responsive.css +203 -178
  25. package/bin/webui/css/panels/behaviour.css +205 -0
  26. package/bin/webui/css/panels/hookui.css +79 -0
  27. package/bin/webui/fixtures/behaviour.js +562 -0
  28. package/bin/webui/fixtures/extra.js +9 -9
  29. package/bin/webui/fixtures/flow.js +81 -81
  30. package/bin/webui/fixtures/hookui.js +506 -431
  31. package/bin/webui/fixtures/index.js +66 -3
  32. package/bin/webui/fixtures/knowledge.js +9 -3
  33. package/bin/webui/fixtures/maintenance.js +123 -42
  34. package/bin/webui/fixtures/rules.js +1007 -1002
  35. package/bin/webui/fixtures/settings.js +6 -7
  36. package/bin/webui/fixtures/stats.js +25 -6
  37. package/bin/webui/fixtures/wait.js +98 -97
  38. package/bin/webui/i18n/en/behaviour.json +156 -0
  39. package/bin/webui/i18n/en/hookui.json +290 -194
  40. package/bin/webui/i18n/en/maintenance.json +71 -52
  41. package/bin/webui/i18n/en/nav.json +25 -24
  42. package/bin/webui/i18n/en/settings.json +60 -60
  43. package/bin/webui/i18n/en/tour.json +37 -35
  44. package/bin/webui/i18n/id/behaviour.json +156 -0
  45. package/bin/webui/i18n/id/hookui.json +290 -194
  46. package/bin/webui/i18n/id/maintenance.json +71 -52
  47. package/bin/webui/i18n/id/nav.json +25 -24
  48. package/bin/webui/i18n/id/settings.json +60 -60
  49. package/bin/webui/i18n/id/tour.json +37 -35
  50. package/bin/webui/js/01-i18n.js +155 -154
  51. package/bin/webui/js/05-banners.js +181 -172
  52. package/bin/webui/js/06-edit.js +193 -183
  53. package/bin/webui/js/90-tour.js +498 -494
  54. package/bin/webui/js/91-shortcuts.js +126 -126
  55. package/bin/webui/js/99-boot.js +121 -118
  56. package/bin/webui/js/panels/behaviour.js +1087 -0
  57. package/bin/webui/js/panels/hookui.js +2196 -1691
  58. package/bin/webui/js/panels/maintenance.js +336 -235
  59. package/bin/webui/js/panels/settings.js +726 -719
  60. package/mock-run/INDEX.md +110 -107
  61. package/mock-run/extra-slots.md +1 -1
  62. package/mock-run/gotcha-import.md +118 -0
  63. package/mock-run/habits.md +129 -0
  64. package/mock-run/orc-aftermath.md +392 -392
  65. package/mock-run/orc-budget.md +29 -33
  66. package/mock-run/orc-cli.md +200 -200
  67. package/mock-run/orc-explain.md +86 -86
  68. package/mock-run/orc-extra.md +389 -392
  69. package/mock-run/orc-fix.md +87 -0
  70. package/mock-run/orc-pattern.md +112 -112
  71. package/mock-run/orc-quick.md +6 -1
  72. package/mock-run/orc.md +157 -157
  73. package/package.json +1 -1
  74. package/templates/agents/MODEL-MAPPING.md +37 -34
  75. package/templates/agents/orc-advisor-opus-5-xhigh.md +1 -7
  76. package/templates/agents/orc-analyze-mini-opus-5-med.md +1 -6
  77. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -5
  78. package/templates/agents/{orc-claude-writer-opus-4-8-high.md → orc-claude-writer-opus-5-low.md} +48 -53
  79. package/templates/agents/orc-context-combiner-opus-5-high.md +1 -11
  80. package/templates/agents/orc-executor-haiku-4-5.md +14 -6
  81. package/templates/agents/orc-executor-opus-4-7-high.md +14 -6
  82. package/templates/agents/orc-executor-opus-4-7-med.md +14 -6
  83. package/templates/agents/orc-executor-opus-4-8-high.md +14 -6
  84. package/templates/agents/orc-executor-opus-5-high.md +14 -6
  85. package/templates/agents/orc-executor-opus-5-low.md +14 -6
  86. package/templates/agents/orc-executor-opus-5-med.md +14 -6
  87. package/templates/agents/orc-executor-sonnet-4-6-high.md +14 -6
  88. package/templates/agents/orc-executor-sonnet-4-6-med.md +14 -6
  89. package/templates/agents/orc-executor-sonnet-5-high.md +15 -7
  90. package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
  91. package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
  92. package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -10
  93. package/templates/agents/orc-judge-opus-5-xhigh.md +5 -9
  94. package/templates/agents/orc-learn-writer-opus-5-low.md +1 -7
  95. package/templates/agents/orc-pattern-codifier-opus-5-med.md +1 -8
  96. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +58 -63
  97. package/templates/agents/orc-planner-mini-opus-5-med.md +1 -4
  98. package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -3
  99. package/templates/agents/orc-planner-opus-5-med.md +1 -4
  100. package/templates/agents/orc-recon-opus-5-low.md +1 -8
  101. package/templates/agents/orc-recon-sonnet-4-6-med.md +1 -8
  102. package/templates/agents/orc-retro-opus-5-med.md +6 -8
  103. package/templates/agents/orc-retro-sonnet-5-high.md +7 -8
  104. package/templates/agents/orc-reviewer-opus-5-low.md +96 -0
  105. package/templates/agents/orc-scout-opus-5-low.md +1 -6
  106. package/templates/agents/orc-scout-sonnet-4-6-high.md +35 -39
  107. package/templates/agents/orc-system-analyst-opus-5-high.md +1 -6
  108. package/templates/agents/orc-test-author-opus-5-med.md +4 -5
  109. package/templates/agents/orc-trace-writer-haiku-4-5.md +3 -7
  110. package/templates/agents/orc-verifier-opus-5-med.md +16 -8
  111. package/templates/agents/{orc-wiki-scanner-opus-4-8-high.md → orc-wiki-scanner-opus-5-low.md} +74 -79
  112. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +97 -106
  113. package/templates/commands/orc-analyze.md +13 -21
  114. package/templates/commands/orc-fast.md +10 -15
  115. package/templates/commands/orc-fix.md +18 -0
  116. package/templates/commands/orc-poly.md +12 -21
  117. package/templates/commands/orc-pr-driver.md +11 -30
  118. package/templates/commands/orc-pr-setup.md +10 -31
  119. package/templates/commands/orc-route.md +11 -41
  120. package/templates/commands/orc-test.md +5 -60
  121. package/templates/commands/orc-wiki.md +64 -64
  122. package/templates/hooks/README.md +109 -7
  123. package/templates/hooks/orc-session-hook.js +339 -0
  124. package/templates/hooks/orc-statusline-render.js +317 -23
  125. package/templates/hooks/orc-statusline.js +165 -50
  126. package/templates/hooks/orc-subagent-line.js +23 -5
  127. package/templates/hooks/orc-weather-fetch.js +123 -0
  128. package/templates/skills/_shared/README.md +9 -0
  129. package/templates/skills/_shared/code-graph.md +47 -55
  130. package/templates/skills/_shared/config-precedence.md +3 -1
  131. package/templates/skills/_shared/extra-dispatch.md +78 -93
  132. package/templates/skills/_shared/gotchas.md +248 -177
  133. package/templates/skills/_shared/habits.md +101 -0
  134. package/templates/skills/_shared/lane-contract.md +84 -0
  135. package/templates/skills/_shared/opus5-only.md +14 -14
  136. package/templates/skills/_shared/phases/README.md +142 -83
  137. package/templates/skills/_shared/phases/analyst-gates.md +10 -21
  138. package/templates/skills/_shared/phases/execution.md +8 -14
  139. package/templates/skills/_shared/phases/house-rules.md +27 -32
  140. package/templates/skills/_shared/phases/intake.md +127 -133
  141. package/templates/skills/_shared/phases/mock-example.md +46 -56
  142. package/templates/skills/_shared/phases/plan-handoff.md +91 -97
  143. package/templates/skills/_shared/phases/planning.md +7 -17
  144. package/templates/skills/_shared/phases/preflight.md +19 -42
  145. package/templates/skills/_shared/phases/review.md +24 -28
  146. package/templates/skills/_shared/phases/rules.md +18 -42
  147. package/templates/skills/_shared/phases/scoring.md +55 -65
  148. package/templates/skills/_shared/phases/security-checklist.md +46 -50
  149. package/templates/skills/_shared/phases/security.md +45 -55
  150. package/templates/skills/_shared/phases/ship.md +6 -15
  151. package/templates/skills/_shared/phases/stop-resume.md +2 -5
  152. package/templates/skills/_shared/phases/summary.md +73 -48
  153. package/templates/skills/_shared/phases/testgen.md +41 -51
  154. package/templates/skills/_shared/phases/trace-verbs.md +447 -0
  155. package/templates/skills/_shared/phases/trace.md +66 -297
  156. package/templates/skills/_shared/phases/verify.md +62 -70
  157. package/templates/skills/_shared/phases/wave-grouping.md +128 -133
  158. package/templates/skills/_shared/phases/wiki-consult.md +10 -6
  159. package/templates/skills/_shared/read-ladder.md +2 -55
  160. package/templates/skills/_shared/return-validation.md +17 -70
  161. package/templates/skills/_shared/review-slice.md +106 -0
  162. package/templates/skills/_shared/smoke-gate.md +46 -28
  163. package/templates/skills/_shared/wait.md +1 -0
  164. package/templates/skills/context-combiner/SKILL.md +15 -44
  165. package/templates/skills/orc/README.md +2 -2
  166. package/templates/skills/orc/SKILL.md +35 -63
  167. package/templates/skills/orc/config.md +25 -27
  168. package/templates/skills/orc/examples/full-run-mock.md +2 -1
  169. package/templates/skills/orc/references/effort-and-mode.md +17 -17
  170. package/templates/skills/orc/references/pattern-gate.md +89 -89
  171. package/templates/skills/orc/references/phases/intake.md +41 -47
  172. package/templates/skills/orc/references/phases/integration.md +13 -19
  173. package/templates/skills/orc/references/preflight-report.md +11 -12
  174. package/templates/skills/orc/references/ultra-mode.md +9 -7
  175. package/templates/skills/orc/schemas/checkpoint.md +122 -122
  176. package/templates/skills/orc/subskills/orc-execution/SKILL.md +27 -73
  177. package/templates/skills/orc/subskills/orc-execution/core.md +12 -99
  178. package/templates/skills/orc/subskills/orc-execution/subagent.md +14 -13
  179. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +12 -53
  180. package/templates/skills/orc/subskills/orc-review-verify/core.md +52 -135
  181. package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -7
  182. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +11 -22
  183. package/templates/skills/orc/subskills/orc-testgen/core.md +20 -59
  184. package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -7
  185. package/templates/skills/orc-advisor/SKILL.md +56 -60
  186. package/templates/skills/orc-analyze/SKILL.md +33 -67
  187. package/templates/skills/orc-analyze/schemas/report-audit.md +2 -1
  188. package/templates/skills/orc-analyze/schemas/report-prose.md +2 -1
  189. package/templates/skills/orc-analyze-mini/SKILL.md +35 -70
  190. package/templates/skills/orc-claude/SKILL.md +14 -14
  191. package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
  192. package/templates/skills/orc-diy/README.md +31 -0
  193. package/templates/skills/orc-diy/SKILL.md +27 -78
  194. package/templates/skills/orc-diy/references/blocks/pattern.md +18 -18
  195. package/templates/skills/orc-fast/SKILL.md +49 -75
  196. package/templates/skills/orc-fix/SKILL.md +110 -0
  197. package/templates/skills/orc-judge/SKILL.md +77 -82
  198. package/templates/skills/orc-mini/SKILL.md +64 -112
  199. package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
  200. package/templates/skills/orc-pattern/SKILL.md +27 -48
  201. package/templates/skills/orc-poly/SKILL.md +32 -61
  202. package/templates/skills/orc-pr-driver/SKILL.md +25 -51
  203. package/templates/skills/orc-pr-driver/references/green-gate.md +113 -105
  204. package/templates/skills/orc-pr-setup/SKILL.md +20 -45
  205. package/templates/skills/orc-quick/README.md +44 -3
  206. package/templates/skills/orc-quick/SKILL.md +77 -108
  207. package/templates/skills/orc-quick/references/dispatch-gate.md +18 -6
  208. package/templates/skills/orc-quick/references/gh-mode.md +50 -1
  209. package/templates/skills/orc-quick/references/look.md +3 -1
  210. package/templates/skills/orc-retro/SKILL.md +20 -19
  211. package/templates/skills/orc-retro/examples/retro-mock.md +17 -17
  212. package/templates/skills/orc-route/SKILL.md +25 -45
  213. package/templates/skills/orc-test/SKILL.md +16 -37
  214. package/templates/skills/orc-verify/SKILL.md +14 -32
  215. package/templates/skills/orc-wait/SKILL.md +156 -163
  216. package/templates/skills/orc-wiki/README.md +325 -325
  217. package/templates/skills/orc-wiki/SKILL.md +195 -195
  218. package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
  219. package/templates/skills/orc-wiki/references/extra.md +2 -2
  220. package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
  221. package/templates/skills/orc-wiki/references/phases/phase-0.md +2 -7
  222. package/templates/skills/orc-wiki/references/phases/phase-1.md +1 -6
  223. package/templates/skills/orc-wiki/references/phases/phase-2.md +4 -9
  224. package/templates/skills/orc-wiki/references/phases/phase-3.md +1 -6
  225. package/templates/skills/orc-wiki/references/phases/phase-3c.md +4 -8
  226. package/templates/agents/orc-claude-writer-opus-5-med.md +0 -55
  227. package/templates/agents/orc-reviewer-opus-5-med.md +0 -60
  228. package/templates/agents/orc-wiki-scanner-opus-5-med.md +0 -81
@@ -1,28 +1,46 @@
1
- # Smoke gate (read-only build + test ship gate)
2
-
3
- Canonical procedure for the smoke gate run by orc-mini (Phase M) and orc-fast
4
- (Phase F3). The gate is the orchestrator's INDEPENDENT check — the executor's
5
- `evidence` is a claim; your run is the verification (when they disagree, say
6
- so). Running build+test is read-only and is NOT implementation: you still
7
- never write code.
8
-
9
- ## Procedure
10
-
11
- 1. Discover the commands: prefer the wiki manifest's `commands` block when it
12
- exists (recorded at scan time — don't rediscover tooling); otherwise detect
13
- the stack's build + test runner once and say which you chose.
14
- 2. Run build, then the fast test suite, once each.
15
- 3. Verdict (emit the `VERDICT pass|fail` trace line):
16
- - **GREEN** → proceed to the lane's next step (test-ask / ship).
17
- - **RED** → **never offer commit/ship.** Surface the failure verbatim, then
18
- ONE repair round: re-dispatch the SAME executor with the failing output
19
- as `failure_reason`, and re-run this gate. A second RED → STOP and
20
- surface; the lane names its escalation options (mini: stop; fast:
21
- escalate to orc-mini / switch to full `/orc` / stop).
22
- - **No runnable build/test** (docs-only repo) → say so explicitly; the
23
- gate is N/A — never silently skip it.
24
-
25
- ## What it is not
26
-
27
- Smoke, not verification: no findings classification, no criteria matrix, no
28
- severity ladder. A run that needs that depth belongs in the full lane.
1
+ # Smoke gate (read-only build + test ship gate)
2
+
3
+ Canonical procedure for the smoke gate run by orc-mini (Phase M) and orc-fast
4
+ (Phase F3). The gate is the orchestrator's INDEPENDENT check — the executor's
5
+ `evidence` is a claim; your run is the verification (when they disagree, say
6
+ so). Running build+test is read-only and is NOT implementation: you still
7
+ never write code.
8
+
9
+ ## Procedure
10
+
11
+ 1. Discover the commands: prefer the wiki manifest's `commands` block when it
12
+ exists (recorded at scan time — don't rediscover tooling); otherwise detect
13
+ the stack's build + test runner once and say which you chose.
14
+ 2. Run build, then the fast test suite, once each.
15
+ 3. Verdict (emit the `VERDICT pass|fail` trace line):
16
+ - **GREEN** → proceed to the lane's next step (test-ask / ship).
17
+ - **RED** → **never offer commit/ship.** Run the flaky check first
18
+ (§Flaky). Still red → surface the failure verbatim, then
19
+ ONE repair round: re-dispatch the SAME executor with the failing output
20
+ as `failure_reason`, and re-run this gate. A second RED → STOP and
21
+ surface; the lane names its escalation options (mini: stop; fast:
22
+ escalate to orc-mini / switch to full `/orc` / stop).
23
+ - **No runnable build/test** (docs-only repo) → say so explicitly; the
24
+ gate is N/A — never silently skip it.
25
+
26
+ ## Flaky — before any repair round
27
+
28
+ **Everywhere a test runs** (this gate, `/orc-quick` §3.2, `/orc` verify's TDD
29
+ gate, every repair loop): a RED test run gets ONE identical re-run of ONLY the
30
+ failing tests, before any repair. Save both outputs, then ask the CLI — never
31
+ judge it yourself:
32
+
33
+ `orc ci flaky --first <log> --rerun <log> [--rerun-exit <n>] --json`
34
+
35
+ - `--first` alone names the failing tests to re-run (`tests_failed[]`).
36
+ - Exit 0 = **FLAKY**: every failing test passed on the re-run. Emit its
37
+ `gate_line` (`GATE flaky :: <tests>`), report the tests, and do NOT start a
38
+ repair round. A flaky run is not red and does not use a round.
39
+ - Exit 1 = red (a test failed again, did not run, or the re-run exited ≠ 0) →
40
+ the repair round as usual. Exit 3 = no test name in the log → red.
41
+ - One re-run only. Never re-run until green.
42
+
43
+ ## What it is not
44
+
45
+ Smoke, not verification: no findings classification, no criteria matrix, no
46
+ severity ladder. A run that needs that depth belongs in the full lane.
@@ -110,6 +110,7 @@ the other fails the suite.
110
110
  | `/orc-pattern` | none | single dispatch |
111
111
  | `/orc-claude` | none | single dispatch |
112
112
  | `/orc-explain` | none | read-only, seconds long |
113
+ | `/orc-fix` | none | after the record is written |
113
114
  | `/orc-route` | none | read-only, seconds long |
114
115
  | `/orc-boundary` | none | read-only, seconds long |
115
116
  | `/orc-budget` | none | read-only, seconds long |
@@ -1,20 +1,10 @@
1
1
  ---
2
2
  name: context-combiner
3
3
  description: >
4
- Combines 2+ RELATED, already-confirmed ORC analyses (from orc-analyze) into
5
- ONE merged, deduped, conflict-resolved requirement context before build. Use
6
- when the user analyzed multiple related documents within the same scope and
7
- chose "pass to context-combiner" at orc-analyze's Phase F. Verifies the source
8
- analyses actually overlap (shared files/requirements/scope) and challenges the
9
- user if they look unrelated; pools ALL source requirements into one table and
10
- reconciles them (exact/semantic duplicates, partial overlaps split — never
11
- collapsed, conflicts, ordering) one issue at a time; proves NOTHING WAS LOST
12
- via a source coverage matrix and a 100% coverage gate before handoff;
13
- spot-checks inherited evidence and marks stale anchors; writes
14
- combined-report.md + combined-requirement-spec.md, which reuse the
15
- requirement-spec schema, so the planner/build pipeline is unchanged. Full
16
- lane only. The orchestrator DISPATCHES this to a subagent — it never
17
- combines itself, and the combiner never spawns subagents.
4
+ Internal to /orc: merges 2+ RELATED, confirmed orc-analyze analyses into ONE
5
+ deduped, conflict-resolved requirement context. Dispatched when the user picks
6
+ "pass to context-combiner" at orc-analyze's Phase F.
7
+ disable-model-invocation: true
18
8
  ---
19
9
 
20
10
  # CONTEXT-COMBINER
@@ -80,11 +70,9 @@ it were a single analysis — with PROOF that no source requirement was lost.
80
70
 
81
71
  ## Phases
82
72
 
83
- `orc lane phases context-combiner --json` is this lane's pipeline: the ordered list, where
84
- each phase lives, and how much of it to read. **The CLI owns the order** — never
85
- derive it from the headings below, and never renumber or rename one without the
86
- manifest, because a `read: section` pointer names a HEADING and a renamed heading
87
- is a pointer into nothing.
73
+ `orc lane phases context-combiner --json` is this lane's pipeline. **The CLI owns the order**:
74
+ never derive it from the headings below, and never rename or renumber one
75
+ without the manifest (`../_shared/lane-contract.md` §Phases).
88
76
 
89
77
  ## Phase A — Load sources
90
78
  Read every source `requirement-spec.md` (2+) the orchestrator hands you, plus
@@ -194,29 +182,12 @@ withheld until the open conflict is resolved and coverage is complete.
194
182
  ## No mini variant
195
183
  Full lane only. `orc-analyze-mini` / `orc-mini` do not use the combiner.
196
184
 
197
- ## Config
185
+ ## Lane contract (`../_shared/lane-contract.md` — read it ONLY when a call exits ≠ 0)
198
186
 
199
- Resolve with `orc lane config context-combiner --json` and obey `effective`. Never merge
200
- `.claude/orc.config.yaml` yourself, and never re-derive a precedence. Exit ≠ 0 →
201
- say so and use `../_shared/config-precedence.md`'s documented defaults, out
202
- loud. Nothing this lane reads is contested, gated or a stop, so it owes no
203
- preflight line and has no gate to honour.
204
-
205
- ## Calls
206
-
207
- **ONE catalogue, and it is not you:** `orc lane calls context-combiner --json` names every
208
- CLI call this lane makes, each with its exit-code contract, its cost, when to run
209
- it, and what an EMPTY answer means. Never invent a spelling, never re-word an
210
- exit code, and never re-derive a state word — the CLI's state words are the only
211
- state words, and **an exit code is an ANSWER wherever that contract says so, not
212
- a failure**. A call the answer does not name is a call this lane does not make.
213
- Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
214
- command you are about to run, out loud, before running it.
215
-
216
- ## Rules — the anti-slop card (`../_shared/phases/rules.md`)
217
-
218
- `orc rules slice --lane context-combiner --json` is the ONLY assembler; never build
219
- the card here. It rides under the house rules and above the task —
220
- **house rules > your project's rules > ORC's own packs** — and its `line` prints
221
- VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
222
- never a silent choice) and `rules_overridden[]`.
187
+ - **Calls:** `orc lane calls context-combiner --json` names every call and its exit codes.
188
+ **An exit code is an ANSWER where it says so, not a failure.** Make no other call.
189
+ - **Config:** `orc lane config context-combiner --json`. Obey `effective`. Never merge
190
+ `.claude/orc.config.yaml` yourself (`../_shared/config-precedence.md`). Nothing
191
+ here is contested, gated or a stop: no preflight line, no gate to honour.
192
+ - **Rules:** `orc rules slice --lane context-combiner --json` is the ONLY assembler
193
+ (`../_shared/phases/rules.md`). Its `line` prints VERBATIM at preflight.
@@ -97,8 +97,8 @@ codifier: 9 language playbooks + a11y/perf rule packs), `context-combiner`
97
97
  even for tiny tasks.** Orchestrator (Opus 4.8 high, or Opus 5.5 / Fable 5 at
98
98
  medium+) only coordinates; each task's 0–100 score (computed arithmetically
99
99
  from the planner's per-task `facets`) maps to a named executor agent via the
100
- single 6-band table in `config.md` (`rubric_bands` = report granularity only),
101
- Haiku 4.5 [0,30) → Opus 5.5 low [65,90) → Opus 5.5 medium [90,100].
100
+ single 5-band table in `config.md` (`rubric_bands` = report granularity only),
101
+ Sonnet 5 low [0,21) → Opus 5.5 low [41,90) → Opus 5.5 medium [90,100].
102
102
  - **Every executor slice carries** the intent-spec constraints, the task's
103
103
  sliced acceptance criteria, the standing
104
104
  house-rules card, and — when a code-pattern is resolved — your project's
@@ -3,12 +3,10 @@ name: orc
3
3
  description: >
4
4
  Use when orchestrating a multi-task build through a full pipeline: intake →
5
5
  planning → scored parallel execution → review → verify → ship. Triggers:
6
- "orchestrate this", "build this in parallel", "run this with subagents",
7
- "use orc", or any request to take a feature/spec from intent to PR with
8
- subagents. Routes planning to Superpowers, OpenSpec, or its own planner;
9
- schedules conflict-free waves; scores each task to pick the cheapest capable
10
- model; checkpoints eagerly; survives compaction and fresh-session resume.
11
- Stack-agnostic.
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.
12
10
  ---
13
11
 
14
12
  # ORC (orchestrator spine)
@@ -81,7 +79,7 @@ trigger points; emit `GATE` trace lines.
81
79
 
82
80
  ## Dispatch via named agents (not prose)
83
81
 
84
- **`orc run inflight` before ANY re-dispatch** (0 clear · 1 in-flight · 2 unknown).
82
+ **`orc run inflight` before ANY re-dispatch.**
85
83
  A Task error does not kill the agent behind it, and exit 2 REFUSES by default —
86
84
  `a lane that re-dispatches over a live attempt` has broken the contract. Canonical: `_shared/return-validation.md` §0.
87
85
 
@@ -89,7 +87,7 @@ Workers are model-pinned SUBAGENTS in `.claude/agents/` — the model is enforce
89
87
  not requested in prose. Score every task from the planner-emitted `facets` via
90
88
  the fixed arithmetic formula and SHOW the table with the facet vector + the
91
89
  arithmetic (`B+N+L+T+fan+U = raw`; an un-shown number is not scored); map the
92
- 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
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
93
91
  band or cite the differing facet (see `references/effort-and-mode.md`). EVERY
94
92
  dispatch is scored — fix-cycle dispatches (review-fix, verify-fix, P2-batch,
95
93
  requeue) run the same formula, inherit the original task's risk floor, and never
@@ -100,59 +98,35 @@ resolves to its Opus 5.5 agent, FORCING over everything below — `_shared/opus5
100
98
  Caveat: a subagent's model can't exceed the MAIN session's tier — run the main
101
99
  session on Opus or the Opus pins silently fall back (the original "wrong model" bug).
102
100
 
103
- ## Config (read at run start)
104
-
105
- **ONE resolver, and it is not you:** `orc lane config orc --json`. Obey
106
- `effective`, print every line in `announce[]` VERBATIM at preflight, and honour
107
- `stops[]` before wave 1. Never re-derive a value, a precedence or an inertness
108
- from `.claude/orc.config.yaml` — a key this lane does not read is not in the
109
- answer, and a key another key shadows comes back already marked. Exit ≠ 0 → say
110
- the CLI is unavailable and fall back to `../_shared/config-precedence.md`'s
111
- documented defaults, out loud. Priorities and families:
112
- `../_shared/config-precedence.md`.
113
-
114
- ## Rules — the anti-slop card (`../_shared/phases/rules.md`)
115
-
116
- `orc rules slice --lane orc --json` is the ONLY assembler; never build
117
- the card here. It rides under the house rules and above the task —
118
- **house rules > your project's rules > ORC's own packs** — and its `line` prints
119
- VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
120
- never a silent choice) and `rules_overridden[]`.
121
- ## Calls
122
-
123
- **ONE catalogue, and it is not you:** `orc lane calls orc --json` names every
124
- CLI call this lane makes, each with its exit-code contract, its cost, when to run
125
- it, and what an EMPTY answer means. Never invent a spelling, never re-word an
126
- exit code, and never re-derive a state word — the CLI's state words are the only
127
- state words, and **an exit code is an ANSWER wherever that contract says so, not
128
- a failure**. A call the answer does not name is a call this lane does not make.
129
- Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
130
- command you are about to run, out loud, before running it.
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.
131
110
 
132
111
  ## Behavior trace (PERMANENT — always on, no config toggle)
133
112
 
134
- Follow `../_shared/phases/trace.md` (ALWAYS load it at run start). The
135
- `orc-trace.js` hook writes the `SPAWN`/`RETURN`/`PHASE-EDGE` skeleton
136
- deterministically; the rich narrative is **dispatched, never remembered** — every
137
- `emit <VERB>` step below means RECORD that event, with its REAL timestamp, into
138
- the current **phase packet**; you never append a trace line yourself. Run start:
139
- create `log_dir`, write `log_dir/.current` = `run-orc-<slug>-<DDMMYY>-<HHMMSS>.txt`
140
- AND `touch the trace file` of that name in the SAME step; store `trace_path`.
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`.
141
120
  **Under `ultra_mode` the lane segment is `ultra`, not `orc`** (`run-ultra-<slug>-…`)
142
121
  — the filename IS the per-lane data, so an ultra run named `orc` is counted as a
143
122
  plain `/orc` run forever, hiding the costliest lane in every usage report.
144
- **Phase close = dispatch `orc-trace-writer-haiku-4-5`** with that packet
145
- (`phase`, `events[]`, and `decisions` — the WHY: scoring rationale, the user's
146
- answers VERBATIM, what you rejected; `run_meta` on the FIRST packet only).
147
- **Pairing rule:** issue phase N's writer dispatch in the SAME tool block as phase
148
- N+1's first dispatch (a phase with no next dispatch sends it solo, before its
149
- user-facing output); the first packet is solo + synchronous — it repairs a
150
- hook-bootstrapped filename. `DISPATCH`/`VERIFY` models are derived from the agent
151
- NAME and checked against each return's `actual_model`/`actual_effort` — surface
152
- any ⛔ DOWNGRADE to the user, not just into the packet. A phase ending with
153
- `zero new trace lines is a protocol violation` — build and dispatch its packet
154
- NOW, with the events' real stamps. Run end (Phase 8 or abort): the `FINISH`
155
- packet goes out and RETURNS, then delete `log_dir/.current`.
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.
156
130
 
157
131
  ## Extra — a band that executes OFF Claude (config `extra_enabled`, default false)
158
132
 
@@ -175,7 +149,7 @@ review/verify re-check the invariants + `validation_gate[]` lines. Load
175
149
  ## Ultra lane (`/orc-ultra`)
176
150
 
177
151
  `/orc-ultra` sets `ultra_mode: true` RUN-SCOPED (never persisted): full pipeline
178
- + Opus 4.8 max Advisor (Phase U0) + three judge gates + forced overrides (deep
152
+ + Opus 5.5 xhigh Advisor (Phase U0) + three judge gates + forced overrides (deep
179
153
  analyze, pattern/testgen/security on, executor tier floor); never on plain
180
154
  `/orc` or orc-mini. Load `references/ultra-mode.md` at Phase 0 when ultra_mode;
181
155
  orc-advisor / orc-judge load at their dispatch points.
@@ -214,10 +188,9 @@ them; they are never dispatched as subagents).
214
188
 
215
189
  ## Phases
216
190
 
217
- `orc lane phases orc --json` **is** the pipeline — the CLI owns the list and
218
- its order, and this table is the human index of it. Never derive the order
219
- from these filenames; a second idea of the pipeline is the drift the manifest
220
- exists to prevent.
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).
221
194
 
222
195
  **Read a row when its phase fires, not on activation.** Every row is
223
196
  `on-phase` — this spine deliberately carries no `always` phase pointer. **Read
@@ -228,8 +201,7 @@ each row.
228
201
 
229
202
  W13 gave those ten a second reader (`orc-diy`), so they moved to
230
203
  `_shared/phases/`. Intake and Integration have one consumer each and stay home
231
- — a file with one consumer stays home. W14 (`orc-mini`/`orc-fast`) is what adds
232
- a `trim` layer beside the `full` one.
204
+ — a file with one consumer stays home.
233
205
 
234
206
  | # | Phase | File | Read | Trace |
235
207
  |---|-------|------|------|-------|
@@ -252,4 +224,4 @@ their config key is resolved by `orc lane config orc --json`, never read raw.
252
224
  ## Waiting mid-run (`/orc-wait`)
253
225
 
254
226
  Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
255
- Checkpoint **full** · safe point **wave or phase edge**. `soft` FORCES that checkpoint and does NOT stop if the write fails; `hard` skips it and can lose an in-flight return. Never begin a wait between a dispatch and its validated return, or before the smoke gate has reported.
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 ·
@@ -58,6 +58,7 @@ O: Code pattern? U: none. Findings (P0–P3 ladder, each P0–P2 anchored file:l
58
58
 
59
59
  ## Phase 7 — Summary
60
60
  O: 6 tasks/3 waves/6 spawns/1 pause/1 fresh-session resume · 1 needs_context · 1 escalation · verify fixed_then_passed · branch green. P2 fix-batch: none · Apply the 2 P3 cosmetics? U: no.
61
+ O: review close → `orc gotcha observe` ×3 (P1 addressed · 2× P3 wontfix, each with `run`) → `FINDING-OUTCOME addressed=1 disputed=0 wontfix=2 open=0 pre=0 suppressed=0 :: functional.check:1/1,evolvability.documentation:0/2`
61
62
 
62
63
  ## Phase 8 — Ship (orc-pr, reads pr.md)
63
64
  O: Branch: feat/notifications. Commit? Push? PR? U: yes all.
@@ -66,7 +67,7 @@ O: ✓ committed → pushed → run/merchant-notifications/DRP-482-add-merchant-
66
67
  Log deleted · checkpoint + dispatch log KEPT · completion dispatch report shown → "Run /usage to see your remaining limits."
67
68
 
68
69
  ## What this exercises
69
- always-spawn (even cheap tasks get a subagent) · facet-scored arithmetic · 6-band ladder ·
70
+ always-spawn (even cheap tasks get a subagent) · facet-scored arithmetic · 5-band ladder ·
70
71
  per-run folder run/merchant-notifications/ · usage reminder (no programmatic /usage) ·
71
72
  planner grounding spot-check catching a hallucinated path · executor evidence (verbatim
72
73
  build/test proof) · reviewer quote spot-check before any P0/P1 action ·
@@ -108,7 +108,7 @@ clamp 0..100 → the RESOLVED table (below).
108
108
 
109
109
  **Which table (highest wins):** `opus5_only: true` (the 2-band Opus-5-only
110
110
  preset: `[0,90)` low · `[90,100]` medium) → `rubric_bands_override`
111
- (hand-written rows) → the default 6-band table. All three are in `config.md`.
111
+ (hand-written rows) → the default 5-band table. All three are in `config.md`.
112
112
  The formula, the facets and the risk floor are IDENTICAL in every case — only
113
113
  the score→agent mapping changes. Three consequences worth stating so nobody
114
114
  re-derives them per run:
@@ -123,14 +123,14 @@ re-derives them per run:
123
123
  Show the user the full table (task, the facet vector, the arithmetic
124
124
  `B+N+L+T+fan+U = raw`, any risk floor, final, override+reason if any, dispatched
125
125
  model) BEFORE dispatching — an un-shown number is not a scored number. **Head it
126
- with the RESOLVED table's name** (`6-band default` / `Opus-5-only ladder
126
+ with the RESOLVED table's name** (`5-band default` / `Opus-5-only ladder
127
127
  (opus5_only)` / `custom (rubric_bands_override)`): the same logic
128
128
  applies to the mapping as to the number.
129
129
 
130
130
  **Extra (v0.50.0, `extra_enabled`) adds a `via` column and can make the head a
131
131
  PAIR.** An Extra route row is an OVERLAY that outranks the tables above **only
132
132
  for the scores it covers**, so a run can genuinely be running two tables at once
133
- and the head names both (`6-band default + extra rows [0,30) [30,70)`). The
133
+ and the head names both (`5-band default + extra rows [0,30) [30,70)`). The
134
134
  column reads `claude` or `extra:<profile> (<engine>)` and comes from
135
135
  `orc extra resolve --json` — the formula, the facets and the risk floor are
136
136
  untouched, and **the score is computed before the routing, never after it**. Two
@@ -170,14 +170,14 @@ the band is what matters. Compare a new task to these facet-by-facet.
170
170
 
171
171
  | Task | breadth·novelty·logic·test · fan_in/out · unc | Arithmetic | Band |
172
172
  |---|---|---|---|
173
- | Rename a config key across 4 files + its test | 5·mechanical·none·update-existing · 0/0 · low | 10+0+0+4 = **14** | haiku [0,30) |
174
- | New CRUD endpoint following a sibling route | 3·imitate·branching·new-tests · 1/0 · low | 6+8+8+8+5 = **35** | sonnet-4-6-med [30,40) |
175
- | Bug fix across 2 files with a repro test | 3·imitate·branching·new-tests · 0/0 · medium | 6+8+8+8+6 = **36** | sonnet-4-6-med [30,40) |
176
- | Isolated component from the design system | 3·new-surface·branching·new-tests · 0/0 · low | 6+18+8+8 = **40** | sonnet-4-6-high [40,55) |
177
- | Notification model + enum other tasks consume | 3·new-surface·stateful·new-tests · 0/3 · low | 6+18+16+8+9 = **57** | sonnet-5-high [55,65) |
178
- | Service-layer refactor behind a stable interface | 5·imitate·stateful·update-existing · 0/3 · medium | 10+8+16+4+9+6 = **53** | sonnet-4-6-high [40,55) |
179
- | Add role check to payment-refund endpoint | 3·imitate·branching·new-tests · 0/0 · low · **risk=[auth,money]** | 30 raw → **floor 70** | opus-5-low [65,90) |
180
- | Migrate orders table to split-name + backfill | 6·new-surface·stateful·new-tests · 1/3 · high · **risk=[migration,data-integrity]** | 15+18+16+8+5+9+12 = 83 (floor 70) → **83** | opus-5-low [65,90) |
173
+ | Rename a config key across 4 files + its test | 5·mechanical·none·update-existing · 0/0 · low | 10+0+0+4 = **14** | sonnet-5-low [0,21) |
174
+ | New CRUD endpoint following a sibling route | 3·imitate·branching·new-tests · 1/0 · low | 6+8+8+8+5 = **35** | sonnet-5-high [31,41) |
175
+ | Bug fix across 2 files with a repro test | 3·imitate·branching·new-tests · 0/0 · medium | 6+8+8+8+6 = **36** | sonnet-5-high [31,41) |
176
+ | Isolated component from the design system | 3·new-surface·branching·new-tests · 0/0 · low | 6+18+8+8 = **40** | sonnet-5-high [31,41) |
177
+ | Notification model + enum other tasks consume | 3·new-surface·stateful·new-tests · 0/3 · low | 6+18+16+8+9 = **57** | opus-5-low [41,90) |
178
+ | Service-layer refactor behind a stable interface | 5·imitate·stateful·update-existing · 0/3 · medium | 10+8+16+4+9+6 = **53** | opus-5-low [41,90) |
179
+ | Add role check to payment-refund endpoint | 3·imitate·branching·new-tests · 0/0 · low · **risk=[auth,money]** | 30 raw → **floor 70** | opus-5-low [41,90) |
180
+ | Migrate orders table to split-name + backfill | 6·new-surface·stateful·new-tests · 1/3 · high · **risk=[migration,data-integrity]** | 15+18+16+8+5+9+12 = 83 (floor 70) → **83** | opus-5-low [41,90) |
181
181
 
182
182
  Two disciplines the vectors encode: (1) a small diff is NOT a low score when a
183
183
  cited `risk` facet forces the floor (the refund row — 30 raw, floored to 70); (2)
@@ -188,15 +188,15 @@ applies it silently.
188
188
  ## Model ladder → the single score→model table
189
189
 
190
190
  The score→model mapping is NOT hardcoded here — it lives in `config.md` as ONE
191
- canonical 6-band table (there is no longer a narrow/wide preset). Read config at
191
+ canonical 5-band table (there is no longer a narrow/wide preset). Read config at
192
192
  run start and map each task's final score through that table (or
193
193
  `rubric_bands_override`). The orchestrator dispatches the executor agent BY NAME;
194
194
  it does not request a raw model. `rubric_bands` sets only how many bands the
195
195
  rubric REPORTS (score granularity), never which table is used.
196
196
 
197
- The 6 bands (see config.md for the exact edges): `haiku-4-5` [0,30) ·
198
- `sonnet-4-6-med` [30,40) · `sonnet-4-6-high` [40,55) · `sonnet-5-high` [55,65) ·
199
- `opus-5-low` [65,90) · `opus-5-med` [90,100]. Effort tiers rank
197
+ The 5 bands (see config.md for the exact edges): `sonnet-5-low` [0,21) ·
198
+ `sonnet-5-med` [21,31) · `sonnet-5-high` [31,41) · `opus-5-low` [41,90) ·
199
+ `opus-5-med` [90,100]. Effort tiers rank
200
200
  `low < medium < high < xhigh < max`.
201
201
 
202
202
  ## Fixed model assignments (not scored)
@@ -204,14 +204,14 @@ The 6 bands (see config.md for the exact edges): `haiku-4-5` [0,30) ·
204
204
  - **Orchestrator (you):** Opus 4.8 high — or Opus 5.5 / Fable 5 at medium+, the
205
205
  two models that clear the guard from medium up. Never downgrade yourself.
206
206
  - **Review** — Superpowers path: Sonnet 4.6, medium. OpenSpec/self path:
207
- Opus 5.5, medium (`orc-reviewer-opus-5-med`).
207
+ Opus 5.5, low (`orc-reviewer-opus-5-low`; medium until v2.1.0).
208
208
  - **Verify:** Opus 5.5, medium (`orc-verifier-opus-5-med`).
209
209
  - **Analyst:** Opus 5.5, high. **Planner:** Opus 5.5, medium. **Test author:**
210
210
  Opus 5.5, medium. **Combiner:** Opus 5.5, high. **Ultra advisor/judge:** Opus 5.5,
211
211
  xhigh — every core fixed role is pinned to Opus 5.5 as of v0.34.0.
212
212
  - **Merge-conflict resolver:** Opus 4.8, medium.
213
213
 
214
- Note: every band in the table above is a real dispatch target (haiku through
214
+ Note: every band in the table above is a real dispatch target (sonnet-5 through
215
215
  opus-5). If a model tier is unavailable in the environment, fall back UP to the
216
216
  next capable tier (never silently substitute a different family/effort).
217
217