@azure-id/orc 0.56.0 → 1.0.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 (153) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/README-id.md +143 -53
  3. package/README.md +124 -103
  4. package/bin/build-agents.js +18 -11
  5. package/bin/cli.js +4139 -315
  6. package/bin/onboarding-content.js +0 -3
  7. package/bin/test-run.js +491 -0
  8. package/bin/verify-contracts.js +4256 -3277
  9. package/bin/verify-package.js +563 -498
  10. package/bin/webui/api.js +1186 -1163
  11. package/bin/webui/app.html +9 -0
  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/fixtures/extra.js +2036 -1934
  17. package/bin/webui/fixtures/flow.js +2 -2
  18. package/bin/webui/fixtures/index.js +503 -486
  19. package/bin/webui/fixtures/lanes.js +218 -0
  20. package/bin/webui/fixtures/settings.js +261 -34
  21. package/bin/webui/fixtures/stats.js +3 -3
  22. package/bin/webui/i18n/TERMS.md +135 -134
  23. package/bin/webui/i18n/en/extra.json +345 -313
  24. package/bin/webui/i18n/en/lanes.json +29 -0
  25. package/bin/webui/i18n/en/nav.json +1 -0
  26. package/bin/webui/i18n/en/overview.json +2 -0
  27. package/bin/webui/i18n/en/settings.json +16 -5
  28. package/bin/webui/i18n/id/extra.json +345 -313
  29. package/bin/webui/i18n/id/lanes.json +29 -0
  30. package/bin/webui/i18n/id/nav.json +1 -0
  31. package/bin/webui/i18n/id/overview.json +2 -0
  32. package/bin/webui/i18n/id/settings.json +15 -4
  33. package/bin/webui/js/01-i18n.js +1 -0
  34. package/bin/webui/js/panels/extra.js +3199 -3011
  35. package/bin/webui/js/panels/lanes.js +259 -0
  36. package/bin/webui/js/panels/overview.js +10 -0
  37. package/bin/webui/js/panels/settings.js +149 -3
  38. package/package.json +3 -3
  39. package/templates/agents/MODEL-MAPPING.md +23 -35
  40. package/templates/agents/orc-executor-opus-4-7-high.md +1 -1
  41. package/templates/agents/orc-executor-opus-4-7-med.md +1 -1
  42. package/templates/agents/orc-executor-opus-4-8-high.md +1 -1
  43. package/templates/agents/orc-executor-opus-5-high.md +1 -1
  44. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  45. package/templates/agents/orc-executor-opus-5-med.md +1 -1
  46. package/templates/agents/orc-retro-opus-5-med.md +73 -73
  47. package/templates/agents/orc-retro-sonnet-5-high.md +72 -72
  48. package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -107
  49. package/templates/commands/orc-route.md +1 -1
  50. package/templates/commands/orc.md +1 -1
  51. package/templates/skills/_shared/README.md +7 -3
  52. package/templates/skills/_shared/config-precedence.md +198 -0
  53. package/templates/skills/_shared/drift-recovery.md +1 -1
  54. package/templates/skills/_shared/extra-dispatch.md +292 -6
  55. package/templates/skills/_shared/interview.md +1 -1
  56. package/templates/skills/_shared/opus5-only.md +9 -7
  57. package/templates/skills/_shared/phases/README.md +82 -0
  58. package/templates/skills/{orc/references → _shared/phases}/analyst-gates.md +15 -3
  59. package/templates/skills/_shared/phases/execution.md +143 -0
  60. package/templates/skills/{orc/references → _shared/phases}/house-rules.md +13 -1
  61. package/templates/skills/{orc/references → _shared/phases}/intake.md +15 -2
  62. package/templates/skills/_shared/phases/mock-example.md +56 -0
  63. package/templates/skills/{orc/references → _shared/phases}/plan-handoff.md +16 -3
  64. package/templates/skills/_shared/phases/planning.md +135 -0
  65. package/templates/skills/_shared/phases/preflight.md +76 -0
  66. package/templates/skills/_shared/phases/review.md +53 -0
  67. package/templates/skills/_shared/phases/scoring.md +65 -0
  68. package/templates/skills/{orc/references → _shared/phases}/security-checklist.md +12 -1
  69. package/templates/skills/_shared/phases/security.md +55 -0
  70. package/templates/skills/_shared/phases/ship.md +88 -0
  71. package/templates/skills/{orc/references/stop-and-resume.md → _shared/phases/stop-resume.md} +169 -160
  72. package/templates/skills/_shared/phases/summary.md +48 -0
  73. package/templates/skills/_shared/phases/testgen.md +51 -0
  74. package/templates/skills/{orc/references/trace-protocol.md → _shared/phases/trace.md} +49 -6
  75. package/templates/skills/_shared/phases/verify.md +70 -0
  76. package/templates/skills/{orc/references → _shared/phases}/wave-grouping.md +14 -2
  77. package/templates/skills/{orc/references → _shared/phases}/wiki-consult.md +13 -1
  78. package/templates/skills/_shared/read-ladder.md +48 -0
  79. package/templates/skills/context-combiner/SKILL.md +214 -187
  80. package/templates/skills/orc/README.md +148 -150
  81. package/templates/skills/orc/SKILL.md +70 -358
  82. package/templates/skills/orc/config.md +137 -389
  83. package/templates/skills/orc/examples/full-run-mock.md +1 -1
  84. package/templates/skills/orc/references/effort-and-mode.md +16 -18
  85. package/templates/skills/orc/references/phases/intake.md +47 -0
  86. package/templates/skills/orc/references/phases/integration.md +19 -0
  87. package/templates/skills/orc/references/preflight-report.md +4 -4
  88. package/templates/skills/orc/references/ultra-mode.md +117 -123
  89. package/templates/skills/orc/schemas/planning-output.md +279 -279
  90. package/templates/skills/orc/subskills/orc-planner/SKILL.md +260 -264
  91. package/templates/skills/orc/subskills/orc-pr/stack-gate.md +4 -1
  92. package/templates/skills/orc-aftermath/SKILL.md +153 -136
  93. package/templates/skills/orc-analyze/SKILL.md +247 -220
  94. package/templates/skills/orc-analyze/references/branching.md +51 -51
  95. package/templates/skills/orc-analyze/references/thin-input.md +1 -1
  96. package/templates/skills/orc-analyze-mini/SKILL.md +128 -112
  97. package/templates/skills/orc-boundary/SKILL.md +244 -208
  98. package/templates/skills/orc-brainstorm/SKILL.md +372 -339
  99. package/templates/skills/orc-budget/SKILL.md +243 -225
  100. package/templates/skills/orc-challenge/README.md +1 -1
  101. package/templates/skills/orc-challenge/SKILL.md +293 -255
  102. package/templates/skills/orc-challenge/examples/council-full-roster.md +1 -1
  103. package/templates/skills/orc-claude/SKILL.md +216 -199
  104. package/templates/skills/orc-diy/README.md +2 -1
  105. package/templates/skills/orc-diy/SKILL.md +129 -70
  106. package/templates/skills/orc-diy/references/blocks/analyze.md +1 -1
  107. package/templates/skills/orc-diy/references/compile.md +21 -7
  108. package/templates/skills/orc-diy/references/flow-schema.md +2 -2
  109. package/templates/skills/orc-doc/SKILL.md +44 -7
  110. package/templates/skills/orc-explain/SKILL.md +19 -0
  111. package/templates/skills/orc-export/SKILL.md +26 -5
  112. package/templates/skills/orc-fast/SKILL.md +215 -187
  113. package/templates/skills/orc-grill/SKILL.md +233 -207
  114. package/templates/skills/orc-handoff/SKILL.md +223 -204
  115. package/templates/skills/orc-learn/SKILL.md +176 -156
  116. package/templates/skills/orc-mini/SKILL.md +41 -23
  117. package/templates/skills/orc-pact/SKILL.md +250 -218
  118. package/templates/skills/orc-pattern/SKILL.md +149 -124
  119. package/templates/skills/orc-poly/SKILL.md +237 -216
  120. package/templates/skills/orc-poly/references/gather.md +1 -1
  121. package/templates/skills/orc-pr-driver/SKILL.md +196 -167
  122. package/templates/skills/orc-pr-driver/references/orc-run-split.md +1 -1
  123. package/templates/skills/orc-pr-setup/SKILL.md +212 -184
  124. package/templates/skills/orc-quick/README.md +2 -2
  125. package/templates/skills/orc-quick/SKILL.md +346 -313
  126. package/templates/skills/orc-quick/references/dispatch-gate.md +12 -4
  127. package/templates/skills/orc-retro/SKILL.md +244 -222
  128. package/templates/skills/orc-retro/examples/retro-mock.md +171 -171
  129. package/templates/skills/orc-route/SKILL.md +183 -165
  130. package/templates/skills/orc-verify/SKILL.md +100 -86
  131. package/templates/skills/orc-wiki/SKILL.md +55 -206
  132. package/templates/skills/orc-wiki/references/phases/phase-0.md +71 -0
  133. package/templates/skills/orc-wiki/references/phases/phase-1.md +35 -0
  134. package/templates/skills/orc-wiki/references/phases/phase-2.md +52 -0
  135. package/templates/skills/orc-wiki/references/phases/phase-3.md +57 -0
  136. package/templates/skills/orc-wiki/references/phases/phase-3c.md +36 -0
  137. package/templates/agents/orc-advisor-fable-5.md +0 -50
  138. package/templates/agents/orc-analyst-fable-5.md +0 -115
  139. package/templates/agents/orc-judge-fable-5.md +0 -79
  140. package/templates/agents/orc-planner-fable-5.md +0 -152
  141. package/templates/agents/orc-reviewer-fable-5.md +0 -57
  142. package/templates/skills/_shared/fable5-override.md +0 -56
  143. package/templates/skills/orc-diy/references/blocks/execution.md +0 -42
  144. package/templates/skills/orc-diy/references/blocks/mock-example.md +0 -22
  145. package/templates/skills/orc-diy/references/blocks/planning.md +0 -34
  146. package/templates/skills/orc-diy/references/blocks/review.md +0 -18
  147. package/templates/skills/orc-diy/references/blocks/scoring.md +0 -16
  148. package/templates/skills/orc-diy/references/blocks/security.md +0 -25
  149. package/templates/skills/orc-diy/references/blocks/ship.md +0 -25
  150. package/templates/skills/orc-diy/references/blocks/summary.md +0 -18
  151. package/templates/skills/orc-diy/references/blocks/testgen.md +0 -17
  152. package/templates/skills/orc-diy/references/blocks/trace.md +0 -28
  153. package/templates/skills/orc-diy/references/blocks/verify.md +0 -25
