@azure-id/orc 2.0.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.
- package/CHANGELOG.md +401 -0
- package/README-id.md +52 -23
- package/README.md +50 -22
- package/bin/build-agents.js +24 -25
- package/bin/clear-logs.js +620 -0
- package/bin/cli.js +1155 -158
- 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 +108 -27
- package/bin/verify-package.js +17 -6
- 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 +9 -9
- 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/extra-slots.md +1 -1
- 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-fix.md +87 -0
- package/mock-run/orc-pattern.md +112 -112
- package/mock-run/orc.md +157 -157
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +32 -29
- 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-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-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 +5 -5
- package/templates/skills/_shared/gotchas.md +27 -7
- package/templates/skills/_shared/habits.md +2 -2
- package/templates/skills/_shared/opus5-only.md +14 -14
- 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 +1 -1
- package/templates/skills/orc/config.md +25 -27
- package/templates/skills/orc/examples/full-run-mock.md +2 -1
- package/templates/skills/orc/references/effort-and-mode.md +17 -17
- 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 +8 -6
- package/templates/skills/orc-fix/SKILL.md +110 -0
- 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 +1 -1
- package/templates/skills/orc-quick/SKILL.md +2 -2
- package/templates/skills/orc-quick/references/dispatch-gate.md +3 -2
- 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
|
@@ -13,7 +13,7 @@ is inert.
|
|
|
13
13
|
|
|
14
14
|
## The mapping (only when `opus5_only: true`)
|
|
15
15
|
|
|
16
|
-
**Scored executors** — one model, EFFORT as the cost dial, replacing the
|
|
16
|
+
**Scored executors** — one model, EFFORT as the cost dial, replacing the 5-band
|
|
17
17
|
mixed-model table:
|
|
18
18
|
|
|
19
19
|
| Score | Executor agent |
|
|
@@ -23,7 +23,7 @@ mixed-model table:
|
|
|
23
23
|
|
|
24
24
|
Two bands, sharing the 90 edge with the default table's top two rows. Since
|
|
25
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
|
|
26
|
+
so this mode differs from it only below 41 — a third band here would be a
|
|
27
27
|
distinction the default table stopped making.
|
|
28
28
|
|
|
29
29
|
**Fixed roles** — dispatch the Opus 5.5 variant **instead of** the default role
|
|
@@ -37,21 +37,21 @@ agent: same task slice, same return contract, same phase.
|
|
|
37
37
|
| mini plan | `orc-planner-mini-sonnet-5-high` | `orc-planner-mini-opus-5-med` |
|
|
38
38
|
| scout | `orc-scout-sonnet-4-6-high` | `orc-scout-opus-5-low` |
|
|
39
39
|
| pattern codify | `orc-pattern-codifier-sonnet-5-high` | `orc-pattern-codifier-opus-5-med` |
|
|
40
|
-
| wiki scan | `orc-wiki-scanner-
|
|
41
|
-
| claude write | `orc-claude-writer-opus-4-8-high` | `orc-claude-writer-opus-5-med` |
|
|
40
|
+
| wiki scan | `orc-wiki-scanner-sonnet-5-high` (light) | `orc-wiki-scanner-opus-5-low` |
|
|
42
41
|
| retro mine | `orc-retro-sonnet-5-high` | `orc-retro-opus-5-med` |
|
|
43
42
|
|
|
44
|
-
The
|
|
45
|
-
verifier, test-author, combiner, learn-writer, advisor, judge
|
|
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
|
|
46
47
|
compliant and dispatch unchanged (their efforts are NOT rewritten by this mode).
|
|
47
48
|
|
|
48
|
-
**The wiki scan tier ladder (v0.46.0)
|
|
49
|
-
Off, the ladder picks deep or light per delta. ON, this mode
|
|
50
|
-
|
|
51
|
-
one shipped agent** and the ladder simply stops applying.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
exists to prevent. Ladder: `../orc-wiki/references/partial-refresh.md`.
|
|
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
55
|
|
|
56
56
|
## Out of scope — never forced
|
|
57
57
|
|
|
@@ -114,7 +114,7 @@ first one is true. `orc config list` and `orc config set` NAME the taken bands
|
|
|
114
114
|
AND the taken positions for exactly that reason: a shadowed setting must never
|
|
115
115
|
be silent, and neither must a partly shadowed one.
|
|
116
116
|
|
|
117
|
-
Both wiki slots collapse onto `orc-wiki-scanner-opus-5-
|
|
117
|
+
Both wiki slots collapse onto `orc-wiki-scanner-opus-5-low` while the mode is on,
|
|
118
118
|
which is why the slot table adds **no agent and no pair**. A slot names the
|
|
119
119
|
POSITION, not the model.
|
|
120
120
|
|
|
@@ -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.
|
|
@@ -1,136 +1,136 @@
|
|
|
1
|
-
# Phase — Behavior trace (id: `trace`)
|
|
2
|
-
|
|
3
|
-
> **Library file.** `orc lane phases <lane> --json` → `trace_grammar` gives this lane's verbs. **A verb not in `trace_grammar` → read `trace-verbs.md`** (the CLOSED set, on demand). Never invent a verb.
|
|
4
|
-
|
|
5
|
-
<!-- orc:layer core -->
|
|
6
|
-
|
|
7
|
-
**Behavior-trace logging is PERMANENT (always on) — there is no config toggle.**
|
|
8
|
-
Every ORC run traces, to a **persistent** file that is NOT the decision log. The
|
|
9
|
-
`orc-trace.js` hook bootstraps `log_dir` + the run pointer on the first ORC-agent
|
|
10
|
-
dispatch and writes the `SPAWN`/`RETURN`/`PHASE-EDGE` skeleton itself. Only
|
|
11
|
-
`log_dir` (default `.claude/orc/logs`) is configurable.
|
|
12
|
-
|
|
13
|
-
## Narration is WRITTEN BY THE CLI, not remembered (v2.0.0 — the core rule)
|
|
14
|
-
|
|
15
|
-
> **Phase close = pipe the phase packet to `orc trace write --packet -`.**
|
|
16
|
-
> Exit ≠ 0 → dispatch `orc-trace-writer-haiku-4-5` with the SAME packet.
|
|
17
|
-
|
|
18
|
-
You supply the facts; the CLI holds the pen. You never append lines by hand.
|
|
19
|
-
|
|
20
|
-
- **Pairing rule.** The write for phase N goes **in the same tool block as
|
|
21
|
-
phase N+1's first dispatch**. A phase with no next dispatch (FINISH, an
|
|
22
|
-
abort, a pure-question phase) writes SOLO, before its user-facing output.
|
|
23
|
-
- **First write is solo** — before the planner/analyst goes out. It carries
|
|
24
|
-
`run_meta`.
|
|
25
|
-
- **Last write (run end).** The FINISH packet is written BEFORE you delete
|
|
26
|
-
`.current`. It carries ONE `STATS` line immediately BEFORE `FINISH`.
|
|
27
|
-
|
|
28
|
-
### Phase packet (the command's stdin — small, plain YAML or JSON)
|
|
29
|
-
|
|
30
|
-
```yaml
|
|
31
|
-
phase: execution wave 2
|
|
32
|
-
run_meta: # FIRST packet of the run ONLY; omit thereafter
|
|
33
|
-
lane: orc # orc | ultra | mini | fast | diy | wiki | analyze |
|
|
34
|
-
# plan | claude | poly | learn | verify | pattern |
|
|
35
|
-
# prsetup | prdriver | quick | grill | route |
|
|
36
|
-
# brainstorm | pact | boundary | handoff | budget |
|
|
37
|
-
# aftermath | export | challenge | doc | test
|
|
38
|
-
slug: cas-multi-exchange-withdrawal
|
|
39
|
-
trace_path: .claude/orc/logs/run-orc-cas-multi-exchange-withdrawal-240726-002352.txt
|
|
40
|
-
events: # each {ts, verb, tail}; verb = the WHOLE head (`GATE grounding pass`), tail = detail only
|
|
41
|
-
- {ts: "240726 00:30:39.881", verb: "VERIFY T2", tail: "actual=claude-sonnet-4-6/high ✅ MATCH"}
|
|
42
|
-
decisions: > # free text — the WHY layer
|
|
43
|
-
User answered "no new deps" verbatim; rejected the adapter split.
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
- Build it from the phase's **actual working state as the phase closes**, never
|
|
47
|
-
from memory later. `ts` is each event's REAL time. An absent field is omitted.
|
|
48
|
-
- Subagent-returned markers (`QUESTION`, `FINDING`, `VERDICT`, a return's
|
|
49
|
-
`actual_model`) are folded into the NEXT packet, never written directly.
|
|
50
|
-
|
|
51
|
-
### How many packets per lane (three tiers — EVERY trace-owning lane narrates)
|
|
52
|
-
|
|
53
|
-
| Tier | Lanes | Packets |
|
|
54
|
-
|------|-------|---------|
|
|
55
|
-
| Build lanes | `orc` (incl. ultra), `orc-mini`, `orc-fast` | per phase — full orc ≈ 7–9 (ultra adds U0 + judge packets); orc-mini batches to 3, orc-fast to 2 |
|
|
56
|
-
| Multi-dispatch | `orc-wiki`, `orc-pr-driver` | one per scan-batch (wiki) or LAYER (pr-driver) boundary + the end-of-run packet |
|
|
57
|
-
| Composed | `orc-diy` | one per ENABLED phase group, **minimum 2** |
|
|
58
|
-
| Iterative | `orc-quick`, `orc-challenge`, `orc-doc`, `orc-test` | **one per completed unit** (entry · iteration · wave · cycle — each spine names its unit) + the end-of-run `FINISH` packet. Several trace files for one cycle is CORRECT |
|
|
59
|
-
| Single-dispatch | `orc-claude`, `orc-plan`, `orc-analyze`, `orc-analyze-mini`, `orc-pattern`, `orc-verify`, `orc-learn`, `orc-poly`, `orc-pr-setup`, `orc-grill`, `orc-route`, `orc-brainstorm`, `orc-pact`, `orc-boundary`, `orc-handoff`, `orc-budget`, `orc-aftermath`, `orc-export` | **exactly ONE mandatory end-of-run packet** |
|
|
60
|
-
|
|
61
|
-
**The single-packet obligation is defined HERE, once.** That packet goes out
|
|
62
|
-
SOLO after the main return validates and BEFORE `.current` is deleted, with
|
|
63
|
-
`run_meta` plus the whole event list (intake decisions, the user's answers,
|
|
64
|
-
`DISPATCH`/`VERIFY`, gate/verdict lines, `FINISH`). `context-combiner` is a
|
|
65
|
-
PHASE of the analyze run, not a lane. `/orc-retro` writes no trace.
|
|
66
|
-
|
|
67
|
-
## Files & lifecycle
|
|
68
|
-
|
|
69
|
-
- `log_dir`
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
in the SAME step.
|
|
81
|
-
|
|
82
|
-
## Write cadence — append AS THE RUN GOES, never in one batch at the end
|
|
83
|
-
|
|
84
|
-
Each phase's packet goes out AT that phase's close, with that phase's events
|
|
85
|
-
and the decisions behind them.
|
|
86
|
-
|
|
87
|
-
**Self-check:** a phase that ends with
|
|
88
|
-
`zero new trace lines is a protocol violation`.
|
|
89
|
-
If a phase went by without its packet, write it NOW with the events'
|
|
90
|
-
real timestamps — a block stamped "now" is a FALSE record. Never batch
|
|
91
|
-
everything at `FINISH`. **A run with no `FINISH` counts as unfinished,
|
|
92
|
-
permanently** — `FINISH` is mandatory even on an abort.
|
|
93
|
-
|
|
94
|
-
## Model check, announce, compaction
|
|
95
|
-
|
|
96
|
-
- **Claimed vs actual.** Compare each return's `actual_model` / `actual_effort`
|
|
97
|
-
with the pair the agent NAME implies; put a `VERIFY` line in the next packet
|
|
98
|
-
and surface a ⛔ DOWNGRADE to the user in chat.
|
|
99
|
-
- **Announce-on-spawn** from the agent NAME ("Spawning orc-executor-opus-5-low →
|
|
100
|
-
claude-opus-5-5 / low"); never pass the coarse `sonnet|opus|haiku` arg.
|
|
101
|
-
- **Compaction.** The checkpoint carries `logging_enabled` + `trace_path`; on
|
|
102
|
-
resume, keep writing to the same file. `/orc-ultra` = `orc` + `ultra_mode: true`.
|
|
103
|
-
- Append-only, one whole block per append. Record the ugly bits too.
|
|
104
|
-
|
|
105
|
-
<!-- /orc:layer -->
|
|
106
|
-
|
|
107
|
-
<!-- orc:layer composed -->
|
|
108
|
-
|
|
109
|
-
## Behavior trace (PERMANENT — always on, no flow key)
|
|
110
|
-
|
|
111
|
-
Tracing is NOT composable: every ORC run traces, this one included. Follow
|
|
112
|
-
`.claude/skills/_shared/phases/trace.md` (load it at run start) — this
|
|
113
|
-
block is stitched into every compiled flow so a user-composed pipeline can never
|
|
114
|
-
be the one lane that runs blind.
|
|
115
|
-
|
|
116
|
-
**Run start:** create `log_dir`, write `log_dir/.current` =
|
|
117
|
-
`run-diy-<slug>-<DDMMYY>-<HHMMSS>.txt` AND `touch the trace file` of that name
|
|
118
|
-
in the SAME step (a pointer naming a file that does not exist reads as dangling —
|
|
119
|
-
the hook rotates away from it and the run splits across two files), then store
|
|
120
|
-
`trace_path` in the checkpoint and run `orc run snapshot --run <run-slug>`. The lane token is `diy`, whatever the flow is
|
|
121
|
-
named.
|
|
122
|
-
|
|
123
|
-
**Narration is written by the CLI, never remembered:** record each event with
|
|
124
|
-
its REAL timestamp into a phase packet (`PHASE`, `DISPATCH`/`VERIFY` per spawn —
|
|
125
|
-
`actual_model`/`actual_effort` vs expected, surface any ⛔ DOWNGRADE to the user
|
|
126
|
-
— `SCORE`, `OUTCOME`, `GATE`, `FINDING`/`VERDICT` for whichever gates this flow
|
|
127
|
-
enabled, `FINISH`, plus `decisions` = the WHY), then pipe it to
|
|
128
|
-
`orc trace write --packet -` (exit ≠ 0 → `orc-trace-writer-haiku-4-5`), PAIRED
|
|
129
|
-
with the next phase's first dispatch. **One packet per ENABLED phase group, minimum 2** — the flow shape is
|
|
130
|
-
composed, so the packet count is too; a phase this flow turned OFF owes nothing.
|
|
131
|
-
A phase ending with `zero new trace lines is a protocol violation`.
|
|
132
|
-
|
|
133
|
-
**Run end:** write the `FINISH` packet, then delete
|
|
134
|
-
`log_dir/.current`.
|
|
135
|
-
|
|
136
|
-
<!-- /orc:layer -->
|
|
1
|
+
# Phase — Behavior trace (id: `trace`)
|
|
2
|
+
|
|
3
|
+
> **Library file.** `orc lane phases <lane> --json` → `trace_grammar` gives this lane's verbs. **A verb not in `trace_grammar` → read `trace-verbs.md`** (the CLOSED set, on demand). Never invent a verb.
|
|
4
|
+
|
|
5
|
+
<!-- orc:layer core -->
|
|
6
|
+
|
|
7
|
+
**Behavior-trace logging is PERMANENT (always on) — there is no config toggle.**
|
|
8
|
+
Every ORC run traces, to a **persistent** file that is NOT the decision log. The
|
|
9
|
+
`orc-trace.js` hook bootstraps `log_dir` + the run pointer on the first ORC-agent
|
|
10
|
+
dispatch and writes the `SPAWN`/`RETURN`/`PHASE-EDGE` skeleton itself. Only
|
|
11
|
+
`log_dir` (default `.claude/orc/logs`) is configurable.
|
|
12
|
+
|
|
13
|
+
## Narration is WRITTEN BY THE CLI, not remembered (v2.0.0 — the core rule)
|
|
14
|
+
|
|
15
|
+
> **Phase close = pipe the phase packet to `orc trace write --packet -`.**
|
|
16
|
+
> Exit ≠ 0 → dispatch `orc-trace-writer-haiku-4-5` with the SAME packet.
|
|
17
|
+
|
|
18
|
+
You supply the facts; the CLI holds the pen. You never append lines by hand.
|
|
19
|
+
|
|
20
|
+
- **Pairing rule.** The write for phase N goes **in the same tool block as
|
|
21
|
+
phase N+1's first dispatch**. A phase with no next dispatch (FINISH, an
|
|
22
|
+
abort, a pure-question phase) writes SOLO, before its user-facing output.
|
|
23
|
+
- **First write is solo** — before the planner/analyst goes out. It carries
|
|
24
|
+
`run_meta`.
|
|
25
|
+
- **Last write (run end).** The FINISH packet is written BEFORE you delete
|
|
26
|
+
`.current`. It carries ONE `STATS` line immediately BEFORE `FINISH`.
|
|
27
|
+
|
|
28
|
+
### Phase packet (the command's stdin — small, plain YAML or JSON)
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
phase: execution wave 2
|
|
32
|
+
run_meta: # FIRST packet of the run ONLY; omit thereafter
|
|
33
|
+
lane: orc # orc | ultra | mini | fast | diy | wiki | analyze |
|
|
34
|
+
# plan | claude | poly | learn | verify | pattern |
|
|
35
|
+
# prsetup | prdriver | quick | grill | route |
|
|
36
|
+
# brainstorm | pact | boundary | handoff | budget |
|
|
37
|
+
# aftermath | export | challenge | doc | test
|
|
38
|
+
slug: cas-multi-exchange-withdrawal
|
|
39
|
+
trace_path: .claude/orc/logs/run-orc-cas-multi-exchange-withdrawal-240726-002352.txt
|
|
40
|
+
events: # each {ts, verb, tail}; verb = the WHOLE head (`GATE grounding pass`), tail = detail only
|
|
41
|
+
- {ts: "240726 00:30:39.881", verb: "VERIFY T2", tail: "actual=claude-sonnet-4-6/high ✅ MATCH"}
|
|
42
|
+
decisions: > # free text — the WHY layer
|
|
43
|
+
User answered "no new deps" verbatim; rejected the adapter split.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- Build it from the phase's **actual working state as the phase closes**, never
|
|
47
|
+
from memory later. `ts` is each event's REAL time. An absent field is omitted.
|
|
48
|
+
- Subagent-returned markers (`QUESTION`, `FINDING`, `VERDICT`, a return's
|
|
49
|
+
`actual_model`) are folded into the NEXT packet, never written directly.
|
|
50
|
+
|
|
51
|
+
### How many packets per lane (three tiers — EVERY trace-owning lane narrates)
|
|
52
|
+
|
|
53
|
+
| Tier | Lanes | Packets |
|
|
54
|
+
|------|-------|---------|
|
|
55
|
+
| Build lanes | `orc` (incl. ultra), `orc-mini`, `orc-fast` | per phase — full orc ≈ 7–9 (ultra adds U0 + judge packets); orc-mini batches to 3, orc-fast to 2 |
|
|
56
|
+
| Multi-dispatch | `orc-wiki`, `orc-pr-driver` | one per scan-batch (wiki) or LAYER (pr-driver) boundary + the end-of-run packet |
|
|
57
|
+
| Composed | `orc-diy` | one per ENABLED phase group, **minimum 2** |
|
|
58
|
+
| Iterative | `orc-quick`, `orc-challenge`, `orc-doc`, `orc-test` | **one per completed unit** (entry · iteration · wave · cycle — each spine names its unit) + the end-of-run `FINISH` packet. Several trace files for one cycle is CORRECT |
|
|
59
|
+
| Single-dispatch | `orc-claude`, `orc-plan`, `orc-analyze`, `orc-analyze-mini`, `orc-pattern`, `orc-verify`, `orc-learn`, `orc-poly`, `orc-pr-setup`, `orc-grill`, `orc-route`, `orc-brainstorm`, `orc-pact`, `orc-boundary`, `orc-handoff`, `orc-budget`, `orc-aftermath`, `orc-export` | **exactly ONE mandatory end-of-run packet** |
|
|
60
|
+
|
|
61
|
+
**The single-packet obligation is defined HERE, once.** That packet goes out
|
|
62
|
+
SOLO after the main return validates and BEFORE `.current` is deleted, with
|
|
63
|
+
`run_meta` plus the whole event list (intake decisions, the user's answers,
|
|
64
|
+
`DISPATCH`/`VERIFY`, gate/verdict lines, `FINISH`). `context-combiner` is a
|
|
65
|
+
PHASE of the analyze run, not a lane. `/orc-retro` writes no trace.
|
|
66
|
+
|
|
67
|
+
## Files & lifecycle
|
|
68
|
+
|
|
69
|
+
- `log_dir` stays until `orc clear logs --apply` or the `log_retention_auto`
|
|
70
|
+
sweep. One append-only file per run:
|
|
71
|
+
**`run-<lane>-<slug>-<DDMMYY>-<HHMMSS>.txt`** — `lane` from the enum above,
|
|
72
|
+
`slug` `[a-z0-9-]`, ≤32 chars, no trailing hyphen.
|
|
73
|
+
- Run pointer: at run start, write `log_dir/.current` containing just the trace
|
|
74
|
+
filename **and `touch the trace file` of that name in the SAME step**. Both, or
|
|
75
|
+
neither — a pointer to a missing file reads as dangling and splits the run.
|
|
76
|
+
A lane that writes code also runs `orc run snapshot --run <run-slug>` in that
|
|
77
|
+
step (what `orc undo` goes back to). Delete the pointer at run end (success or abort).
|
|
78
|
+
- **A SUSPENDED lane re-writes its pointer on RESUME** (`_shared/lane-suspend.md`,
|
|
79
|
+
`RETURN-TO`): the receiving lane deleted `.current`, so re-write it and
|
|
80
|
+
`touch the trace file` it names, in the SAME step.
|
|
81
|
+
|
|
82
|
+
## Write cadence — append AS THE RUN GOES, never in one batch at the end
|
|
83
|
+
|
|
84
|
+
Each phase's packet goes out AT that phase's close, with that phase's events
|
|
85
|
+
and the decisions behind them.
|
|
86
|
+
|
|
87
|
+
**Self-check:** a phase that ends with
|
|
88
|
+
`zero new trace lines is a protocol violation`.
|
|
89
|
+
If a phase went by without its packet, write it NOW with the events'
|
|
90
|
+
real timestamps — a block stamped "now" is a FALSE record. Never batch
|
|
91
|
+
everything at `FINISH`. **A run with no `FINISH` counts as unfinished,
|
|
92
|
+
permanently** — `FINISH` is mandatory even on an abort.
|
|
93
|
+
|
|
94
|
+
## Model check, announce, compaction
|
|
95
|
+
|
|
96
|
+
- **Claimed vs actual.** Compare each return's `actual_model` / `actual_effort`
|
|
97
|
+
with the pair the agent NAME implies; put a `VERIFY` line in the next packet
|
|
98
|
+
and surface a ⛔ DOWNGRADE to the user in chat.
|
|
99
|
+
- **Announce-on-spawn** from the agent NAME ("Spawning orc-executor-opus-5-low →
|
|
100
|
+
claude-opus-5-5 / low"); never pass the coarse `sonnet|opus|haiku` arg.
|
|
101
|
+
- **Compaction.** The checkpoint carries `logging_enabled` + `trace_path`; on
|
|
102
|
+
resume, keep writing to the same file. `/orc-ultra` = `orc` + `ultra_mode: true`.
|
|
103
|
+
- Append-only, one whole block per append. Record the ugly bits too.
|
|
104
|
+
|
|
105
|
+
<!-- /orc:layer -->
|
|
106
|
+
|
|
107
|
+
<!-- orc:layer composed -->
|
|
108
|
+
|
|
109
|
+
## Behavior trace (PERMANENT — always on, no flow key)
|
|
110
|
+
|
|
111
|
+
Tracing is NOT composable: every ORC run traces, this one included. Follow
|
|
112
|
+
`.claude/skills/_shared/phases/trace.md` (load it at run start) — this
|
|
113
|
+
block is stitched into every compiled flow so a user-composed pipeline can never
|
|
114
|
+
be the one lane that runs blind.
|
|
115
|
+
|
|
116
|
+
**Run start:** create `log_dir`, write `log_dir/.current` =
|
|
117
|
+
`run-diy-<slug>-<DDMMYY>-<HHMMSS>.txt` AND `touch the trace file` of that name
|
|
118
|
+
in the SAME step (a pointer naming a file that does not exist reads as dangling —
|
|
119
|
+
the hook rotates away from it and the run splits across two files), then store
|
|
120
|
+
`trace_path` in the checkpoint and run `orc run snapshot --run <run-slug>`. The lane token is `diy`, whatever the flow is
|
|
121
|
+
named.
|
|
122
|
+
|
|
123
|
+
**Narration is written by the CLI, never remembered:** record each event with
|
|
124
|
+
its REAL timestamp into a phase packet (`PHASE`, `DISPATCH`/`VERIFY` per spawn —
|
|
125
|
+
`actual_model`/`actual_effort` vs expected, surface any ⛔ DOWNGRADE to the user
|
|
126
|
+
— `SCORE`, `OUTCOME`, `GATE`, `FINDING`/`VERDICT` for whichever gates this flow
|
|
127
|
+
enabled, `FINISH`, plus `decisions` = the WHY), then pipe it to
|
|
128
|
+
`orc trace write --packet -` (exit ≠ 0 → `orc-trace-writer-haiku-4-5`), PAIRED
|
|
129
|
+
with the next phase's first dispatch. **One packet per ENABLED phase group, minimum 2** — the flow shape is
|
|
130
|
+
composed, so the packet count is too; a phase this flow turned OFF owes nothing.
|
|
131
|
+
A phase ending with `zero new trace lines is a protocol violation`.
|
|
132
|
+
|
|
133
|
+
**Run end:** write the `FINISH` packet, then delete
|
|
134
|
+
`log_dir/.current`.
|
|
135
|
+
|
|
136
|
+
<!-- /orc:layer -->
|
|
@@ -5,7 +5,31 @@
|
|
|
5
5
|
> `/orc-quick` review offer, the `/orc-mini` risk-high option, the `/orc-pr-driver`
|
|
6
6
|
> per-layer gate, `/orc-ultra` gate 3). One slice, so a review in quick is the
|
|
7
7
|
> same review as in `/orc`. The procedure and the return live in the agent file
|
|
8
|
-
> (`.claude/agents/orc-reviewer-opus-5-
|
|
8
|
+
> (`.claude/agents/orc-reviewer-opus-5-low.md`), never here.
|
|
9
|
+
|
|
10
|
+
## §0 Which review — only when the project names its own (v2.1.0)
|
|
11
|
+
|
|
12
|
+
When the `review-policy` probe of the lane config (or `orc review policy
|
|
13
|
+
--json`) says `policy: project`, a coding lane that changed code asks this ONCE
|
|
14
|
+
before ship — also `/orc-fast`, and `/orc-mini` without a risk-high row (DE-8).
|
|
15
|
+
A CLAUDE.md line never picks the reviewer: it adds an OPTION (H `any.review.which`).
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
Which review for this change?
|
|
19
|
+
1. ORC review — orc-reviewer-opus-5-low (traced, gotcha card, Review Quality)
|
|
20
|
+
2. <name> — the review <file>:<line> asks for ← recommended
|
|
21
|
+
3. Skip review (not recommended: <file>:<line> asks for one)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
- Write `REVIEW-WHICH chose=<orc|project|skip> name=<the named review> by=user ::
|
|
25
|
+
<file>:<line>` ALWAYS (habits off too) — and ONLY under `policy: project`. With habits on, also the ASK line.
|
|
26
|
+
- **1** → this slice, as the lane already does. **2** → run the named skill or
|
|
27
|
+
command (the Skill tool takes both), then §3 on its findings with
|
|
28
|
+
`reviewer: "<name>"` on each observation — no ORC reviewer is dispatched.
|
|
29
|
+
**3** → no review; the summary says the project asked for one.
|
|
30
|
+
- An external review has no hook trace, no gotcha card and no required
|
|
31
|
+
`category`/`scenario`/`pre_existing`: §3 fills `category: uncategorized` where
|
|
32
|
+
it cannot map one, and Review Quality counts it in its own line.
|
|
9
33
|
|
|
10
34
|
Slice fields: changed_files[] · diff_ranges[] · acceptance_criteria[] · constraints[] · code_pattern · invariants[] · validation_gate[] · fe_rules[] · security_checklist[] · graph_changes · tool_findings[] · gotcha_card · rules_card · previous_findings[] · mode
|
|
11
35
|
|
|
@@ -74,6 +98,9 @@ The reviewer reports EVERY finding. Then, before the ladder acts:
|
|
|
74
98
|
5. At review close, record one observation per finding and emit the
|
|
75
99
|
`FINDING-OUTCOME` line — `gotchas.md` §10 "Review close" (`/orc` Phase 7,
|
|
76
100
|
`/orc-mini` after its risk option, `/orc-quick` after the review offer).
|
|
101
|
+
6. In the same step, store the reviewed ranges (`diff_ranges`) with ONE
|
|
102
|
+
`orc gotcha observe -` call, body `{"kind": "review-scope", run, commit,
|
|
103
|
+
files}` (DE-13, "Review close"). The CLI computes a later fix's `miss` from it.
|
|
77
104
|
|
|
78
105
|
**Superpowers path** (DE-13): after the Superpowers review skill returns, run
|
|
79
106
|
this §3 on its findings too, outcomes included — never a second reviewer dispatch.
|
|
@@ -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 |
|
|
@@ -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
|
|
101
|
-
|
|
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
|
|
@@ -87,7 +87,7 @@ Workers are model-pinned SUBAGENTS in `.claude/agents/` — the model is enforce
|
|
|
87
87
|
not requested in prose. Score every task from the planner-emitted `facets` via
|
|
88
88
|
the fixed arithmetic formula and SHOW the table with the facet vector + the
|
|
89
89
|
arithmetic (`B+N+L+T+fan+U = raw`; an un-shown number is not scored); map the
|
|
90
|
-
final score via the RESOLVED table in `config.md` — `opus5_only` (2-band Opus-5-only, FORCING) > `rubric_bands_override` > the default
|
|
90
|
+
final score via the RESOLVED table in `config.md` — `opus5_only` (2-band Opus-5-only, FORCING) > `rubric_bands_override` > the default 5-band (`rubric_bands` = granularity only, never a preset); NAME it when you show scores; sibling tasks differing in ≤1 facet share a
|
|
91
91
|
band or cite the differing facet (see `references/effort-and-mode.md`). EVERY
|
|
92
92
|
dispatch is scored — fix-cycle dispatches (review-fix, verify-fix, P2-batch,
|
|
93
93
|
requeue) run the same formula, inherit the original task's risk floor, and never
|
|
@@ -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
|
|
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,
|
|
35
|
-
| [
|
|
36
|
-
| [
|
|
37
|
-
| [
|
|
38
|
-
| [
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
`
|
|
51
|
-
`
|
|
52
|
-
|
|
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
|
+
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
|
|
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-
|
|
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,
|
|
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
|
|
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 ·
|
|
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 ·
|