@azure-id/orc 0.56.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/CHANGELOG.md +219 -0
  2. package/README-id.md +49 -107
  3. package/README.md +694 -719
  4. package/bin/build-agents.js +18 -11
  5. package/bin/cli.js +33699 -29855
  6. package/bin/onboarding-content.js +0 -3
  7. package/bin/test-run.js +491 -0
  8. package/bin/verify-contracts.js +4330 -3277
  9. package/bin/verify-package.js +76 -6
  10. package/bin/webui/api.js +1201 -1163
  11. package/bin/webui/app.html +210 -198
  12. package/bin/webui/css/06-responsive.css +120 -108
  13. package/bin/webui/css/panels/extra.css +29 -0
  14. package/bin/webui/css/panels/lanes.css +134 -0
  15. package/bin/webui/css/panels/settings.css +79 -3
  16. package/bin/webui/css/panels/wait.css +123 -0
  17. package/bin/webui/fixtures/extra.js +2036 -1934
  18. package/bin/webui/fixtures/flow.js +2 -2
  19. package/bin/webui/fixtures/index.js +510 -486
  20. package/bin/webui/fixtures/lanes.js +218 -0
  21. package/bin/webui/fixtures/settings.js +261 -34
  22. package/bin/webui/fixtures/stats.js +3 -3
  23. package/bin/webui/fixtures/wait.js +97 -0
  24. package/bin/webui/i18n/TERMS.md +135 -134
  25. package/bin/webui/i18n/en/extra.json +345 -313
  26. package/bin/webui/i18n/en/lanes.json +29 -0
  27. package/bin/webui/i18n/en/nav.json +21 -19
  28. package/bin/webui/i18n/en/overview.json +2 -0
  29. package/bin/webui/i18n/en/settings.json +16 -5
  30. package/bin/webui/i18n/en/wait.json +41 -0
  31. package/bin/webui/i18n/id/extra.json +345 -313
  32. package/bin/webui/i18n/id/lanes.json +29 -0
  33. package/bin/webui/i18n/id/nav.json +21 -19
  34. package/bin/webui/i18n/id/overview.json +2 -0
  35. package/bin/webui/i18n/id/settings.json +15 -4
  36. package/bin/webui/i18n/id/wait.json +41 -0
  37. package/bin/webui/js/01-i18n.js +151 -149
  38. package/bin/webui/js/panels/extra.js +3199 -3011
  39. package/bin/webui/js/panels/lanes.js +259 -0
  40. package/bin/webui/js/panels/overview.js +10 -0
  41. package/bin/webui/js/panels/settings.js +149 -3
  42. package/bin/webui/js/panels/wait.js +253 -0
  43. package/package.json +39 -39
  44. package/templates/agents/MODEL-MAPPING.md +23 -35
  45. package/templates/agents/orc-executor-opus-4-7-high.md +1 -1
  46. package/templates/agents/orc-executor-opus-4-7-med.md +1 -1
  47. package/templates/agents/orc-executor-opus-4-8-high.md +1 -1
  48. package/templates/agents/orc-executor-opus-5-high.md +1 -1
  49. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  50. package/templates/agents/orc-executor-opus-5-med.md +1 -1
  51. package/templates/agents/orc-retro-opus-5-med.md +73 -73
  52. package/templates/agents/orc-retro-sonnet-5-high.md +72 -72
  53. package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -107
  54. package/templates/commands/orc-route.md +1 -1
  55. package/templates/commands/orc-wait.md +19 -0
  56. package/templates/commands/orc.md +1 -1
  57. package/templates/hooks/orc-statusline.js +39 -0
  58. package/templates/skills/_shared/README.md +7 -3
  59. package/templates/skills/_shared/config-precedence.md +198 -0
  60. package/templates/skills/_shared/drift-recovery.md +1 -1
  61. package/templates/skills/_shared/extra-dispatch.md +159 -7
  62. package/templates/skills/_shared/interview.md +1 -1
  63. package/templates/skills/_shared/opus5-only.md +9 -7
  64. package/templates/skills/_shared/phases/README.md +82 -0
  65. package/templates/skills/{orc/references → _shared/phases}/analyst-gates.md +15 -3
  66. package/templates/skills/_shared/phases/execution.md +143 -0
  67. package/templates/skills/{orc/references → _shared/phases}/house-rules.md +13 -1
  68. package/templates/skills/{orc/references → _shared/phases}/intake.md +15 -2
  69. package/templates/skills/_shared/phases/mock-example.md +56 -0
  70. package/templates/skills/{orc/references → _shared/phases}/plan-handoff.md +16 -3
  71. package/templates/skills/_shared/phases/planning.md +135 -0
  72. package/templates/skills/_shared/phases/preflight.md +98 -0
  73. package/templates/skills/_shared/phases/review.md +53 -0
  74. package/templates/skills/_shared/phases/scoring.md +65 -0
  75. package/templates/skills/{orc/references → _shared/phases}/security-checklist.md +12 -1
  76. package/templates/skills/_shared/phases/security.md +55 -0
  77. package/templates/skills/_shared/phases/ship.md +88 -0
  78. package/templates/skills/{orc/references/stop-and-resume.md → _shared/phases/stop-resume.md} +169 -160
  79. package/templates/skills/_shared/phases/summary.md +48 -0
  80. package/templates/skills/_shared/phases/testgen.md +51 -0
  81. package/templates/skills/{orc/references/trace-protocol.md → _shared/phases/trace.md} +49 -6
  82. package/templates/skills/_shared/phases/verify.md +70 -0
  83. package/templates/skills/{orc/references → _shared/phases}/wave-grouping.md +14 -2
  84. package/templates/skills/{orc/references → _shared/phases}/wiki-consult.md +13 -1
  85. package/templates/skills/_shared/read-ladder.md +48 -0
  86. package/templates/skills/_shared/wait.md +240 -0
  87. package/templates/skills/context-combiner/SKILL.md +214 -187
  88. package/templates/skills/orc/README.md +148 -150
  89. package/templates/skills/orc/SKILL.md +75 -358
  90. package/templates/skills/orc/config.md +137 -389
  91. package/templates/skills/orc/examples/full-run-mock.md +1 -1
  92. package/templates/skills/orc/references/effort-and-mode.md +16 -18
  93. package/templates/skills/orc/references/phases/intake.md +47 -0
  94. package/templates/skills/orc/references/phases/integration.md +19 -0
  95. package/templates/skills/orc/references/preflight-report.md +4 -4
  96. package/templates/skills/orc/references/ultra-mode.md +117 -123
  97. package/templates/skills/orc/schemas/planning-output.md +279 -279
  98. package/templates/skills/orc/subskills/orc-planner/SKILL.md +260 -264
  99. package/templates/skills/orc/subskills/orc-pr/stack-gate.md +4 -1
  100. package/templates/skills/orc-aftermath/SKILL.md +158 -136
  101. package/templates/skills/orc-analyze/SKILL.md +252 -220
  102. package/templates/skills/orc-analyze/references/branching.md +51 -51
  103. package/templates/skills/orc-analyze/references/thin-input.md +1 -1
  104. package/templates/skills/orc-analyze-mini/SKILL.md +128 -112
  105. package/templates/skills/orc-boundary/SKILL.md +249 -208
  106. package/templates/skills/orc-brainstorm/SKILL.md +377 -339
  107. package/templates/skills/orc-budget/SKILL.md +248 -225
  108. package/templates/skills/orc-challenge/README.md +1 -1
  109. package/templates/skills/orc-challenge/SKILL.md +298 -255
  110. package/templates/skills/orc-challenge/examples/council-full-roster.md +1 -1
  111. package/templates/skills/orc-claude/SKILL.md +221 -199
  112. package/templates/skills/orc-diy/README.md +2 -1
  113. package/templates/skills/orc-diy/SKILL.md +132 -68
  114. package/templates/skills/orc-diy/references/blocks/analyze.md +1 -1
  115. package/templates/skills/orc-diy/references/compile.md +21 -7
  116. package/templates/skills/orc-diy/references/flow-schema.md +2 -2
  117. package/templates/skills/orc-doc/SKILL.md +49 -7
  118. package/templates/skills/orc-explain/SKILL.md +24 -0
  119. package/templates/skills/orc-export/SKILL.md +31 -5
  120. package/templates/skills/orc-fast/SKILL.md +218 -185
  121. package/templates/skills/orc-grill/SKILL.md +238 -207
  122. package/templates/skills/orc-handoff/SKILL.md +223 -204
  123. package/templates/skills/orc-learn/SKILL.md +181 -156
  124. package/templates/skills/orc-mini/SKILL.md +47 -24
  125. package/templates/skills/orc-pact/SKILL.md +255 -218
  126. package/templates/skills/orc-pattern/SKILL.md +154 -124
  127. package/templates/skills/orc-poly/SKILL.md +242 -216
  128. package/templates/skills/orc-poly/references/gather.md +1 -1
  129. package/templates/skills/orc-pr-driver/SKILL.md +196 -167
  130. package/templates/skills/orc-pr-driver/references/orc-run-split.md +1 -1
  131. package/templates/skills/orc-pr-setup/SKILL.md +212 -184
  132. package/templates/skills/orc-quick/README.md +2 -2
  133. package/templates/skills/orc-quick/SKILL.md +51 -13
  134. package/templates/skills/orc-quick/references/dispatch-gate.md +2 -3
  135. package/templates/skills/orc-retro/SKILL.md +249 -222
  136. package/templates/skills/orc-retro/examples/retro-mock.md +171 -171
  137. package/templates/skills/orc-route/SKILL.md +188 -165
  138. package/templates/skills/orc-verify/SKILL.md +103 -84
  139. package/templates/skills/orc-wait/SKILL.md +163 -0
  140. package/templates/skills/orc-wiki/SKILL.md +60 -206
  141. package/templates/skills/orc-wiki/references/phases/phase-0.md +71 -0
  142. package/templates/skills/orc-wiki/references/phases/phase-1.md +35 -0
  143. package/templates/skills/orc-wiki/references/phases/phase-2.md +52 -0
  144. package/templates/skills/orc-wiki/references/phases/phase-3.md +57 -0
  145. package/templates/skills/orc-wiki/references/phases/phase-3c.md +36 -0
  146. package/templates/agents/orc-advisor-fable-5.md +0 -50
  147. package/templates/agents/orc-analyst-fable-5.md +0 -115
  148. package/templates/agents/orc-judge-fable-5.md +0 -79
  149. package/templates/agents/orc-planner-fable-5.md +0 -152
  150. package/templates/agents/orc-reviewer-fable-5.md +0 -57
  151. package/templates/skills/_shared/fable5-override.md +0 -56
  152. package/templates/skills/orc-diy/references/blocks/execution.md +0 -42
  153. package/templates/skills/orc-diy/references/blocks/mock-example.md +0 -22
  154. package/templates/skills/orc-diy/references/blocks/planning.md +0 -34
  155. package/templates/skills/orc-diy/references/blocks/review.md +0 -18
  156. package/templates/skills/orc-diy/references/blocks/scoring.md +0 -16
  157. package/templates/skills/orc-diy/references/blocks/security.md +0 -25
  158. package/templates/skills/orc-diy/references/blocks/ship.md +0 -25
  159. package/templates/skills/orc-diy/references/blocks/summary.md +0 -18
  160. package/templates/skills/orc-diy/references/blocks/testgen.md +0 -17
  161. package/templates/skills/orc-diy/references/blocks/trace.md +0 -28
  162. package/templates/skills/orc-diy/references/blocks/verify.md +0 -25
