@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
@@ -1,305 +1,305 @@
1
- "use strict";
2
- /* fixtures/settings.js — canned data for `orc ui --fixtures`.
3
- The full config list, including a SHADOWED key: you cannot design the lock
4
- and its explanation against a config where nothing is shadowed.
5
-
6
- THE RULE FOR EVERY FILE IN HERE: carry ONE OF EVERY STATE, including the
7
- ugly ones. You cannot DESIGN a STALE chip on a fresh wiki, and a state
8
- with no fixture is a state nobody has ever looked at. A per-state count
9
- test asserts this, so a new state cannot ship without one.
10
-
11
- Shapes MUST match what `bin/cli.js --json` really emits — a drifted
12
- fixture is worse than no fixture. The v1.0.0 W2 fields (answers/family/prio/
13
- lanes/gated_by per key, and the `families` table) were copied straight from
14
- the live registry for that reason — a shadow you can design against has to
15
- carry the RANK that causes it, not just the sentence. */
16
-
17
- const { PROJECT } = require("./shell.js");
18
-
19
- const config = {
20
- config_path: PROJECT + "/.claude/orc.config.yaml",
21
- exists: true,
22
- keys: [
23
- { key: "max_wave_tasks", tier: "common", answers: [{"family":"waves","prio":"P2","mode":"replace"}], family: "waves", prio: "P2", lanes: ["orc","orc-diy"], gated_by: null, value: 4, default: 3, is_overridden: true, is_shadowed: false, shadow_reason: null, desc: "Max parallel tasks per execution wave (higher = more parallelism, more collision risk).", options: [2, 3, 4, 5], control: { kind: "int", choices: null, min: 1, max: null } },
24
- { key: "batch_pause_every", tier: "common", answers: [{"family":"waves","prio":"P2","mode":"replace"}], family: "waves", prio: "P2", lanes: ["orc","orc-diy"], gated_by: null, value: 2, default: 2, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Waves between stop-and-continue pauses (1 = pause every wave).", options: [1, 2, 3, 4, 5], control: { kind: "int", choices: null, min: 1, max: null } },
25
- { key: "rubric_bands", tier: "common", answers: [{"family":"scoring","prio":"P2","mode":"replace"}], family: "scoring", prio: "P2", lanes: ["orc","orc-diy"], gated_by: null, value: 5, default: 5, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Scoring granularity (2-5 narrow preset, 6-8 wide preset).", options: [2, 3, 4, 5, 6, 7, 8], control: { kind: "range", choices: null, min: 2, max: 8 } },
26
- { key: "pattern_findings", tier: "common", answers: [{"family":"patterns","prio":"P2","mode":"replace"}], family: "patterns", prio: "P2", lanes: ["orc","orc-pattern","orc-wiki"], gated_by: null, value: "on", default: "ask", is_overridden: true, is_shadowed: false, shadow_reason: null, desc: "Code-pattern gate on an FE/BE cache miss.", options: ["ask", "on", "off"], control: { kind: "enum", choices: ["ask", "on", "off"], min: null, max: null } },
27
- { key: "generate_tests", tier: "common", answers: [{"family":"testing","prio":"P2","mode":"replace"}], family: "testing", prio: "P2", lanes: ["orc","orc-mini"], gated_by: null, value: false, default: false, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Opt-in Phase 6.5: author test cases before ship.", options: ["true", "false"], control: { kind: "enum", choices: ["true", "false"], min: null, max: null } },
28
- // ON, and PARTLY SHADOWED by the extra overlay above it — the animation
29
- // §6.2 calls the single best argument for the project. Since v1.0.0 W3
30
- // removed the Fable 5 block, the overlay is the ONLY way a registry key
31
- // reaches `is_shadowed`, so this row is the fixture set's whole coverage of
32
- // that state. Do not quietly make it false.
33
- { key: "opus5_only", tier: "common", answers: [{"family":"executor-band","prio":"P1","mode":"replace"},{"family":"fixed-role-model","prio":"P1","mode":"replace"}], family: "executor-band", prio: "P1", lanes: ["orc","orc-analyze","orc-challenge","orc-claude","orc-diy","orc-doc","orc-fast","orc-mini","orc-pattern","orc-quick","orc-retro","orc-wiki"], gated_by: null, value: "true", default: false, is_overridden: true, is_shadowed: true, shadow_reason: "partly shadowed by extra_enabled — [0,30), [30,55), [50,60), [60,70) are routed to a non-Claude worker; the quick-executor, doc-writer position is held by one too (not consulted here); every other score and position still resolves here", desc: "EVERY dispatched role uses ONE model — Opus 5 — with EFFORT as the cost dial.", options: ["true", "false"], control: { kind: "enum", choices: ["true", "false"], min: null, max: null } },
34
- { key: "wiki_fresh_max", tier: "advanced", answers: [{"family":"wiki","prio":"P2","mode":"replace"}], family: "wiki", prio: "P2", lanes: ["orc","orc-fast","orc-learn","orc-wiki"], gated_by: null, value: 10, default: 10, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Wiki freshness: commit distance < this → FRESH.", options: null, control: { kind: "int", choices: null, min: 1, max: null } },
35
- { key: "wiki_aging_max", tier: "advanced", answers: [{"family":"wiki","prio":"P2","mode":"replace"}], family: "wiki", prio: "P2", lanes: ["orc","orc-fast","orc-learn","orc-wiki"], gated_by: null, value: 30, default: 30, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Wiki freshness: commit distance <= this → AGING; beyond → STALE.", options: null, control: { kind: "int", choices: null, min: 1, max: null } },
36
- { key: "log_dir", tier: "advanced", answers: [{"family":"paths","prio":"P2","mode":"replace"}], family: "paths", prio: "P2", lanes: ["context-combiner","orc","orc-aftermath","orc-analyze","orc-analyze-mini","orc-boundary","orc-brainstorm","orc-budget","orc-challenge","orc-claude","orc-diy","orc-doc","orc-explain","orc-export","orc-fast","orc-grill","orc-handoff","orc-learn","orc-mini","orc-pact","orc-pattern","orc-poly","orc-pr-driver","orc-pr-setup","orc-quick","orc-retro","orc-route","orc-verify","orc-wiki"], gated_by: null, value: ".claude/orc/logs", default: ".claude/orc/logs", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Persistent trace folder (never auto-deleted).", options: null, control: { kind: "path", choices: null, min: null, max: null } },
37
- { key: "retro_repo", tier: "advanced", answers: [{"family":"retro","prio":"P2","mode":"replace"}], family: "retro", prio: "P2", lanes: ["orc","orc-retro"], gated_by: null, value: "azure-id/orc", default: "azure-id/orc", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "GitHub owner/repo that receives /orc-retro reports.", options: null, control: { kind: "repo", choices: null, min: null, max: null } },
38
- // v0.50.0 — the nine `orc extra` keys, copied from the live registry so the
39
- // shapes cannot drift. `extra_enabled` is TRUE here on purpose: an ARMED
40
- // subsystem is the state that needs designing.
41
- {"key": "extra_enabled", "tier": "common", answers: [{"family":"executor-band","prio":"P0","mode":"overlay"},{"family":"fixed-role-model","prio":"P0","mode":"overlay"}], family: "executor-band", prio: "P0", lanes: ["orc","orc-boundary","orc-challenge","orc-diy","orc-doc","orc-fast","orc-mini","orc-quick","orc-wiki"], gated_by: null, "value": true, "default": false, "is_overridden": true, "is_shadowed": false, "shadow_reason": null, "desc": "Master gate for `orc extra` — dispatching a scored task to a non-Claude worker (DeepSeek, GLM, Kimi, a local Ollama, any OpenAI-/Anthropic-compatible endpoint you can name). NOTHING changes unless true. The orchestrator always stays Claude; what moves is who executes a slice. Every run that will cross the boundary PRINTS it at Phase 1 — routing work off Claude silently is the failure mode this whole subsystem is shaped around.", "options": ["true", "false"], "control": {"kind": "enum", "choices": ["true", "false"], "min": null, "max": null}},
42
- {"key": "extra_roles", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: ["orc-doc","orc-wiki"], gated_by: "extra_enabled", "value": "[executor]", "default": "[executor]", "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Which dispatched roles may go foreign (CSV). Executor only by default, deliberately: an executor's output is checked by the smoke gate, the TDD gate, the reviewer and the worktree-delta check, all of which are engine-blind — while a REVIEWER you cannot trust is worse than no reviewer at all, because it launders a finding nobody made.", "options": ["executor", "reviewer", "verifier", "analyst", "planner", "scout", "test-author", "doc-writer", "doc-checker"], "control": {"kind": "subset", "choices": ["executor", "reviewer", "verifier", "analyst", "planner", "scout", "test-author", "doc-writer", "doc-checker"], "min": null, "max": null}},
43
- {"key": "extra_risk_tasks", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: ["orc","orc-diy","orc-mini"], gated_by: "extra_enabled", "value": "off", "default": "off", "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Whether a task with a non-empty cited `risk[]` (auth, money, migration, security, concurrency, data-integrity) may leave Claude. OFF holds it on the Claude ladder whatever the route table says, and the preflight NAMES it as held back. ORC already refuses to send a refund-endpoint change to a cheap model; this keeps Extra from becoming the hole in that rule.", "options": ["off", "on"], "control": {"kind": "enum", "choices": ["off", "on"], "min": null, "max": null}},
44
- {"key": "extra_on_failure", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: ["orc-quick","orc-wiki"], gated_by: "extra_enabled", "value": "fallback", "default": "fallback", "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "What an unreachable endpoint, a 401, a 429 past backoff, a timeout or a malformed return does. `fallback` re-dispatches the task to the Claude band it would have had, ANNOUNCED, and the run continues. `stop` is for people who would rather stop than silently start paying Anthropic rates. A failed foreign dispatch is never a dead run either way.", "options": ["fallback", "stop"], "control": {"kind": "enum", "choices": ["fallback", "stop"], "min": null, "max": null}},
45
- {"key": "extra_max_concurrent", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 1, "default": 1, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Foreign dispatches in flight at once. Per-provider rate limits are undocumented in aggregate, so 1 is the honest default — a wave of 3 that 429s costs more in repairs than the parallelism saved.", "options": [1, 2, 3], "control": {"kind": "int", "choices": null, "min": 1, "max": null}},
46
- {"key": "extra_unlock", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": "per-run", "default": "per-run", "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "When a vault-stored key asks for its passphrase. `per-run` asks ONCE at the Phase-1 stop the lane already has, so an unattended wave can actually run. `per-dispatch` prompts every time and REFUSES to start an unattended wave, naming why — it is interactive-only by design. Irrelevant when the credential source is an environment variable, which is the recommended one.", "options": ["per-run", "per-dispatch"], "control": {"kind": "enum", "choices": ["per-run", "per-dispatch"], "min": null, "max": null}},
47
- {"key": "extra_vault_max_attempts", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 10, "default": 10, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Wrong passphrases before the encrypted key DELETES ITSELF. It is a key rather than a magic number so the count is inspectable and testable — NOT so it can be switched off; below 3 is refused. The counter stops someone at your keyboard; it does not stop someone who copies the vault file and tries offline, and scrypt's cost is the only defence there.", "options": null, "control": {"kind": "int", "choices": null, "min": 3, "max": null}},
48
- {"key": "extra_timeout_s", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 900, "default": 900, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Per-dispatch wall clock for a foreign worker. The child's own timeouts are DERIVED from this rather than set independently, so three timeouts cannot disagree about which one fires first.", "options": null, "control": {"kind": "int", "choices": null, "min": 30, "max": null}},
49
- {"key": "extra_verify_max_days", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 7, "default": 7, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Past this a profile's verification reads STALE and is re-pinged before wave 1. A STALE profile STILL ROUTES — a stale check is not a failed one (the /orc-pact UNCHECKABLE rule) — and freshness is computed on read, never stored.", "options": null, "control": {"kind": "int", "choices": null, "min": 1, "max": null}},
50
- { key: "orchestrator_model", tier: "advanced", answers: [{"family":"session","prio":"P2","mode":"replace"}], family: "session", prio: "P2", lanes: ["orc"], gated_by: null, value: "claude-opus-4-8", tierNote: null, default: "claude-opus-4-8", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Main-session model (below Opus breaks the tier ladder).", options: null, control: { kind: "enum", choices: ["claude-opus-5", "claude-opus-4-8", "claude-sonnet-5"], min: null, max: null } },
51
- ],
52
- // The registry-less, hand-written key — read-only everywhere, and shadowed here.
53
- hand_edited: [
54
- { key: "rubric_bands_override", value: "[[0,50,'orc-executor-sonnet-5-high'],[50,100,'orc-executor-opus-5-high']]", is_shadowed: true, shadow_reason: "shadowed by opus5_only — executors use the fixed 2-band Opus 5 ladder", editable: false },
55
- ],
56
- legacy_keys: [{ key: "opus5_executor_only", renamed_to: "opus5_only" }],
57
- // A key that was REMOVED, not renamed — the ugly state `--fixtures` exists to
58
- // carry. You cannot design the "still on disk, no longer read" row against a
59
- // clean config, and a panel that renders it as an editable setting is the
60
- // failure this field prevents.
61
- retired_keys: [
62
- {
63
- key: "fable5_enabled",
64
- value: "true",
65
- removed_in: "1.0.0",
66
- why: "the Fable 5 role override was removed — every role dispatches its shipped Claude agent, or the Opus 5 variant under opus5_only",
67
- },
68
- ],
69
- score_table: {
70
- active: "opus5_only",
71
- default: [
72
- { from: 0, to: 30, inclusive_to: false, agent: "orc-executor-haiku-4-5" },
73
- { from: 30, to: 40, inclusive_to: false, agent: "orc-executor-sonnet-4-6-med" },
74
- { from: 40, to: 55, inclusive_to: false, agent: "orc-executor-sonnet-4-6-high" },
75
- { from: 55, to: 65, inclusive_to: false, agent: "orc-executor-sonnet-5-high" },
76
- { from: 65, to: 90, inclusive_to: false, agent: "orc-executor-opus-5-low" },
77
- { from: 90, to: 100, inclusive_to: true, agent: "orc-executor-opus-5-med" },
78
- ],
79
- opus5_only: [
80
- { from: 0, to: 90, inclusive_to: false, agent: "orc-executor-opus-5-low" },
81
- { from: 90, to: 100, inclusive_to: true, agent: "orc-executor-opus-5-med" },
82
- ],
83
- },
84
- families: {
85
- "executor-band": {
86
- "contested": true,
87
- "question": "which model executes a SCORED task",
88
- "ranks": [
89
- {
90
- "prio": "P0",
91
- "key": "extra_enabled",
92
- "mode": "overlay"
93
- },
94
- {
95
- "prio": "P1",
96
- "key": "opus5_only",
97
- "mode": "replace"
98
- },
99
- {
100
- "prio": "P2",
101
- "key": "rubric_bands_override",
102
- "mode": "replace",
103
- "registry_less": true,
104
- "shadow_note": "shadowed by {by} — executors use the fixed 2-band Opus 5 ladder"
105
- },
106
- {
107
- "prio": "P3",
108
- "key": null,
109
- "terminal": "the shipped score→model table"
110
- }
111
- ]
112
- },
113
- "fixed-role-model": {
114
- "contested": true,
115
- "question": "which model runs a role that has no score",
116
- "ranks": [
117
- {
118
- "prio": "P0",
119
- "key": "extra_enabled",
120
- "mode": "overlay"
121
- },
122
- {
123
- "prio": "P1",
124
- "key": "opus5_only",
125
- "mode": "replace"
126
- },
127
- {
128
- "prio": "P2",
129
- "key": null,
130
- "terminal": "the agent shipped for that position"
131
- }
132
- ]
133
- },
134
- "waves": {
135
- "contested": false,
136
- "question": "how a run is broken into waves and when it pauses"
137
- },
138
- "scoring": {
139
- "contested": false,
140
- "question": "how finely a task is scored"
141
- },
142
- "analysis": {
143
- "contested": false,
144
- "question": "how wide the analyst sweeps before planning"
145
- },
146
- "testing": {
147
- "contested": false,
148
- "question": "which tests a run writes, and how long it repairs"
149
- },
150
- "patterns": {
151
- "contested": false,
152
- "question": "when the project's code conventions are learned"
153
- },
154
- "gotchas": {
155
- "contested": false,
156
- "question": "what repair memory is kept and injected"
157
- },
158
- "security": {
159
- "contested": false,
160
- "question": "when a security pass runs"
161
- },
162
- "mock": {
163
- "contested": false,
164
- "question": "when a runnable mocked example is produced"
165
- },
166
- "pr": {
167
- "contested": false,
168
- "question": "when a change ships as a stack instead of one PR"
169
- },
170
- "extra": {
171
- "contested": false,
172
- "question": "how a foreign dispatch behaves once extra is on"
173
- },
174
- "pact": {
175
- "contested": false,
176
- "question": "what a drifted promise does to a run"
177
- },
178
- "boundary": {
179
- "contested": false,
180
- "question": "what a refused area does to a wave"
181
- },
182
- "handoff": {
183
- "contested": false,
184
- "question": "whether a non-engineer may write a graded surface"
185
- },
186
- "budget": {
187
- "contested": false,
188
- "question": "how a cost forecast is computed and shown"
189
- },
190
- "aftermath": {
191
- "contested": false,
192
- "question": "how far back a run is graded from the repo's future"
193
- },
194
- "challenge": {
195
- "contested": false,
196
- "question": "what counts as a pass, and which lenses run"
197
- },
198
- "doc": {
199
- "contested": false,
200
- "question": "how a long document is written and checked"
201
- },
202
- "wiki": {
203
- "contested": false,
204
- "question": "how the project wiki is scanned and when it is stale"
205
- },
206
- "crosslink": {
207
- "contested": false,
208
- "question": "when a peer repo's wiki reads stale"
209
- },
210
- "retro": {
211
- "contested": false,
212
- "question": "where a retro is delivered"
213
- },
214
- "paths": {
215
- "contested": false,
216
- "question": "where ORC writes on disk"
217
- },
218
- "session": {
219
- "contested": false,
220
- "question": "what the main session itself runs as"
221
- }
222
- },
223
- // THE FAMILY TABLE RESOLVED (v1.0.0 W16), and the state set is why it is here.
224
- // `families` above is the static registry; this is what those ranks actually
225
- // did. Shapes copied from `orc config list --json`'s `families_resolved`.
226
- //
227
- // ONE OF EVERY REACHABLE STATE, per this folder's standing rule. `demoted` is
228
- // the ugly one and the reason the fixture is shaped this way at all: you
229
- // cannot design a demotion row against a project where nothing was ever
230
- // demoted, and the wording has to carry the run, the profiles and the command
231
- // that clears it.
232
- //
233
- // TWO of the six states are DELIBERATELY not here, each because the real CLI
234
- // could not emit it either — a fixture carrying a state its own command
235
- // cannot produce is a fixture lying about the thing it stands in for.
236
- //
237
- // `inert` — inertness is a fact about a LANE ("/orc-quick does not read
238
- // this"), and `families_resolved` resolves project-wide with no
239
- // lane. It IS on this panel, on the per-key rows, where
240
- // `state: "inert"` genuinely occurs; `orc lane config <lane>
241
- // --json` is the command that produces it in a family.
242
- // `absent` — a rank is `absent` only when it was CONSULTED and declined.
243
- // Here `opus5_only` is on and resolves at P1, so everything
244
- // below it is `not-read` instead. It is the state a project with
245
- // nothing configured shows for every rank — the default `orc ui`
246
- // experience — and it renders as a plain chip exactly like
247
- // `not-read`, so there is no styling it hides.
248
- //
249
- // The legend still shows the CLI's whole closed set, because that is what
250
- // `rank_states` publishes and the legend's job is to explain the vocabulary,
251
- // not to inventory this page.
252
- families_resolved: {
253
- "executor-band": {
254
- contested: true,
255
- question: "which model executes a SCORED task",
256
- resolved_by: "opus5_only",
257
- resolved_at: "P1",
258
- inert: false,
259
- inert_reason: null,
260
- ranks: [
261
- {
262
- prio: "P0",
263
- key: "extra_enabled",
264
- terminal: null,
265
- state: "demoted",
266
- why: 'deepseek demoted for run add-oauth-login — 2 consecutive stalled dispatches. 1 row(s) on another profile still route. orc extra promote add-oauth-login --reason "<why>"',
267
- },
268
- { prio: "P1", key: "opus5_only", terminal: null, state: "resolved", why: null },
269
- { prio: "P2", key: "rubric_bands_override", terminal: null, state: "not-read", why: "a higher rank resolved" },
270
- { prio: "P3", key: null, terminal: "the shipped score→model table", state: "not-read", why: "a higher rank resolved" },
271
- ],
272
- },
273
- "fixed-role-model": {
274
- contested: true,
275
- question: "which model runs a role that has no score",
276
- // `partly-resolved` does NOT set `resolved_by` — an overlay takes only
277
- // the positions its slot rows name, so the ladder carries on and the rank
278
- // BELOW it is the one that answered. Getting this wrong in a fixture
279
- // would teach the panel to render a contradiction.
280
- resolved_by: "opus5_only",
281
- resolved_at: "P1",
282
- inert: false,
283
- inert_reason: null,
284
- ranks: [
285
- {
286
- prio: "P0",
287
- key: "extra_enabled",
288
- terminal: null,
289
- state: "partly-resolved",
290
- why: "the quick-executor and doc-writer positions are held by a route row; every other position falls through",
291
- },
292
- { prio: "P1", key: "opus5_only", terminal: null, state: "resolved", why: null },
293
- { prio: "P2", key: null, terminal: "the agent shipped for that position", state: "not-read", why: "a higher rank resolved" },
294
- ],
295
- },
296
- },
297
- // The CLI's closed set, published so the legend never invents a word.
298
- rank_states: ["resolved", "partly-resolved", "not-read", "inert", "demoted", "absent"],
299
- behavior_trace: { always_on: true, configurable_key: "log_dir" },
300
- };
301
-
302
- // Deliberately UNHEALTHY, and with the global-install finding present — the
303
- // banner §1 requires can only be designed against a doctor that reports it.
304
-
305
- module.exports = { config };
1
+ "use strict";
2
+ /* fixtures/settings.js — canned data for `orc ui --fixtures`.
3
+ The full config list, including a SHADOWED key: you cannot design the lock
4
+ and its explanation against a config where nothing is shadowed.
5
+
6
+ THE RULE FOR EVERY FILE IN HERE: carry ONE OF EVERY STATE, including the
7
+ ugly ones. You cannot DESIGN a STALE chip on a fresh wiki, and a state
8
+ with no fixture is a state nobody has ever looked at. A per-state count
9
+ test asserts this, so a new state cannot ship without one.
10
+
11
+ Shapes MUST match what `bin/cli.js --json` really emits — a drifted
12
+ fixture is worse than no fixture. The v1.0.0 W2 fields (answers/family/prio/
13
+ lanes/gated_by per key, and the `families` table) were copied straight from
14
+ the live registry for that reason — a shadow you can design against has to
15
+ carry the RANK that causes it, not just the sentence. */
16
+
17
+ const { PROJECT } = require("./shell.js");
18
+
19
+ const config = {
20
+ config_path: PROJECT + "/.claude/orc.config.yaml",
21
+ exists: true,
22
+ keys: [
23
+ { key: "max_wave_tasks", tier: "common", answers: [{"family":"waves","prio":"P2","mode":"replace"}], family: "waves", prio: "P2", lanes: ["orc","orc-diy"], gated_by: null, value: 4, default: 3, is_overridden: true, is_shadowed: false, shadow_reason: null, desc: "Max parallel tasks per execution wave (higher = more parallelism, more collision risk).", options: [2, 3, 4, 5], control: { kind: "int", choices: null, min: 1, max: null } },
24
+ { key: "batch_pause_every", tier: "common", answers: [{"family":"waves","prio":"P2","mode":"replace"}], family: "waves", prio: "P2", lanes: ["orc","orc-diy"], gated_by: null, value: 2, default: 2, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Waves between stop-and-continue pauses (1 = pause every wave).", options: [1, 2, 3, 4, 5], control: { kind: "int", choices: null, min: 1, max: null } },
25
+ { key: "rubric_bands", tier: "common", answers: [{"family":"scoring","prio":"P2","mode":"replace"}], family: "scoring", prio: "P2", lanes: ["orc","orc-diy"], gated_by: null, value: 5, default: 5, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Scoring granularity (2-5 narrow preset, 6-8 wide preset).", options: [2, 3, 4, 5, 6, 7, 8], control: { kind: "range", choices: null, min: 2, max: 8 } },
26
+ { key: "pattern_findings", tier: "common", answers: [{"family":"patterns","prio":"P2","mode":"replace"}], family: "patterns", prio: "P2", lanes: ["orc","orc-pattern","orc-wiki"], gated_by: null, value: "on", default: "ask", is_overridden: true, is_shadowed: false, shadow_reason: null, desc: "Code-pattern gate on an FE/BE cache miss.", options: ["ask", "on", "off"], control: { kind: "enum", choices: ["ask", "on", "off"], min: null, max: null } },
27
+ { key: "generate_tests", tier: "common", answers: [{"family":"testing","prio":"P2","mode":"replace"}], family: "testing", prio: "P2", lanes: ["orc","orc-mini"], gated_by: null, value: false, default: false, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Opt-in Phase 6.5: author test cases before ship.", options: ["true", "false"], control: { kind: "enum", choices: ["true", "false"], min: null, max: null } },
28
+ // ON, and PARTLY SHADOWED by the extra overlay above it — the animation
29
+ // §6.2 calls the single best argument for the project. Since v1.0.0 W3
30
+ // removed the Fable 5 block, the overlay is the ONLY way a registry key
31
+ // reaches `is_shadowed`, so this row is the fixture set's whole coverage of
32
+ // that state. Do not quietly make it false.
33
+ { key: "opus5_only", tier: "common", answers: [{"family":"executor-band","prio":"P1","mode":"replace"},{"family":"fixed-role-model","prio":"P1","mode":"replace"}], family: "executor-band", prio: "P1", lanes: ["orc","orc-analyze","orc-challenge","orc-claude","orc-diy","orc-doc","orc-fast","orc-mini","orc-pattern","orc-quick","orc-retro","orc-wiki"], gated_by: null, value: "true", default: false, is_overridden: true, is_shadowed: true, shadow_reason: "partly shadowed by extra_enabled — [0,30), [30,55), [50,60), [60,70) are routed to a non-Claude worker; the quick-executor, doc-writer position is held by one too (not consulted here); every other score and position still resolves here", desc: "EVERY dispatched role uses ONE model — Opus 5.5 — with EFFORT as the cost dial.", options: ["true", "false"], control: { kind: "enum", choices: ["true", "false"], min: null, max: null } },
34
+ { key: "wiki_fresh_max", tier: "advanced", answers: [{"family":"wiki","prio":"P2","mode":"replace"}], family: "wiki", prio: "P2", lanes: ["orc","orc-fast","orc-learn","orc-wiki"], gated_by: null, value: 10, default: 10, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Wiki freshness: commit distance < this → FRESH.", options: null, control: { kind: "int", choices: null, min: 1, max: null } },
35
+ { key: "wiki_aging_max", tier: "advanced", answers: [{"family":"wiki","prio":"P2","mode":"replace"}], family: "wiki", prio: "P2", lanes: ["orc","orc-fast","orc-learn","orc-wiki"], gated_by: null, value: 30, default: 30, is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Wiki freshness: commit distance <= this → AGING; beyond → STALE.", options: null, control: { kind: "int", choices: null, min: 1, max: null } },
36
+ { key: "log_dir", tier: "advanced", answers: [{"family":"paths","prio":"P2","mode":"replace"}], family: "paths", prio: "P2", lanes: ["context-combiner","orc","orc-aftermath","orc-analyze","orc-analyze-mini","orc-boundary","orc-brainstorm","orc-budget","orc-challenge","orc-claude","orc-diy","orc-doc","orc-explain","orc-export","orc-fast","orc-grill","orc-handoff","orc-learn","orc-mini","orc-pact","orc-pattern","orc-poly","orc-pr-driver","orc-pr-setup","orc-quick","orc-retro","orc-route","orc-verify","orc-wiki"], gated_by: null, value: ".claude/orc/logs", default: ".claude/orc/logs", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Persistent trace folder (never auto-deleted).", options: null, control: { kind: "path", choices: null, min: null, max: null } },
37
+ { key: "retro_repo", tier: "advanced", answers: [{"family":"retro","prio":"P2","mode":"replace"}], family: "retro", prio: "P2", lanes: ["orc","orc-retro"], gated_by: null, value: "azure-id/orc", default: "azure-id/orc", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "GitHub owner/repo that receives /orc-retro reports.", options: null, control: { kind: "repo", choices: null, min: null, max: null } },
38
+ // v0.50.0 — the nine `orc extra` keys, copied from the live registry so the
39
+ // shapes cannot drift. `extra_enabled` is TRUE here on purpose: an ARMED
40
+ // subsystem is the state that needs designing.
41
+ {"key": "extra_enabled", "tier": "common", answers: [{"family":"executor-band","prio":"P0","mode":"overlay"},{"family":"fixed-role-model","prio":"P0","mode":"overlay"}], family: "executor-band", prio: "P0", lanes: ["orc","orc-boundary","orc-challenge","orc-diy","orc-doc","orc-fast","orc-mini","orc-quick","orc-wiki"], gated_by: null, "value": true, "default": false, "is_overridden": true, "is_shadowed": false, "shadow_reason": null, "desc": "Master gate for `orc extra` — dispatching a scored task to a non-Claude worker (DeepSeek, GLM, Kimi, a local Ollama, any OpenAI-/Anthropic-compatible endpoint you can name). NOTHING changes unless true. The orchestrator always stays Claude; what moves is who executes a slice. Every run that will cross the boundary PRINTS it at Phase 1 — routing work off Claude silently is the failure mode this whole subsystem is shaped around.", "options": ["true", "false"], "control": {"kind": "enum", "choices": ["true", "false"], "min": null, "max": null}},
42
+ {"key": "extra_roles", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: ["orc-doc","orc-wiki"], gated_by: "extra_enabled", "value": "[executor]", "default": "[executor]", "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Which dispatched roles may go foreign (CSV). Executor only by default, deliberately: an executor's output is checked by the smoke gate, the TDD gate, the reviewer and the worktree-delta check, all of which are engine-blind — while a REVIEWER you cannot trust is worse than no reviewer at all, because it launders a finding nobody made.", "options": ["executor", "reviewer", "verifier", "analyst", "planner", "scout", "test-author", "doc-writer", "doc-checker"], "control": {"kind": "subset", "choices": ["executor", "reviewer", "verifier", "analyst", "planner", "scout", "test-author", "doc-writer", "doc-checker"], "min": null, "max": null}},
43
+ {"key": "extra_risk_tasks", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: ["orc","orc-diy","orc-mini"], gated_by: "extra_enabled", "value": "off", "default": "off", "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Whether a task with a non-empty cited `risk[]` (auth, money, migration, security, concurrency, data-integrity) may leave Claude. OFF holds it on the Claude ladder whatever the route table says, and the preflight NAMES it as held back. ORC already refuses to send a refund-endpoint change to a cheap model; this keeps Extra from becoming the hole in that rule.", "options": ["off", "on"], "control": {"kind": "enum", "choices": ["off", "on"], "min": null, "max": null}},
44
+ {"key": "extra_on_failure", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: ["orc-quick","orc-wiki"], gated_by: "extra_enabled", "value": "fallback", "default": "fallback", "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "What an unreachable endpoint, a 401, a 429 past backoff, a timeout or a malformed return does. `fallback` re-dispatches the task to the Claude band it would have had, ANNOUNCED, and the run continues. `stop` is for people who would rather stop than silently start paying Anthropic rates. A failed foreign dispatch is never a dead run either way.", "options": ["fallback", "stop"], "control": {"kind": "enum", "choices": ["fallback", "stop"], "min": null, "max": null}},
45
+ {"key": "extra_max_concurrent", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 1, "default": 1, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Foreign dispatches in flight at once. Per-provider rate limits are undocumented in aggregate, so 1 is the honest default — a wave of 3 that 429s costs more in repairs than the parallelism saved.", "options": [1, 2, 3], "control": {"kind": "int", "choices": null, "min": 1, "max": null}},
46
+ {"key": "extra_unlock", "tier": "common", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": "per-run", "default": "per-run", "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "When a vault-stored key asks for its passphrase. `per-run` asks ONCE at the Phase-1 stop the lane already has, so an unattended wave can actually run. `per-dispatch` prompts every time and REFUSES to start an unattended wave, naming why — it is interactive-only by design. Irrelevant when the credential source is an environment variable, which is the recommended one.", "options": ["per-run", "per-dispatch"], "control": {"kind": "enum", "choices": ["per-run", "per-dispatch"], "min": null, "max": null}},
47
+ {"key": "extra_vault_max_attempts", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 10, "default": 10, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Wrong passphrases before the encrypted key DELETES ITSELF. It is a key rather than a magic number so the count is inspectable and testable — NOT so it can be switched off; below 3 is refused. The counter stops someone at your keyboard; it does not stop someone who copies the vault file and tries offline, and scrypt's cost is the only defence there.", "options": null, "control": {"kind": "int", "choices": null, "min": 3, "max": null}},
48
+ {"key": "extra_timeout_s", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 900, "default": 900, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Per-dispatch wall clock for a foreign worker. The child's own timeouts are DERIVED from this rather than set independently, so three timeouts cannot disagree about which one fires first.", "options": null, "control": {"kind": "int", "choices": null, "min": 30, "max": null}},
49
+ {"key": "extra_verify_max_days", "tier": "advanced", answers: [{"family":"extra","prio":"P2","mode":"replace"}], family: "extra", prio: "P2", lanes: [], gated_by: "extra_enabled", "value": 7, "default": 7, "is_overridden": false, "is_shadowed": false, "shadow_reason": null, "desc": "Past this a profile's verification reads STALE and is re-pinged before wave 1. A STALE profile STILL ROUTES — a stale check is not a failed one (the /orc-pact UNCHECKABLE rule) — and freshness is computed on read, never stored.", "options": null, "control": {"kind": "int", "choices": null, "min": 1, "max": null}},
50
+ { key: "orchestrator_model", tier: "advanced", answers: [{"family":"session","prio":"P2","mode":"replace"}], family: "session", prio: "P2", lanes: ["orc"], gated_by: null, value: "claude-opus-4-8", tierNote: null, default: "claude-opus-4-8", is_overridden: false, is_shadowed: false, shadow_reason: null, desc: "Main-session model (below Opus breaks the tier ladder).", options: null, control: { kind: "enum", choices: ["claude-opus-5-5", "claude-opus-4-8", "claude-sonnet-5"], min: null, max: null } },
51
+ ],
52
+ // The registry-less, hand-written key — read-only everywhere, and shadowed here.
53
+ hand_edited: [
54
+ { key: "rubric_bands_override", value: "[[0,50,'orc-executor-sonnet-5-high'],[50,100,'orc-executor-opus-5-high']]", is_shadowed: true, shadow_reason: "shadowed by opus5_only — executors use the fixed 2-band Opus 5.5 ladder", editable: false },
55
+ ],
56
+ legacy_keys: [{ key: "opus5_executor_only", renamed_to: "opus5_only" }],
57
+ // A key that was REMOVED, not renamed — the ugly state `--fixtures` exists to
58
+ // carry. You cannot design the "still on disk, no longer read" row against a
59
+ // clean config, and a panel that renders it as an editable setting is the
60
+ // failure this field prevents.
61
+ retired_keys: [
62
+ {
63
+ key: "fable5_enabled",
64
+ value: "true",
65
+ removed_in: "1.0.0",
66
+ why: "the Fable 5 role override was removed — every role dispatches its shipped Claude agent, or the Opus 5.5 variant under opus5_only",
67
+ },
68
+ ],
69
+ score_table: {
70
+ active: "opus5_only",
71
+ default: [
72
+ { from: 0, to: 30, inclusive_to: false, agent: "orc-executor-haiku-4-5" },
73
+ { from: 30, to: 40, inclusive_to: false, agent: "orc-executor-sonnet-4-6-med" },
74
+ { from: 40, to: 55, inclusive_to: false, agent: "orc-executor-sonnet-4-6-high" },
75
+ { from: 55, to: 65, inclusive_to: false, agent: "orc-executor-sonnet-5-high" },
76
+ { from: 65, to: 90, inclusive_to: false, agent: "orc-executor-opus-5-low" },
77
+ { from: 90, to: 100, inclusive_to: true, agent: "orc-executor-opus-5-med" },
78
+ ],
79
+ opus5_only: [
80
+ { from: 0, to: 90, inclusive_to: false, agent: "orc-executor-opus-5-low" },
81
+ { from: 90, to: 100, inclusive_to: true, agent: "orc-executor-opus-5-med" },
82
+ ],
83
+ },
84
+ families: {
85
+ "executor-band": {
86
+ "contested": true,
87
+ "question": "which model executes a SCORED task",
88
+ "ranks": [
89
+ {
90
+ "prio": "P0",
91
+ "key": "extra_enabled",
92
+ "mode": "overlay"
93
+ },
94
+ {
95
+ "prio": "P1",
96
+ "key": "opus5_only",
97
+ "mode": "replace"
98
+ },
99
+ {
100
+ "prio": "P2",
101
+ "key": "rubric_bands_override",
102
+ "mode": "replace",
103
+ "registry_less": true,
104
+ "shadow_note": "shadowed by {by} — executors use the fixed 2-band Opus 5.5 ladder"
105
+ },
106
+ {
107
+ "prio": "P3",
108
+ "key": null,
109
+ "terminal": "the shipped score→model table"
110
+ }
111
+ ]
112
+ },
113
+ "fixed-role-model": {
114
+ "contested": true,
115
+ "question": "which model runs a role that has no score",
116
+ "ranks": [
117
+ {
118
+ "prio": "P0",
119
+ "key": "extra_enabled",
120
+ "mode": "overlay"
121
+ },
122
+ {
123
+ "prio": "P1",
124
+ "key": "opus5_only",
125
+ "mode": "replace"
126
+ },
127
+ {
128
+ "prio": "P2",
129
+ "key": null,
130
+ "terminal": "the agent shipped for that position"
131
+ }
132
+ ]
133
+ },
134
+ "waves": {
135
+ "contested": false,
136
+ "question": "how a run is broken into waves and when it pauses"
137
+ },
138
+ "scoring": {
139
+ "contested": false,
140
+ "question": "how finely a task is scored"
141
+ },
142
+ "analysis": {
143
+ "contested": false,
144
+ "question": "how wide the analyst sweeps before planning"
145
+ },
146
+ "testing": {
147
+ "contested": false,
148
+ "question": "which tests a run writes, and how long it repairs"
149
+ },
150
+ "patterns": {
151
+ "contested": false,
152
+ "question": "when the project's code conventions are learned"
153
+ },
154
+ "gotchas": {
155
+ "contested": false,
156
+ "question": "what repair memory is kept and injected"
157
+ },
158
+ "security": {
159
+ "contested": false,
160
+ "question": "when a security pass runs"
161
+ },
162
+ "mock": {
163
+ "contested": false,
164
+ "question": "when a runnable mocked example is produced"
165
+ },
166
+ "pr": {
167
+ "contested": false,
168
+ "question": "when a change ships as a stack instead of one PR"
169
+ },
170
+ "extra": {
171
+ "contested": false,
172
+ "question": "how a foreign dispatch behaves once extra is on"
173
+ },
174
+ "pact": {
175
+ "contested": false,
176
+ "question": "what a drifted promise does to a run"
177
+ },
178
+ "boundary": {
179
+ "contested": false,
180
+ "question": "what a refused area does to a wave"
181
+ },
182
+ "handoff": {
183
+ "contested": false,
184
+ "question": "whether a non-engineer may write a graded surface"
185
+ },
186
+ "budget": {
187
+ "contested": false,
188
+ "question": "how a cost forecast is computed and shown"
189
+ },
190
+ "aftermath": {
191
+ "contested": false,
192
+ "question": "how far back a run is graded from the repo's future"
193
+ },
194
+ "challenge": {
195
+ "contested": false,
196
+ "question": "what counts as a pass, and which lenses run"
197
+ },
198
+ "doc": {
199
+ "contested": false,
200
+ "question": "how a long document is written and checked"
201
+ },
202
+ "wiki": {
203
+ "contested": false,
204
+ "question": "how the project wiki is scanned and when it is stale"
205
+ },
206
+ "crosslink": {
207
+ "contested": false,
208
+ "question": "when a peer repo's wiki reads stale"
209
+ },
210
+ "retro": {
211
+ "contested": false,
212
+ "question": "where a retro is delivered"
213
+ },
214
+ "paths": {
215
+ "contested": false,
216
+ "question": "where ORC writes on disk"
217
+ },
218
+ "session": {
219
+ "contested": false,
220
+ "question": "what the main session itself runs as"
221
+ }
222
+ },
223
+ // THE FAMILY TABLE RESOLVED (v1.0.0 W16), and the state set is why it is here.
224
+ // `families` above is the static registry; this is what those ranks actually
225
+ // did. Shapes copied from `orc config list --json`'s `families_resolved`.
226
+ //
227
+ // ONE OF EVERY REACHABLE STATE, per this folder's standing rule. `demoted` is
228
+ // the ugly one and the reason the fixture is shaped this way at all: you
229
+ // cannot design a demotion row against a project where nothing was ever
230
+ // demoted, and the wording has to carry the run, the profiles and the command
231
+ // that clears it.
232
+ //
233
+ // TWO of the six states are DELIBERATELY not here, each because the real CLI
234
+ // could not emit it either — a fixture carrying a state its own command
235
+ // cannot produce is a fixture lying about the thing it stands in for.
236
+ //
237
+ // `inert` — inertness is a fact about a LANE ("/orc-quick does not read
238
+ // this"), and `families_resolved` resolves project-wide with no
239
+ // lane. It IS on this panel, on the per-key rows, where
240
+ // `state: "inert"` genuinely occurs; `orc lane config <lane>
241
+ // --json` is the command that produces it in a family.
242
+ // `absent` — a rank is `absent` only when it was CONSULTED and declined.
243
+ // Here `opus5_only` is on and resolves at P1, so everything
244
+ // below it is `not-read` instead. It is the state a project with
245
+ // nothing configured shows for every rank — the default `orc ui`
246
+ // experience — and it renders as a plain chip exactly like
247
+ // `not-read`, so there is no styling it hides.
248
+ //
249
+ // The legend still shows the CLI's whole closed set, because that is what
250
+ // `rank_states` publishes and the legend's job is to explain the vocabulary,
251
+ // not to inventory this page.
252
+ families_resolved: {
253
+ "executor-band": {
254
+ contested: true,
255
+ question: "which model executes a SCORED task",
256
+ resolved_by: "opus5_only",
257
+ resolved_at: "P1",
258
+ inert: false,
259
+ inert_reason: null,
260
+ ranks: [
261
+ {
262
+ prio: "P0",
263
+ key: "extra_enabled",
264
+ terminal: null,
265
+ state: "demoted",
266
+ why: 'deepseek demoted for run add-oauth-login — 2 consecutive stalled dispatches. 1 row(s) on another profile still route. orc extra promote add-oauth-login --reason "<why>"',
267
+ },
268
+ { prio: "P1", key: "opus5_only", terminal: null, state: "resolved", why: null },
269
+ { prio: "P2", key: "rubric_bands_override", terminal: null, state: "not-read", why: "a higher rank resolved" },
270
+ { prio: "P3", key: null, terminal: "the shipped score→model table", state: "not-read", why: "a higher rank resolved" },
271
+ ],
272
+ },
273
+ "fixed-role-model": {
274
+ contested: true,
275
+ question: "which model runs a role that has no score",
276
+ // `partly-resolved` does NOT set `resolved_by` — an overlay takes only
277
+ // the positions its slot rows name, so the ladder carries on and the rank
278
+ // BELOW it is the one that answered. Getting this wrong in a fixture
279
+ // would teach the panel to render a contradiction.
280
+ resolved_by: "opus5_only",
281
+ resolved_at: "P1",
282
+ inert: false,
283
+ inert_reason: null,
284
+ ranks: [
285
+ {
286
+ prio: "P0",
287
+ key: "extra_enabled",
288
+ terminal: null,
289
+ state: "partly-resolved",
290
+ why: "the quick-executor and doc-writer positions are held by a route row; every other position falls through",
291
+ },
292
+ { prio: "P1", key: "opus5_only", terminal: null, state: "resolved", why: null },
293
+ { prio: "P2", key: null, terminal: "the agent shipped for that position", state: "not-read", why: "a higher rank resolved" },
294
+ ],
295
+ },
296
+ },
297
+ // The CLI's closed set, published so the legend never invents a word.
298
+ rank_states: ["resolved", "partly-resolved", "not-read", "inert", "demoted", "absent"],
299
+ behavior_trace: { always_on: true, configurable_key: "log_dir" },
300
+ };
301
+
302
+ // Deliberately UNHEALTHY, and with the global-install finding present — the
303
+ // banner §1 requires can only be designed against a doctor that reports it.
304
+
305
+ module.exports = { config };