@azure-id/orc 1.9.1 → 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README-id.md +38 -39
  3. package/README.md +36 -35
  4. package/bin/build-agents.js +109 -109
  5. package/bin/cli.js +35 -33
  6. package/bin/onboarding-content.js +4 -4
  7. package/bin/pricing.json +207 -200
  8. package/bin/verify-contracts.js +2 -2
  9. package/bin/verify-package.js +7 -7
  10. package/bin/webui/css/04-motion.css +162 -152
  11. package/bin/webui/css/panels/knowledge.css +563 -116
  12. package/bin/webui/fixtures/extra.js +2036 -2036
  13. package/bin/webui/fixtures/hookui.js +5 -5
  14. package/bin/webui/fixtures/settings.js +305 -305
  15. package/bin/webui/i18n/en/knowledge.json +117 -2
  16. package/bin/webui/i18n/id/knowledge.json +117 -2
  17. package/bin/webui/js/panels/knowledge.js +552 -7
  18. package/bin/webui/js/panels/overview.js +13 -4
  19. package/mock-run/context-combiner.md +100 -100
  20. package/mock-run/orc-budget.md +534 -534
  21. package/mock-run/orc-challenge-council.md +262 -262
  22. package/mock-run/orc-ultra.md +103 -103
  23. package/package.json +1 -1
  24. package/templates/agents/MODEL-MAPPING.md +43 -43
  25. package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -56
  26. package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -60
  27. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -58
  28. package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -75
  29. package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -110
  30. package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -114
  31. package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -112
  32. package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -132
  33. package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -109
  34. package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -109
  35. package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -90
  36. package/templates/agents/orc-claude-writer-opus-5-med.md +55 -55
  37. package/templates/agents/orc-context-combiner-opus-5-high.md +88 -88
  38. package/templates/agents/orc-doc-checker-opus-5-low.md +108 -108
  39. package/templates/agents/orc-doc-writer-opus-5-med.md +134 -134
  40. package/templates/agents/orc-executor-opus-5-high.md +2 -2
  41. package/templates/agents/orc-executor-opus-5-low.md +2 -2
  42. package/templates/agents/orc-executor-opus-5-med.md +2 -2
  43. package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -1
  44. package/templates/agents/orc-judge-opus-5-xhigh.md +85 -85
  45. package/templates/agents/orc-learn-writer-opus-5-low.md +73 -73
  46. package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -65
  47. package/templates/agents/orc-planner-mini-opus-5-med.md +4 -4
  48. package/templates/agents/orc-planner-mini-sonnet-5-high.md +1 -1
  49. package/templates/agents/orc-planner-opus-5-med.md +160 -160
  50. package/templates/agents/orc-recon-opus-5-low.md +3 -3
  51. package/templates/agents/orc-retro-opus-5-med.md +3 -3
  52. package/templates/agents/orc-reviewer-opus-5-med.md +60 -60
  53. package/templates/agents/orc-scout-opus-5-low.md +40 -40
  54. package/templates/agents/orc-system-analyst-opus-5-high.md +120 -120
  55. package/templates/agents/orc-test-author-opus-5-med.md +71 -71
  56. package/templates/agents/orc-test-designer-opus-5-high.md +158 -158
  57. package/templates/agents/orc-test-interpreter-opus-5-low.md +130 -130
  58. package/templates/agents/orc-verifier-opus-5-med.md +69 -69
  59. package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -81
  60. package/templates/commands/orc-ultra.md +17 -17
  61. package/templates/commands/orc-verify.md +11 -11
  62. package/templates/hooks/README.md +2 -2
  63. package/templates/hooks/orc-effort-guard.js +178 -178
  64. package/templates/hooks/orc-statusline.js +6 -6
  65. package/templates/skills/_shared/code-graph.md +1 -1
  66. package/templates/skills/_shared/config-precedence.md +198 -198
  67. package/templates/skills/_shared/extra-dispatch.md +1346 -1346
  68. package/templates/skills/_shared/opus5-only.md +8 -8
  69. package/templates/skills/_shared/phases/analyst-gates.md +136 -136
  70. package/templates/skills/_shared/phases/review.md +1 -1
  71. package/templates/skills/_shared/phases/trace.md +1 -1
  72. package/templates/skills/_shared/return-validation.md +1 -1
  73. package/templates/skills/context-combiner/SKILL.md +1 -1
  74. package/templates/skills/context-combiner/schemas/combined-report.md +78 -78
  75. package/templates/skills/orc/README.md +2 -2
  76. package/templates/skills/orc/SKILL.md +7 -7
  77. package/templates/skills/orc/config.md +9 -9
  78. package/templates/skills/orc/examples/full-run-mock.md +73 -73
  79. package/templates/skills/orc/references/effort-and-mode.md +222 -222
  80. package/templates/skills/orc/references/preflight-report.md +2 -2
  81. package/templates/skills/orc/references/ultra-mode.md +3 -3
  82. package/templates/skills/orc/subskills/orc-planner/SKILL.md +2 -2
  83. package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -121
  84. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -76
  85. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -45
  86. package/templates/skills/orc-analyze/SKILL.md +2 -2
  87. package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -42
  88. package/templates/skills/orc-analyze/schemas/report-audit.md +83 -83
  89. package/templates/skills/orc-analyze/schemas/report-prose.md +63 -63
  90. package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -78
  91. package/templates/skills/orc-challenge/README.md +142 -142
  92. package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -273
  93. package/templates/skills/orc-challenge/references/council.md +315 -315
  94. package/templates/skills/orc-challenge/references/intake.md +171 -171
  95. package/templates/skills/orc-claude/SKILL.md +14 -14
  96. package/templates/skills/orc-diy/README.md +143 -143
  97. package/templates/skills/orc-diy/references/flow-schema.md +1 -1
  98. package/templates/skills/orc-doc/README.md +229 -229
  99. package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -325
  100. package/templates/skills/orc-doc/references/chunking.md +527 -527
  101. package/templates/skills/orc-fast/SKILL.md +1 -1
  102. package/templates/skills/orc-learn/SKILL.md +14 -14
  103. package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -61
  104. package/templates/skills/orc-mini/SKILL.md +3 -3
  105. package/templates/skills/orc-verify/SKILL.md +15 -15
  106. package/templates/skills/orc-verify/examples/verify-mock.md +33 -33
  107. package/templates/skills/orc-wiki/references/extra.md +1 -1