@@ -106,33 +106,31 @@ risk ≠ [] → floor 70 (DERIVED from a cited risk facet, never remembered).
106
106
  clamp 0..100 → the RESOLVED table (below).
107
107
  ```
108
108
 
109
- **Which table (highest wins):** `opus5_only: true` (the 3-band Opus-5-only
110
- preset: `[0,40)` low · `[40,80)` medium · `[80,100]` high) → `rubric_bands_override`
111
- (hand-written rows) → the default 8-band table. All three are in `config.md`.
109
+ **Which table (highest wins):** `opus5_only: true` (the 2-band Opus-5-only
110
+ preset: `[0,90)` low · `[90,100]` medium) → `rubric_bands_override`
111
+ (hand-written rows) → the default 6-band table. All three are in `config.md`.
112
112
  The formula, the facets and the risk floor are IDENTICAL in every case — only
113
113
  the score→agent mapping changes. Three consequences worth stating so nobody
114
114
  re-derives them per run:
115
115
 
116
116
  - **The risk floor still applies** — it raises the SCORE, then the resolved table
117
- maps it. Under the Opus-5-only preset a floored task lands `opus-5-med`, not
118
- `opus-4-7-high`.
117
+ maps it. A floored task (≥70) lands `opus-5-low` in the default table and
118
+ `opus-5-low` under the Opus-5-only preset too: since v1.0.0 both tables answer
119
+ the floor with the same agent, and only a score of 90+ moves it to `opus-5-med`.
119
120
  - **`opus5_only` FORCES** — while on, a hand-written `rubric_bands_override` is
120
- ignored, and so is the entire Fable 5 block. It is the one selector that can
121
- shadow another; that is deliberate.
122
- - **`fable5_roles` never covers executors** (analyze/plan/advisor/judge/review
123
- only), so those two features are orthogonal and cannot disagree on a band.
121
+ ignored. It is the one selector that can shadow another; that is deliberate.
124
122
 
125
123
  Show the user the full table (task, the facet vector, the arithmetic
126
124
  `B+N+L+T+fan+U = raw`, any risk floor, final, override+reason if any, dispatched
127
125
  model) BEFORE dispatching — an un-shown number is not a scored number. **Head it
128
- with the RESOLVED table's name** (`8-band default` / `Opus-5-only ladder
126
+ with the RESOLVED table's name** (`6-band default` / `Opus-5-only ladder
129
127
  (opus5_only)` / `custom (rubric_bands_override)`): the same logic
130
128
  applies to the mapping as to the number.
131
129
 
132
130
  **Extra (v0.50.0, `extra_enabled`) adds a `via` column and can make the head a
133
131
  PAIR.** An Extra route row is an OVERLAY that outranks the tables above **only
134
132
  for the scores it covers**, so a run can genuinely be running two tables at once
135
- and the head names both (`8-band default + extra rows [0,30) [30,70)`). The
133
+ and the head names both (`6-band default + extra rows [0,30) [30,70)`). The
136
134
  column reads `claude` or `extra:<profile> (<engine>)` and comes from
137
135
  `orc extra resolve --json` — the formula, the facets and the risk floor are
138
136
  untouched, and **the score is computed before the routing, never after it**. Two
@@ -158,7 +156,7 @@ fix in a risk area from silently dropping to a cheap model:
158
156
 
159
157
  - **Inherit the ORIGINAL task's `risk` facets** when the fix touches its files —
160
158
  a fix in a risk-floor area keeps the ≥70 floor (a userID/context-key fix can
161
- never dispatch below `opus-4-7-high` again);
159
+ never dispatch below `opus-5-low` again);
162
160
  - a **P0/P1 fix never dispatches below the band of the task that produced the
163
161
  finding.**
164
162
 
@@ -178,8 +176,8 @@ the band is what matters. Compare a new task to these facet-by-facet.
178
176
  | Isolated component from the design system | 3·new-surface·branching·new-tests · 0/0 · low | 6+18+8+8 = **40** | sonnet-4-6-high [40,55) |
179
177
  | Notification model + enum other tasks consume | 3·new-surface·stateful·new-tests · 0/3 · low | 6+18+16+8+9 = **57** | sonnet-5-high [55,65) |
180
178
  | Service-layer refactor behind a stable interface | 5·imitate·stateful·update-existing · 0/3 · medium | 10+8+16+4+9+6 = **53** | sonnet-4-6-high [40,55) |
181
- | Add role check to payment-refund endpoint | 3·imitate·branching·new-tests · 0/0 · low · **risk=[auth,money]** | 30 raw → **floor 70** | opus-4-7-high [70,80) |
182
- | Migrate orders table to split-name + backfill | 6·new-surface·stateful·new-tests · 1/3 · high · **risk=[migration,data-integrity]** | 15+18+16+8+5+9+12 = 83 (floor 70) → **83** | opus-4-8-high [80,90) |
179
+ | Add role check to payment-refund endpoint | 3·imitate·branching·new-tests · 0/0 · low · **risk=[auth,money]** | 30 raw → **floor 70** | opus-5-low [65,90) |
180
+ | Migrate orders table to split-name + backfill | 6·new-surface·stateful·new-tests · 1/3 · high · **risk=[migration,data-integrity]** | 15+18+16+8+5+9+12 = 83 (floor 70) → **83** | opus-5-low [65,90) |
183
181
 
184
182
  Two disciplines the vectors encode: (1) a small diff is NOT a low score when a
185
183
  cited `risk` facet forces the floor (the refund row — 30 raw, floored to 70); (2)
@@ -190,16 +188,16 @@ applies it silently.
190
188
  ## Model ladder → the single score→model table
191
189
 
192
190
  The score→model mapping is NOT hardcoded here — it lives in `config.md` as ONE
193
- canonical 8-band table (there is no longer a narrow/wide preset). Read config at
191
+ canonical 6-band table (there is no longer a narrow/wide preset). Read config at
194
192
  run start and map each task's final score through that table (or
195
193
  `rubric_bands_override`). The orchestrator dispatches the executor agent BY NAME;
196
194
  it does not request a raw model. `rubric_bands` sets only how many bands the
197
195
  rubric REPORTS (score granularity), never which table is used.
198
196
 
199
- The 8 bands (see config.md for the exact edges): `haiku-4-5` [0,30) ·
197
+ The 6 bands (see config.md for the exact edges): `haiku-4-5` [0,30) ·
200
198
  `sonnet-4-6-med` [30,40) · `sonnet-4-6-high` [40,55) · `sonnet-5-high` [55,65) ·
201
- `opus-4-7-med` [65,70) · `opus-4-7-high` [70,80) · `opus-4-8-high` [80,90) ·
202
- `opus-5-high` [90,100]. Effort tiers rank `low < medium < high < xhigh < max`.
199
+ `opus-5-low` [65,90) · `opus-5-med` [90,100]. Effort tiers rank
200
+ `low < medium < high < xhigh < max`.
203
201
 
204
202
  ## Fixed model assignments (not scored)
205
203
 
@@ -0,0 +1,47 @@
1
+ # Phase — Intake (id: `intake`)
2
+
3
+ > **`/orc` phase file.** Moved out of `orc/SKILL.md` at v1.0.0 W12. The spine is
4
+ > loaded IN FULL when the skill activates; this is loaded when the phase fires,
5
+ > and most runs skip most phases. ONE consumer today, so it stays in this lane —
6
+ > `../../../_shared/phases/README.md`'s rule: a file with one consumer stays home.
7
+ > When a second lane reads it (W13 `orc-diy`, W14 `orc-mini`/`orc-fast`) it moves
8
+ > to `_shared/phases/` and gains a `composed` or `trim` layer beside this one.
9
+ > `orc lane phases orc --json` names the file and the layers.
10
+
11
+ <!-- orc:layer full -->
12
+
13
+ ## Intake (load ../../../_shared/phases/intake.md)
14
+
15
+ **Plan-input trigger (check FIRST — load `../../../_shared/phases/plan-handoff.md`):** if the
16
+ run input IS a plan (pasted planning-output, a `plan-{name}.md` path, or an
17
+ `orc/planner/{name}/` checkpoint), follow that reference: bootstrap the trace,
18
+ schema-validate, apply the `plan_head` staleness valve, RE-RUN the full Phase 1
19
+ exit gate here (the deterministic catch for phantom-file drift), relay
20
+ `open_questions[]`, then continue at Phase 2. A plan input never skips Phase 2/3
21
+ nor executes task-by-task ad hoc.
22
+
23
+ **Analyst auto-trigger:** on a document (PDF path, pasted doc, audit sheet)
24
+ OR an ambiguous/underspecified requirement, FIRST dispatch the System Analyst
25
+ (doc-optional — with no doc the request itself is the source). Offer
26
+ standard/deep (`config.default_analysis_depth` presets it; mention `orc
27
+ config set default_analysis_depth deep`); deep → you dispatch the scouts. On
28
+ return run the analyst-return gates (analyst-gates.md); on build, continue at
29
+ Phase 1 with the Requirement Planner.
30
+
31
+ Emit `PHASE intake start` FIRST, then create `run/{run-slug}/` (slug from the
32
+ intent). Then: rough-size →
33
+ question tier (2/4/6) → ONE batched question round → draft the intent-spec
34
+ (`../../schemas/intent-spec.md`) → **repo cross-check** (intake Step 3.5:
35
+ Glob/Grep-confirm everything the spec names, or tag `UNVERIFIED`; tags become
36
+ ONE batched sign-off question; >3 tags → recommend `orc-analyze`) → sign-off
37
+ preference (gate/soft; DEFAULT GATE) → show spec → approval or edits. **No
38
+ planning until approved (gate mode) and no unresolved `UNVERIFIED` tags
39
+ either way.** On approval, emit `PHASE intake end`.
40
+
41
+ The intent-spec's definition-of-done becomes Phase 6's acceptance criteria;
42
+ its constraints become hard rules in every slice — at slice-assembly each
43
+ task's `spec_invariants[]` is appended VERBATIM to that slice's
44
+ `constraints[]`. Offer the opt-in **Test Authoring** (Phase 6.5; default
45
+ `config.generate_tests`) in the sign-off round.
46
+
47
+ <!-- /orc:layer -->
@@ -0,0 +1,19 @@
1
+ # Phase — Integration (worktrees) (id: `integration`)
2
+
3
+ > **`/orc` phase file.** Moved out of `orc/SKILL.md` at v1.0.0 W12. The spine is
4
+ > loaded IN FULL when the skill activates; this is loaded when the phase fires,
5
+ > and most runs skip most phases. ONE consumer today, so it stays in this lane —
6
+ > `../../../_shared/phases/README.md`'s rule: a file with one consumer stays home.
7
+ > When a second lane reads it (W13 `orc-diy`, W14 `orc-mini`/`orc-fast`) it moves
8
+ > to `_shared/phases/` and gains a `composed` or `trim` layer beside this one.
9
+ > `orc lane phases orc --json` names the file and the layers.
10
+
11
+ <!-- orc:layer full -->
12
+
13
+ ## Integration (worktrees only)
14
+
15
+ Emit `PHASE integration start`. Merge worker branches; conflicts → resolver
16
+ subagent (Opus 4.8 medium) given BOTH tasks' specs/intents, not just the diff.
17
+ Record merge state in checkpoint; emit `PHASE integration end`.
18
+
19
+ <!-- /orc:layer -->
@@ -25,7 +25,7 @@ after: src/payments — 2 shipped files rewritten within 30 days of run stor
25
25
  crosslink: 2 boundaries (payments-api) — advisory
26
26
  extra: ON — 4 of 9 tasks foreign · deepseek/deepseek-v4-flash via api [0,30)
27
27
  · glm/glm-4.7 via cli [30,70) · 2 held back (risk: auth, money)
28
- scoring: 8-band default table
28
+ scoring: 6-band default table
29
29
  tdd: 3 tasks with tests (T3, T6, T9) · 2 covered-by-existing · 2 no-behavior
30
30
  skipped: R4 translation strings (no-behavior) · R7 file split
31
31
  (covered-by-existing → test/api/health.test.js:41)
@@ -95,16 +95,16 @@ waves: 3 planned — will pause after wave 2 (batch_pause_every=2)
95
95
  `EXTRA orphan` line from `trace_extras[]` once you have reported it.
96
96
 
97
97
  Canonical: `../../_shared/extra-dispatch.md`.
98
- - **scoring:** which executor table RESOLVED for this run — `8-band default
98
+ - **scoring:** which executor table RESOLVED for this run — `6-band default
99
99
  table` · `Opus-5-only ladder (opus5_only)` · `custom
100
100
  (rubric_bands_override, <n> rows)`. An un-shown table is as unaccountable as
