@azure-id/orc 1.9.0 → 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 (134) hide show
  1. package/CHANGELOG.md +202 -0
  2. package/README-id.md +57 -59
  3. package/README.md +53 -54
  4. package/bin/build-agents.js +109 -109
  5. package/bin/cli.js +262 -58
  6. package/bin/graph-audit.js +235 -0
  7. package/bin/graph-extract.js +308 -3
  8. package/bin/graph-gain.js +23 -3
  9. package/bin/graph-map.js +9 -1
  10. package/bin/graph-query.js +152 -10
  11. package/bin/graph-shard.js +6 -1
  12. package/bin/graph-signals.js +287 -4
  13. package/bin/graph.js +717 -658
  14. package/bin/onboarding-content.js +4 -4
  15. package/bin/pricing.json +207 -200
  16. package/bin/verify-contracts.js +117 -2
  17. package/bin/verify-package.js +11 -7
  18. package/bin/webui/css/04-motion.css +162 -152
  19. package/bin/webui/css/panels/knowledge.css +563 -116
  20. package/bin/webui/fixtures/extra.js +2036 -2036
  21. package/bin/webui/fixtures/hookui.js +5 -5
  22. package/bin/webui/fixtures/knowledge.js +21 -4
  23. package/bin/webui/fixtures/settings.js +305 -305
  24. package/bin/webui/i18n/en/knowledge.json +122 -4
  25. package/bin/webui/i18n/id/knowledge.json +122 -4
  26. package/bin/webui/js/panels/knowledge.js +573 -9
  27. package/bin/webui/js/panels/overview.js +13 -4
  28. package/mock-run/context-combiner.md +100 -100
  29. package/mock-run/orc-budget.md +534 -534
  30. package/mock-run/orc-challenge-council.md +262 -262
  31. package/mock-run/orc-ultra.md +103 -103
  32. package/package.json +1 -1
  33. package/templates/agents/MODEL-MAPPING.md +43 -43
  34. package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -56
  35. package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -60
  36. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -58
  37. package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -75
  38. package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -110
  39. package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -114
  40. package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -112
  41. package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -132
  42. package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -109
  43. package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -109
  44. package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -90
  45. package/templates/agents/orc-claude-writer-opus-5-med.md +55 -55
  46. package/templates/agents/orc-context-combiner-opus-5-high.md +88 -88
  47. package/templates/agents/orc-doc-checker-opus-5-low.md +108 -108
  48. package/templates/agents/orc-doc-writer-opus-5-med.md +134 -134
  49. package/templates/agents/orc-executor-haiku-4-5.md +2 -1
  50. package/templates/agents/orc-executor-opus-4-7-high.md +2 -1
  51. package/templates/agents/orc-executor-opus-4-7-med.md +2 -1
  52. package/templates/agents/orc-executor-opus-4-8-high.md +2 -1
  53. package/templates/agents/orc-executor-opus-5-high.md +4 -3
  54. package/templates/agents/orc-executor-opus-5-low.md +4 -3
  55. package/templates/agents/orc-executor-opus-5-med.md +4 -3
  56. package/templates/agents/orc-executor-sonnet-4-6-high.md +2 -1
  57. package/templates/agents/orc-executor-sonnet-4-6-med.md +2 -1
  58. package/templates/agents/orc-executor-sonnet-5-high.md +2 -1
  59. package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -1
  60. package/templates/agents/orc-judge-opus-5-xhigh.md +85 -85
  61. package/templates/agents/orc-learn-writer-opus-5-low.md +73 -73
  62. package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -65
  63. package/templates/agents/orc-planner-mini-opus-5-med.md +4 -4
  64. package/templates/agents/orc-planner-mini-sonnet-5-high.md +1 -1
  65. package/templates/agents/orc-planner-opus-5-med.md +160 -160
  66. package/templates/agents/orc-recon-opus-5-low.md +18 -8
  67. package/templates/agents/orc-recon-sonnet-4-6-med.md +15 -5
  68. package/templates/agents/orc-retro-opus-5-med.md +3 -3
  69. package/templates/agents/orc-reviewer-opus-5-med.md +60 -60
  70. package/templates/agents/orc-scout-opus-5-low.md +40 -40
  71. package/templates/agents/orc-system-analyst-opus-5-high.md +120 -120
  72. package/templates/agents/orc-test-author-opus-5-med.md +71 -71
  73. package/templates/agents/orc-test-designer-opus-5-high.md +158 -158
  74. package/templates/agents/orc-test-interpreter-opus-5-low.md +130 -130
  75. package/templates/agents/orc-verifier-opus-5-med.md +69 -69
  76. package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -81
  77. package/templates/commands/orc-ultra.md +17 -17
  78. package/templates/commands/orc-verify.md +11 -11
  79. package/templates/hooks/README.md +13 -3
  80. package/templates/hooks/orc-effort-guard.js +178 -178
  81. package/templates/hooks/orc-graph-hook.js +53 -7
  82. package/templates/hooks/orc-statusline.js +6 -6
  83. package/templates/skills/_shared/code-graph.md +57 -18
  84. package/templates/skills/_shared/config-precedence.md +198 -198
  85. package/templates/skills/_shared/extra-dispatch.md +1346 -1346
  86. package/templates/skills/_shared/opus5-only.md +8 -8
  87. package/templates/skills/_shared/phases/analyst-gates.md +136 -136
  88. package/templates/skills/_shared/phases/execution.md +4 -4
  89. package/templates/skills/_shared/phases/planning.md +3 -3
  90. package/templates/skills/_shared/phases/preflight.md +1 -1
  91. package/templates/skills/_shared/phases/review.md +4 -2
  92. package/templates/skills/_shared/phases/ship.md +1 -1
  93. package/templates/skills/_shared/phases/trace.md +3 -2
  94. package/templates/skills/_shared/read-ladder.md +14 -1
  95. package/templates/skills/_shared/return-validation.md +1 -1
  96. package/templates/skills/context-combiner/SKILL.md +1 -1
  97. package/templates/skills/context-combiner/schemas/combined-report.md +78 -78
  98. package/templates/skills/orc/README.md +2 -2
  99. package/templates/skills/orc/SKILL.md +8 -8
  100. package/templates/skills/orc/config.md +9 -9
  101. package/templates/skills/orc/examples/full-run-mock.md +73 -73
  102. package/templates/skills/orc/references/effort-and-mode.md +222 -222
  103. package/templates/skills/orc/references/preflight-report.md +2 -2
  104. package/templates/skills/orc/references/ultra-mode.md +3 -3
  105. package/templates/skills/orc/subskills/orc-planner/SKILL.md +2 -2
  106. package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -121
  107. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -76
  108. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -45
  109. package/templates/skills/orc-analyze/SKILL.md +2 -2
  110. package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -42
  111. package/templates/skills/orc-analyze/schemas/report-audit.md +83 -83
  112. package/templates/skills/orc-analyze/schemas/report-prose.md +63 -63
  113. package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -78
  114. package/templates/skills/orc-challenge/README.md +142 -142
  115. package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -273
  116. package/templates/skills/orc-challenge/references/council.md +315 -315
  117. package/templates/skills/orc-challenge/references/intake.md +171 -171
  118. package/templates/skills/orc-claude/SKILL.md +14 -14
  119. package/templates/skills/orc-diy/README.md +143 -143
  120. package/templates/skills/orc-diy/references/flow-schema.md +1 -1
  121. package/templates/skills/orc-doc/README.md +229 -229
  122. package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -325
  123. package/templates/skills/orc-doc/references/chunking.md +527 -527
  124. package/templates/skills/orc-fast/SKILL.md +4 -4
  125. package/templates/skills/orc-learn/SKILL.md +14 -14
  126. package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -61
  127. package/templates/skills/orc-mini/SKILL.md +16 -20
  128. package/templates/skills/orc-mini/references/complexity.md +25 -11
  129. package/templates/skills/orc-quick/SKILL.md +12 -13
  130. package/templates/skills/orc-quick/references/gh-mode.md +1 -1
  131. package/templates/skills/orc-quick/references/look.md +5 -5
  132. package/templates/skills/orc-verify/SKILL.md +15 -15
  133. package/templates/skills/orc-verify/examples/verify-mock.md +33 -33
  134. package/templates/skills/orc-wiki/references/extra.md +1 -1