@@ -22,11 +22,11 @@ mixed-model table:
22
22
  | `[90,100]` | `orc-executor-opus-5-med` |
23
23
 
24
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 with effort as the dial,
25
+ v1.0.0 the default table's high end is ALREADY Opus 5.5 with effort as the dial,
26
26
  so this mode differs from it only below 65 — a third band here would be a
27
27
  distinction the default table stopped making.
28
28
 
29
- **Fixed roles** — dispatch the Opus 5 variant **instead of** the default role
29
+ **Fixed roles** — dispatch the Opus 5.5 variant **instead of** the default role
30
30
  agent: same task slice, same return contract, same phase.
31
31
 
32
32
  | Role | Default agent | Opus-5-only variant |
@@ -41,14 +41,14 @@ agent: same task slice, same return contract, same phase.
41
41
  | claude write | `orc-claude-writer-opus-4-8-high` | `orc-claude-writer-opus-5-med` |
42
42
  | retro mine | `orc-retro-sonnet-5-high` | `orc-retro-opus-5-med` |
43
43
 
44
- The nine roles already pinned to `claude-opus-5` — analyst, planner, reviewer,
44
+ The nine roles already pinned to `claude-opus-5-5` — analyst, planner, reviewer,
45
45
  verifier, test-author, combiner, learn-writer, advisor, judge — are already
46
46
  compliant and dispatch unchanged (their efforts are NOT rewritten by this mode).
47
47
 
48
48
  **The wiki scan tier ladder (v0.46.0) adds NO row here, and needs no new pair.**
49
49
  Off, the ladder picks deep or light per delta. ON, this mode already forces the
50
50
  wiki scanner to `orc-wiki-scanner-opus-5-med` — so **both tiers collapse onto that
51
- one shipped agent** and the ladder simply stops applying. A cheaper Opus 5 scanner
51
+ one shipped agent** and the ladder simply stops applying. A cheaper Opus 5.5 scanner
52
52
  variant for the light tier does not exist and must never be added: a pair for a
53
53
  tier that cannot occur while the flag is on is exactly the phantom this table
54
54
  exists to prevent. Ladder: `../orc-wiki/references/partial-refresh.md`.
@@ -58,7 +58,7 @@ exists to prevent. Ladder: `../orc-wiki/references/partial-refresh.md`.
58
58
  - **`orc-trace-writer-haiku-4-5` stays Haiku 4.5.** It transcribes a packet the
59
59
  orchestrator hands it — no reasoning, no source reads. It is never in the
60
60
  roster.
61
- - **`orc-graph-noter-sonnet-4-6-med` is not dispatched at all.** It has no Opus 5
61
+ - **`orc-graph-noter-sonnet-4-6-med` is not dispatched at all.** It has no Opus 5.5
62
62
  variant: under the mode a code lane skips graph notes and prints
63
63
  `graph notes: skipped (opus5_only)` (`code-graph.md` §6). The graph's structure
64
64
  layer costs no model, so nothing else about the graph changes.
@@ -73,7 +73,7 @@ exists to prevent. Ladder: `../orc-wiki/references/partial-refresh.md`.
73
73
  the lane SAYS so at the gate (`orc-quick ignores opus5_only — both options are
74
74
  live`), because a shadowed setting must never be silent in either direction.
75
75
  - **`/orc-challenge` — UNAFFECTED, not exempt.** All three of its agents are
76
- already `claude-opus-5` (judge high, advisor medium, reader low), so the mode
76
+ already `claude-opus-5-5` (judge high, advisor medium, reader low), so the mode
77
77
  has nothing to force: zero new pairs, no rename churn, no roster row. The
78
78
  reader's `low` effort is a MEASUREMENT choice, not a cost one — a
79
79
  harder-thinking cold reader reasons around exactly the gaps D4 exists to find
@@ -102,7 +102,7 @@ mode is neither shadowed nor shadowing — it is simply **NOT CONSULTED** for th
102
102
  work extra took:
103
103
 
104
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 ladder.
105
+ every score no row covers still resolves on the Opus 5.5 ladder.
106
106
  - **a POSITION** (v0.55.0 — `quick-executor`, `fast-executor`, `doc-writer`,
107
107
  `doc-checker`, `wiki-scanner-deep`, `wiki-scanner-light`) — an extra slot row
108
108
  holding that position outranks the mode's variant of that slot's agent; **a
@@ -121,7 +121,7 @@ POSITION, not the model.
121
121
  ## Tier honesty
122
122
 
123
123
  A subagent can never outrank the main session. With the mode ON, EVERY dispatch
124
- needs an Opus 5 main session — not just the top executor band. On a lower
124
+ needs an Opus 5.5 main session — not just the top executor band. On a lower
125
125
  session every role silently falls back to the session model and the tier-honesty
126
126
  rule (`return-validation.md`) reports a downgrade on **every** return. That is
127
127
  correct behavior, not a bug: hooks cannot block on model, only on effort, so the