package/README.md CHANGED
@@ -7,14 +7,14 @@
7
7
  *Intake → analyze → plan → score → parallel subagents → review → verify → ship.*
8
8
 
9
9
  ![npm](https://img.shields.io/npm/v/%40azure-id%2Forc?style=for-the-badge&color=cb3837&logo=npm)
10
- ![Version](https://img.shields.io/badge/version-0.56.0-blue.svg?style=for-the-badge)
10
+ ![Version](https://img.shields.io/badge/version-1.0.0-blue.svg?style=for-the-badge)
11
11
  ![License](https://img.shields.io/badge/license-MIT-green.svg?style=for-the-badge)
12
12
  ![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg?style=for-the-badge)
13
13
  ![Claude Code](https://img.shields.io/badge/Claude_Code-Skills-purple.svg?style=for-the-badge)
14
14
  ![Dependencies](https://img.shields.io/badge/dependencies-zero-lightgrey.svg?style=for-the-badge)
15
15
  ![GitHub stars](https://img.shields.io/github/stars/azure-id/orc?style=for-the-badge&color=yellow)
16
16
 
17
- **Latest: v0.56.0** · updated 2026-08-27 · [full changelog](CHANGELOG.md)
17
+ **Latest: v1.0.0** · updated 2026-08-30 · [full changelog](CHANGELOG.md)
18
18
 
19
19
  **On npm: [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)** — `npm i -g @azure-id/orc`
20
20
 
@@ -359,6 +359,8 @@ orc ui --stop # shut this project's server down
359
359
  | Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
360
360
  | Promises · Boundary · Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
361
361
  | **Docs** | every `/orc-doc` document as a **ribbon** — one block per section, sized by its length and coloured by its state — plus the section files with their sub-parts, the wave strip, the lint health card and the wave preview | `doc compile` · `doc migrate` |
362
+ | **Extra** | **six tabs**: the connection setup, the local tools and their state, the band ladder and the six positions, spending per profile per band, and **Recovery** — every dispatch that never reported back, with what it left on disk | `extra add` / `ping` / `route` / `role` |
363
+ | **Challenge** | every `/orc-challenge` cycle: the frozen goal, the council roster and what each lens raised, the findings with their dispositions, and whether the pass is computed or blocked | `challenge record` · `accept` · `rebut` |
362
364
  | **Mocked Skill Use** | every mocked run that ships with ORC, grouped and searchable, with a reading pane | — |
363
365
  | Learn | the `orc onboarding` walkthrough, one section at a time | — |
364
366
  | Experiment | every lane with a copy button; opens a Claude session in a terminal | — |
@@ -384,6 +386,77 @@ CSS.
384
386
 
385
387
  ---
386
388
 
389
+ ## Running part of the ladder somewhere else — `orc extra`
390
+
391
+ **The orchestrator is always Claude.** What Extra changes is *who executes a
392
+ slice*: a score band you own, or one of six named positions, can point at
393
+ DeepSeek, GLM, Kimi, MiniMax, Qwen, a local Ollama, or a coding CLI you already
394
+ have signed in (opencode, codex). Everything downstream — the smoke gate, the TDD
395
+ gate, the reviewer, the worktree-delta check — is engine-blind, so nothing learns
396
+ the work was foreign.
397
+
398
+ **Off by default, and it cannot be armed until something has actually answered.**
399
+
400
+ ```bash
401
+ orc extra providers # the shipped, dated catalog — providers, never models
402
+ orc extra tools # local CLIs: absent · outdated · unauthenticated · ready
403
+ orc extra add ds --provider deepseek --engine api --env-key DEEPSEEK_API_KEY
404
+ orc extra ping ds # the connection gate: a ladder, and nothing reads stronger than it is
405
+ orc extra models ds --test <id> # a LISTED model can still be dead upstream
406
+ orc extra health ds --model <id> # …and a working model is not one that FINISHES
407
+ orc extra route set 40-55 ds/deepseek-chat # a score band
408
+ orc extra role set doc-writer ds/deepseek-chat # or a named position
409
+ orc config set extra_enabled true
410
+ ```
411
+
412
+ - **The catalog ships providers and never models.** A shipped model id is wrong
413
+ within a quarter and wrong *silently* — a 404 mid-wave. `orc extra ping` reads
414
+ the live list and caches it; nothing invents a name. Same for price: a cost
415
+ figure ORC did not price itself is never printed, it reads as an em dash.
416
+ - **Every armed run says so before wave 1.** Routing work off Claude silently is
417
+ the failure this whole subsystem is shaped around.
418
+ - **Two hard hold-backs**: a task with a cited `risk[]` (auth, money, migration,
419
+ security, concurrency, data-integrity) stays on Claude unless you say
420
+ otherwise, and a `/orc-boundary` REFUSE area holds even in `warn`.
421
+ - **A foreign return is foreign input.** It is the only foreign class that edits
422
+ your worktree, so what it says it did is a *claim*, checked against the tree.
423
+ - **Your key never reaches a command line.** It travels on stdin into an
424
+ encrypted vault, or it stays in an environment variable, or the tool holds its
425
+ own — and the passphrase is a **deadline**, not a second factor.
426
+ - **Six positions for the lanes that pin an agent instead of scoring a task**:
427
+ `quick-executor` · `fast-executor` · `doc-writer` · `doc-checker` ·
428
+ `wiki-scanner-deep` · `wiki-scanner-light`. A position with no row keeps its
429
+ slot and reads as its pinned Claude agent — "I left the checker on Claude on
430
+ purpose" and "there is no checker" must never look the same.
431
+
432
+ **When a foreign worker fails, it is a position and not a blank page.** ORC
433
+ journals the baseline *before the first byte leaves the machine*, so a worker cut
434
+ off mid-write is **reconciled and resumed** — never re-dispatched from scratch
435
+ onto a file that is already two-thirds written.
436
+
437
+ - **`extra_stall_s` (default 180)** stops a worker that has produced nothing for
438
+ that long. It is reset by observable progress — the worker's stream, its
439
+ stderr, or a declared file that changed on disk — so it never fires on one that
440
+ is merely slow. `stalled` is retryable, which is what makes the resume ORC's
441
+ own spelling of typing `continue`.
442
+ - **`extra_fallback_agent` (default `band`)** decides who picks the task up.
443
+ `ask` stops and puts the menu to you; any installed agent name pins one. It
444
+ changes *who*, never the score, the declared files or the acceptance criteria.
445
+ - **Every dispatch writes its own spend record**, so a cost report never depends
446
+ on a run remembering to narrate what it spent. `orc extra stats` merges the
447
+ spend log, the traces and saved returns, and always says how many rows came
448
+ from each.
449
+
450
+ **`/orc-quick` is inert here** and announces it — that lane asks which agent
451
+ before every dispatch, so no setting may pre-answer it. **`/orc-challenge` never
452
+ routes foreign**: swapping a lens for a different model does not make the lane
453
+ cheaper, it changes what is being measured.
454
+
455
+ **The whole subsystem, with every command and key:
456
+ [guides/extra-models.md](guides/extra-models.md).**
457
+
458
+ ---
459
+
387
460
  ## How the model is picked
388
461
 
389
462
  Each task is scored 0–100 by **arithmetic, not judgement**: the planner reports
@@ -424,12 +497,13 @@ clobbers. `orc ui` ▸ Settings edits the same keys through the same validators.
424
497
 
425
498
  ```
426
499
  templates/
427
- ├── skills/ 29 skills the lanes above, plus the ones with no command of
428
- their own: context-combiner, orc-advisor, orc-judge,
429
- │ orc-analyze-mini, and _shared/ (cross-lane contract prose)
430
- ├── commands/ 27 slash commands
500
+ ├── skills/ 31 skill folders, 38 SKILL.md files (a lane may ship subskills)
501
+ the lanes above, plus the ones with no command of their own:
502
+ context-combiner, orc-advisor, orc-judge, orc-analyze-mini,
503
+ │ and _shared/ (cross-lane contract prose)
504
+ ├── commands/ 29 slash commands
431
505
  ├── hooks/ effort guard (PreToolUse) · statusline warning · behavior trace
432
- └── agents/ 40 model-pinned subagents + MODEL-MAPPING.md
506
+ └── agents/ 51 model-pinned subagents + MODEL-MAPPING.md
433
507
  bin/cli.js installer, config editor, flow composer, run-state reader, and
434
508
  the deterministic half of every lane. Every read speaks --json
435
509
  bin/webui/ `orc ui` — the local control panel: css/ + js/ + i18n/<lang>/ +
@@ -500,102 +574,49 @@ a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
500
574
  **Full history: [CHANGELOG.md](CHANGELOG.md)** — or `orc changelog`, which prints
501
575
  only what is newer than the version you have.
502
576
 
503
- ### v0.56.0 - a rename moved the command, and nobody could reach the fix _(2026-08-27)_
504
-
505
- **READ THIS FIRST IF YOUR `orc upgrade` IS FAILING.** On a version before
506
- v0.56.0, this release cannot install itself - your `orc upgrade` is the OLD one.
507
- Run these three lines once, by hand:
508
-
509
- - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
510
- - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
511
- - **Step 3 - re-apply it to your project:** `orc update` (add `--global` to also
512
- refresh `~/.claude`)
513
-
514
- Then `orc version` should print 0.56.0 or newer. Your `.claude/` and your
515
- `orc.config.yaml` are untouched. **Do not use `npm i -g -f`.**
516
-
517
- **The package moved from the unscoped `orc` to `@azure-id/orc`, and every
518
- upgrade path in the field died at once.** Both names declare the same `orc` bin,
519
- and npm will not link it for the new package while the old one owns it - so the
520
- tarball, the `github:` spec and the registry all failed with the same `EEXIST`
521
- on the command file. It is a FILE conflict, not a source problem, which is why
522
- changing sources never helped and `npm i -g -f` was the only thing that worked.
523
-
524
- - **`orc upgrade` evicts the legacy package BEFORE trying any source**, because
525
- the collision fails every source identically. Announced, never silent.
526
- Detection is by OWNERSHIP - a package that does not declare the `orc` bin is
527
- never touched.
528
- - **The npm registry is tried first**, then the tarball, then the `github:` spec.
529
- `freshCliPath()` now resolves the SCOPED directory, so step 2 stops re-applying
530
- the templates step 1 just superseded.
531
- - **`--force` is kept for the one case it fits** - an orphaned command file no
532
- package owns - and never for an unrelated `EEXIST`.
533
- - **`orc doctor` reports `legacy-global-package` by name.** Not `--fix`-able on
534
- purpose: `--fix` is scoped to this project's `.claude/`.
535
- - **A CAUTION at the top of this README** carries the one-time manual fix, since
536
- anyone still on the old package does not have this code yet.
537
-
538
- ### v0.55.2 - a gate that is never probed is a gate that is always off _(2026-08-27)_
539
-
540
- **`/orc-quick` and `/orc-fast` documented the foreign-worker option and then
541
- never went and looked for it.** Both carried the whole `orc extra` slot contract
542
- but neither preflight ever ran the probe that answers whether a position is
543
- held, so an armed `extra_enabled` plus a slot row still offered only the shipped
544
- Claude executors.
545
-
546
- - **orc-quick Q0 gains one PROBE** - `orc extra resolve --slot quick-executor
547
- --json`, the single exception to "read no other key" - so the menu can render
548
- line 3. Still an option: never a default, never sticky.
549
- - **orc-fast F0 gains gate `d`** - `orc extra resolve --slot fast-executor
550
- --json` - and prints the P0 `extra:` line where the prose always said it
551
- would, naming the agent it displaces.
552
- - **`/orc-doc` was never affected**: `orc doc next` resolves its targets in the
553
- CLI, which is the shape the other two now borrow.
554
-
555
- ### v0.55.1 — ORC is on npm _(2026-08-27)_
556
-
557
- **ORC is published as [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc).**
558
- The GitHub tarball still works and nothing about the payload changed — this is
559
- the install path getting a name.
560
-
561
- - **`npm i -g @azure-id/orc`** is the install, and
562
- **`npm i -g @azure-id/orc@latest`** is the update. `orc upgrade` already did
563
- both steps for you and continues to; `--from @azure-id/orc` names npm
564
- explicitly.
565
- - **The GitHub tarball is now the fallback**, not the headline — it is kept in
566
- the Quick start behind a fold for forks and for anyone pinning a branch.
567
-
568
- ### v0.55.0 — a score is what a band needs, and four lanes do not have one _(2026-08-26)_
569
-
570
- **`/orc-quick`, `/orc-fast`, `/orc-doc` and `/orc-wiki` pin an agent to a
571
- position instead of scoring a task. `orc extra` routed them by reading that
572
- agent's score band — arithmetic on a number nobody chose. It was wrong twice and
573
- dead once.**
574
-
575
- - **`orc extra role` holds six POSITIONS** — `quick-executor` · `fast-executor` ·
576
- `doc-writer` · `doc-checker` · `wiki-scanner-deep` · `wiki-scanner-light`. One
577
- connection and one model each, and a row's presence is the arming. All six are
578
- always listed: an unrouted one keeps its slot and reads as the Claude agent it
579
- falls back to.
580
- - **`orc extra resolve --slot` never touches a band**, and the Claude answer it
581
- carries is a pinned NAME rather than an interval. Nine hold-backs, each named.
582
- - **Precedence, one sentence:** extra decides *whether* a Claude agent runs at
583
- all; `opus5_only` and the score tables only decide *which* one runs where extra
584
- did not take it. Under a taken position `opus5_only` is not consulted — and it
585
- stays fully live for every position with no row.
586
- - **The bridge accepts a slot** (`band` becomes `slot:<slot>`, so cost reporting
587
- splits per position for free) with **zero new engines, zero new dispatch paths
588
- and zero new agents**. A doc checker now resolves its OWN position, `/orc-wiki`
589
- can route at all, and `/orc-quick` gets a THIRD OPTION on its menu — never a
590
- default, never sticky, re-asked after a failure.
591
- - **A second ladder in `orc ui ▸ Extra ▸ Routing`**, and **zero config keys
592
- added**.
593
-
594
- Before that: **v0.54.0 — a failed dispatch is a POSITION, not a blank page**,
595
- **v0.53.4 — the reload that dropped its own token**, **v0.53.3 — the key it never
596
- sent**, **v0.53.2 — the cost that was paid and never written down**, and
597
- **v0.53.1 — "up to date" now names what it checked**.
598
- [Read them in the changelog](CHANGELOG.md).
577
+ ### v1.0.0 - config, phases and calls stop being prose _(2026-08-30)_
578
+
579
+ **Still on the unscoped `orc` package?** Do this once first — your `orc upgrade`
580
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
581
+ the top of this file.
582
+
583
+ - **Step 1 release the command from the old package:** `npm uninstall -g orc`
584
+ - **Step 2 install the current package:** `npm i -g @azure-id/orc`
585
+ - **Step 3 re-apply it to your project:** `orc update`
586
+
587
+ **Nothing you configure changes meaning, and no command you run is renamed.**
588
+ Three things actually change behaviour; everything else is ORC finally reading
589
+ its own payload the way it has been telling you to read yours.
590
+
591
+ - **The score to model table ends `opus-5-low [65,90)` · `opus-5-med [90,100]`.**
592
+ Two bands in six now want an Opus 5 main session where one in eight did.
593
+ - **A foreign worker that stalls twice in one run steps aside** for the rest of
594
+ that run. Two clocks, never merged; it writes no new measurement and never
595
+ writes your config; a promote is a watermark, not a mute, and needs a reason.
596
+ - **`orc diy init` defaults to `opus-5-high`.** The old default silently
597
+ collapsed the top third of your ladder onto one agent before you chose
598
+ anything.
599
+
600
+ The structural half - **config, phases and calls stop being prose**:
601
+
602
+ - **`orc lane config <lane>`** answers what a lane's config resolved to, with
603
+ every shadow already worded. A lane never merges the config file itself again,
604
+ and **a rank below a resolved rank is not read at all**.
605
+ - **`orc lane phases <lane>`** and **`orc lane calls --all`** do the same for the
606
+ shared phase library and the CLI call catalogue - one canonical copy each,
607
+ where there were 14-59 restatements per call.
608
+ - **`orc ui` renders all of it**: a rank ladder showing which setting ANSWERED,
609
+ the lanes that read each key, a Lanes panel, and Extra Recovery's demotion
610
+ row with Promote. `orc doctor` gains `lane-keys-drifted`.
611
+
612
+ **It did not make the payload smaller** - 208 files became 291, 26,507 lines
613
+ became 33,204. Most waves measured as correctness, not deduplication. What
614
+ changed is that there is now one place to fix each of these, and a lint that
615
+ fails when a copy grows back. Two planned deletions were **measured and
616
+ refused**, and the test suite's four-wave flake was diagnosed - with the honest
617
+ caveat that three green runs are the gate and not proof.
618
+
619
+ **Full entry: [CHANGELOG.md](CHANGELOG.md).**
599
620
 
600
621
  ---
601
622
 
@@ -22,24 +22,31 @@ const TEMPLATE = path.join(ROOT, "agents-src", "executor.template.md");
22
22
  const OUT_DIR = path.join(ROOT, "templates", "agents");
23
23
 
24
24
  // Score→model bands mirror templates/agents/MODEL-MAPPING.md and the single
25
- // 8-band score→model table in skills/orc/config.md (documented drift — change
25
+ // score→model table in skills/orc/config.md (documented drift — change
26
26
  // together). `effort: null` = a model with NO effort ladder (haiku): the
27
27
  // generator omits the `effort:` frontmatter line entirely.
28
+ //
29
+ // v1.0.0 W4 — the table is SIX bands, not eight, and the `opus5_only` ladder is
30
+ // TWO, not three. Four of these agents are named by NO default row:
31
+ // names them, and they ship anyway (D14). They stay reachable through
32
+ // `rubric_bands_override`, `orc diy` `fixed_executor` and `extra_fallback_agent`,
33
+ // and deleting a generated file that no row happens to name today would be a
34
+ // rename-shaped migration for what is only a table change. Their `band` string
35
+ // says so rather than naming a range that no longer exists — a band label that
36
+ // lies is worse than one that admits it is unreachable by default.
28
37
  const VARIANTS = [
29
- { name: "orc-executor-opus-5-high", model: "claude-opus-5", effort: "high", band: "highest-complexity [90,100]" },
30
- { name: "orc-executor-opus-4-8-high", model: "claude-opus-4-8", effort: "high", band: "very-high-complexity [80,90)" },
31
- { name: "orc-executor-opus-4-7-high", model: "claude-opus-4-7", effort: "high", band: "high-complexity [70,80)" },
32
- { name: "orc-executor-opus-4-7-med", model: "claude-opus-4-7", effort: "medium", band: "upper-mid-complexity [65,70)" },
38
+ { name: "orc-executor-opus-5-med", model: "claude-opus-5", effort: "medium", band: "highest-complexity [90,100]" },
39
+ { name: "orc-executor-opus-5-low", model: "claude-opus-5", effort: "low", band: "upper-complexity [65,90)" },
33
40
  { name: "orc-executor-sonnet-5-high", model: "claude-sonnet-5", effort: "high", band: "mid-complexity [55,65)" },
34
41
  { name: "orc-executor-sonnet-4-6-high", model: "claude-sonnet-4-6", effort: "high", band: "low-mid-complexity [40,55)" },
35
42
  { name: "orc-executor-sonnet-4-6-med", model: "claude-sonnet-4-6", effort: "medium", band: "low-complexity [30,40)" },
36
43
  { name: "orc-executor-haiku-4-5", model: "claude-haiku-4-5", effort: null, band: "lowest-complexity [0,30)" },
37
- // v0.35.0, widened v0.36.0 — the `opus5_only` ladder ONLY (default off). Same model,
38
- // effort as the cost dial: [0,40) low · [40,80) medium · [80,100] high (the
39
- // existing opus-5-high covers the top band in BOTH tables). These two are
40
- // never dispatched by the default 8-band table.
41
- { name: "orc-executor-opus-5-med", model: "claude-opus-5", effort: "medium", band: "opus5-only mid [40,80)" },
42
- { name: "orc-executor-opus-5-low", model: "claude-opus-5", effort: "low", band: "opus5-only low [0,40)" },
44
+ // NAMED BY NO BAND since v1.0.0 W4 (D14) kept on disk, dispatched only when a
45
+ // user names one explicitly.
46
+ { name: "orc-executor-opus-5-high", model: "claude-opus-5", effort: "high", band: "no default band reachable via rubric_bands_override, orc diy fixed_executor, or extra_fallback_agent" },
47
+ { name: "orc-executor-opus-4-8-high", model: "claude-opus-4-8", effort: "high", band: "no default band — reachable via rubric_bands_override, orc diy fixed_executor, or extra_fallback_agent" },
48
+ { name: "orc-executor-opus-4-7-high", model: "claude-opus-4-7", effort: "high", band: "no default band — reachable via rubric_bands_override, orc diy fixed_executor, or extra_fallback_agent" },
49
+ { name: "orc-executor-opus-4-7-med", model: "claude-opus-4-7", effort: "medium", band: "no default band — reachable via rubric_bands_override, orc diy fixed_executor, or extra_fallback_agent" },
43
50
  ];
44
51
 
45
52
  function render(template, v) {