@@ -1,78 +1,78 @@
1
- # Template — Combined Analysis Report
2
-
3
- Human-readable source of truth for a MERGE of 2+ related analyses. Written to
4
- orc/analyzer/combined-{name}/combined-report.md. Copied OUT to
5
- {report_out_dir}/combined-{name}/ on "stop here".
6
-
7
- ```markdown
8
- # Combined Analysis Report — {combined-name}
9
- kind: combined
10
- combined_from: [analysis-A, analysis-B, ...] # source analysis names
11
- scope: <the shared scope X these analyses live in>
12
- combined_at: DDMMYY HH:MM:SS
13
- combined_against: <git HEAD short sha the evidence spot-check ran against>
14
- model: opus-5-high # the RESOLVED model of the combiner that produced
15
- # this — never copied from here
16
-
17
- ## Relatedness check
18
- How the source analyses overlap — shared files, overlapping requirements,
19
- shared scope. If overlap was weak, the user was challenged and their decision
20
- is recorded here.
21
- - Shared files: web/reports/x (analysis-A R1, analysis-B R2)
22
- - Overlapping requirement: both add export to the reports module
23
- - Verdict: related (confirmed) | combined-anyway (user override) | ...
24
-
25
- ## Merged requirements (deduped, ordered)
26
- Every row carries file:line evidence inherited from the source spec (the
27
- combiner trusts confirmed specs; it does not re-derive the code) — spot-checked
28
- against `combined_against`; anchors that no longer match are marked STALE and
29
- were challenged, never silently carried. SEMANTIC-DUPLICATE merges quote both
30
- original statements. PARTIAL-OVERLAP rows are split (shared + residue), never
31
- collapsed. `Depth` is shown when sources differ in depth.
32
-
33
- | # | Requirement (merged) | From | Depth | Code reality | Evidence (file:line) | Files/modules | Status |
34
- |---|----------------------|------|-------|--------------|----------------------|---------------|--------|
35
- | 1 | "add CSV export" | A.R1 | deep | HTML only | web/reports/view.x:30 | web/reports/x | buildable |
36
- | 2 | "reuse report auth" | A.R2, B.R3 (dedup) | standard | guard present | web/reports/routes.x:12 (STALE — user chose proceed) | web/reports/x | exists |
37
-
38
- ## Source coverage matrix (conservation proof)
39
- EVERY source requirement ID appears exactly once with exactly one Outcome.
40
- `dropped` requires a recorded user decision in combine-decisions.md. The gate
41
- below must show coverage_pct: 100 before this report can hand off to build.
42
-
43
- | Source ID | Outcome | Merged as | Decision ref |
44
- |-----------|---------|-----------|--------------|
45
- | A.R1 | merged | #1 | — |
46
- | A.R2 | deduped-into | #2 | — |
47
- | B.R2 | conflict-resolved | #3 | combine-decisions.md #2 |
48
- | B.R3 | deduped-into | #2 | — |
49
- | B.R4 | dropped | — | combine-decisions.md #4 (user: superseded by A.R1) |
50
-
51
- - source requirements total: {N} · accounted: {N} · coverage_pct: 100
52
-
53
- ## Additional context (do not build)
54
- Anchored, non-actionable context merged from the sources — each item re-pointed at
55
- the merged requirement it serves. Dedupe ONLY when the evidence anchor is the same
56
- file:line AND the notes convey the same constraint — near-identical notes are kept,
57
- both, with their own From tags. Read for understanding; never a task. Omit this
58
- whole section if no source carried context.
59
- | Anchor (merged #) | From | From scope | Dependency | Touchpoint to respect | Evidence (file:line) |
60
- |-------------------|------|-----------|------------|-----------------------|----------------------|
61
- | 1 (CSV export) | A.ctx | reporting (Y) | consumes-output | report query already paginates; export must page too | web/reports/query.x:44 |
62
-
63
- ## Cross-scope conflicts & decisions
64
- Every conflict/duplicate/partial-overlap/ordering issue found across sources
65
- (including contradictory resolved assumptions), each raised as a
66
- recommended-option challenge and resolved. Decisions are also checkpointed
67
- eagerly in combine-decisions.md.
68
- - CONFLICT (resolved): A.R4 wants offset paging, B.R2 wants cursor — user chose cursor.
69
- - DUPLICATE (merged): A.R2 and B.R3 both reuse auth — merged into #2.
70
- - PARTIAL-OVERLAP (split): A.R5 subsumes B.R1 — shared row #4, A-only residue row #5.
71
- - ORDERING (structured): before: #1 (A export) → after: #6 (B schedule).
72
-
73
- ## Open questions (block handoff until resolved)
74
- - (none) | UNRESOLVED: ... — combiner refuses build handoff while any remain.
75
-
76
- ## Handoff readiness
77
- - complete: yes/no (coverage_pct == 100, all conflicts resolved, no open UNRESOLVED)
78
- ```
1
+ # Template — Combined Analysis Report
2
+
3
+ Human-readable source of truth for a MERGE of 2+ related analyses. Written to
4
+ orc/analyzer/combined-{name}/combined-report.md. Copied OUT to
5
+ {report_out_dir}/combined-{name}/ on "stop here".
6
+
7
+ ```markdown
8
+ # Combined Analysis Report — {combined-name}
9
+ kind: combined
10
+ combined_from: [analysis-A, analysis-B, ...] # source analysis names
11
+ scope: <the shared scope X these analyses live in>
12
+ combined_at: DDMMYY HH:MM:SS
13
+ combined_against: <git HEAD short sha the evidence spot-check ran against>
14
+ model: opus-5-5-high # the RESOLVED model of the combiner that produced
15
+ # this — never copied from here
16
+
17
+ ## Relatedness check
18
+ How the source analyses overlap — shared files, overlapping requirements,
19
+ shared scope. If overlap was weak, the user was challenged and their decision
20
+ is recorded here.
21
+ - Shared files: web/reports/x (analysis-A R1, analysis-B R2)
22
+ - Overlapping requirement: both add export to the reports module
23
+ - Verdict: related (confirmed) | combined-anyway (user override) | ...
24
+
25
+ ## Merged requirements (deduped, ordered)
26
+ Every row carries file:line evidence inherited from the source spec (the
27
+ combiner trusts confirmed specs; it does not re-derive the code) — spot-checked
28
+ against `combined_against`; anchors that no longer match are marked STALE and
29
+ were challenged, never silently carried. SEMANTIC-DUPLICATE merges quote both
30
+ original statements. PARTIAL-OVERLAP rows are split (shared + residue), never
31
+ collapsed. `Depth` is shown when sources differ in depth.
32
+
33
+ | # | Requirement (merged) | From | Depth | Code reality | Evidence (file:line) | Files/modules | Status |
34
+ |---|----------------------|------|-------|--------------|----------------------|---------------|--------|
35
+ | 1 | "add CSV export" | A.R1 | deep | HTML only | web/reports/view.x:30 | web/reports/x | buildable |
36
+ | 2 | "reuse report auth" | A.R2, B.R3 (dedup) | standard | guard present | web/reports/routes.x:12 (STALE — user chose proceed) | web/reports/x | exists |
37
+
38
+ ## Source coverage matrix (conservation proof)
39
+ EVERY source requirement ID appears exactly once with exactly one Outcome.
40
+ `dropped` requires a recorded user decision in combine-decisions.md. The gate
41
+ below must show coverage_pct: 100 before this report can hand off to build.
42
+
43
+ | Source ID | Outcome | Merged as | Decision ref |
44
+ |-----------|---------|-----------|--------------|
45
+ | A.R1 | merged | #1 | — |
46
+ | A.R2 | deduped-into | #2 | — |
47
+ | B.R2 | conflict-resolved | #3 | combine-decisions.md #2 |
48
+ | B.R3 | deduped-into | #2 | — |
49
+ | B.R4 | dropped | — | combine-decisions.md #4 (user: superseded by A.R1) |
50
+
51
+ - source requirements total: {N} · accounted: {N} · coverage_pct: 100
52
+
53
+ ## Additional context (do not build)
54
+ Anchored, non-actionable context merged from the sources — each item re-pointed at
55
+ the merged requirement it serves. Dedupe ONLY when the evidence anchor is the same
56
+ file:line AND the notes convey the same constraint — near-identical notes are kept,
57
+ both, with their own From tags. Read for understanding; never a task. Omit this
58
+ whole section if no source carried context.
59
+ | Anchor (merged #) | From | From scope | Dependency | Touchpoint to respect | Evidence (file:line) |
60
+ |-------------------|------|-----------|------------|-----------------------|----------------------|
61
+ | 1 (CSV export) | A.ctx | reporting (Y) | consumes-output | report query already paginates; export must page too | web/reports/query.x:44 |
62
+
63
+ ## Cross-scope conflicts & decisions
64
+ Every conflict/duplicate/partial-overlap/ordering issue found across sources
65
+ (including contradictory resolved assumptions), each raised as a
66
+ recommended-option challenge and resolved. Decisions are also checkpointed
67
+ eagerly in combine-decisions.md.
68
+ - CONFLICT (resolved): A.R4 wants offset paging, B.R2 wants cursor — user chose cursor.
69
+ - DUPLICATE (merged): A.R2 and B.R3 both reuse auth — merged into #2.
70
+ - PARTIAL-OVERLAP (split): A.R5 subsumes B.R1 — shared row #4, A-only residue row #5.
71
+ - ORDERING (structured): before: #1 (A export) → after: #6 (B schedule).
72
+
73
+ ## Open questions (block handoff until resolved)
74
+ - (none) | UNRESOLVED: ... — combiner refuses build handoff while any remain.
75
+
76
+ ## Handoff readiness
77
+ - complete: yes/no (coverage_pct == 100, all conflicts resolved, no open UNRESOLVED)
78
+ ```
@@ -94,11 +94,11 @@ codifier: 9 language playbooks + a11y/perf rule packs), `context-combiner`
94
94
  ## Key behaviors to know
