@azure-id/orc 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CHANGELOG.md +374 -0
  2. package/README.md +49 -36
  3. package/bin/build-agents.js +7 -5
  4. package/bin/cli.js +1006 -235
  5. package/bin/fix.js +21 -18
  6. package/bin/graph-extract.js +314 -6
  7. package/bin/graph-gain.js +83 -2
  8. package/bin/graph-map.js +23 -1
  9. package/bin/graph-notes.js +1 -1
  10. package/bin/graph-query.js +1362 -37
  11. package/bin/graph-resolve.js +1 -1
  12. package/bin/graph-shard.js +29 -6
  13. package/bin/graph-signals.js +5 -3
  14. package/bin/graph.js +7 -3
  15. package/bin/habit.js +1 -1
  16. package/bin/pricing.json +8 -1
  17. package/bin/trace-write.js +40 -11
  18. package/bin/verify-contracts.js +169 -60
  19. package/bin/verify-package.js +3 -3
  20. package/bin/webui/api.js +8 -0
  21. package/bin/webui/fixtures/extra.js +9 -9
  22. package/bin/webui/fixtures/flow.js +1 -1
  23. package/bin/webui/fixtures/index.js +2 -2
  24. package/bin/webui/fixtures/knowledge.js +8 -1
  25. package/bin/webui/fixtures/pact.js +112 -111
  26. package/bin/webui/fixtures/stats.js +2 -2
  27. package/bin/webui/i18n/en/knowledge.json +2 -0
  28. package/bin/webui/i18n/id/knowledge.json +2 -0
  29. package/bin/webui/js/panels/knowledge.js +17 -0
  30. package/guides/code-graph-benefit.md +116 -0
  31. package/guides/configuration.md +150 -0
  32. package/guides/documents.md +262 -0
  33. package/guides/extra-models.md +448 -0
  34. package/guides/habits-and-gotchas.md +152 -0
  35. package/guides/knowledge-reads.md +190 -0
  36. package/guides/model-selection.md +186 -0
  37. package/guides/rules.md +305 -0
  38. package/guides/status-line.md +344 -0
  39. package/mock-run/a-normal-day.md +2 -2
  40. package/mock-run/extra-slots.md +177 -177
  41. package/mock-run/orc-cli.md +3 -2
  42. package/mock-run/orc-doc.md +452 -448
  43. package/mock-run/orc-fast.md +2 -2
  44. package/mock-run/orc-quick.md +146 -146
  45. package/mock-run/orc.md +4 -4
  46. package/package.json +2 -1
  47. package/templates/agents/MODEL-MAPPING.md +12 -12
  48. package/templates/agents/{orc-executor-haiku-4-5.md → orc-executor-haiku-5-high.md} +21 -8
  49. package/templates/agents/orc-executor-opus-4-7-high.md +17 -5
  50. package/templates/agents/orc-executor-opus-4-7-med.md +17 -5
  51. package/templates/agents/orc-executor-opus-4-8-high.md +17 -5
  52. package/templates/agents/orc-executor-opus-5-high.md +17 -5
  53. package/templates/agents/orc-executor-opus-5-low.md +17 -5
  54. package/templates/agents/orc-executor-opus-5-med.md +17 -5
  55. package/templates/agents/orc-executor-sonnet-4-6-high.md +17 -5
  56. package/templates/agents/orc-executor-sonnet-5-high.md +17 -5
  57. package/templates/agents/orc-executor-sonnet-5-low.md +17 -5
  58. package/templates/agents/orc-executor-sonnet-5-med.md +17 -5
  59. package/templates/agents/{orc-graph-noter-sonnet-4-6-med.md → orc-graph-noter-haiku-5-high.md} +4 -4
  60. package/templates/agents/orc-planner-mini-opus-5-med.md +3 -1
  61. package/templates/agents/orc-planner-mini-sonnet-5-high.md +3 -1
  62. package/templates/agents/orc-planner-opus-5-med.md +3 -1
  63. package/templates/agents/{orc-recon-sonnet-4-6-med.md → orc-recon-sonnet-5-med.md} +4 -4
  64. package/templates/agents/{orc-trace-writer-haiku-4-5.md → orc-trace-writer-haiku-5-high.md} +4 -3
  65. package/templates/commands/orc-doc.md +128 -128
  66. package/templates/commands/orc-export.md +51 -46
  67. package/templates/commands/orc-fast.md +10 -10
  68. package/templates/hooks/README.md +8 -3
  69. package/templates/hooks/orc-effort-guard.js +105 -27
  70. package/templates/hooks/orc-graph-hook.js +252 -4
  71. package/templates/hooks/orc-statusline.js +13 -6
  72. package/templates/hooks/orc-trace.js +1 -1
  73. package/templates/skills/_shared/README.md +2 -2
  74. package/templates/skills/_shared/code-graph.md +185 -251
  75. package/templates/skills/_shared/extra-dispatch.md +4 -4
  76. package/templates/skills/_shared/lane-contract.md +7 -3
  77. package/templates/skills/_shared/opus5-only.md +3 -3
  78. package/templates/skills/_shared/phases/execution.md +13 -11
  79. package/templates/skills/_shared/phases/planning.md +27 -9
  80. package/templates/skills/_shared/phases/preflight.md +3 -3
  81. package/templates/skills/_shared/phases/review.md +4 -3
  82. package/templates/skills/_shared/phases/ship.md +7 -10
  83. package/templates/skills/_shared/phases/summary.md +2 -3
  84. package/templates/skills/_shared/phases/trace-verbs.md +21 -16
  85. package/templates/skills/_shared/phases/trace.md +3 -3
  86. package/templates/skills/_shared/phases/wiki-consult.md +2 -2
  87. package/templates/skills/_shared/pr-templates.md +108 -106
  88. package/templates/skills/_shared/read-ladder.md +8 -2
  89. package/templates/skills/_shared/return-validation.md +10 -6
  90. package/templates/skills/_shared/review-slice.md +1 -1
  91. package/templates/skills/_shared/stack-plan.md +135 -135
  92. package/templates/skills/_shared/wait.md +14 -2
  93. package/templates/skills/context-combiner/SKILL.md +2 -2
  94. package/templates/skills/orc/SKILL.md +7 -7
  95. package/templates/skills/orc/config.md +2 -2
  96. package/templates/skills/orc/examples/full-run-mock.md +7 -7
  97. package/templates/skills/orc/references/effort-and-mode.md +222 -222
  98. package/templates/skills/orc/schemas/planning-output.md +3 -0
  99. package/templates/skills/orc-aftermath/SKILL.md +15 -15
  100. package/templates/skills/orc-analyze/SKILL.md +2 -2
  101. package/templates/skills/orc-analyze-mini/SKILL.md +2 -2
  102. package/templates/skills/orc-boundary/SKILL.md +15 -15
  103. package/templates/skills/orc-boundary/references/card.md +81 -78
  104. package/templates/skills/orc-boundary/references/gate.md +113 -113
  105. package/templates/skills/orc-brainstorm/SKILL.md +15 -15
  106. package/templates/skills/orc-budget/SKILL.md +15 -15
  107. package/templates/skills/orc-challenge/README.md +1 -1
  108. package/templates/skills/orc-challenge/SKILL.md +16 -16
  109. package/templates/skills/orc-challenge/examples/council-full-roster.md +1 -1
  110. package/templates/skills/orc-claude/SKILL.md +4 -4
  111. package/templates/skills/orc-claude/examples/claude-run-mock.md +1 -1
  112. package/templates/skills/orc-diy/SKILL.md +2 -2
  113. package/templates/skills/orc-diy/references/blocks/wiki.md +26 -26
  114. package/templates/skills/orc-diy/references/flow-schema.md +2 -2
  115. package/templates/skills/orc-doc/README.md +2 -2
  116. package/templates/skills/orc-doc/SKILL.md +501 -490
  117. package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +12 -1
  118. package/templates/skills/orc-doc/references/chunking.md +6 -4
  119. package/templates/skills/orc-doc/references/gates.md +311 -311
  120. package/templates/skills/orc-doc/references/resume-protocol.md +229 -228
  121. package/templates/skills/orc-explain/SKILL.md +88 -88
  122. package/templates/skills/orc-export/SKILL.md +190 -187
  123. package/templates/skills/orc-fast/SKILL.md +17 -14
  124. package/templates/skills/orc-grill/SKILL.md +16 -16
  125. package/templates/skills/orc-grill/references/grill-doc.md +1 -1
  126. package/templates/skills/orc-handoff/SKILL.md +11 -11
  127. package/templates/skills/orc-learn/SKILL.md +13 -13
  128. package/templates/skills/orc-learn/examples/learn-run-mock.md +2 -2
  129. package/templates/skills/orc-mini/SKILL.md +12 -12
  130. package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -5
  131. package/templates/skills/orc-pact/SKILL.md +15 -15
  132. package/templates/skills/orc-pact/references/gate.md +70 -70
  133. package/templates/skills/orc-pattern/SKILL.md +3 -3
  134. package/templates/skills/orc-poly/SKILL.md +4 -4
  135. package/templates/skills/orc-poly/examples/poly-run-mock.md +51 -51
  136. package/templates/skills/orc-pr-driver/SKILL.md +4 -3
  137. package/templates/skills/orc-pr-driver/references/orc-run-split.md +108 -99
  138. package/templates/skills/orc-pr-setup/SKILL.md +2 -2
  139. package/templates/skills/orc-quick/README.md +11 -12
  140. package/templates/skills/orc-quick/SKILL.md +29 -32
  141. package/templates/skills/orc-quick/references/context-doc.md +5 -5
  142. package/templates/skills/orc-quick/references/dispatch-gate.md +10 -10
  143. package/templates/skills/orc-quick/references/gh-mode.md +2 -1
  144. package/templates/skills/orc-quick/references/look.md +34 -12
  145. package/templates/skills/orc-retro/SKILL.md +2 -2
  146. package/templates/skills/orc-retro/examples/retro-mock.md +2 -2
  147. package/templates/skills/orc-route/SKILL.md +2 -2
  148. package/templates/skills/orc-test/SKILL.md +6 -3
  149. package/templates/skills/orc-verify/SKILL.md +2 -2
  150. package/templates/skills/orc-wait/SKILL.md +10 -2
  151. package/templates/skills/orc-wiki/SKILL.md +4 -4
  152. package/templates/skills/orc-wiki/references/pattern-prewarm.md +19 -19
  153. package/templates/agents/orc-executor-sonnet-4-6-med.md +0 -155