@@ -1,136 +1,136 @@
1
- # Phase — Analyst & plan gates (id: `analyst-gates`)
2
-
3
- > **Library file.** Canonical since v1.0.0 W12; it was under the `orc` skill's
4
- > private `references/`, and other lanes already reached across into it. Read
5
- > by `orc`, `orc-analyze`, `orc-mini`. Layers declared: `core` only — single-
6
- > layer because these are the orchestrator-side gates on a returned analysis
7
- > or plan, and a trimmed lane runs fewer of them rather than different ones.
8
- > `orc lane phases <lane> --json` names the file and the layers to read.
9
-
10
- <!-- orc:layer core -->
11
- ## Reference — Analyst, Combiner & Plan Gates (orchestrator side)
12
-
13
- The orchestrator's deterministic gates around the analyst, the
14
- context-combiner, and the planner. The roles themselves are defined in
15
- `../../orc-analyze/SKILL.md`, `../../context-combiner/SKILL.md`, and
16
- `../../orc/subskills/orc-planner/SKILL.md` — this file is what YOU do around their
17
- dispatches and returns. Load at Phase 0 (analyst dispatch) and Phase 1
18
- (planner return). Emit a `GATE` trace line (pass|bounce) per check when
19
- logging.
20
-
21
- ## Deep-mode scout dispatch (yours)
22
-
23
- When the analyst runs in deep mode it returns a `scout_plan` (pass 1). You then
24
- dispatch ≤ `config.max_scouts` (default 3) parallel
25
- `orc-scout-sonnet-4-6-high` agents (`orc-scout-opus-5-low` when `opus5_only`
26
- — `../../_shared/opus5-only.md`; scouts fan out in PARALLEL, so this is the
27
- mode's largest single cost multiplier) — one coverage area each, read-only — and
28
- re-dispatch the analyst WITH their evidence bundles for pass 2. Same "return a
29
- request → you re-slice → re-dispatch" shape as `needs_context`. You never
30
- analyze; you only dispatch and relay.
31
-
32
- ## Analyst-return gates (deterministic, before any build option)
33
-
34
- 1. **Evidence spot-check:** Glob every `files[]` path in the spec +
35
- Grep-verify the quoted snippet on **EVERY quote-anchored ref, whatever its
36
- `status`** (v0.34.6). It used to check only `exists|conflict` — but the two
37
- statuses a GOOD audit most often produces are `resolved` (a challenged row
38
- the user decided) and `buildable` (the actual work), so a correctly-triaged
39
- analysis was the one the gate barely checked: a real spec had zero
40
- `exists|conflict` rows, so the mandated verification covered 0 of 5 refs and
41
- a `file:5` citing a quote that lives at `file:4` went through. It is one
42
- Grep per ref, and it is the ONLY mechanical defence against a wrong line
43
- number reaching the planner. Note the causal shape: that ref started as a
44
- line RANGE with no quote (auto-UNVERIFIED per hard rule 2); narrowing it to
45
- one line + quote was the CORRECT fix and is what introduced the off-by-one —
46
- tightening evidence granularity is itself an error surface, so the gate has
47
- to be what catches it.
48
- 2. **Derivation lint:** R# ids, statuses, and context-anchor set must match
49
- between report.md and requirement-spec.md.
50
-
51
- Any miss → bounce to the analyst with the miss list (one retry, then escalate
52
- to the user). Refuse take-into-build when the spec has open `UNVERIFIED` or
53
- lacks `scope_closed: true` (a one-Grep check).
54
-
55
- ## Combiner tracking (yours; full lane only)
56
-
57
- `context-combiner` (`orc-context-combiner-opus-5-high` — Opus 5 high, v0.34.0)
58
- merges 2+ RELATED, already-confirmed
59
- analyses from the same run into ONE combined requirement-spec before build.
60
-
61
- - **Track the analysis set:** hold the confirmed spec paths of every analysis
62
- this run in run state (survives checkpoint/resume).
63
- - When the user picks "pass to context-combiner" at orc-analyze's Phase F
64
- branch menu (offered only once 2+ analyses exist), dispatch
65
- `orc-context-combiner-opus-5-high` with that list.
66
- - The return carries `combined_spec_path` + `coverage_pct` (conservation
67
- proof — every source requirement accounted for; must be 100) + `dropped[]` +
68
- `stale_evidence[]` + `handoff_ready` — or `combined: false` if the user chose
69
- keep-separate at the combiner's relatedness challenge (then fall back to
70
- per-analysis stop/build).
71
- - Offer the build option ONLY when `handoff_ready` is true (the combiner sets
72
- it false when `coverage_pct` < 100 OR a conflict is open). On build, continue
73
- at Phase 1 with the combined spec exactly like a single requirement-spec.
74
-
75
- You never combine; you only track, dispatch, and relay.
76
-
77
- ## Spec staleness valve (Phase 1, before dispatching the planner)
78
-
79
- If the requirement-spec's `git_head` ≠ current HEAD (analysis and build in
80
- different sessions), re-run the analyst evidence spot-check (paths + quotes)
81
- BEFORE dispatching the planner; on misses offer re-analyze vs
82
- proceed-with-flagged.
83
-
84
- ## Phase 1 exit gate (deterministic, before scoring)
85
-
86
- 1. **Grounding spot-check:** Glob every path the plan marks
87
- `disposition: exists`. A task whose declared paths lack `grounding[]`
88
- entries counts as a miss.
89
- 2. **Coverage check:** recompute the planner's coverage echo — every in-scope
90
- spec R# / intent-spec DoD line must appear in ≥ 1 task's `requirements[]`;
91
- an `orphan` requirement is a miss (the user may explicitly descope instead).
92
- 3. **Graph checks:** cycle detection over `depends_on` + same-file collision
93
- over `declared_files` (two tasks sharing a file need a serializing dep or a
94
- merge). Both trivial at ≤ 20 tasks — never trust the planner's self-check
95
- alone.
96
- 4. **TDD/test-task collision (v0.34.4):** a `tdd_spec` entry whose target file
97
- is in the `declared_files` of a task whose `facets.test_surface` is
98
- `new-tests` is a miss. The paired TDD task materializes `tdd_spec` BEFORE the
99
- task it guards, so that task's planned work is already on disk and
100
- green by the time its wave opens — leaving only bad options (dispatch a
101
- no-op, silently drop promised coverage, or re-slice mid-run). The planner
102
- authored both mechanisms and folds them together itself: extend the
103
- materialized file, never re-author it.
104
- 5. **TDD disposition gate (v0.41.0)** — this gate is what lets TDD be skipped
105
- safely. Skipping a test is cheap to claim and expensive to get wrong, so
106
- every skip must be checkable, and it is checked in BOTH directions: a rule
107
- that only ever prevents tests is a rule that deletes coverage.
108
- - `disposition` outside the closed set
109
- `new-surface | behavior-change | covered-by-existing | no-behavior | no-runner`
110
- → miss. (Absent on a pre-v0.41.0 plan → derive from `kind`; never bounce an
111
- old plan — see the legacy exception below.)
112
- - `covered-by-existing` **without a resolvable `covered_by`** → miss. Glob the
113
- cited `path` exactly as check 1 does for `disposition: exists`. "A test
114
- already covers this" is the one claim that, if false, silently removes
115
- coverage the run promised.
116
- - `no-behavior` whose task has `facets.test_surface != none` → miss
117
- (self-contradiction: the planner said the surface is testable and that it
118
- isn't).
119
- - **Safety floor:** any entry that is `covered-by-existing` or `no-behavior`
120
- on a task with non-empty `facets.risk[]` → miss, no exceptions. Auth,
121
- money, migration, security, concurrency and data-integrity requirements do
122
- not ride on another test's coincidence.
123
- - `new-surface` / `behavior-change` missing `skeleton` or `given_when_then`
124
- → miss.
125
- - A disposition that DEVIATES from the derivation table in
126
- `../../orc/schemas/planning-output.md` without a `reason` → miss. The derivation
127
- is the default; departing from it is the thing that needs justifying.
128
-
129
- Any miss → the plan is malformed: bounce it back to the planner WITH the miss
130
- list (one retry), then escalate to the user. **Legacy exception:** a
131
- pre-v0.7.0 plan resumed from an old checkpoint has no `grounding[]`
132
- (pre-v0.9.0: no `requirements[]`/`spec_invariants[]`; pre-v0.41.0: no
133
- `disposition`) — resume it without the
134
- missing checks; never bounce an old plan.
135
-
136
- <!-- /orc:layer -->
1
+ # Phase — Analyst & plan gates (id: `analyst-gates`)
2
+
3
+ > **Library file.** Canonical since v1.0.0 W12; it was under the `orc` skill's
4
+ > private `references/`, and other lanes already reached across into it. Read
5
+ > by `orc`, `orc-analyze`, `orc-mini`. Layers declared: `core` only — single-
6
+ > layer because these are the orchestrator-side gates on a returned analysis
7
+ > or plan, and a trimmed lane runs fewer of them rather than different ones.
8
+ > `orc lane phases <lane> --json` names the file and the layers to read.
9
+
10
+ <!-- orc:layer core -->
11
+ ## Reference — Analyst, Combiner & Plan Gates (orchestrator side)
12
+
13
+ The orchestrator's deterministic gates around the analyst, the
14
+ context-combiner, and the planner. The roles themselves are defined in
15
+ `../../orc-analyze/SKILL.md`, `../../context-combiner/SKILL.md`, and
16
+ `../../orc/subskills/orc-planner/SKILL.md` — this file is what YOU do around their
17
+ dispatches and returns. Load at Phase 0 (analyst dispatch) and Phase 1
18
+ (planner return). Emit a `GATE` trace line (pass|bounce) per check when
19
+ logging.
20
+
21
+ ## Deep-mode scout dispatch (yours)
22
+
23
+ When the analyst runs in deep mode it returns a `scout_plan` (pass 1). You then
24
+ dispatch ≤ `config.max_scouts` (default 3) parallel
25
+ `orc-scout-sonnet-4-6-high` agents (`orc-scout-opus-5-low` when `opus5_only`
26
+ — `../../_shared/opus5-only.md`; scouts fan out in PARALLEL, so this is the
27
+ mode's largest single cost multiplier) — one coverage area each, read-only — and
28
+ re-dispatch the analyst WITH their evidence bundles for pass 2. Same "return a
29
+ request → you re-slice → re-dispatch" shape as `needs_context`. You never
30
+ analyze; you only dispatch and relay.
31
+
32
+ ## Analyst-return gates (deterministic, before any build option)
33
+
34
+ 1. **Evidence spot-check:** Glob every `files[]` path in the spec +
35
+ Grep-verify the quoted snippet on **EVERY quote-anchored ref, whatever its
36
+ `status`** (v0.34.6). It used to check only `exists|conflict` — but the two
37
+ statuses a GOOD audit most often produces are `resolved` (a challenged row
38
+ the user decided) and `buildable` (the actual work), so a correctly-triaged
39
+ analysis was the one the gate barely checked: a real spec had zero
40
+ `exists|conflict` rows, so the mandated verification covered 0 of 5 refs and
41
+ a `file:5` citing a quote that lives at `file:4` went through. It is one
42
+ Grep per ref, and it is the ONLY mechanical defence against a wrong line
43
+ number reaching the planner. Note the causal shape: that ref started as a
44
+ line RANGE with no quote (auto-UNVERIFIED per hard rule 2); narrowing it to
45
+ one line + quote was the CORRECT fix and is what introduced the off-by-one —
46
+ tightening evidence granularity is itself an error surface, so the gate has
47
+ to be what catches it.
48
+ 2. **Derivation lint:** R# ids, statuses, and context-anchor set must match
49
+ between report.md and requirement-spec.md.
50
+
51
+ Any miss → bounce to the analyst with the miss list (one retry, then escalate
52
+ to the user). Refuse take-into-build when the spec has open `UNVERIFIED` or
53
+ lacks `scope_closed: true` (a one-Grep check).
54
+
55
+ ## Combiner tracking (yours; full lane only)
56
+
57
+ `context-combiner` (`orc-context-combiner-opus-5-high` — Opus 5.5 high, v0.34.0)
58
+ merges 2+ RELATED, already-confirmed
59
+ analyses from the same run into ONE combined requirement-spec before build.
60
+
61
+ - **Track the analysis set:** hold the confirmed spec paths of every analysis
62
+ this run in run state (survives checkpoint/resume).
63
+ - When the user picks "pass to context-combiner" at orc-analyze's Phase F
64
+ branch menu (offered only once 2+ analyses exist), dispatch
65
+ `orc-context-combiner-opus-5-high` with that list.
66
+ - The return carries `combined_spec_path` + `coverage_pct` (conservation
67
+ proof — every source requirement accounted for; must be 100) + `dropped[]` +
68
+ `stale_evidence[]` + `handoff_ready` — or `combined: false` if the user chose
69
+ keep-separate at the combiner's relatedness challenge (then fall back to
70
+ per-analysis stop/build).
71
+ - Offer the build option ONLY when `handoff_ready` is true (the combiner sets
72
+ it false when `coverage_pct` < 100 OR a conflict is open). On build, continue
73
+ at Phase 1 with the combined spec exactly like a single requirement-spec.
74
+
75
+ You never combine; you only track, dispatch, and relay.
76
+
77
+ ## Spec staleness valve (Phase 1, before dispatching the planner)
78
+
79
+ If the requirement-spec's `git_head` ≠ current HEAD (analysis and build in
80
+ different sessions), re-run the analyst evidence spot-check (paths + quotes)
81
+ BEFORE dispatching the planner; on misses offer re-analyze vs
82
+ proceed-with-flagged.
83
+
84
+ ## Phase 1 exit gate (deterministic, before scoring)
85
+
86
+ 1. **Grounding spot-check:** Glob every path the plan marks
87
+ `disposition: exists`. A task whose declared paths lack `grounding[]`
88
+ entries counts as a miss.
89
+ 2. **Coverage check:** recompute the planner's coverage echo — every in-scope
90
+ spec R# / intent-spec DoD line must appear in ≥ 1 task's `requirements[]`;
91
+ an `orphan` requirement is a miss (the user may explicitly descope instead).
92
+ 3. **Graph checks:** cycle detection over `depends_on` + same-file collision
93
+ over `declared_files` (two tasks sharing a file need a serializing dep or a
94
+ merge). Both trivial at ≤ 20 tasks — never trust the planner's self-check
95
+ alone.
96
+ 4. **TDD/test-task collision (v0.34.4):** a `tdd_spec` entry whose target file
97
+ is in the `declared_files` of a task whose `facets.test_surface` is
98
+ `new-tests` is a miss. The paired TDD task materializes `tdd_spec` BEFORE the
99
+ task it guards, so that task's planned work is already on disk and
100
+ green by the time its wave opens — leaving only bad options (dispatch a
101
+ no-op, silently drop promised coverage, or re-slice mid-run). The planner
102
+ authored both mechanisms and folds them together itself: extend the
103
+ materialized file, never re-author it.
104
+ 5. **TDD disposition gate (v0.41.0)** — this gate is what lets TDD be skipped
105
+ safely. Skipping a test is cheap to claim and expensive to get wrong, so
106
+ every skip must be checkable, and it is checked in BOTH directions: a rule
107
+ that only ever prevents tests is a rule that deletes coverage.
108
+ - `disposition` outside the closed set
109
+ `new-surface | behavior-change | covered-by-existing | no-behavior | no-runner`
110
+ → miss. (Absent on a pre-v0.41.0 plan → derive from `kind`; never bounce an
111
+ old plan — see the legacy exception below.)
112
+ - `covered-by-existing` **without a resolvable `covered_by`** → miss. Glob the
113
+ cited `path` exactly as check 1 does for `disposition: exists`. "A test
114
+ already covers this" is the one claim that, if false, silently removes
115
+ coverage the run promised.
116
+ - `no-behavior` whose task has `facets.test_surface != none` → miss
117
+ (self-contradiction: the planner said the surface is testable and that it
118
+ isn't).
119
+ - **Safety floor:** any entry that is `covered-by-existing` or `no-behavior`
120
+ on a task with non-empty `facets.risk[]` → miss, no exceptions. Auth,
121
+ money, migration, security, concurrency and data-integrity requirements do
122
+ not ride on another test's coincidence.
123
+ - `new-surface` / `behavior-change` missing `skeleton` or `given_when_then`
124
+ → miss.
125
+ - A disposition that DEVIATES from the derivation table in
126
+ `../../orc/schemas/planning-output.md` without a `reason` → miss. The derivation
127
+ is the default; departing from it is the thing that needs justifying.
128
+
129
+ Any miss → the plan is malformed: bounce it back to the planner WITH the miss
130
+ list (one retry), then escalate to the user. **Legacy exception:** a
131
+ pre-v0.7.0 plan resumed from an old checkpoint has no `grounding[]`
132
+ (pre-v0.9.0: no `requirements[]`/`spec_invariants[]`; pre-v0.41.0: no
133
+ `disposition`) — resume it without the
134
+ missing checks; never bounce an old plan.
135
+
136
+ <!-- /orc:layer -->
@@ -17,7 +17,7 @@
17
17
  ## Review (load ../../orc/subskills/orc-review-verify/, spawned)
18
18
 
19
19
  Emit `PHASE review start`. Superpowers path: its review skill incl. tests
20
- (Sonnet 4.6 medium). OpenSpec/self path: review worker (Opus 5 medium). Pass the resolved
20
+ (Sonnet 4.6 medium). OpenSpec/self path: review worker (Opus 5.5 medium). Pass the resolved
21
21
  `code_pattern` + its invariants + gate lines for the re-check
22
22
  (pattern-gate.md); no resolved pattern → FIRST ask for one (paste/md/none).
23
23
  FE tasks in run → pass `fe_rules[]` from `../../orc-pattern/references/` fe-a11y
@@ -314,7 +314,7 @@ For each spawn the orchestrator:
314
314
  ## Announce-on-spawn
315
315
 
316
316
  When dispatching, announce the model to the user, derived from the agent NAME
317
- (e.g. "Spawning orc-executor-opus-5-low → claude-opus-5 / low"). Derive it
317
+ (e.g. "Spawning orc-executor-opus-5-low → claude-opus-5-5 / low"). Derive it
318
318
  from the name — do NOT pass the coarse `sonnet|opus|haiku` dispatch arg, which
319
319
  cannot express 4-7 vs 4-8 and would override the frontmatter pin.
320
320
 
@@ -16,7 +16,7 @@ agent. It does not.
16
16
 
17
17
  What that costs, measured: one graded `/orc-quick` entry put THREE
18
18
  `orc-executor-opus-5-low` agents on the SAME task — 50m19s, 115m22s and
19
- 100m53s, **266 minutes of Opus 5 for one authorised dispatch**, all editing the
19
+ 100m53s, **266 minutes of Opus 5.5 for one authorised dispatch**, all editing the
20
20
  same files, inside a 2h04m window. The second was dispatched 4m19s after the
21
21
  first, while the first was still working. The hook had recorded all three; no
22
22
  lane had ever read that record.
@@ -31,7 +31,7 @@ it were a single analysis — with PROOF that no source requirement was lost.
31
31
  ## Hard rules
32
32
 
33
33
  1. **Dispatched, not self-run.** The orchestrator coordinates; the Combiner
34
- subagent (Opus 5 high) reads the specs and reconciles them against each
34
+ subagent (Opus 5.5 high) reads the specs and reconciles them against each
35
35
  other. The combiner NEVER builds and NEVER spawns subagents.
36
36
  2. **Related only — verify + challenge.** The user asserted relatedness at the
37
37
  Phase F gate, but the combiner MUST verify real overlap (shared files,
@@ -1,78 +1,78 @@
1
- # Template — Combined Analysis Report
2
-
3
- Human-readable source of truth for a MERGE of 2+ related analyses. Written to
4
- orc/analyzer/combined-{name}/combined-report.md. Copied OUT to
5
- {report_out_dir}/combined-{name}/ on "stop here".
6
-
7
- ```markdown
8
- # Combined Analysis Report — {combined-name}
9
- kind: combined
10
- combined_from: [analysis-A, analysis-B, ...] # source analysis names
11
- scope: <the shared scope X these analyses live in>
12
- combined_at: DDMMYY HH:MM:SS
13
- combined_against: <git HEAD short sha the evidence spot-check ran against>
14
- model: opus-5-high # the RESOLVED model of the combiner that produced
15
- # this — never copied from here
16
-
17
- ## Relatedness check
18
- How the source analyses overlap — shared files, overlapping requirements,
19
- shared scope. If overlap was weak, the user was challenged and their decision
20
- is recorded here.
21
- - Shared files: web/reports/x (analysis-A R1, analysis-B R2)
22
- - Overlapping requirement: both add export to the reports module
23
- - Verdict: related (confirmed) | combined-anyway (user override) | ...
24
-
25
- ## Merged requirements (deduped, ordered)
26
- Every row carries file:line evidence inherited from the source spec (the
27
- combiner trusts confirmed specs; it does not re-derive the code) — spot-checked
28
- against `combined_against`; anchors that no longer match are marked STALE and
29
- were challenged, never silently carried. SEMANTIC-DUPLICATE merges quote both
30
- original statements. PARTIAL-OVERLAP rows are split (shared + residue), never
31
- collapsed. `Depth` is shown when sources differ in depth.
32
-
33
- | # | Requirement (merged) | From | Depth | Code reality | Evidence (file:line) | Files/modules | Status |
34
- |---|----------------------|------|-------|--------------|----------------------|---------------|--------|
35
- | 1 | "add CSV export" | A.R1 | deep | HTML only | web/reports/view.x:30 | web/reports/x | buildable |
36
- | 2 | "reuse report auth" | A.R2, B.R3 (dedup) | standard | guard present | web/reports/routes.x:12 (STALE — user chose proceed) | web/reports/x | exists |
37
-
38
- ## Source coverage matrix (conservation proof)
39
- EVERY source requirement ID appears exactly once with exactly one Outcome.
40
- `dropped` requires a recorded user decision in combine-decisions.md. The gate
41
- below must show coverage_pct: 100 before this report can hand off to build.
42
-
43
- | Source ID | Outcome | Merged as | Decision ref |
44
- |-----------|---------|-----------|--------------|
45
- | A.R1 | merged | #1 | — |
46
- | A.R2 | deduped-into | #2 | — |
47
- | B.R2 | conflict-resolved | #3 | combine-decisions.md #2 |
48
- | B.R3 | deduped-into | #2 | — |
49
- | B.R4 | dropped | — | combine-decisions.md #4 (user: superseded by A.R1) |
50
-
51
- - source requirements total: {N} · accounted: {N} · coverage_pct: 100
52
-
53
- ## Additional context (do not build)
54
- Anchored, non-actionable context merged from the sources — each item re-pointed at
55
- the merged requirement it serves. Dedupe ONLY when the evidence anchor is the same
56
- file:line AND the notes convey the same constraint — near-identical notes are kept,
57
- both, with their own From tags. Read for understanding; never a task. Omit this
58
- whole section if no source carried context.
59
- | Anchor (merged #) | From | From scope | Dependency | Touchpoint to respect | Evidence (file:line) |
60
- |-------------------|------|-----------|------------|-----------------------|----------------------|
61
- | 1 (CSV export) | A.ctx | reporting (Y) | consumes-output | report query already paginates; export must page too | web/reports/query.x:44 |
62
-
63
- ## Cross-scope conflicts & decisions
64
- Every conflict/duplicate/partial-overlap/ordering issue found across sources
65
- (including contradictory resolved assumptions), each raised as a
66
- recommended-option challenge and resolved. Decisions are also checkpointed
67
- eagerly in combine-decisions.md.
68
- - CONFLICT (resolved): A.R4 wants offset paging, B.R2 wants cursor — user chose cursor.
69
- - DUPLICATE (merged): A.R2 and B.R3 both reuse auth — merged into #2.
70
- - PARTIAL-OVERLAP (split): A.R5 subsumes B.R1 — shared row #4, A-only residue row #5.
71
- - ORDERING (structured): before: #1 (A export) → after: #6 (B schedule).
72
-
73
- ## Open questions (block handoff until resolved)
74
- - (none) | UNRESOLVED: ... — combiner refuses build handoff while any remain.
75
-
76
- ## Handoff readiness
77
- - complete: yes/no (coverage_pct == 100, all conflicts resolved, no open UNRESOLVED)
78
- ```
1
+ # Template — Combined Analysis Report
2
+
3
+ Human-readable source of truth for a MERGE of 2+ related analyses. Written to
4
+ orc/analyzer/combined-{name}/combined-report.md. Copied OUT to
5
+ {report_out_dir}/combined-{name}/ on "stop here".
6
+
7
+ ```markdown
8
+ # Combined Analysis Report — {combined-name}
9
+ kind: combined
10
+ combined_from: [analysis-A, analysis-B, ...] # source analysis names
11
+ scope: <the shared scope X these analyses live in>
12
+ combined_at: DDMMYY HH:MM:SS
13
+ combined_against: <git HEAD short sha the evidence spot-check ran against>
14
+ model: opus-5-5-high # the RESOLVED model of the combiner that produced
15
+ # this — never copied from here
16
+
17
+ ## Relatedness check
18
+ How the source analyses overlap — shared files, overlapping requirements,
19
+ shared scope. If overlap was weak, the user was challenged and their decision
20
+ is recorded here.
21
+ - Shared files: web/reports/x (analysis-A R1, analysis-B R2)
22
+ - Overlapping requirement: both add export to the reports module
23
+ - Verdict: related (confirmed) | combined-anyway (user override) | ...
24
+
25
+ ## Merged requirements (deduped, ordered)
26
+ Every row carries file:line evidence inherited from the source spec (the
27
+ combiner trusts confirmed specs; it does not re-derive the code) — spot-checked
28
+ against `combined_against`; anchors that no longer match are marked STALE and
29
+ were challenged, never silently carried. SEMANTIC-DUPLICATE merges quote both
30
+ original statements. PARTIAL-OVERLAP rows are split (shared + residue), never
31
+ collapsed. `Depth` is shown when sources differ in depth.
32
+
33
+ | # | Requirement (merged) | From | Depth | Code reality | Evidence (file:line) | Files/modules | Status |
34
+ |---|----------------------|------|-------|--------------|----------------------|---------------|--------|
35
+ | 1 | "add CSV export" | A.R1 | deep | HTML only | web/reports/view.x:30 | web/reports/x | buildable |
36
+ | 2 | "reuse report auth" | A.R2, B.R3 (dedup) | standard | guard present | web/reports/routes.x:12 (STALE — user chose proceed) | web/reports/x | exists |
37
+
38
+ ## Source coverage matrix (conservation proof)
39
+ EVERY source requirement ID appears exactly once with exactly one Outcome.
40
+ `dropped` requires a recorded user decision in combine-decisions.md. The gate
41
+ below must show coverage_pct: 100 before this report can hand off to build.
42
+
43
+ | Source ID | Outcome | Merged as | Decision ref |
44
+ |-----------|---------|-----------|--------------|
45
+ | A.R1 | merged | #1 | — |
46
+ | A.R2 | deduped-into | #2 | — |
47
+ | B.R2 | conflict-resolved | #3 | combine-decisions.md #2 |
48
+ | B.R3 | deduped-into | #2 | — |
49
+ | B.R4 | dropped | — | combine-decisions.md #4 (user: superseded by A.R1) |
50
+
51
+ - source requirements total: {N} · accounted: {N} · coverage_pct: 100
52
+
53
+ ## Additional context (do not build)
54
+ Anchored, non-actionable context merged from the sources — each item re-pointed at
55
+ the merged requirement it serves. Dedupe ONLY when the evidence anchor is the same
56
+ file:line AND the notes convey the same constraint — near-identical notes are kept,
57
+ both, with their own From tags. Read for understanding; never a task. Omit this
58
+ whole section if no source carried context.
59
+ | Anchor (merged #) | From | From scope | Dependency | Touchpoint to respect | Evidence (file:line) |
60
+ |-------------------|------|-----------|------------|-----------------------|----------------------|
61
+ | 1 (CSV export) | A.ctx | reporting (Y) | consumes-output | report query already paginates; export must page too | web/reports/query.x:44 |
62
+
63
+ ## Cross-scope conflicts & decisions
64
+ Every conflict/duplicate/partial-overlap/ordering issue found across sources
65
+ (including contradictory resolved assumptions), each raised as a
66
+ recommended-option challenge and resolved. Decisions are also checkpointed
67
+ eagerly in combine-decisions.md.
68
+ - CONFLICT (resolved): A.R4 wants offset paging, B.R2 wants cursor — user chose cursor.
69
+ - DUPLICATE (merged): A.R2 and B.R3 both reuse auth — merged into #2.
70
+ - PARTIAL-OVERLAP (split): A.R5 subsumes B.R1 — shared row #4, A-only residue row #5.
71
+ - ORDERING (structured): before: #1 (A export) → after: #6 (B schedule).
72
+
73
+ ## Open questions (block handoff until resolved)
74
+ - (none) | UNRESOLVED: ... — combiner refuses build handoff while any remain.
75
+
76
+ ## Handoff readiness
77
+ - complete: yes/no (coverage_pct == 100, all conflicts resolved, no open UNRESOLVED)
78
+ ```
@@ -94,11 +94,11 @@ codifier: 9 language playbooks + a11y/perf rule packs), `context-combiner`
94
94
  ## Key behaviors to know
95
95
 
96
96
  - **The orchestrator NEVER implements — it always spawns scored subagents,
97
- even for tiny tasks.** Orchestrator (Opus 4.8 high, or Opus 5 / Fable 5 at
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
100
  single 6-band table in `config.md` (`rubric_bands` = report granularity only),
101
- Haiku 4.5 [0,30) → Opus 5 low [65,90) → Opus 5 medium [90,100].
101
+ Haiku 4.5 [0,30) → Opus 5.5 low [65,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
@@ -13,7 +13,7 @@ description: >
13
13
 
14
14
  # ORC (orchestrator spine)
15
15
 
16
- You are the **orchestrator**: **Opus 4.8 high — or Opus 5 / Fable 5 at medium+**
16
+ You are the **orchestrator**: **Opus 4.8 high — or Opus 5.5 / Fable 5 at medium+**
17
17
  (never downgrade yourself). You own the schemas, the dependency/conflict graph, wave
18
18
  scheduling, per-task model scoring, all checkpoint writes, user Q&A relay, and
19
19
  every decision below. Workers stay dumb and isolated.
@@ -24,8 +24,8 @@ version of a reference you haven't loaded this run. Detect the stack from the re
24
24
 
25
25
  ## Preflight gate (before Phase 0 — do this FIRST)
26
26
 
27
- Confirm you are **Opus 4.8 high**, or **Opus 5 / Fable 5 at medium+** (both clear
28
- the guard from medium up; Opus 5 also unlocks the [90,100] executor band). Effort
27
+ Confirm you are **Opus 4.8 high**, or **Opus 5.5 / Fable 5 at medium+** (both clear
28
+ the guard from medium up; Opus 5.5 also unlocks the [90,100] executor band). Effort
29
29
  is hard-blocked by the `orc-effort-guard.js` PreToolUse hook; the model cannot be
30
30
  (hooks can't see it) — the statusline warns. On a weaker tier **STOP immediately**
31
31
  and tell the user to switch the main session and re-run — never intake below it
@@ -69,11 +69,11 @@ themselves are this lane's own and stay here.
69
69
 
70
70
  ## Dispatched roles (you never do this work yourself)
71
71
 
72
- **Analyst** `orc-analyze` (Opus 5 high): doc OR bare request →
72
+ **Analyst** `orc-analyze` (Opus 5.5 high): doc OR bare request →
73
73
  scope-bounded, code-grounded report + spec; standard or opt-in DEEP (scouts).
74
- **Context-combiner** (Opus 5 high): merges 2+ related confirmed analyses
74
+ **Context-combiner** (Opus 5.5 high): merges 2+ related confirmed analyses
75
75
  into ONE combined spec; build only on `handoff_ready` with `coverage_pct` =
76
- 100; full lane only. **Planner** `subskills/orc-planner` (Opus 5 medium):
76
+ 100; full lane only. **Planner** `subskills/orc-planner` (Opus 5.5 medium):
77
77
  request or spec → planning-output. Scout dispatch, analyst-return gates,
78
78
  combiner tracking, the `git_head` staleness valve, and the Phase 1 exit gate
79
79
  are YOURS and deterministic — load `../_shared/phases/analyst-gates.md` at their
@@ -96,7 +96,7 @@ requeue) run the same formula, inherit the original task's risk floor, and never
96
96
  dispatch below the finding-task's band. Fixed roles dispatch BY NAME (analyst /
97
97
  combiner / planner / reviewer / verifier — see `config.md`'s fixed-role table +
98
98
  `.claude/agents/MODEL-MAPPING.md`). If `opus5_only`, EVERY role (scored and fixed)
99
- resolves to its Opus 5 agent, FORCING over everything below — `_shared/opus5-only.md`.
99
+ resolves to its Opus 5.5 agent, FORCING over everything below — `_shared/opus5-only.md`.
100
100
  Caveat: a subagent's model can't exceed the MAIN session's tier — run the main
101
101
  session on Opus or the Opus pins silently fall back (the original "wrong model" bug).
102
102