95
95
 
96
96
  - **The orchestrator NEVER implements — it always spawns scored subagents,
97
- even for tiny tasks.** Orchestrator (Opus 4.8 high, or Opus 5 / Fable 5 at
97
+ even for tiny tasks.** Orchestrator (Opus 4.8 high, or Opus 5.5 / Fable 5 at
98
98
  medium+) only coordinates; each task's 0–100 score (computed arithmetically
99
99
  from the planner's per-task `facets`) maps to a named executor agent via the
100
100
  single 6-band table in `config.md` (`rubric_bands` = report granularity only),
101
- Haiku 4.5 [0,30) → Opus 5 low [65,90) → Opus 5 medium [90,100].
101
+ Haiku 4.5 [0,30) → Opus 5.5 low [65,90) → Opus 5.5 medium [90,100].
102
102
  - **Every executor slice carries** the intent-spec constraints, the task's
103
103
  sliced acceptance criteria, the standing
104
104
  house-rules card, and — when a code-pattern is resolved — your project's
@@ -13,7 +13,7 @@ description: >
13
13
 
14
14
  # ORC (orchestrator spine)
15
15
 
16
- You are the **orchestrator**: **Opus 4.8 high — or Opus 5 / Fable 5 at medium+**
16
+ You are the **orchestrator**: **Opus 4.8 high — or Opus 5.5 / Fable 5 at medium+**
17
17
  (never downgrade yourself). You own the schemas, the dependency/conflict graph, wave
18
18
  scheduling, per-task model scoring, all checkpoint writes, user Q&A relay, and
19
19
  every decision below. Workers stay dumb and isolated.
@@ -24,8 +24,8 @@ version of a reference you haven't loaded this run. Detect the stack from the re
24
24
 
25
25
  ## Preflight gate (before Phase 0 — do this FIRST)
26
26
 
27
- Confirm you are **Opus 4.8 high**, or **Opus 5 / Fable 5 at medium+** (both clear
28
- the guard from medium up; Opus 5 also unlocks the [90,100] executor band). Effort
27
+ Confirm you are **Opus 4.8 high**, or **Opus 5.5 / Fable 5 at medium+** (both clear
28
+ the guard from medium up; Opus 5.5 also unlocks the [90,100] executor band). Effort
29
29
  is hard-blocked by the `orc-effort-guard.js` PreToolUse hook; the model cannot be
30
30
  (hooks can't see it) — the statusline warns. On a weaker tier **STOP immediately**
31
31
  and tell the user to switch the main session and re-run — never intake below it
@@ -69,11 +69,11 @@ themselves are this lane's own and stay here.
69
69
 
70
70
  ## Dispatched roles (you never do this work yourself)
71
71
 
72
- **Analyst** `orc-analyze` (Opus 5 high): doc OR bare request →
72
+ **Analyst** `orc-analyze` (Opus 5.5 high): doc OR bare request →
73
73
  scope-bounded, code-grounded report + spec; standard or opt-in DEEP (scouts).
74
- **Context-combiner** (Opus 5 high): merges 2+ related confirmed analyses
74
+ **Context-combiner** (Opus 5.5 high): merges 2+ related confirmed analyses
75
75
  into ONE combined spec; build only on `handoff_ready` with `coverage_pct` =
76
- 100; full lane only. **Planner** `subskills/orc-planner` (Opus 5 medium):
76
+ 100; full lane only. **Planner** `subskills/orc-planner` (Opus 5.5 medium):
77
77
  request or spec → planning-output. Scout dispatch, analyst-return gates,
78
78
  combiner tracking, the `git_head` staleness valve, and the Phase 1 exit gate
79
79
  are YOURS and deterministic — load `../_shared/phases/analyst-gates.md` at their
@@ -96,7 +96,7 @@ requeue) run the same formula, inherit the original task's risk floor, and never
96
96
  dispatch below the finding-task's band. Fixed roles dispatch BY NAME (analyst /
97
97
  combiner / planner / reviewer / verifier — see `config.md`'s fixed-role table +
98
98
  `.claude/agents/MODEL-MAPPING.md`). If `opus5_only`, EVERY role (scored and fixed)
