@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.
- package/CHANGELOG.md +455 -0
- package/README-id.md +52 -23
- package/README.md +36 -20
- package/bin/build-agents.js +205 -206
- package/bin/clear-logs.js +620 -0
- package/bin/cli.js +47417 -46420
- package/bin/fix.js +459 -0
- package/bin/gotcha.js +288 -8
- package/bin/habit.js +1538 -1453
- package/bin/mockrun-catalog.js +3 -0
- package/bin/onboarding-content.js +2 -1
- package/bin/pricing.json +28 -21
- package/bin/trace-write.js +869 -657
- package/bin/verify-contracts.js +5552 -5471
- package/bin/verify-package.js +716 -705
- package/bin/webui/api.js +125 -6
- package/bin/webui/css/panels/hookui.css +79 -0
- package/bin/webui/fixtures/behaviour.js +30 -0
- package/bin/webui/fixtures/extra.js +2036 -2036
- package/bin/webui/fixtures/flow.js +81 -81
- package/bin/webui/fixtures/hookui.js +506 -431
- package/bin/webui/fixtures/index.js +32 -3
- package/bin/webui/fixtures/knowledge.js +2 -2
- package/bin/webui/fixtures/maintenance.js +123 -42
- package/bin/webui/fixtures/rules.js +1007 -1002
- package/bin/webui/fixtures/settings.js +6 -7
- package/bin/webui/fixtures/stats.js +9 -6
- package/bin/webui/fixtures/wait.js +98 -97
- package/bin/webui/i18n/en/behaviour.json +13 -0
- package/bin/webui/i18n/en/hookui.json +290 -194
- package/bin/webui/i18n/en/maintenance.json +71 -52
- package/bin/webui/i18n/en/settings.json +60 -60
- package/bin/webui/i18n/id/behaviour.json +13 -0
- package/bin/webui/i18n/id/hookui.json +290 -194
- package/bin/webui/i18n/id/maintenance.json +71 -52
- package/bin/webui/i18n/id/settings.json +60 -60
- package/bin/webui/js/05-banners.js +181 -172
- package/bin/webui/js/06-edit.js +193 -183
- package/bin/webui/js/panels/behaviour.js +77 -12
- package/bin/webui/js/panels/hookui.js +2196 -1691
- package/bin/webui/js/panels/maintenance.js +336 -235
- package/bin/webui/js/panels/settings.js +726 -719
- package/mock-run/INDEX.md +1 -0
- package/mock-run/a-normal-day.md +2 -2
- package/mock-run/extra-slots.md +177 -177
- package/mock-run/habits.md +1 -1
- package/mock-run/orc-aftermath.md +392 -392
- package/mock-run/orc-budget.md +29 -33
- package/mock-run/orc-cli.md +200 -200
- package/mock-run/orc-explain.md +86 -86
- package/mock-run/orc-extra.md +389 -392
- package/mock-run/orc-fast.md +2 -2
- package/mock-run/orc-fix.md +87 -0
- package/mock-run/orc-pattern.md +112 -112
- package/mock-run/orc-quick.md +146 -146
- package/mock-run/orc.md +4 -4
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +176 -173
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -2
- package/templates/agents/{orc-claude-writer-opus-5-med.md → orc-claude-writer-opus-5-low.md} +4 -4
- package/templates/agents/orc-executor-haiku-4-5.md +1 -1
- package/templates/agents/orc-executor-opus-5-low.md +1 -1
- package/templates/agents/orc-executor-sonnet-4-6-high.md +1 -1
- package/templates/agents/orc-executor-sonnet-4-6-med.md +1 -1
- package/templates/agents/orc-executor-sonnet-5-high.md +2 -2
- package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
- package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +2 -2
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -2
- package/templates/agents/{orc-recon-sonnet-4-6-med.md → orc-recon-sonnet-5-med.md} +4 -4
- package/templates/agents/orc-retro-sonnet-5-high.md +2 -2
- package/templates/agents/{orc-reviewer-opus-5-med.md → orc-reviewer-opus-5-low.md} +4 -4
- package/templates/agents/{orc-wiki-scanner-opus-5-med.md → orc-wiki-scanner-opus-5-low.md} +3 -3
- package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +2 -2
- package/templates/commands/orc-fast.md +10 -10
- package/templates/commands/orc-fix.md +18 -0
- package/templates/commands/orc-wiki.md +64 -64
- package/templates/hooks/README.md +75 -7
- package/templates/hooks/orc-session-hook.js +78 -3
- package/templates/hooks/orc-statusline-render.js +317 -23
- package/templates/hooks/orc-statusline.js +162 -49
- package/templates/hooks/orc-subagent-line.js +23 -5
- package/templates/hooks/orc-weather-fetch.js +123 -0
- package/templates/skills/_shared/extra-dispatch.md +1331 -1331
- package/templates/skills/_shared/gotchas.md +27 -7
- package/templates/skills/_shared/habits.md +2 -2
- package/templates/skills/_shared/opus5-only.md +137 -137
- package/templates/skills/_shared/phases/review.md +2 -2
- package/templates/skills/_shared/phases/trace-verbs.md +17 -3
- package/templates/skills/_shared/phases/trace.md +136 -136
- package/templates/skills/_shared/review-slice.md +28 -1
- package/templates/skills/_shared/wait.md +1 -0
- package/templates/skills/orc/README.md +2 -2
- package/templates/skills/orc/SKILL.md +227 -227
- package/templates/skills/orc/config.md +25 -27
- package/templates/skills/orc/examples/full-run-mock.md +74 -73
- package/templates/skills/orc/references/effort-and-mode.md +222 -222
- package/templates/skills/orc/references/preflight-report.md +3 -3
- package/templates/skills/orc/references/ultra-mode.md +1 -1
- package/templates/skills/orc/schemas/checkpoint.md +122 -122
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +3 -3
- package/templates/skills/orc/subskills/orc-review-verify/core.md +1 -1
- package/templates/skills/orc-analyze/SKILL.md +4 -2
- package/templates/skills/orc-claude/SKILL.md +14 -14
- package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
- package/templates/skills/orc-diy/SKILL.md +5 -5
- package/templates/skills/orc-fast/SKILL.md +210 -208
- package/templates/skills/orc-fix/SKILL.md +110 -0
- package/templates/skills/orc-grill/SKILL.md +232 -232
- package/templates/skills/orc-grill/references/grill-doc.md +1 -1
- package/templates/skills/orc-mini/SKILL.md +4 -4
- package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
- package/templates/skills/orc-quick/README.md +536 -536
- package/templates/skills/orc-quick/SKILL.md +2 -2
- package/templates/skills/orc-quick/references/context-doc.md +145 -145
- package/templates/skills/orc-quick/references/dispatch-gate.md +220 -219
- package/templates/skills/orc-quick/references/gh-mode.md +4 -2
- package/templates/skills/orc-retro/SKILL.md +1 -1
- package/templates/skills/orc-retro/examples/retro-mock.md +16 -16
- package/templates/skills/orc-wiki/README.md +325 -325
- package/templates/skills/orc-wiki/SKILL.md +195 -195
- package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
- package/templates/skills/orc-wiki/references/extra.md +2 -2
- package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
- package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -1
- package/templates/skills/orc-wiki/references/phases/phase-2.md +3 -3
- package/templates/skills/orc-wiki/references/phases/phase-3c.md +3 -2
- package/templates/agents/orc-claude-writer-opus-4-8-high.md +0 -48
- package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +0 -74
|
@@ -185,7 +185,19 @@ cited one), then ONE trace line:
|
|
|
185
185
|
`FINDING-OUTCOME addressed=<n> disputed=<n> wontfix=<n> open=<n> pre=<n> suppressed=<n> :: <cat>:<addressed>/<total>,…`.
|
|
186
186
|
Where: `/orc` and `/orc-ultra` at Phase 7 (`phases/summary.md`), `/orc-mini`
|
|
187
187
|
after the risk option's review, `/orc-quick` after the review offer. A review
|
|
188
|
-
with zero findings records
|
|
188
|
+
with zero findings records no observation and is a HEALTHY answer: its
|
|
189
|
+
`FINDING-OUTCOME` line (or the hook `RETURN orc-reviewer-*` line) already counts
|
|
190
|
+
it as a review in `orc gotcha quality` (v2.1.0). An `author: orc` observation
|
|
191
|
+
without `run` is refused (exit 2) — a `ref` that starts with the run id fills it.
|
|
192
|
+
|
|
193
|
+
**The reviewed ranges (v2.1.0, DE-13).** In the same step, store what the review
|
|
194
|
+
READ: `orc gotcha observe -` with
|
|
195
|
+
`{"kind": "review-scope", "run": "<trace name>", "commit": "<HEAD>", "files": {"<path>": [[start, end], …]}}`
|
|
196
|
+
— the slice's `diff_ranges`, a clean review too. The CLI keeps the last 500
|
|
197
|
+
reviews in `.claude/orc/review-scope.jsonl` (user data, never pruned by age) and
|
|
198
|
+
counts what it drops. A later `orc fix record` on lines inside a stored range
|
|
199
|
+
of an EARLIER run is a computed `miss`: the fix is promoted at 1 case and goes
|
|
200
|
+
first in the next card.
|
|
189
201
|
|
|
190
202
|
### Per-lane mechanics (the spines keep the trigger; this is the detail)
|
|
191
203
|
|
|
@@ -205,16 +217,24 @@ file is never a reason to fall back, and gotchas here are purely additive: probe
|
|
|
205
217
|
inject the scope-matching entries into the F2 slice, and stop there. It never
|
|
206
218
|
writes one, because one executor plus one repair round is too little signal to
|
|
207
219
|
attribute a cause — and a lane with no analyst writing repair memory is how that
|
|
208
|
-
memory fills with guesses.
|
|
220
|
+
memory fills with guesses. **A review is different (v2.1.0):** when `/orc-fast` runs
|
|
221
|
+
a review (the F4 offer, or the user asks for one), it records that review's outcomes
|
|
222
|
+
as "Review close" says — an observation is REVIEW LEARNING, not a repair-memory
|
|
223
|
+
entry, and every lane that ran a review records it.
|
|
209
224
|
|
|
210
225
|
**`/orc-quick` — reads and records, since 2.0.0 (a deliberate reversal).**
|
|
211
|
-
Record
|
|
212
|
-
programmatic proof: a defect entry with `REPRO red` then `REPRO green`
|
|
226
|
+
Record after the step 3.5 offers (v2.1.0 — it was 3.3, before the review offer
|
|
227
|
+
existed to record), and only for a request with programmatic proof: a defect entry with `REPRO red` then `REPRO green`
|
|
213
228
|
(`source: defect`, `reproduced: true`) · a PR thread the request took and fixed
|
|
214
229
|
(`source: pr`) · a Sonar or SARIF item fixed (`source: sonar` / `sarif`) · a CI
|
|
215
|
-
failure fixed (`source: ci`) · a review
|
|
216
|
-
|
|
217
|
-
|
|
230
|
+
failure fixed (`source: ci`) · every finding of a review offer, ONE observation per finding
|
|
231
|
+
with its outcome, as "Review close" says (`source: review`; "not a problem here"
|
|
232
|
+
= `disputed`). A plain fix with none of these records nothing.
|
|
233
|
+
A FIX of a named finding (a Sonar issue, a failed check, a defect ORC or an AI
|
|
234
|
+
tool caused) goes through `orc fix record -` (`via: "orc-quick"`, v2.1.0): the
|
|
235
|
+
author is the finder, never `orc`; a Sonar issue key gives the importer's own id,
|
|
236
|
+
so a later gotcha sync completes the same row; and the CLI computes `miss`
|
|
237
|
+
from `review-scope.jsonl`.
|
|
218
238
|
Why the reversal: quick is where most of the fixes happen, so a memory that
|
|
219
239
|
skips it never learns; a PR thread is a human's judgement and a red → green
|
|
220
240
|
repro is proof, so the v1 "too little signal" objection does not apply; and the
|
|
@@ -74,14 +74,14 @@ compiled flow's last phase. `/orc-wait` makes no proposal.
|
|
|
74
74
|
question; its `announce[]` line names the habit and its undo. A habit
|
|
75
75
|
toward `no` is a pre-mark only, never applied. A learned
|
|
76
76
|
`review_before_push: on` → the end-of-run batch ALWAYS carries option *a*
|
|
77
|
-
(dispatch `orc-reviewer-opus-5-
|
|
77
|
+
(dispatch `orc-reviewer-opus-5-low` on the diff), marked `→ usual`, even with
|
|
78
78
|
no `risk: high` row. Record `any.ship.review-before-push` whenever option *a*
|
|
79
79
|
is offered: `chose=review` when the user takes it, else `push`.
|
|
80
80
|
- **`/orc-fast`.** `fast.f0.stale-wiki`: a habit NEVER suggests `continue`
|
|
81
81
|
(a stale wiki is a risk the user takes each time). The CLI never proposes
|
|
82
82
|
it (`never_option`); a suggestion row that names it anyway is ignored. Show
|
|
83
83
|
a `refresh` or `mini` suggestion only, and never apply one. A learned `review_before_push: on` → F4
|
|
84
|
-
offers a dispatch of `orc-reviewer-opus-5-
|
|
84
|
+
offers a dispatch of `orc-reviewer-opus-5-low` on the diff FIRST (P0/P1 block
|
|
85
85
|
the commit), marked `→ usual`; the reviewer is not in the fast pipeline, so
|
|
86
86
|
it runs only on that yes. Record `any.ship.review-before-push` whenever it is
|
|
87
87
|
offered.
|
|
@@ -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
|
|
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
|
|
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-
|
|
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-
|
|
41
|
-
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
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-
|
|
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.
|
|
@@ -10,7 +10,7 @@ Emit `PHASE review start`. **Build the slice from `../review-slice.md`** — its
|
|
|
10
10
|
§1 free check FIRST, then its §2 fields (with the graph on, `graph_changes` keeps
|
|
11
11
|
its rows: no `--brief` here). Superpowers path: its review skill incl. tests
|
|
12
12
|
(Sonnet 4.6 medium), then `../review-slice.md` §3 on its findings — no second
|
|
13
|
-
dispatch. OpenSpec/self path: review worker (Opus 5.5
|
|
13
|
+
dispatch. OpenSpec/self path: review worker (Opus 5.5 low). Pass the resolved
|
|
14
14
|
`code_pattern` + its invariants + gate lines for the re-check
|
|
15
15
|
(pattern-gate.md); no resolved pattern → FIRST ask for one (paste/md/none) (H `orc.phase-5.pattern-missing`).
|
|
16
16
|
FE tasks in run → pass `fe_rules[]` from `../../orc-pattern/references/` fe-a11y
|
|
@@ -41,7 +41,7 @@ skipped by flow config") — never imply the work was reviewed.
|
|
|
41
41
|
<!-- diy:when review=on -->
|
|
42
42
|
Dispatch the reviewer exactly as the full lane does — follow the review half
|
|
43
43
|
of `.claude/skills/orc/subskills/orc-review-verify/SKILL.md` (reviewer agent
|
|
44
|
-
`orc-reviewer-opus-5-
|
|
44
|
+
`orc-reviewer-opus-5-low`; findings ride the severity ladder from the
|
|
45
45
|
locked rules, blocking and advisory findings both surfaced). Build its slice
|
|
46
46
|
from `.claude/skills/_shared/review-slice.md` (§1 free check, §3 after-filter).
|
|
47
47
|
<!-- /diy:when -->
|
|
@@ -42,7 +42,9 @@ owner is this file has its detail in "Verb detail" below.
|
|
|
42
42
|
| `JUDGE <analysis\|plan\|implementation> <verdict> round=<n> blocking=<n> advisory=<n> downgraded=<n>` | orc → writer | ultra judgment verdict | `orc/references/ultra-mode.md` |
|
|
43
43
|
| `OUTCOME task=<id> score=<n> band=<range> model=<m> retries=<n> requeues=<n> needs_context=<n> unmet=<n>` | orc → writer | task closed — links the scoring band to what it actually took | `_shared/phases/execution.md` |
|
|
44
44
|
| `FINDING p0=<n> p1=<n> p2=<n> p3=<n>[ pre=<n> suppressed=<n> folded=<n>]` | reviewer→orc → writer | review outcome (P0–P3 severity ladder); the tail counts the after-filter's buckets | `_shared/phases/review.md` |
|
|
45
|
-
| `FINDING-OUTCOME addressed=<n> disputed=<n> wontfix=<n> open=<n> pre=<n> suppressed=<n> :: <cat>:<addressed>/<total>,…` | orc → writer | ONE line at review close — what became of each finding; `orc gotcha quality`
|
|
45
|
+
| `FINDING-OUTCOME addressed=<n> disputed=<n> wontfix=<n> open=<n> pre=<n> suppressed=<n> :: <cat>:<addressed>/<total>,…` | orc → writer | ONE line at review close (a clean review too) — what became of each finding; `orc gotcha quality` counts it as a review | `_shared/phases/trace-verbs.md` |
|
|
46
|
+
| `REVIEW-WHICH chose=<orc\|project\|skip> name=<the review the rule names> by=<user\|ledger\|learned> :: <file:line of the rule>` | orc → writer | the answer to §0 "which review" when the project names its own review — written ALWAYS, also under habits off; the FINISH nudge reads it | `_shared/phases/trace-verbs.md` |
|
|
47
|
+
| `FIX source=<sonar\|ci\|defect\|pr\|review\|other> introduced_by=<orc\|ai\|human\|unknown> by=<user\|evidence> obs=<id8>[ missed_by=<run>] :: <path:lines> <rule or finding>` | cli | one fix recorded by `orc fix record` (/orc-fix) into the HOST run's trace — the CLI writes it, never a packet | `orc-fix/SKILL.md` |
|
|
46
48
|
| `VERDICT pass\|fail :: <detail>` | verifier→orc → writer | verification outcome | `_shared/phases/verify.md` |
|
|
47
49
|
| `DRIFT loop=<n> :: <user description, compressed>` | orc → writer | mock-example drift-recovery loop opened (hard cap 2 loops) | `_shared/drift-recovery.md` |
|
|
48
50
|
| `TDD-RED task=<id> iter=<n> :: <failing tests>` | executor→orc → writer | TDD repair-loop iteration — the plan's acceptance tests still red | `_shared/phases/trace-verbs.md` |
|
|
@@ -170,6 +172,16 @@ reaches the file through a packet — you never append lines by hand.
|
|
|
170
172
|
the user said "not a problem here" = disputed; declined with no reason = wontfix.
|
|
171
173
|
`pre` and `suppressed` copy the after-filter's buckets; they never gate. The
|
|
172
174
|
`FINDING` tail `pre= suppressed= folded=` is additive (the `sections=` precedent).
|
|
175
|
+
- **`REVIEW-WHICH`** (v2.1.0). ONE line, before ship, in every coding lane that
|
|
176
|
+
changed code, when the `review-policy` probe says `policy: project`
|
|
177
|
+
(the review slice, §0). It is written ALWAYS — habits off too — because it is a
|
|
178
|
+
record of what ran, not a habit. The `ASK any.review.which` line is written in
|
|
179
|
+
addition only when habits is on. A run that changed code under `policy:
|
|
180
|
+
project` with no `REVIEW-WHICH` line gets one nudge at FINISH.
|
|
181
|
+
- **`FIX`** (v2.1.0). Written by `orc fix record` ITSELF into the run in flight
|
|
182
|
+
(`/orc-fix`, a rider that opens no run). A packet that carries it is refused.
|
|
183
|
+
A lane never narrates it and never repeats it; `orc stats` and `/orc-retro`
|
|
184
|
+
read it like any other line.
|
|
173
185
|
- **`DRIFT`.** `PHASE mock-example`; canonical `_shared/drift-recovery.md`.
|
|
174
186
|
- **`TDD-RED` / `TDD-GREEN`.** Cap `tdd_loop_max`; a paired TDD task's red proof
|
|
175
187
|
also emits iter=0. `TDD-GREEN` is the non-exempt definition-of-done.
|
|
@@ -334,8 +346,10 @@ trace and never emit `SPAWN`/`RETURN`.
|
|
|
334
346
|
|
|
335
347
|
### Files & lifecycle
|
|
336
348
|
|
|
337
|
-
- Folder: `log_dir` (default `.claude/orc/logs/`). Persistent
|
|
338
|
-
|
|
349
|
+
- Folder: `log_dir` (default `.claude/orc/logs/`). Persistent (deliberate
|
|
350
|
+
opposite of the decision log): kept until you run `orc clear logs --apply`, or
|
|
351
|
+
until the automatic sweep removes it (`log_retention_auto: on`, older than
|
|
352
|
+
`log_retention_days`). Top level holds the run `.txt` plus
|
|
339
353
|
its sidecars (`.pending.json`, `.jsonl`); generated reports live in
|
|
340
354
|
subfolders (`retro/`).
|
|
341
355
|
- One file per run: **`run-<lane>-<slug>-<DDMMYY>-<HHMMSS>.txt`**, append-only.
|