@azure-id/orc 2.1.0 → 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.
@@ -1,137 +1,137 @@
1
- # Shared contract — Opus-5-only dispatch mode (hard-gated, forcing)
2
-
3
- Canonical rule for routing EVERY dispatched role to Opus 5. Consumed by the full
4
- orc spine, the ultra lane, and every lane with a fixed-role dispatch; the lint
5
- pins the `opus5-only.md` pointer into each of them.
6
-
7
- ## The gate
8
-
9
- Read the resolved config at run start (`config.md` defaults ← `orc.config.yaml`).
10
- The mode is **hard-gated**: absolutely nothing changes unless `opus5_only: true`.
11
- When it is false (the default), dispatch every role exactly as today — this file
12
- is inert.
13
-
14
- ## The mapping (only when `opus5_only: true`)
15
-
16
- **Scored executors** — one model, EFFORT as the cost dial, replacing the 5-band
17
- mixed-model table:
18
-
19
- | Score | Executor agent |
20
- |-----------|---------------------------|
21
- | `[0,90)` | `orc-executor-opus-5-low` |
22
- | `[90,100]` | `orc-executor-opus-5-med` |
23
-
24
- Two bands, sharing the 90 edge with the default table's top two rows. Since
25
- v1.0.0 the default table's high end is ALREADY Opus 5.5 with effort as the dial,
26
- so this mode differs from it only below 41 — a third band here would be a
27
- distinction the default table stopped making.
28
-
29
- **Fixed roles** — dispatch the Opus 5.5 variant **instead of** the default role
30
- agent: same task slice, same return contract, same phase.
31
-
32
- | Role | Default agent | Opus-5-only variant |
33
- |------|---------------|---------------------|
34
- | mini executor | `orc-executor-sonnet-5-high` | `orc-executor-opus-5-low` |
35
- | fast executor | `orc-executor-sonnet-4-6-high` | `orc-executor-opus-5-low` |
36
- | mini analyze | `orc-analyze-mini-sonnet-5-high` | `orc-analyze-mini-opus-5-med` |
37
- | mini plan | `orc-planner-mini-sonnet-5-high` | `orc-planner-mini-opus-5-med` |
38
- | scout | `orc-scout-sonnet-4-6-high` | `orc-scout-opus-5-low` |
39
- | pattern codify | `orc-pattern-codifier-sonnet-5-high` | `orc-pattern-codifier-opus-5-med` |
40
- | wiki scan | `orc-wiki-scanner-sonnet-5-high` (light) | `orc-wiki-scanner-opus-5-low` |
41
- | retro mine | `orc-retro-sonnet-5-high` | `orc-retro-opus-5-med` |
42
-
43
- The eleven roles already pinned to `claude-opus-5-5` — analyst, planner, reviewer,
44
- verifier, test-author, combiner, learn-writer, advisor, judge, CLAUDE.md writer
45
- (`orc-claude-writer-opus-5-low`), deep wiki scanner (`orc-wiki-scanner-opus-5-low`)
46
- — are already
47
- compliant and dispatch unchanged (their efforts are NOT rewritten by this mode).
48
-
49
- **The wiki scan tier ladder (v0.46.0) needs no new pair.**
50
- Off, the ladder picks deep or light per delta. ON, this mode flips the light tier
51
- to `orc-wiki-scanner-opus-5-low`. The deep tier is already that agent. So **both
52
- tiers collapse onto that one shipped agent** and the ladder simply stops applying.
53
- Do not add a second Opus 5.5 scanner variant. A pair for a tier that cannot occur
54
- while the flag is on is exactly the phantom this table exists to prevent. Ladder: `../orc-wiki/references/partial-refresh.md`.
55
-
56
- ## Out of scope — never forced
57
-
58
- - **`orc-trace-writer-haiku-4-5` stays Haiku 4.5.** It transcribes a packet the
59
- orchestrator hands it — no reasoning, no source reads. It is never in the
60
- roster.
61
- - **`orc-graph-noter-sonnet-4-6-med` is not dispatched at all.** It has no Opus 5.5
62
- variant: under the mode a code lane skips graph notes and prints
63
- `graph notes: skipped (opus5_only)` (`code-graph.md` §6). The graph's structure
64
- layer costs no model, so nothing else about the graph changes.
65
- - **`orc-diy`.** Its score table is compile-owned (`orc diy compile` →
66
- `flow.lock.json`); a DIY flow dispatches whatever its lock says. Re-compile to
67
- change it.
68
- - **`orc-quick` — the ONE exception to the flat precedence below.** Its dispatch
69
- gate asks the USER which agent to spawn before every single dispatch, and that
70
- hard gate is the lane's entire premise. A forcing mode that collapsed the menu
71
- to one option would silently delete it, so the mode is fully INERT there:
72
- `opus5_only` is neither read nor honored by `orc-quick`. When the mode is on,
73
- the lane SAYS so at the gate (`orc-quick ignores opus5_only — both options are
74
- live`), because a shadowed setting must never be silent in either direction.
75
- - **`/orc-challenge` — UNAFFECTED, not exempt.** All three of its agents are
76
- already `claude-opus-5-5` (judge high, advisor medium, reader low), so the mode
77
- has nothing to force: zero new pairs, no rename churn, no roster row. The
78
- reader's `low` effort is a MEASUREMENT choice, not a cost one — a
79
- harder-thinking cold reader reasons around exactly the gaps D4 exists to find
80
- — so nothing may ever "upgrade" it.
81
- See `orc-quick/references/dispatch-gate.md`.
82
-
83
- ## It FORCES — precedence is flat while ON
84
-
85
- `opus5_only: true` outranks every other dispatch selector:
86
-
87
- - each role's default frontmatter pin;
88
- - **`rubric_bands_override`** — a hand-written executor table is ignored while
89
- the mode is on.
90
-
91
- Turning the mode off restores both. `rubric_bands` remains granularity
92
- only, never a preset selector, in both modes.
93
-
94
- The forcing is flat across every lane that HONORS the mode — `orc-quick` does
95
- not, per "Out of scope" above.
96
-
97
- ### `orc extra` sits ABOVE the mode, and it is not a fourth thing it overrides
98
-
99
- Extra decides **whether a Claude agent runs at all**. `opus5_only` and the score
100
- tables only decide WHICH Claude agent runs where extra did not take it. So the
101
- mode is neither shadowed nor shadowing — it is simply **NOT CONSULTED** for the
102
- work extra took:
103
-
104
- - **a scored task** — an extra route row covering that score outranks the mode;
105
- every score no row covers still resolves on the Opus 5.5 ladder.
106
- - **a POSITION** (v0.55.0 — `quick-executor`, `fast-executor`, `doc-writer`,
107
- `doc-checker`, `wiki-scanner-deep`, `wiki-scanner-light`) — an extra slot row
108
- holding that position outranks the mode's variant of that slot's agent; **a
109
- position with no row is fully governed by the mode.** With `doc-writer` routed
110
- and `doc-checker` not, `opus5_only` is entirely live for the checker.
111
-
112
- "Not consulted for that slot" and "inert" are different claims, and only the
113
- first one is true. `orc config list` and `orc config set` NAME the taken bands
114
- AND the taken positions for exactly that reason: a shadowed setting must never
115
- be silent, and neither must a partly shadowed one.
116
-
117
- Both wiki slots collapse onto `orc-wiki-scanner-opus-5-low` while the mode is on,
118
- which is why the slot table adds **no agent and no pair**. A slot names the
119
- POSITION, not the model.
120
-
121
- ## Tier honesty
122
-
123
- A subagent can never outrank the main session. With the mode ON, EVERY dispatch
124
- needs an Opus 5.5 main session — not just the top executor band. On a lower
125
- session every role silently falls back to the session model and the tier-honesty
126
- rule (`return-validation.md`) reports a downgrade on **every** return. That is
127
- correct behavior, not a bug: hooks cannot block on model, only on effort, so the
128
- `orc config set opus5_only true` notice is the only up-front warning.
129
-
130
- This also means `orc-fast`'s "the orchestrator runs fine at Sonnet medium" holds
131
- only while the mode is OFF. The effort guard is unchanged — it still matches the
132
- exact skill name `orc`, and orc-fast is never added to it.
133
-
134
- ## Trace
135
-
136
- Phase 1's `CONFIG` line always records the resolved `opus5_only`, so
137
- `/orc-retro` can segment per-band outcomes BY dispatch mode.
1
+ # Shared contract — Opus-5-only dispatch mode (hard-gated, forcing)
2
+
3
+ Canonical rule for routing EVERY dispatched role to Opus 5. Consumed by the full
4
+ orc spine, the ultra lane, and every lane with a fixed-role dispatch; the lint
5
+ pins the `opus5-only.md` pointer into each of them.
6
+
7
+ ## The gate
8
+
9
+ Read the resolved config at run start (`config.md` defaults ← `orc.config.yaml`).
10
+ The mode is **hard-gated**: absolutely nothing changes unless `opus5_only: true`.
11
+ When it is false (the default), dispatch every role exactly as today — this file
12
+ is inert.
13
+
14
+ ## The mapping (only when `opus5_only: true`)
15
+
16
+ **Scored executors** — one model, EFFORT as the cost dial, replacing the 5-band
17
+ mixed-model table:
18
+
19
+ | Score | Executor agent |
20
+ |-----------|---------------------------|
21
+ | `[0,90)` | `orc-executor-opus-5-low` |
22
+ | `[90,100]` | `orc-executor-opus-5-med` |
23
+
24
+ Two bands, sharing the 90 edge with the default table's top two rows. Since
25
+ v1.0.0 the default table's high end is ALREADY Opus 5.5 with effort as the dial,
26
+ so this mode differs from it only below 41 — a third band here would be a
27
+ distinction the default table stopped making.
28
+
29
+ **Fixed roles** — dispatch the Opus 5.5 variant **instead of** the default role
30
+ agent: same task slice, same return contract, same phase.
31
+
32
+ | Role | Default agent | Opus-5-only variant |
33
+ |------|---------------|---------------------|
34
+ | mini executor | `orc-executor-sonnet-5-high` | `orc-executor-opus-5-low` |
35
+ | fast executor | `orc-executor-sonnet-5-med` | `orc-executor-opus-5-low` |
36
+ | mini analyze | `orc-analyze-mini-sonnet-5-high` | `orc-analyze-mini-opus-5-med` |
37
+ | mini plan | `orc-planner-mini-sonnet-5-high` | `orc-planner-mini-opus-5-med` |
38
+ | scout | `orc-scout-sonnet-4-6-high` | `orc-scout-opus-5-low` |
39
+ | pattern codify | `orc-pattern-codifier-sonnet-5-high` | `orc-pattern-codifier-opus-5-med` |
40
+ | wiki scan | `orc-wiki-scanner-sonnet-5-high` (light) | `orc-wiki-scanner-opus-5-low` |
41
+ | retro mine | `orc-retro-sonnet-5-high` | `orc-retro-opus-5-med` |
42
+
43
+ The eleven roles already pinned to `claude-opus-5-5` — analyst, planner, reviewer,
44
+ verifier, test-author, combiner, learn-writer, advisor, judge, CLAUDE.md writer
45
+ (`orc-claude-writer-opus-5-low`), deep wiki scanner (`orc-wiki-scanner-opus-5-low`)
46
+ — are already
47
+ compliant and dispatch unchanged (their efforts are NOT rewritten by this mode).
48
+
49
+ **The wiki scan tier ladder (v0.46.0) needs no new pair.**
50
+ Off, the ladder picks deep or light per delta. ON, this mode flips the light tier
51
+ to `orc-wiki-scanner-opus-5-low`. The deep tier is already that agent. So **both
52
+ tiers collapse onto that one shipped agent** and the ladder simply stops applying.
53
+ Do not add a second Opus 5.5 scanner variant. A pair for a tier that cannot occur
54
+ while the flag is on is exactly the phantom this table exists to prevent. Ladder: `../orc-wiki/references/partial-refresh.md`.
55
+
56
+ ## Out of scope — never forced
57
+
58
+ - **`orc-trace-writer-haiku-4-5` stays Haiku 4.5.** It transcribes a packet the
59
+ orchestrator hands it — no reasoning, no source reads. It is never in the
60
+ roster.
61
+ - **`orc-graph-noter-sonnet-4-6-med` is not dispatched at all.** It has no Opus 5.5
62
+ variant: under the mode a code lane skips graph notes and prints
63
+ `graph notes: skipped (opus5_only)` (`code-graph.md` §6). The graph's structure
64
+ layer costs no model, so nothing else about the graph changes.
65
+ - **`orc-diy`.** Its score table is compile-owned (`orc diy compile` →
66
+ `flow.lock.json`); a DIY flow dispatches whatever its lock says. Re-compile to
67
+ change it.
68
+ - **`orc-quick` — the ONE exception to the flat precedence below.** Its dispatch
69
+ gate asks the USER which agent to spawn before every single dispatch, and that
70
+ hard gate is the lane's entire premise. A forcing mode that collapsed the menu
71
+ to one option would silently delete it, so the mode is fully INERT there:
72
+ `opus5_only` is neither read nor honored by `orc-quick`. When the mode is on,
73
+ the lane SAYS so at the gate (`orc-quick ignores opus5_only — both options are
74
+ live`), because a shadowed setting must never be silent in either direction.
75
+ - **`/orc-challenge` — UNAFFECTED, not exempt.** All three of its agents are
76
+ already `claude-opus-5-5` (judge high, advisor medium, reader low), so the mode
77
+ has nothing to force: zero new pairs, no rename churn, no roster row. The
78
+ reader's `low` effort is a MEASUREMENT choice, not a cost one — a
79
+ harder-thinking cold reader reasons around exactly the gaps D4 exists to find
80
+ — so nothing may ever "upgrade" it.
81
+ See `orc-quick/references/dispatch-gate.md`.
82
+
83
+ ## It FORCES — precedence is flat while ON
84
+
85
+ `opus5_only: true` outranks every other dispatch selector:
86
+
87
+ - each role's default frontmatter pin;
88
+ - **`rubric_bands_override`** — a hand-written executor table is ignored while
89
+ the mode is on.
90
+
91
+ Turning the mode off restores both. `rubric_bands` remains granularity
92
+ only, never a preset selector, in both modes.
93
+
94
+ The forcing is flat across every lane that HONORS the mode — `orc-quick` does
95
+ not, per "Out of scope" above.
96
+
97
+ ### `orc extra` sits ABOVE the mode, and it is not a fourth thing it overrides
98
+
99
+ Extra decides **whether a Claude agent runs at all**. `opus5_only` and the score
100
+ tables only decide WHICH Claude agent runs where extra did not take it. So the
101
+ mode is neither shadowed nor shadowing — it is simply **NOT CONSULTED** for the
102
+ work extra took:
103
+
104
+ - **a scored task** — an extra route row covering that score outranks the mode;
105
+ every score no row covers still resolves on the Opus 5.5 ladder.
106
+ - **a POSITION** (v0.55.0 — `quick-executor`, `fast-executor`, `doc-writer`,
107
+ `doc-checker`, `wiki-scanner-deep`, `wiki-scanner-light`) — an extra slot row
108
+ holding that position outranks the mode's variant of that slot's agent; **a
109
+ position with no row is fully governed by the mode.** With `doc-writer` routed
110
+ and `doc-checker` not, `opus5_only` is entirely live for the checker.
111
+
112
+ "Not consulted for that slot" and "inert" are different claims, and only the
113
+ first one is true. `orc config list` and `orc config set` NAME the taken bands
114
+ AND the taken positions for exactly that reason: a shadowed setting must never
115
+ be silent, and neither must a partly shadowed one.
116
+
117
+ Both wiki slots collapse onto `orc-wiki-scanner-opus-5-low` while the mode is on,
118
+ which is why the slot table adds **no agent and no pair**. A slot names the
119
+ POSITION, not the model.
120
+
121
+ ## Tier honesty
122
+
123
+ A subagent can never outrank the main session. With the mode ON, EVERY dispatch
124
+ needs an Opus 5.5 main session — not just the top executor band. On a lower
125
+ session every role silently falls back to the session model and the tier-honesty
126
+ rule (`return-validation.md`) reports a downgrade on **every** return. That is
127
+ correct behavior, not a bug: hooks cannot block on model, only on effort, so the
128
+ `orc config set opus5_only true` notice is the only up-front warning.
129
+
130
+ This also means `orc-fast`'s "the orchestrator runs fine at Sonnet medium" holds
131
+ only while the mode is OFF. The effort guard is unchanged — it still matches the
132
+ exact skill name `orc`, and orc-fast is never added to it.
133
+
134
+ ## Trace
135
+
136
+ Phase 1's `CONFIG` line always records the resolved `opus5_only`, so
137
+ `/orc-retro` can segment per-band outcomes BY dispatch mode.