99
- resolves to its Opus 5 agent, FORCING over everything below — `_shared/opus5-only.md`.
99
+ resolves to its Opus 5.5 agent, FORCING over everything below — `_shared/opus5-only.md`.
100
100
  Caveat: a subagent's model can't exceed the MAIN session's tier — run the main
101
101
  session on Opus or the Opus pins silently fall back (the original "wrong model" bug).
102
102
 
@@ -205,7 +205,7 @@ them; they are never dispatched as subagents).
205
205
  - Phase 5.5 → `../_shared/phases/security-checklist.md`; 6.5 → `subskills/orc-testgen/`
206
206
  - Phase 8 → `subskills/orc-pr/SKILL.md` (template `subskills/orc-pr/pr.md`);
207
207
  stack gate → `subskills/orc-pr/stack-gate.md` + `_shared/pr-templates.md`
208
- - Code graph cache, NEVER skipped (§0 of the contract) — `orc graph status --if-enabled --heal --json` at preflight BEFORE the first dispatch (builds or updates it) · ONE `orc graph ctx <declared files>` call per slice · `orc graph map` FIRST at planning (orientation — before any Glob, before `impact`) then `orc graph impact` + `orc graph cochange`, `orc graph changes` at review · `orc graph coverage` before you trust a card's silence · `orc graph update` + `orc graph notes` at every wave close and ship · print each JSON `line`, copy each `trace` VERBATIM (CLI-resolved) → `../_shared/code-graph.md`
208
+ - Code graph cache, NEVER skipped (§0 of the contract) — `orc graph status --if-enabled --heal --json` at preflight BEFORE the first dispatch (builds or updates it) · ONE `orc graph ctx <declared files>` call per slice · `orc graph map` FIRST at planning (orientation — before any Glob, before `impact`) then `orc graph impact` + `orc graph cochange`, `orc graph changes` at review · `orc graph coverage` before you trust a card's silence · `orc graph update` + `orc graph notes` at every wave close and ship · every `--json` read carries `--brief` · print each JSON `line`, copy each `trace` VERBATIM (CLI-resolved) → `../_shared/code-graph.md`
209
209
  - Schemas (you own; pass slices only): `schemas/intent-spec.md`,