@@ -148,10 +148,10 @@ too.
148
148
 
149
149
  | slot | lane | the Claude agent it displaces | asked or announced | why this position may be held by a foreign worker |
150
150
  |---|---|---|---|---|
151
- | `quick-executor` | `/orc-quick` | `orc-executor-sonnet-4-6-med` · `orc-executor-opus-5-low` | **asked**, at the dispatch gate | the user picks the agent for every entry anyway, so a foreign worker is one more option on a menu they already read |
152
- | `fast-executor` | `/orc-fast` | `orc-executor-sonnet-4-6-high` | announced, F0 preflight | one executor, one slice, a build+test smoke gate behind it — the checks that catch a bad implementation here are engine-blind |
151
+ | `quick-executor` | `/orc-quick` | `orc-executor-sonnet-5-med` · `orc-executor-opus-5-low` | **asked**, at the dispatch gate | the user picks the agent for every entry anyway, so a foreign worker is one more option on a menu they already read |
152
+ | `fast-executor` | `/orc-fast` | `orc-executor-sonnet-5-med` | announced, F0 preflight | one executor, one slice, a build+test smoke gate behind it — the checks that catch a bad implementation here are engine-blind |
153
153
  | `doc-writer` | `/orc-doc` | `orc-doc-writer-opus-5-med` | announced, before the wave, naming the sections | a writer owns ONE part file and invents no fact; its output is read by a checker and by you before it ships |
154
- | `doc-checker` | `/orc-doc` | `orc-doc-checker-opus-5-low` | announced, before the wave | the checker reads one bounded part and reports; it rewrites nothing |
154
+ | `doc-checker` | `/orc-doc` | `orc-doc-checker-opus-5-low` | announced, before the wave | the checker reads only the bounded part files of one slice and reports; it rewrites nothing |
155
155
  | `test-designer` | `/orc-test` | `orc-test-designer-opus-5-high` | announced, the T1 `extra:` line, before any case runs | the designer writes a FILE the CLI reads back through a validating command, and a row that fails validation is refused BY NAME — so its output is checked before anything is sent |
156
156
  | `wiki-scanner-deep` | `/orc-wiki` | `orc-wiki-scanner-opus-5-low` | announced, per scan-batch, beside the resolved tier | a scanner returns an evidence-anchored doc body; every claim in it is anchored to a file you can open |
157
157
  | `wiki-scanner-light` | `/orc-wiki` | `orc-wiki-scanner-sonnet-5-high` | announced, per scan-batch, beside the resolved tier | the LIGHT tier is already a small no-new-surface delta on an existing doc |