101
101
  an un-shown number, and the Opus-5-only ladder in particular means EVERY
102
102
  dispatch needs an Opus 5 main session — the user should see that before the
103
103
  first dispatch, not in a trace full of downgrades. When `opus5_only` is on,
104
104
  append ` · all fixed roles forced to Opus 5` and name any selector it
105
- shadowed (`rubric_bands_override` / `fable5_*` present but INERT) — a setting
105
+ shadowed (a `rubric_bands_override` present but INERT) — a setting
106
106
  the user tuned and the run then ignored has to be said out loud. With Extra in
107
- play the table is a COMPOSITE and reads as one (`8-band default table + extra
107
+ play the table is a COMPOSITE and reads as one (`6-band default table + extra
108
108
  rows [0,30) [30,70)`) — Extra is an overlay, so naming only one of the two would
109
109
  be naming the wrong half for every covered score.
110
110
  - **tdd:** ALWAYS printed on a lane whose TDD policy is on — BOTH branches, not
@@ -1,123 +1,117 @@
1
- # Reference — Ultra Lane (load only when `ultra_mode: true`)
2
-
3
- `/orc-ultra` runs the FULL pipeline with maximum rigor for complex and
4
- ultra-complex requests. Everything in SKILL.md still applies; this file adds
5
- the ultra deltas. Ultra exists ONLY here — never in orc-mini, never on a plain
6
- `/orc` run.
7
-
8
- Cost stance: ultra is costly by definition. State it once at intake
9
- ("ultra adds an Opus 5 xhigh advisor + up to 3 judge dispatches + revision
10
- loops"), then never prompt about cost again.
11
-
12
- ## Forced overrides (run-scoped — NEVER written to the user's config file)
13
-
14
- Apply at Phase 0, on top of the normal config resolution:
15
- - analysis depth = **deep**, no ask (the analyst's standard/deep gate is
16
- bypassed; `default_analysis_depth` is ignored; scouts dispatch as usual).
17
- - `pattern_findings` = on · `generate_tests` = on · `security_review` = on.
18
- - Executor **tier floor**: remap the resolved score→model table so no task
19
- dispatches below `orc-executor-sonnet-5-high`; bands at/above the preset's
20
- opus boundary rise to at least `orc-executor-opus-4-8-high` the floor only
21
- ever raises a band, so the top `[90,100]` band keeps `orc-executor-opus-5-high`.
22
- **Under `opus5_only` the floor raises EFFORT, not model** (every band
23
- is already Opus 5, so there is no model left to raise): the `[0,40)` band rises
24
- low → medium, and the other two are already at/above it. It is still a floor —
25
- it never lowers a band, and it never raises `[80,100]` past high.
26
- Show the remapped table with the Phase 2 scoring table.
27
-
28
- > Opus-5-only mode: if `opus5_only`, every role this lane dispatches is already
29
- > Opus 5 (advisor and judge are pinned there by default) and the scouts rise to
30
- > `orc-scout-opus-5-low`. It FORCES the Fable 5 note below does not apply
31
- > while it is on. See `../../_shared/opus5-only.md`.
32
-
33
- > Fable 5 role override: (INERT while `opus5_only`) if `fable5_enabled` and
34
- > `advisor` / `judge` are in `fable5_roles`, dispatch the `orc-advisor-fable-5` /
35
- > `orc-judge-fable-5` variant instead of the Opus 5 xhigh default — same slice,
36
- > same contract. See `../../_shared/fable5-override.md`.
37
-
38
- ## Phase U0 — Advisor (after intake sign-off, before the analyst)
39
-
40
- Dispatch `orc-advisor-opus-5-xhigh` (see `../../orc-advisor/SKILL.md`) with
41
- the request, the run-folder path, and the detected stack. Validate the return
42
- (`brief_path`, `open_questions[]`, `assumptions[]`, actual model/effort
43
- fields). Then:
44
-
45
- 1. Relay `open_questions[]` to the user in ONE batched round. Fold answers
46
- into the intent-spec; unanswered questions fall back to the advisor's
47
- proposed default and enter the ledger as UNCONFIRMED.
48
- 2. Create `run/{run-slug}/ultra/assumption-ledger.md` from `assumptions[]`.
49
- Every later phase appends: `assumption → confirmed-by-user |
50
- confirmed-by-code-evidence (anchor) | UNCONFIRMED`. You alone write it
51
- (workers return candidate entries; you record them).
52
- 3. Inject the brief VERBATIM (never a pointer) into the analyst slice, the
53
- planner slice, every judge slice, and as advisory notes every executor
54
- slice. The rubric section is what the judges score against.
55
-
56
- The advisor runs once; it is never re-dispatched. Record `ADVISE` into the U0
57
- packetultra adds ONE writer packet for U0 and one per judge gate on top of
58
- orc's phase packets (`../references/trace-protocol.md`), so the advisory brief,
59
- the questions relayed, and each verdict round are narrated like any other phase.
60
-
61
- ## The three judgment gates (dispatch `orc-judge-opus-5-xhigh`)
62
-
63
- Shared mechanics verdict validation, blocking-finding downgrade enforcement,
64
- REVISE loops (author echo `finding_id resolution`, re-judge convergence
65
- rule, hard cap 2 per gate), the ESCALATE menu, advisory carry-forward, verdict
66
- persistence (`run/{run-slug}/ultra/verdict-<gate>-<round>.md`), and the
67
- `JUDGE` / `GATE judgment` trace events (packet-carried) live in
68
- `../../orc-judge/SKILL.md`.
69
- Load it at the first gate. Loop counters + the ultra artifact paths go in the
70
- checkpoint (`ultra` block) so a resumed run continues mid-loop.
71
-
72
- Judge slices ALWAYS carry: the advisor brief (with rubric), the original
73
- request, the assumption ledger, and gate-specific evidence below. Never the
74
- author's reasoning or self-assessment.
75
-
76
- - **Gate 1 (analysis)** after the analyst-return deterministic gates pass
77
- (evidence spot-check + derivation lint) and the user's challenge round is
78
- resolved. Slice adds: report + spec paths. REVISE bounce to the analyst.
79
- Gate approval does NOT replace the user's take-into-build choice.
80
- - **Gate 2 (plan)** — after the Phase 1 exit gate passes. FIRST build the
81
- **blast-radius map** (deterministic, yours): for each task's declared
82
- files, Grep the importers/callers of the symbols it touches; list any
83
- caller file no task covers. Slice adds: planning-output + the map. REVISE →
84
- bounce to the planner. Gate approval does not replace plan sign-off.
85
- - **Gate 3 (implementation)** — after Phase 6 (and 6.5). FIRST build two
86
- deterministic inputs:
87
- 1. **Traceability matrix** (`run/{run-slug}/ultra/traceability-matrix.md`):
88
- `R# task declared files actual diff hunks (git diff) → verify
89
- evidence`. An R# with an EMPTY diff column is a deterministically caught
90
- missing implementation dispatch the fix wave directly, no judge needed
91
- for that miss.
92
- 2. **Static analysis**: run the project's own tooling on the changed files
93
- when the stack detection found any (linter, sonar-scanner,
94
- type-checker) never install tooling. Inject results into the slice;
95
- tool findings on changed lines are blocking input the judge triages.
96
- Slice adds: matrix, changed-file LIST (never an inlined diff — the judge
97
- reads matrix-guided via its own Read/Grep), verify report, static-analysis
98
- results, the resolved pattern's blocking invariants. REVISE scored
99
- executor **fix wave** for only the affected tasks (findings verbatim in
100
- slices) re-verify re-judge. All clear → Phase 7.
101
-
102
- ## Verdict contract cross-check (validate like any worker return)
103
-
104
- `verdict` APPROVE|REVISE|ESCALATE · every blocking finding has a verbatim
105
- anchor + class-appropriate justification (`failure_consequence` for
106
- correctness/security; named category + concrete alternative for
107
- smell/simplification/placement) · `rubric_items_checked[]` covers the gate's
108
- rubric lines · `unconfirmed_assumptions_touched[]` present. Malformed →
109
- requeue the judge once, then escalate. Security findings with a concrete
110
- consequence are always blocking. APPROVE with zero findings is legitimate.
111
-
112
- ## Phase 6.7 / 7 / 8 deltas
113
-
114
- The mock-example phase (spine Phase 6.7, `../../_shared/drift-recovery.md`)
115
- runs in ultra too AFTER Gate 3 approves (an example of an unapproved
116
- implementation would demo drift the judge already caught); same `mock_example`
117
- config, same never-committed rule, same 2-loop drift cap. A drift-recovery
118
- patch wave re-enters Gate 3 (a changed implementation is re-judged).
119
-
120
- The summary additionally reports: per-gate verdicts + rounds, findings by
121
- severity and class, auto-downgrades, the assumption ledger's final state
122
- (UNCONFIRMED entries highlighted), and the traceability matrix path. Ship is
123
- unchanged — but never offer commit while a gate is unresolved.
1
+ # Reference — Ultra Lane (load only when `ultra_mode: true`)
2
+
3
+ `/orc-ultra` runs the FULL pipeline with maximum rigor for complex and
4
+ ultra-complex requests. Everything in SKILL.md still applies; this file adds
5
+ the ultra deltas. Ultra exists ONLY here — never in orc-mini, never on a plain
6
+ `/orc` run.
7
+
8
+ Cost stance: ultra is costly by definition. State it once at intake
9
+ ("ultra adds an Opus 5 xhigh advisor + up to 3 judge dispatches + revision
10
+ loops"), then never prompt about cost again.
11
+
12
+ ## Forced overrides (run-scoped — NEVER written to the user's config file)
13
+
14
+ Apply at Phase 0, on top of the normal config resolution:
15
+ - analysis depth = **deep**, no ask (the analyst's standard/deep gate is
16
+ bypassed; `default_analysis_depth` is ignored; scouts dispatch as usual).
17
+ - `pattern_findings` = on · `generate_tests` = on · `security_review` = on.
18
+ - Executor **tier floor**: remap the resolved score→model table so no task
19
+ dispatches below `orc-executor-sonnet-5-high`; bands at/above the opus
20
+ boundary (65) rise to at least `orc-executor-opus-5-low`. The floor only ever
21
+ raises a band, so the top `[90,100]` band keeps `orc-executor-opus-5-med`.
22
+ **Under `opus5_only` the floor raises EFFORT, not model** (every band is
23
+ already Opus 5, so there is no model left to raise): the `[0,90)` band rises
24
+ low → medium, which makes both bands medium. It is still a floor — it never
25
+ lowers a band, and it never raises `[90,100]` past medium.
26
+ Show the remapped table with the Phase 2 scoring table.
27
+
28
+ > Opus-5-only mode: if `opus5_only`, every role this lane dispatches is already
29
+ > Opus 5 (advisor and judge are pinned there by default) and the scouts rise to
30
+ > `orc-scout-opus-5-low`. It FORCES. See `../../_shared/opus5-only.md`.
31
+
32
+ ## Phase U0 — Advisor (after intake sign-off, before the analyst)
33
+
34
+ Dispatch `orc-advisor-opus-5-xhigh` (see `../../orc-advisor/SKILL.md`) with
35
+ the request, the run-folder path, and the detected stack. Validate the return
36
+ (`brief_path`, `open_questions[]`, `assumptions[]`, actual model/effort
37
+ fields). Then:
38
+
39
+ 1. Relay `open_questions[]` to the user in ONE batched round. Fold answers
40
+ into the intent-spec; unanswered questions fall back to the advisor's
41
+ proposed default and enter the ledger as UNCONFIRMED.
42
+ 2. Create `run/{run-slug}/ultra/assumption-ledger.md` from `assumptions[]`.
43
+ Every later phase appends: `assumption → confirmed-by-user |
44
+ confirmed-by-code-evidence (anchor) | UNCONFIRMED`. You alone write it
45
+ (workers return candidate entries; you record them).
46
+ 3. Inject the brief VERBATIM (never a pointer) into the analyst slice, the
47
+ planner slice, every judge slice, and as advisory notes — every executor
48
+ slice. The rubric section is what the judges score against.
49
+
50
+ The advisor runs once; it is never re-dispatched. Record `ADVISE` into the U0
51
+ packet ultra adds ONE writer packet for U0 and one per judge gate on top of
52
+ orc's phase packets (`../../_shared/phases/trace.md`), so the advisory brief,
53
+ the questions relayed, and each verdict round are narrated like any other phase.
54
+
55
+ ## The three judgment gates (dispatch `orc-judge-opus-5-xhigh`)
56
+
57
+ Shared mechanics verdict validation, blocking-finding downgrade enforcement,
58
+ REVISE loops (author echo `finding_id resolution`, re-judge convergence
59
+ rule, hard cap 2 per gate), the ESCALATE menu, advisory carry-forward, verdict
60
+ persistence (`run/{run-slug}/ultra/verdict-<gate>-<round>.md`), and the
61
+ `JUDGE` / `GATE judgment` trace events (packet-carried) — live in
62
+ `../../orc-judge/SKILL.md`.
63
+ Load it at the first gate. Loop counters + the ultra artifact paths go in the
64
+ checkpoint (`ultra` block) so a resumed run continues mid-loop.
65
+
66
+ Judge slices ALWAYS carry: the advisor brief (with rubric), the original
67
+ request, the assumption ledger, and gate-specific evidence below. Never the
68
+ author's reasoning or self-assessment.
69
+
70
+ - **Gate 1 (analysis)** after the analyst-return deterministic gates pass
71
+ (evidence spot-check + derivation lint) and the user's challenge round is
72
+ resolved. Slice adds: report + spec paths. REVISE → bounce to the analyst.
73
+ Gate approval does NOT replace the user's take-into-build choice.
74
+ - **Gate 2 (plan)** — after the Phase 1 exit gate passes. FIRST build the
75
+ **blast-radius map** (deterministic, yours): for each task's declared
76
+ files, Grep the importers/callers of the symbols it touches; list any
77
+ caller file no task covers. Slice adds: planning-output + the map. REVISE
78
+ bounce to the planner. Gate approval does not replace plan sign-off.
79
+ - **Gate 3 (implementation)** after Phase 6 (and 6.5). FIRST build two
80
+ deterministic inputs:
81
+ 1. **Traceability matrix** (`run/{run-slug}/ultra/traceability-matrix.md`):
82
+ `R# task declared files actual diff hunks (git diff) → verify
83
+ evidence`. An R# with an EMPTY diff column is a deterministically caught
84
+ missing implementation dispatch the fix wave directly, no judge needed
85
+ for that miss.
86
+ 2. **Static analysis**: run the project's own tooling on the changed files
87
+ when the stack detection found any (linter, sonar-scanner,
88
+ type-checker) never install tooling. Inject results into the slice;
89
+ tool findings on changed lines are blocking input the judge triages.
90
+ Slice adds: matrix, changed-file LIST (never an inlined diff — the judge
91
+ reads matrix-guided via its own Read/Grep), verify report, static-analysis
92
+ results, the resolved pattern's blocking invariants. REVISE scored
93
+ executor **fix wave** for only the affected tasks (findings verbatim in
94
+ slices) re-verify re-judge. All clear Phase 7.
95
+
96
+ ## Verdict contract cross-check (validate like any worker return)
97
+
98
+ `verdict` APPROVE|REVISE|ESCALATE · every blocking finding has a verbatim
99
+ anchor + class-appropriate justification (`failure_consequence` for
100
+ correctness/security; named category + concrete alternative for
101
+ smell/simplification/placement) · `rubric_items_checked[]` covers the gate's
102
+ rubric lines · `unconfirmed_assumptions_touched[]` present. Malformed
103
+ requeue the judge once, then escalate. Security findings with a concrete
104
+ consequence are always blocking. APPROVE with zero findings is legitimate.
105
+
106
+ ## Phase 6.7 / 7 / 8 deltas
107
+
108
+ The mock-example phase (spine Phase 6.7, `../../_shared/drift-recovery.md`)
109
+ runs in ultra too AFTER Gate 3 approves (an example of an unapproved
110
+ implementation would demo drift the judge already caught); same `mock_example`
111
+ config, same never-committed rule, same 2-loop drift cap. A drift-recovery
112
+ patch wave re-enters Gate 3 (a changed implementation is re-judged).
113
+
114
+ The summary additionally reports: per-gate verdicts + rounds, findings by
115
+ severity and class, auto-downgrades, the assumption ledger's final state
116
+ (UNCONFIRMED entries highlighted), and the traceability matrix path. Ship is
117
+ unchanged but never offer commit while a gate is unresolved.