210
210
  `schemas/planning-output.md`, `schemas/checkpoint.md`
211
211
  - Worked example (orient only — never execute from it) → `examples/full-run-mock.md`
@@ -35,13 +35,13 @@ canonical 6-band table, and dispatches the matching **executor agent**.
35
35
  | [30,40) | claude-sonnet-4-6 | medium | orc-executor-sonnet-4-6-med |
36
36
  | [40,55) | claude-sonnet-4-6 | high | orc-executor-sonnet-4-6-high |
37
37
  | [55,65) | claude-sonnet-5 | high | orc-executor-sonnet-5-high |
38
- | [65,90) | claude-opus-5 | low | orc-executor-opus-5-low |
39
- | [90,100] | claude-opus-5 | medium | orc-executor-opus-5-med |
38
+ | [65,90) | claude-opus-5-5 | low | orc-executor-opus-5-low |
39
+ | [90,100] | claude-opus-5-5 | medium | orc-executor-opus-5-med |
40
40
 
41
41
  (Haiku has no effort ladder — that agent carries no `effort:` field.) The risk
42
42
  floor (≥70) lands `orc-executor-opus-5-low` at minimum in THIS table. Above ~65
43
43
  the useful dial stopped being the model GENERATION and became the EFFORT, which
44
- is why the old four Opus rows are two. **Every band from 65 needs an Opus 5 MAIN
44
+ is why the old four Opus rows are two. **Every band from 65 needs an Opus 5.5 MAIN
45
45
  session** or it silently falls back to the session model (the tier-honesty rule
46
46
  reports the downgrade) — two bands where it used to be one, and that is the cost
47
47
  of this table.
@@ -59,15 +59,15 @@ One model, EFFORT as the cost dial. Off by default; nothing changes until set.
59
59
 