@@ -1226,7 +1226,7 @@ Three rules hold it together.
1226
1226
  2. **The menu is COMPUTED and the band's own agent LEADS it.** It is what
1227
1227
  happens if the user just presses enter. The three alternates —
1228
1228
  `orc-executor-opus-5-med`, `orc-executor-opus-5-low`,
1229
- `orc-executor-sonnet-4-6-high` — are offered, and so is any installed agent
1229
+ `orc-executor-sonnet-5-high` — are offered, and so is any installed agent
1230
1230
  name, because the roster is generated and a closed list here would go stale
1231
1231
  the next time a band moves.
1232
1232
  3. **It changes WHO, never WHAT.** The score does not move, `declared_files` is
@@ -10,13 +10,17 @@ those values, and a spine never restates this file.
10
10
  ## Calls
11
11
 
12
12
  **ONE catalogue, and it is not you:** `orc lane calls <lane> --json` names every
13
- CLI call the lane makes. Each row gives the exit-code contract, the cost, when
14
- to run the call, and what an EMPTY answer means.
13
+ SHARED CLI call (a call that two or more lanes make). Each row gives the
14
+ exit-code contract, the cost, when to run the call, and what an EMPTY answer
15
+ means.
15
16
 
17
+ - A call that only this lane makes is not in the catalogue. Its spelling and its
18
+ exit codes are in the lane's own skill files.
16
19
  - Never invent a spelling. Never re-word an exit code.
17
20
  - Never re-derive a state word. The CLI's state words are the only state words.
18
21
  - **An exit code is an ANSWER wherever that contract says so, not a failure.**
19
- - A call that the answer does not name is a call the lane does not make.
22
+ - A call that neither the answer nor the lane's own skill files name is a call
23
+ the lane does not make.
20
24
  - The catalogue itself exits ≠ 0 → say that the CLI is unavailable. Before you
21
25
  run a command, name it out loud.
22
26
 
@@ -32,7 +32,7 @@ agent: same task slice, same return contract, same phase.
32
32
  | Role | Default agent | Opus-5-only variant |
33
33
  |------|---------------|---------------------|
34
34
  | mini executor | `orc-executor-sonnet-5-high` | `orc-executor-opus-5-low` |
35
- | fast executor | `orc-executor-sonnet-4-6-high` | `orc-executor-opus-5-low` |
35
+ | fast executor | `orc-executor-sonnet-5-med` | `orc-executor-opus-5-low` |
36
36
  | mini analyze | `orc-analyze-mini-sonnet-5-high` | `orc-analyze-mini-opus-5-med` |
37
37
  | mini plan | `orc-planner-mini-sonnet-5-high` | `orc-planner-mini-opus-5-med` |
38
38
  | scout | `orc-scout-sonnet-4-6-high` | `orc-scout-opus-5-low` |
@@ -55,10 +55,10 @@ while the flag is on is exactly the phantom this table exists to prevent. Ladder
55
55
 
56
56
  ## Out of scope — never forced
57
57
 
58
- - **`orc-trace-writer-haiku-4-5` stays Haiku 4.5.** It transcribes a packet the
58
+ - **`orc-trace-writer-haiku-5-high` stays Haiku 4.5.** It transcribes a packet the
59
59
  orchestrator hands it — no reasoning, no source reads. It is never in the
60
60
  roster.
61
- - **`orc-graph-noter-sonnet-4-6-med` is not dispatched at all.** It has no Opus 5.5
61
+ - **`orc-graph-noter-haiku-5-high` is not dispatched at all.** It has no Opus 5.5
62
62
  variant: under the mode a code lane skips graph notes and prints
63
63
  `graph notes: skipped (opus5_only)` (`code-graph.md` §6). The graph's structure
64
64
  layer costs no model, so nothing else about the graph changes.