60
60
  | Score | Model | Effort | Executor agent |
61
61
  |-------|-------|--------|----------------|
62
- | [0,90) | claude-opus-5 | low | orc-executor-opus-5-low |
63
- | [90,100] | claude-opus-5 | medium | orc-executor-opus-5-med |
62
+ | [0,90) | claude-opus-5-5 | low | orc-executor-opus-5-low |
63
+ | [90,100] | claude-opus-5-5 | medium | orc-executor-opus-5-med |
64
64
 
65
65
  Two bands, sharing the 90 edge with the default table's top two rows. That
66
- symmetry is the point: once the default table's high end is already Opus 5 with
66
+ symmetry is the point: once the default table's high end is already Opus 5.5 with
67
67
  effort as the dial, this mode differs from it only BELOW 65, so a third band
68
68
  would be a distinction the default table stopped making.
69
69
 
70
- **Tier cost:** today TWO bands in six need an Opus 5 main session; with this on,
70
+ **Tier cost:** today TWO bands in six need an Opus 5.5 main session; with this on,
71
71
  EVERY dispatch does, so a lower session downgrades every task (warn-only — a
72
72
  hook can gate effort, never model). **Scope:** it is NOT executor-only — it also
73
73
  forces every fixed role below, across every lane. orc-diy's table
@@ -93,8 +93,8 @@ un-shown number.
93
93
  | Ultra advisor (/orc-ultra only) | orc-advisor-opus-5-xhigh |
94
94
  | Ultra judge (/orc-ultra only) | orc-judge-opus-5-xhigh |
95
95
 
96
- Under `opus5_only`, every role above that is not already `claude-opus-5`
97
- dispatches its Opus 5 variant instead — plus the roles owned by other lanes
96
+ Under `opus5_only`, every role above that is not already `claude-opus-5-5`
97
+ dispatches its Opus 5.5 variant instead — plus the roles owned by other lanes
98
98
  (scout, wiki scanner, CLAUDE.md writer, retro miner, fast executor).
99
99
 
100
100
  ## Where each subsystem's rule is written down
@@ -1,73 +1,73 @@
1
- # Example — Annotated Full Run (v2.2, dry run)
2
-
3
- O: = orchestrator (Opus 4.8 high, always) · U: = user. Nothing real. The
4
- orchestrator NEVER implements — it always spawns scored subagents.
5
-
6
- U: Orchestrate: merchant notification system — in-app, email digest, prefs page.
7
-
8
- ## Phase 0 — Intake
9
- O: Creates run folder run/merchant-notifications/ FIRST.
10
- [reads repo: TS/yarn/jest — asks nothing about stack] Rough size: medium+ → 4-question tier (one batched round):
11
- 1) What should exist when done? 2) Out of scope? 3) How do we know it's done? 4) Patterns/files to avoid?
12
- U: [answers] no push, no admin; bell count + both digest schedules + prefs persist; follow services/ pattern, don't touch auth_service.
13
- O: [drafts run/merchant-notifications/intent-spec.md] Sign-off: gate or soft? (default gate)
14
- U: gate → approved
15
-
16
- ## Phase 1 — Planning
17
- O: Planner? U: OpenSpec
18
- O: [6 tasks with declared_files incl. tests + per-file grounding attestations + sliced acceptance[], depends_on, spec_ref] ⚠ T1/T2 share models/notification.ts → scheduling separates them.
19
- Grounding spot-check (Phase 1 exit): globs all `exists` paths — 13/14 present, models/notifcation.ts MISSING (typo) → plan bounced to planner with the miss list → corrected to models/notification.ts ✓.
20
-
21
- ## Phase 2 — Effort, dispatch style, scoring
22
- O: Refined: medium, partially dependent. Recommend PARALLEL waves. Confirm? U: yes. Batch pause? U: every 2 waves.
23
- O: Facet scoring (planner facets → formula → band; facet gate: breadth + fan recomputed, risk cites checked):
24
- T1 3·new-surface·stateful·new-tests·fan0/3·low = 6+18+16+8+9 = 57 → sonnet-5-high (keystone — every later task imports its enum)
25
- T2 3·imitate·branching·new-tests·fan1/0·low = 6+8+8+8+5 = 35 → sonnet-4-6-med
26
- T3 3·imitate·branching·update-existing·fan1/0·low = 6+8+8+4+5 = 31 → sonnet-4-6-med
27
- T4 2·imitate·branching·update-existing·fan1/0·low = 6+8+8+4+5 = 31 → sonnet-4-6-med
28
- T5 1·mechanical·none·update-existing·fan0/0·low = 2+0+0+4 = 6 → haiku-4-5
29
- T6 1·mechanical·none·none·fan0/0·low = 2+0+0+0 = 2 → haiku-4-5
30
- Plan: 6 tasks, 3 waves W1{T1} W2{T2,T3,T4} W3{T5,T6}, all spawned. Anticipated escalations? U: none, go.
31
-
32
- ## Phase 3 — Execution (ALL spawned; orchestrator coordinates only)
33
- O: [checkpoint + state-of-play written into run/merchant-notifications/ BEFORE dispatch]
34
- ▶ W1: spawn Agent-A(T1, sonnet-5-high) — milestones 40%→100% — return validated ✓ (evidence: `yarn jest models/` exit 0, tail quoted; unmet[] empty) — log: DECISION type enum.
35
- ▶ W2: spawn 3 agents (sonnet-4-6-med each).
36
- Agent-C needs_context (1/2): "needs T1's enum interface" → O adjudicates in-scope → re-slices → resumes. (User never bothered.)
37
- Agent-C user escalation: "digest send time?" → U: 07:00 fixed → ANSWER broadcast to log.
38
- Returns validated ✓ · collision audit clean.
39
- ⏸ BATCH PAUSE (stop sequence):
40
- checkpoint ✓ → state-of-play ✓ → dispatch report shown (models/scores) → "Run /usage to see your remaining limits."
41
- → resume block:
42
- | Continue ORC run `merchant-notifications`.
43
- | Read run/merchant-notifications/state-of-play.md, then run/merchant-notifications/checkpoint.json.
44
- | Resume from checkpoint phase/wave. Intent-spec approved — do not re-plan. Do not redo done tasks.
45
- "Reply continue here, or paste in a fresh session (recommended if long)."
46
-
47
- U: [next day, FRESH session, pastes block]
48
- O: [state-of-play → checkpoint → re-anchored] "Resuming: merchant notifications (in-app+digest+prefs). Still correct?" U: yes.
49
- ▶ W3: spawn T5+T6 (haiku-4-5) → done. All 6 complete.
50
-
51
- ## Phase 5 — Review (spawned worker, Opus 5 medium)
52
- O: Code pattern? U: none. Findings (P0–P3 ladder, each P0–P2 anchored file:line + verbatim quote):
53
- P1 T2 no pagination — services/notification_list.ts:88 — O spot-checks: Reads line 88, quote matches ✓ → asks user, U: fix it
54
- · P3 email_digest naming ×2 · 12 tests added. (An unanchored finding would be auto-P3 — never fixed unasked.)
55
-
56
- ## Phase 6 — Verify (spawned worker, Opus 5 medium; criteria = definition-of-done)
57
- criteria[] with per-line evidence: bell ✓ (test name) · both schedules ✗ (weekly cron missing = P0, unmet criterion, evidence: no cron entry in scheduler.ts) · prefs ✓ → FAILED → quote spot-check ✓ → P0 auto-fix (single attempt, no ask) → re-verify → PASSED. 14/14.
58
-
59
- ## Phase 7 — Summary
60
- O: 6 tasks/3 waves/6 spawns/1 pause/1 fresh-session resume · 1 needs_context · 1 escalation · verify fixed_then_passed · branch green. P2 fix-batch: none · Apply the 2 P3 cosmetics? U: no.
61
-
62
- ## Phase 8 — Ship (orc-pr, reads pr.md)
63
- O: Branch: feat/notifications. Commit? Push? PR? U: yes all.
64
- O: Ticket/title/target? U: DRP-482 / Add merchant notification system / develop
65
- O: ✓ committed → pushed → run/merchant-notifications/DRP-482-add-merchant-notification-system.md from pr.md (base develop).
66
- Log deleted · checkpoint + dispatch log KEPT · completion dispatch report shown → "Run /usage to see your remaining limits."
67
-
68
- ## What this exercises
69
- always-spawn (even cheap tasks get a subagent) · facet-scored arithmetic · 6-band ladder ·
70
- per-run folder run/merchant-notifications/ · usage reminder (no programmatic /usage) ·
71
- planner grounding spot-check catching a hallucinated path · executor evidence (verbatim
72
- build/test proof) · reviewer quote spot-check before any P0/P1 action ·
73
- definition-of-done catching the weekly-cron gap · needs_context resolved internally · fresh-session resume.
1
+ # Example — Annotated Full Run (v2.2, dry run)
2
+
3
+ O: = orchestrator (Opus 4.8 high, always) · U: = user. Nothing real. The
4
+ orchestrator NEVER implements — it always spawns scored subagents.
5
+
6
+ U: Orchestrate: merchant notification system — in-app, email digest, prefs page.
7
+
8
+ ## Phase 0 — Intake
9
+ O: Creates run folder run/merchant-notifications/ FIRST.
10
+ [reads repo: TS/yarn/jest — asks nothing about stack] Rough size: medium+ → 4-question tier (one batched round):
11
+ 1) What should exist when done? 2) Out of scope? 3) How do we know it's done? 4) Patterns/files to avoid?
12
+ U: [answers] no push, no admin; bell count + both digest schedules + prefs persist; follow services/ pattern, don't touch auth_service.
13
+ O: [drafts run/merchant-notifications/intent-spec.md] Sign-off: gate or soft? (default gate)
14
+ U: gate → approved
15
+
16
+ ## Phase 1 — Planning
17
+ O: Planner? U: OpenSpec
18
+ O: [6 tasks with declared_files incl. tests + per-file grounding attestations + sliced acceptance[], depends_on, spec_ref] ⚠ T1/T2 share models/notification.ts → scheduling separates them.
19
+ Grounding spot-check (Phase 1 exit): globs all `exists` paths — 13/14 present, models/notifcation.ts MISSING (typo) → plan bounced to planner with the miss list → corrected to models/notification.ts ✓.
20
+
21
+ ## Phase 2 — Effort, dispatch style, scoring
22
+ O: Refined: medium, partially dependent. Recommend PARALLEL waves. Confirm? U: yes. Batch pause? U: every 2 waves.
23
+ O: Facet scoring (planner facets → formula → band; facet gate: breadth + fan recomputed, risk cites checked):
24
+ T1 3·new-surface·stateful·new-tests·fan0/3·low = 6+18+16+8+9 = 57 → sonnet-5-high (keystone — every later task imports its enum)
25
+ T2 3·imitate·branching·new-tests·fan1/0·low = 6+8+8+8+5 = 35 → sonnet-4-6-med
26
+ T3 3·imitate·branching·update-existing·fan1/0·low = 6+8+8+4+5 = 31 → sonnet-4-6-med
27
+ T4 2·imitate·branching·update-existing·fan1/0·low = 6+8+8+4+5 = 31 → sonnet-4-6-med
28
+ T5 1·mechanical·none·update-existing·fan0/0·low = 2+0+0+4 = 6 → haiku-4-5
29
+ T6 1·mechanical·none·none·fan0/0·low = 2+0+0+0 = 2 → haiku-4-5
30
+ Plan: 6 tasks, 3 waves W1{T1} W2{T2,T3,T4} W3{T5,T6}, all spawned. Anticipated escalations? U: none, go.
31
+
32
+ ## Phase 3 — Execution (ALL spawned; orchestrator coordinates only)
33
+ O: [checkpoint + state-of-play written into run/merchant-notifications/ BEFORE dispatch]
34
+ ▶ W1: spawn Agent-A(T1, sonnet-5-high) — milestones 40%→100% — return validated ✓ (evidence: `yarn jest models/` exit 0, tail quoted; unmet[] empty) — log: DECISION type enum.
35
+ ▶ W2: spawn 3 agents (sonnet-4-6-med each).
36
+ Agent-C needs_context (1/2): "needs T1's enum interface" → O adjudicates in-scope → re-slices → resumes. (User never bothered.)
37
+ Agent-C user escalation: "digest send time?" → U: 07:00 fixed → ANSWER broadcast to log.
38
+ Returns validated ✓ · collision audit clean.
39
+ ⏸ BATCH PAUSE (stop sequence):
40
+ checkpoint ✓ → state-of-play ✓ → dispatch report shown (models/scores) → "Run /usage to see your remaining limits."
41
+ → resume block:
42
+ | Continue ORC run `merchant-notifications`.
43
+ | Read run/merchant-notifications/state-of-play.md, then run/merchant-notifications/checkpoint.json.
44
+ | Resume from checkpoint phase/wave. Intent-spec approved — do not re-plan. Do not redo done tasks.
45
+ "Reply continue here, or paste in a fresh session (recommended if long)."
46
+
47
+ U: [next day, FRESH session, pastes block]
48
+ O: [state-of-play → checkpoint → re-anchored] "Resuming: merchant notifications (in-app+digest+prefs). Still correct?" U: yes.
49
+ ▶ W3: spawn T5+T6 (haiku-4-5) → done. All 6 complete.
50
+
51
+ ## Phase 5 — Review (spawned worker, Opus 5.5 medium)
52
+ O: Code pattern? U: none. Findings (P0–P3 ladder, each P0–P2 anchored file:line + verbatim quote):
53
+ P1 T2 no pagination — services/notification_list.ts:88 — O spot-checks: Reads line 88, quote matches ✓ → asks user, U: fix it
54
+ · P3 email_digest naming ×2 · 12 tests added. (An unanchored finding would be auto-P3 — never fixed unasked.)
55
+
56
+ ## Phase 6 — Verify (spawned worker, Opus 5.5 medium; criteria = definition-of-done)
57
+ criteria[] with per-line evidence: bell ✓ (test name) · both schedules ✗ (weekly cron missing = P0, unmet criterion, evidence: no cron entry in scheduler.ts) · prefs ✓ → FAILED → quote spot-check ✓ → P0 auto-fix (single attempt, no ask) → re-verify → PASSED. 14/14.
58
+
59
+ ## Phase 7 — Summary
60
+ O: 6 tasks/3 waves/6 spawns/1 pause/1 fresh-session resume · 1 needs_context · 1 escalation · verify fixed_then_passed · branch green. P2 fix-batch: none · Apply the 2 P3 cosmetics? U: no.
61
+
62
+ ## Phase 8 — Ship (orc-pr, reads pr.md)
63
+ O: Branch: feat/notifications. Commit? Push? PR? U: yes all.
64
+ O: Ticket/title/target? U: DRP-482 / Add merchant notification system / develop
65
+ O: ✓ committed → pushed → run/merchant-notifications/DRP-482-add-merchant-notification-system.md from pr.md (base develop).
66
+ Log deleted · checkpoint + dispatch log KEPT · completion dispatch report shown → "Run /usage to see your remaining limits."
67
+
68
+ ## What this exercises
69
+ always-spawn (even cheap tasks get a subagent) · facet-scored arithmetic · 6-band ladder ·
70
+ per-run folder run/merchant-notifications/ · usage reminder (no programmatic /usage) ·
71
+ planner grounding spot-check catching a hallucinated path · executor evidence (verbatim
72
+ build/test proof) · reviewer quote spot-check before any P0/P1 action ·
73
+ definition-of-done catching the weekly-cron gap · needs_context resolved internally · fresh-session resume.