@@ -27,10 +27,10 @@ the codifier); hold resolved patterns in run state.
27
27
  1. Dispatch EVERY task as a spawned subagent (emit `DISPATCH <agent> :: <task>
28
28
  expect=<model>/<effort>` BEFORE the Task call; subagent wrapper framing + the
29
29
  task's INPUT SLICE per orc-execution/core.md + its scored model). Every
30
- slice carries ONE `orc graph ctx --for-slice <the task's declared_files> --if-enabled --json --brief`
31
- `card` as its `graph` block (`../code-graph.md` §7; exit 3 = off → no block) —
32
- the OUTSIDE view only, because the executor reads each declared file in full
33
- itself,
30
+ slice that writes code carries `graph_anchors` from ONE anchors call —
31
+ `orc graph ctx --for-slice <the task's declared_files> --focus=<the planning words> [--refs=<task.precedent>] --anchors --if-enabled --json --brief` (a request that names one symbol: `ctx <symbol> --anchors` gives the card and the anchors in one call)
32
+ (`../code-graph.md` §0 step 3, §7): print its `line`; paste its `card` into
33
+ the slice VERBATIM as `graph_anchors`, with its `read all: …` line and its code block — never shorten it; exit 3 or 4 → none. With `graph_anchors` in the slice, list at most ONE wiki page path (the one about the feature's intent), not 1–3. No anchors when the change stays inside ONE file the user named and nothing outside it changes (no signature change, no new export) — the executor reads that file anyway. The slice also carries
34
34
  the task's `acceptance[]`, its `tdd_spec` tests (the executor
35
35
  implements to green: implement→test→repair, cap `tdd_loop_max`, emitting
36
36
  `TDD-RED`/`TDD-GREEN` per iteration; cap hit → STOP SEQUENCE + honest red
@@ -71,13 +71,14 @@ the codifier); hold resolved patterns in run state.
71
71
  `unmet[]` is `partial`.
72
72
  4. **Post-wave worktree audit (GATE, `_shared/return-validation.md` §6):** diff `git status --short` before/after the wave — a changed path in NO task's `declared_files`, INCLUDING one that became less modified (the revert signature), blocks the close until named and decided.
73
73
  Overlap → `failure_reason: "file-collision:<file> with <agent>"`, requeue later wave.
74
- 4a. **Code graph (`../code-graph.md` §5–§6):** after the audit, ONE call —
74
+ 4a. **Code graph (`../code-graph.md` §5–§6):** ONLY when `probes["graph-status"].update_step`
75
+ is `lane` (else the hook already did it — no call): after the audit, ONE call —
75
76
  `orc graph update --notes-pending --files <the wave's changed paths> --at wave --if-enabled --json --brief`
76
77
  (emit `GRAPH-UPDATE`; the answer's `notes_pending` is the notes half):
77
- `notes_pending.exit` 0 → dispatch `orc-graph-noter-sonnet-4-6-med` (slice = paths only) in the
78
+ `notes_pending.exit` 0 → dispatch `orc-graph-noter-haiku-5-high` (slice = paths only) in the
78
79
  SAME tool block as the next wave's first dispatch; 3 or 5 → nothing, the
79
80
  symbols wait for a later batch. The noter returns ONE line (emit `GRAPH-NOTES`) —
80
- never pull its notes into this context. A slice that carried cards gets a
81
+ never pull its notes into this context. A slice that carried `graph_anchors` gets a
81
82
  `graph:` continuation on its `DISPATCH` line and a `graph_used` return.
82
83
  5. Append worker `log_entries` to the decision log; regenerate the digest.
83
84
  **Gotcha capture (`gotchas: on`):** a return that CLOSED a repair loop carries
@@ -139,11 +140,12 @@ outside `declared_files` (a revert included) gates the wave close.
139
140
  <!-- /diy:when -->
140
141
 
141
142
  <!-- diy:when code_graph=on -->
142
- Code graph cache (never skipped): each slice gets ONE `orc graph ctx --for-slice <the task's
143
- declared_files> --if-enabled --json --brief` `card` as its `graph` block, and the return
144
- carries `graph_used`. After each wave's worktree audit run ONE call —
143
+ Code graph anchors (never skipped): each slice that writes code carries `graph_anchors` (the `card`, inline) from
144
+ ONE call — `orc graph ctx --for-slice <the task's declared_files> --focus=<the planning words> [--refs=<task.precedent>] --anchors --if-enabled --json --brief`
145
+ (print its `line`; exit 3 or 4 → none), and the return carries `graph_used`. ONLY when
146
+ `update_step` is `lane`, after each wave's worktree audit run ONE call —
145
147
  `orc graph update --notes-pending --files <the wave's changed paths> --at wave --if-enabled --json --brief`
146
- (copy its `trace` verbatim); `notes_pending.exit` 0 → dispatch `orc-graph-noter-sonnet-4-6-med` paired
148
+ (copy its `trace` verbatim); `notes_pending.exit` 0 → dispatch `orc-graph-noter-haiku-5-high` paired
147
149
  with the next wave's first dispatch, exit 3 or 5 → nothing. Canonical:
148
150
  `.claude/skills/_shared/code-graph.md`.
149
151
  <!-- /diy:when -->
@@ -20,20 +20,22 @@ task (advisory) and print + emit `CROSSLINK <state> :: boundaries=<n> peers=<nam
20
20
  only pre-built needs/cache, never peer source live). **Gotchas (repair memory,
21
21
  config `gotchas`):** probe ONCE with `orc gotcha status` (exit 0 = entries exist,
22
22
  1 = none — never a `find`); canonical `_shared/gotchas.md`.
23
- **Code graph (`../code-graph.md` §3b and §7):** with the graph on, run
24
- `orc graph map --focus <every file or symbol the request NAMES> --if-enabled --json --brief`
23
+ **Code graph (`../code-graph.md` §0 step 2, §3b):** with the graph on, run
24
+ `orc graph map --focus=<3–6 words from the request> --budget 800 --if-enabled --json --brief`
25
25
  **FIRST, once** — before any Glob and before `impact`. It ranks the repository
26
- around the request and names the files worth reading, which is the question
27
- `impact` cannot answer because `impact` needs the files already chosen. Print its
26
+ around the request and names the files worth reading; `impact` cannot answer that,
27
+ because it needs the files already chosen. Print its
28
28
  `line` and emit `GRAPH-MAP`. Rank is a HINT about where to look first, never
29
29
  proof a file matters — and never a reason to skip reading a range you will edit.
30
- Exit 1 or 3 → orient exactly as before. Then run
30
+ Never call `map` twice. Exit 1 or 3 → orient exactly as before. Then run
31
31
  `orc graph impact <candidate declared_files> --if-enabled --json --brief` and hand its
32
32
  callers to the planner — they sharpen `declared_files` and the `fan` and risk
33
- facets. Also run `orc graph cochange <each candidate file> --if-enabled --json --brief`:
34
- it answers "what else will I have to touch" from HISTORY, which a static edge
35
- cannot see. Co-change is a HINT about people, never a dependency — exit 4 means
36
- this file changes alone, which is an answer. Exit 3 or 4 → plan exactly as before.
33
+ facets. `/orc`, `/orc-ultra` and `/orc-diy` also run
34
+ `orc graph cochange <each candidate file> --if-enabled --json --brief`: it answers
35
+ "what else will I have to touch" from HISTORY. Co-change is a HINT about people,
36
+ never a dependency. A short history answers exit 4 at once — this file changes
37
+ alone, which is an answer. Exit 3 or 4 → plan exactly as before. A task's optional
38
+ `precedent[]` (the planner's copy-from files) becomes that task's pack `--refs=`.
37
39
  **Pact / boundary / aftermath / wiki debt (all CONSUMED here, never
38
40
  written here):** probe `orc pact status --json` (`pact_gate`, default `warn`),
39
41
  `orc boundary status --json` (`boundary_gate`, default `warn`), `orc wiki debt
@@ -136,4 +138,20 @@ TDD is ON for this flow: the plan must carry a `tdd_spec` per requirement
136
138
  project → whole-run exemption, stated once at preflight.
137
139
  <!-- /diy:when -->
138
140
 
141
+ <!-- diy:when code_graph=on -->
142
+ Code graph — consult (before the first dispatch): print `probes["graph-status"].line` from
143
+ `orc lane config orc-diy --json`. Run `orc graph status --if-enabled --heal --json --brief` only
144
+ when `heal_needed` is true. Put the `trace` (`GRAPH-CONSULT …`) in the next packet as it is.
145
+ Exit 3 (`off` or `semi`) → make NO other graph call in this run.
146
+
147
+ Code graph — orient (once, before the planner chooses files): run
148
+ `orc graph map --focus=<3–6 words from the request> --budget 800 --if-enabled --json --brief`
149
+ FIRST, once; print its `line` and emit `GRAPH-MAP`. Rank is a HINT about where to look first,
150
+ never proof a file matters. Never call `map` twice. Then run
151
+ `orc graph impact <candidate declared_files> --if-enabled --json --brief` and hand its callers to
152
+ the planner. Also run `orc graph cochange <each candidate file> --if-enabled --json --brief`:
153
+ a HINT about people, never a dependency; a short history answers exit 4 at once. Exit 3 or 4 →
154
+ plan exactly as before. A task's optional `precedent[]` becomes that task's pack `--refs=`.
155
+ Canonical: `.claude/skills/_shared/code-graph.md`.
156
+ <!-- /diy:when -->
139
157
  <!-- /orc:layer -->
@@ -81,9 +81,9 @@ that the line is printed and when.
81
81
  dispatch — never skipped. Run `orc graph status --if-enabled --heal --json --brief`
82
82
  only when `heal_needed` is true (it builds or updates the graph, free). Put the
83
83
  `trace` (`GRAPH-CONSULT …`) in the next packet as it is — never as a `GATE` line
84
- in your own words. While the graph is
85
- on, `orc lane config` prints the three graph steps in `announce[]` (`../code-graph.md`
86
- §0). **The lane reads no `code_graph` key:** `--if-enabled`
84
+ in your own words. Exit 3 (`off`, or `semi` — kept current, never read) → make no other
85
+ graph call in this run. While the graph is on, `orc lane config` prints the four graph
86
+ touchpoints in `announce[]` (`../code-graph.md` §0). **The lane reads no `code_graph` key:** `--if-enabled`
87
87
  makes the CLI decide, which is how `/orc-quick` takes part while its step 1 still
88
88
  reads `log_dir` and nothing else. A graph that cannot be built never stops a run,
89
89
  and `/orc-fast` gains no third gate. Every other lane prints nothing.
@@ -53,9 +53,10 @@ P0/P1 findings gate anything; P2/P3 findings are listed once in the summary
53
53
  and never re-offered as fix-up tasks.
54
54
  <!-- /diy:when -->
55
55
  <!-- diy:when code_graph=on -->
56
- With the code graph on, the reviewer also gets the callers from
57
- `orc graph changes --if-enabled --json` — an unchanged caller of a
58
- changed signature is a finding candidate (`.claude/skills/_shared/code-graph.md` §7).
56
+ With the code graph on, run ONCE
57
+ `orc graph changes --files=<the changed paths> --if-enabled --json --brief`: print its `tests_line`,
58
+ run its `tests[]` first, print its `blast_line`, and hand the reviewer its callers — an unchanged
59
+ caller of a changed signature is a finding candidate (`.claude/skills/_shared/code-graph.md` §0 step 4).
59
60
  <!-- /diy:when -->
60
61
 
61
62
  <!-- /orc:layer -->
@@ -41,14 +41,10 @@ wiki now?"** (H `orc.phase-8.wiki-refresh`); on "later" print the prominent stal
41
41
  usage report — /usage limits + the full dispatch log (model/effort/score per
42
42
  subagent). The user must always know what the run cost. A `proposal` in
43
43
  `habits{}` → its ONE line joins that report (`../habits.md` §3). **Code graph
44
- (`../code-graph.md` §5–§6):** run `orc graph update --if-enabled` once more —
45
- fix rounds move code — and emit `GRAPH-UPDATE`; then run `orc graph notes pending
46
- --files <every path the run changed> --at end --if-enabled` — exit 0 → one noter
47
- dispatch, exit 3 or 5 → nothing. Then ONE line, once, copied VERBATIM from
48
- `orc graph gain --run <this run's trace name> --if-enabled --json --brief` (emit
49
- `GRAPH-GAIN`): what the graph put in, and an ESTIMATE of the retrieval it kept
50
- out. Exit 1 or 3 → no line. **Never restate it as one number** — the range and
51
- the word "estimate" are the claim. Finally emit
44
+ (`../code-graph.md` §5–§6):** ONLY when `probes["graph-status"].update_step` is
45
+ `lane`, run `orc graph update --notes-pending --files <every path the run changed> --at end --if-enabled --json --brief`
46
+ once more — fix rounds move code — and emit `GRAPH-UPDATE`; `notes_pending.exit` 0 →
47
+ one noter dispatch, 3 or 5 → nothing. No lane calls `orc graph gain`. Finally emit
52
48
  `PHASE ship end`, then the one-line `STATS lane=… dispatches=… downgrades=…`
53
49
  summary (trace.md — what `orc stats` reads), then `FINISH :: <detail>`,
54
50
  and in ONE step delete BOTH `log_dir/.current` and the run's `RESUME.md` (that
@@ -64,8 +60,9 @@ State the current branch and the change summary BEFORE any git action, and
64
60
  never ship on a red build (locked rule).
65
61
 
66
62
  <!-- diy:when code_graph=on -->
67
- Before the ship action, run `orc graph update --if-enabled` once more — fix rounds
68
- move code (`.claude/skills/_shared/code-graph.md` §5).
63
+ Before the ship action, ONLY when `update_step` is `lane`, run
64
+ `orc graph update --notes-pending --files <every path the run changed> --at end --if-enabled --json --brief`
65
+ once more — fix rounds move code (`.claude/skills/_shared/code-graph.md` §5).
69
66
  <!-- /diy:when -->
70
67
  <!-- diy:when ship_mode=ask -->
71
68
  Ask the user how to ship: commit, PR (via
@@ -54,7 +54,7 @@ entry that wrote code. Every detail goes BELOW the card, never above it.
54
54
  ✅ Fixed the null charge on guest checkout — 3 files, tests 14 passed (2 affected first)
55
55
  review 2 findings · 1 fixed · 1 disputed (recorded) gotchas 1 recorded (G-044)
56
56
  risk low — callers 3 in 2 files, tests reach 2 habits 1 proposal below
57
- flaky 1 test passed on the re-run (no repair round) graph <gain line>
57
+ flaky 1 test passed on the re-run (no repair round) graph <pack line>
58
58
  undo orc undo --run <run-slug> next commit? (your usual: review → commit)
59
59
  ```
60
60
 
@@ -69,5 +69,4 @@ entry that wrote code. Every detail goes BELOW the card, never above it.
69
69
  `undo none — no snapshot`. The command only PRINTS the undo; `--apply` runs
70
70
  it. The lane never runs it itself.
71
71
  - **Copy the CLI's words.** `risk` is the `blast_line` with its `why`;
72
- `graph` is the `orc graph gain` `line`, VERBATIM — an estimate with a range,
73
- never restated as a saving. `flaky` is the `GATE flaky` tests.
72
+ `graph` is the last pack call's `line`, VERBATIM (no lane calls `orc graph gain`). `flaky` is the `GATE flaky` tests.
@@ -19,14 +19,15 @@ owner is this file has its detail in "Verb detail" below.
19
19
  | `CONFIG <key=value …>` | orc → writer | Phase 1 — the resolved config values this run will consume, ALWAYS with opus5_only | `_shared/phases/trace-verbs.md` |
20
20
  | `WIKI-CONSULT <fresh\|aging\|stale\|absent\|empty> :: docs=<list\|none>` | orc → writer | project wiki consulted for grounding, with its staleness tier | `_shared/phases/wiki-consult.md` |
21
21
  | `CROSSLINK <cached\|configured-no-cache\|none> :: boundaries=<n> peers=<names> · CROSSLINK inject task=<id> :: <boundary>` | orc → writer | cross-repo peer-knowledge state at the consult point; `inject` when a slice receives a linked contract | `_shared/phases/wiki-consult.md` |
22
- | `GRAPH-CONSULT <fresh\|updated\|built\|drifted\|none\|off> :: files=<n> symbols=<n>[ density=<n>[ thin=1]] · GRAPH-CONSULT card task=<id> :: targets=<…>` | orc → writer | the code graph's preflight state, copied VERBATIM from the CLI `trace` field | `_shared/code-graph.md` |
22
+ | `GRAPH-CONSULT <fresh\|updated\|built\|drifted\|none\|semi\|off\|pack\|anchors> :: files=<n> symbols=<n>[ density=<n>[ thin=1]] · GRAPH-CONSULT card task=<id> :: targets=<…> · GRAPH-CONSULT pack :: files=<n> refs=<n> excerpts=<n> tokens=<n> gen=<n> · GRAPH-CONSULT anchors :: ranges=<n> files=<n> gen=<n>` | orc → writer | the code graph's preflight state, copied VERBATIM from the CLI `trace` field | `_shared/code-graph.md` |
23
23
  | `GRAPH-UPDATE <state> :: parsed=<n> reused=<n> deleted=<n> gen=<n> route=<n> ms=<n>` | orc → writer | one graph update, the `trace` field of `orc graph update --json`, verbatim | `_shared/phases/trace-verbs.md` |
24
24
  | `GRAPH-MAP <repo\|focused> :: files=<shown>/<total> [focus=<a,b>] gen=<n>` | orc → writer | ONE line at the start of planning, the `trace` field of `orc graph map --json`, verbatim | `_shared/phases/trace-verbs.md` |
25
25
  | `GRAPH-CHANGES <found\|none> :: symbols=<n> high=<n> medium=<n> low=<n> gen=<n>` | orc → writer | one line at review, the `trace` field of `orc graph changes --json`, verbatim | `_shared/phases/trace-verbs.md` |
26
26
  | `GRAPH-COMPLEXITY <mini-ok\|recommend-orc> :: files=<n> callers=<n> caller_files=<n> maybe=<n> tests=<n> risk=<n> cochange=<n> gen=<n>` | orc → writer | one line per /orc-mini run, the `trace` field of the `--complexity` impact call, verbatim | `_shared/phases/trace-verbs.md` |
27
- | `GRAPH-COCHANGE <found\|none> :: rows=<n> commits=<n>` | orc → writer | one line per planning batch, for the file that produced the widest answer | `_shared/phases/trace-verbs.md` |
27
+ | `GRAPH-COCHANGE <found\|none> :: rows=<n> commits=<n> · GRAPH-COCHANGE none :: history=<n>` | orc → writer | one line per planning batch, for the file that produced the widest answer | `_shared/phases/trace-verbs.md` |
28
+ | `GRAPH-COVERAGE <clean\|gaps> :: paths=<n> gaps=<n> gen=<n>` | orc → writer | the `trace` field of `orc graph coverage --json` — which files a card's silence can be trusted on | `_shared/phases/trace-verbs.md` |
28
29
  | `GRAPH-HINT injected=<n> subagent_start=<n> read_notes=<n> updates=<n>` | orc → writer | ONE line per phase close, the graph hook's counters; omitted when the counter file does not exist | `_shared/phases/trace-verbs.md` |
29
- | `GRAPH-GAIN paid=<n> low=<n> high=<n> calls=<n>` | orc → writer | ONE line per run at ship; `paid` is exact, `low`/`high` are an estimate never collapsed into one number | `_shared/phases/trace-verbs.md` |
30
+ | `GRAPH-GAIN paid=<n> low=<n> high=<n> calls=<n>` | orc → writer | OLD traces only — no lane emits it now (`orc graph gain` is a user command); `paid` is exact, `low`/`high` are an estimate never collapsed into one number | `_shared/phases/trace-verbs.md` |
30
31
  | `GRAPH-NOTES <applied\|below-min\|none\|deferred\|off\|skipped> :: <detail>` | orc → writer | one notes batch; `applied` copies the noter's one-line return verbatim | `_shared/phases/trace-verbs.md` |
31
32
  | `SPAWN <agent>` | hook | an agent dispatch was observed (skeleton) | `hooks/orc-trace.js` |
32
33
  | `RETURN <agent> :: <desc> dur=<m>m<s>s [model=<id>]` | hook | a subagent finished (skeleton) — not an orchestrator obligation; the model check is VERIFY | `hooks/orc-trace.js` |
@@ -44,17 +45,19 @@ owner is this file has its detail in "Verb detail" below.
44
45
  | `FINDING p0=<n> p1=<n> p2=<n> p3=<n>[ pre=<n> suppressed=<n> folded=<n>]` | reviewer→orc → writer | review outcome (P0–P3 severity ladder); the tail counts the after-filter's buckets | `_shared/phases/review.md` |
45
46
  | `FINDING-OUTCOME addressed=<n> disputed=<n> wontfix=<n> open=<n> pre=<n> suppressed=<n> :: <cat>:<addressed>/<total>,…` | orc → writer | ONE line at review close (a clean review too) — what became of each finding; `orc gotcha quality` counts it as a review | `_shared/phases/trace-verbs.md` |
46
47
  | `REVIEW-WHICH chose=<orc\|project\|skip> name=<the review the rule names> by=<user\|ledger\|learned> :: <file:line of the rule>` | orc → writer | the answer to §0 "which review" when the project names its own review — written ALWAYS, also under habits off; the FINISH nudge reads it | `_shared/phases/trace-verbs.md` |
47
- | `FIX source=<sonar\|ci\|defect\|pr\|review\|other> introduced_by=<orc\|ai\|human\|unknown> by=<user\|evidence> obs=<id8>[ missed_by=<run>] :: <path:lines> <rule or finding>` | cli | one fix recorded by `orc fix record` (/orc-fix) into the HOST run's trace — the CLI writes it, never a packet | `orc-fix/SKILL.md` |
48
+ | `FIX source=<sonar\|ci\|defect\|pr\|review> introduced_by=<orc\|ai\|human\|unknown> by=<user\|evidence> obs=<id8>[ missed_by=<run>] :: <path:lines> <rule or finding>` | cli | one fix recorded by `orc fix record` (/orc-fix) into the HOST run's trace — the CLI writes it, never a packet — `source` is the FILED kind: a class `other` is filed as `defect` | `orc-fix/SKILL.md` |
49
+ | `WAIT mode=<safe\|soft\|hard> requested=<n>m start=<HH:MM> end=<HH:MM> hops=<planned>/<max> trigger=<user\|gate> · WAIT end :: done=<k>/<planned> reason=<elapsed\|recovered\|cancelled\|max-hops> · WAIT block :: reason="<why>" by=user · WAIT unblock` | cli | a wait started, ended, blocked or unblocked — `orc wait` writes it into the open trace, never a packet | `_shared/wait.md` |
48
50
  | `VERDICT pass\|fail :: <detail>` | verifier→orc → writer | verification outcome | `_shared/phases/verify.md` |
49
51
  | `DRIFT loop=<n> :: <user description, compressed>` | orc → writer | mock-example drift-recovery loop opened (hard cap 2 loops) | `_shared/drift-recovery.md` |
50
52
  | `TDD-RED task=<id> iter=<n> :: <failing tests>` | executor→orc → writer | TDD repair-loop iteration — the plan's acceptance tests still red | `_shared/phases/trace-verbs.md` |
51
53
  | `TDD-GREEN task=<id> iter=<n>` | executor→orc → writer | the task's TDD acceptance tests pass | `_shared/phases/trace-verbs.md` |
52
54
  | `REPRO red\|green :: <cmd> exit=<n> · REPRO none :: <reason>` | executor→orc → writer | a DEFECT task's reproduction: RED before the fix, GREEN after | `_shared/return-validation.md` |
53
- | `NOTE :: <decisions>` | writer | the packet's `decisions` field — the WHY layer; one line, only when non-empty | `agents/orc-trace-writer-haiku-4-5.md` |
55
+ | `NOTE :: <decisions>` | writer | the packet's `decisions` field — the WHY layer; one line, only when non-empty | `agents/orc-trace-writer-haiku-5-high.md` |
54
56
  | `STATS lane=<l> slug=<s> dispatches=<n> waves=<n> tasks=<n> bands=<h:n,m:n,l:n> downgrades=<n> duration_ms=<n>` | orc → writer | ONE summary line per run, in the FINISH packet, immediately BEFORE the FINISH line | `_shared/phases/trace-verbs.md` |
55
57
  | `PACT <state> :: <ids> · PACT inject task=<id> :: <PACT-id> · PACT recheck pass\|fail :: <ids>` | orc → writer | invariant-ledger state at the Phase-1 probe, a promise injected into a task, the Phase-6 recheck | `orc-pact/references/gate.md` |
56
58
  | `BOUNDARY <EXECUTE\|ESCALATE\|REFUSE\|unknown> task=<id> :: <area> · BOUNDARY lift task=<id> :: <area>` | orc → writer | per-task boundary verdict; an uncarded area is `unknown`, never REFUSE | `orc-boundary/references/gate.md` |
57
59
  | `CHALLENGE iter=<n> findings=P0:<n>/P1:<n>/P2:<n> coverage=<n>% verdict=PASS\|FAIL · CHALLENGE accept\|rebut :: <id> · CHALLENGE regoal\|retemplate :: v<n>` | orc → writer | one line per completed /orc-challenge iteration — `orc challenge record`'s `trace_line`, verbatim | `orc-challenge/SKILL.md` |
60
+ | `DOC cycle=<n> sections=<k>/<m>[ wave=<k>/<n>]` | orc → writer | one line per completed /orc-doc cycle — a completed WAVE is a completed cycle | `orc-doc/SKILL.md` |
58
61
  | `EXTRA <profile>/<model> engine=<api\|claude-shim\|cli> task=<id> band=[lo,hi) tok=in/cw/cr/out outcome=<done\|partial\|failed\|fallback> dur=<m>m<s>s · EXTRA fallback task=<id> :: <reason> → <agent> · EXTRA substitution task=<id> :: requested=<m> reported=<m> · EXTRA reroute task=<id> :: <providers> · EXTRA resume task=<id> attempt=<n> :: from=<reason> attribution=<verdict> target=<extra:profile\|agent> files_preexisting=<n> · EXTRA orphan task=<id> :: attempt=<n> lease-expired files_changed=<n> state=<state> · EXTRA demote run=<slug> :: profile=<p> reason=<consecutive-stall\|stale-live-attempt\|manual> n=<k> → <ladder>` | orc → writer | one line per FOREIGN dispatch — `orc extra dispatch`'s `trace_line`, verbatim | `_shared/extra-dispatch.md` |
59
62
  | `FINISH :: <detail>` | orc → writer | run ended — mandatory, even on an abort | `_shared/phases/trace.md` |
60
63
 
@@ -98,17 +101,19 @@ reaches the file through a packet — you never append lines by hand.
98
101
  `orc graph status --heal --json --brief` (`code-graph.md` §4). `density=` is
99
102
  the named symbols per file, and `thin=1` means most files hold none, so most
100
103
  questions asked of the graph will not find one (v1.9.1). A `GATE` line that
101
- describes the graph in other words does not replace it. The `card` form is the
102
- `trace` of `orc graph ctx --json`, with `task=` added, when a slice receives
103
- cards.
104
- - **`GRAPH-UPDATE`.** One graph update at a wave close, a green smoke gate, a
105
- code-writing `/orc-quick` request, or ship. The graph HOOK writes its own
104
+ describes the graph in other words does not replace it. The `anchors` form is the
105
+ `trace` of the anchors call (`orc graph ctx --for-slice … --anchors --json --brief`),
106
+ with `task=` added, when a slice receives `graph_anchors`. The `card` form is the
107
+ `trace` of a plain `orc graph ctx --json` (an orient call).
108
+ - **`GRAPH-UPDATE`.** One lane graph update — ONLY when `update_step` is `lane` — at a
109
+ wave close, a green smoke gate, a code-writing `/orc-quick` request, or ship. The graph HOOK writes its own
106
110
  `GRAPH-UPDATE … :: by=hook …` lines directly; never copy one of those, it is
107
111
  already in the file.
108
112
  - **`GRAPH-MAP`.** Also at a `/orc-quick` Q1 look that had no file to name.
109
113
  `files=` is how many the budget SHOWED over how many the repository has, so a
110
114
  short map can be told from a small repository. `focused` means `--focus`
111
- re-ranked the repository around what the request named. RANK is a hint about
115
+ re-ranked the repository around the files the focus RESOLVED to (`repo` when
116
+ nothing resolved). RANK is a hint about
112
117
  where to look first and the trace never says more than that.
113
118
  - **`GRAPH-CHANGES`.** `high` counts symbols that are exported, have three or
114
119
  more callers and NO test reaching them.
@@ -119,13 +124,13 @@ reaches the file through a packet — you never append lines by hand.
119
124
  the USER chose after the offer.
120
125
  - **`GRAPH-COCHANGE`.** Not per file — the `trace` field of
121
126
  `orc graph cochange --json` for the file that produced the widest answer.
127
+ - **`GRAPH-COVERAGE`.** One line per `coverage` call. `gaps` counts files the
128
+ extractor did not finish; a gap is an answer, never an error.
122
129
  - **`GRAPH-HINT`.** Not one per hint — the counters `orc-graph-hook.js` keeps in
123
130
  `<log_dir>/<run>.graph-hook.json`. Omitted when the file does not exist (the
124
131
  hook is off, or it never had anything to say).
125
- - **`GRAPH-GAIN`.** The `trace` field of `orc graph gain --run <trace name>
126
- --json`, verbatim. `paid` is exact (the tokens the graph put in); `low`/`high`
127
- are an ESTIMATE of the retrieval it kept out. Omitted when the ledger is empty
128
- or the graph is off.
132
+ - **`GRAPH-GAIN`.** Kept so OLD traces still parse. No lane emits it now: `orc graph gain`
133
+ is a user command. `paid` is exact; `low`/`high` are an ESTIMATE.
129
134
  - **`GRAPH-NOTES`.** The `trace` field of `orc graph notes pending --json` when
130
135
  it exited 3 or 5; `skipped` under the Opus-5-only mode.
131
136
  - **`RETURN`.** The hook attributes the RETURN to the finishing agent from the
@@ -282,7 +287,7 @@ for every run even if the orchestrator never writes a rich marker. Only
282
287
  formats — the two halves agree by construction. An unknown verb, a missing or
283
288
  "now" `ts`, or a parse error exits 2 and writes NOTHING; a missing `.current`
284
289
  on a later packet exits 3. Only on exit ≠ 0 does the lane dispatch
285
- `orc-trace-writer-haiku-4-5` with the SAME packet (the fallback).
290
+ `orc-trace-writer-haiku-5-high` with the SAME packet (the fallback).
286
291
  - **Pairing rule (the anti-forget mechanism).** The write for phase N is issued
287
292
  **in the same tool block as phase N+1's first dispatch** — logging
288
293
  piggybacks on the very action the model reliably performs. A phase with no next
@@ -1,6 +1,6 @@
1
1
  # Phase — Behavior trace (id: `trace`)
2
2
 
3
- > **Library file.** `orc lane phases <lane> --json` → `trace_grammar` gives this lane's verbs. **A verb not in `trace_grammar` → read `trace-verbs.md`** (the CLOSED set, on demand). Never invent a verb.
3
+ > **Library file.** `orc lane phases <lane> --json` gives `trace_grammar` (the verbs) and `ask_ids` (the ASK question ids) at the top level. **A verb not in `trace_grammar` → read `trace-verbs.md`** (the CLOSED set, on demand). Never invent a verb.
4
4
 
5
5
  <!-- orc:layer core -->
6
6
 
@@ -13,7 +13,7 @@ dispatch and writes the `SPAWN`/`RETURN`/`PHASE-EDGE` skeleton itself. Only
13
13
  ## Narration is WRITTEN BY THE CLI, not remembered (v2.0.0 — the core rule)
14
14
 
15
15
  > **Phase close = pipe the phase packet to `orc trace write --packet -`.**
16
- > Exit ≠ 0 → dispatch `orc-trace-writer-haiku-4-5` with the SAME packet.
16
+ > Exit ≠ 0 → dispatch `orc-trace-writer-haiku-5-high` with the SAME packet.
17
17
 
18
18
  You supply the facts; the CLI holds the pen. You never append lines by hand.
19
19
 
@@ -125,7 +125,7 @@ its REAL timestamp into a phase packet (`PHASE`, `DISPATCH`/`VERIFY` per spawn
125
125
  `actual_model`/`actual_effort` vs expected, surface any ⛔ DOWNGRADE to the user
126
126
  — `SCORE`, `OUTCOME`, `GATE`, `FINDING`/`VERDICT` for whichever gates this flow
127
127
  enabled, `FINISH`, plus `decisions` = the WHY), then pipe it to
128
- `orc trace write --packet -` (exit ≠ 0 → `orc-trace-writer-haiku-4-5`), PAIRED
128
+ `orc trace write --packet -` (exit ≠ 0 → `orc-trace-writer-haiku-5-high`), PAIRED
129
129
  with the next phase's first dispatch. **One packet per ENABLED phase group, minimum 2** — the flow shape is
130
130
  composed, so the packet count is too; a phase this flow turned OFF owes nothing.
131
131
  A phase ending with `zero new trace lines is a protocol violation`.
@@ -70,7 +70,7 @@ in play.
70
70
  config/env work.
71
71
 
72
72
  **Lane delta — orc-fast and orc-mini pass POINTERS, not content:** each selects
73
- 1–3 page PATHS from `wiki/INDEX.md` and puts the paths in its slices with the
73
+ 1–3 page PATHS from `wiki/INDEX.md` (a slice that carries graph anchors lists at most one page) and puts the paths in its slices with the
74
74
  instruction to READ them first (TL;DR for orientation, `Contracts & shapes` for
75
75
  specifics). Neither pastes a wiki body into a slice, and neither reads one into
76
76
  its OWN context — for fast, a Sonnet-medium orchestrator curating wiki prose
@@ -120,7 +120,7 @@ where it is used**, not only where it was selected.
120
120
  gets a wiki continuation naming the docs and the tier AT TIME OF USE:**
121
121
 
122
122
  ```
123
- DISPATCH orc-executor-sonnet-5-high :: T4 modify health API expect=sonnet-5/high
123
+ DISPATCH orc-executor-sonnet-5-high :: T4 modify health API expect=sonnet-5-5/high
124
124
  wiki: FRESH — 2 docs → orc-feature-health.md, orc-reference-api-surface.md
125
125
  ```
126
126