@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
@@ -39,12 +39,12 @@ Fit gate + one question
39
39
 
40
40
  > nothing, follow api/orders/
41
41
 
42
- Dispatch orc-executor-sonnet-4-6-high
42
+ Dispatch orc-executor-sonnet-5-med
43
43
  slice carries:
44
44
  · wiki pointers wiki/orc-feature-orders.md (the route table)
45
45
  · the express pattern, copied in literally
46
46
  · your one constraint
47
- returned as: claude-sonnet-4-6 / high ✓
47
+ returned as: claude-sonnet-5-5 / medium ✓
48
48
 
49
49
  Smoke gate
50
50
  build ✓
@@ -1,146 +1,146 @@
1
- # Mock run — `/orc-quick`
2
-
3
- > Ask for anything. Three steps: look → ask once → do. It always asks you
4
- > which agent should run.
5
-
6
- ---
7
-
8
- ## 1. What it does
9
-
10
- Every other lane has a fixed job. This one does not. A small fix, a question
11
- about how something works, a defect hunt, a dependency bump, or the review
12
- comments on a pull request — all the same three steps.
13
-
14
- The point of the lane is the **dispatch gate**: before every single dispatch it
15
- asks you which agent to use. No default. No "same as last time". No setting can
16
- turn it off — `opus5_only`, `fable5_*` and `rubric_bands_override` are all
17
- inert here, and the gate says so when they are on.
18
-
19
- ---
20
-
21
- ## 2. The run
22
-
23
- ```
24
- > /orc-quick the refund badge shows "pending" even after the webhook lands
25
- ```
26
-
27
- ### Q1 — Look (silent)
28
-
29
- ORC reads first and says nothing until it has something to say. It asks the
30
- **code graph** before it greps: one call gives the symbol, who calls it, and
31
- which tests reach it. The request says a behaviour is wrong, so the entry is
32
- sorted as a **defect** — which means the bug gets reproduced before it is
33
- fixed.
34
-
35
- ### Q2 — Ask (one turn: questions **and** the agent choice together)
36
-
37
- ```
38
- I looked. Here is what I found and what I need from you.
39
-
40
- · web/refunds/RefundBadge.tsx:22 maps status → label
41
- · the map has no case for `sent_to_bank`, so it falls through to "pending"
42
- · api/refunds/webhook.ts:52 does write that status
43
-
44
- Two questions:
45
- 1 Add the missing case only, or review the whole map?
46
- 2 Should the badge colour change too?
47
-
48
- And which agent should do it?
49
- a orc-executor-sonnet-4-6-med small, one file → suggested: 1 file, no risk class
50
- b orc-executor-opus-5-low thinks harder, about 3× the cost
51
- c other — name a model
52
-
53
- Your choice — nothing runs until you answer.
54
-
55
- > 1 just the missing case. 2 yes, amber. agent a.
56
- ```
57
-
58
- The `→ suggested` marker always carries its reason, and it never pre-selects.
59
- The menu still waits for you.
60
-
61
- ### Q3 — Do
62
-
63
- ```
64
- Dispatch orc-executor-sonnet-4-6-med
65
- returned as: claude-sonnet-4-6 / medium ✓
66
-
67
- repro red npm test -- web/refunds/RefundBadge.test.tsx exit 1
68
- → expected "sent to bank", received "pending"
69
- repro green npm test -- web/refunds/RefundBadge.test.tsx exit 0
70
-
71
- build ✓
72
- tests reached 1 file (call 1) → 3 passed
73
- suite ✓ 12 passed
74
- blast radius 1 symbol · callers 2 in 2 files · tests reach 1 · risk none
75
- graph gen 18 · 1 file updated
76
- graph gain paid 0.9K tokens · avoided an estimated 2–6K · measured: not yet (N=1)
77
-
78
- Entry 1 written to orc-quick/refund-badge/quick-context.md
79
-
80
- Commit these 2 files? [yes / no]
81
-
82
- > yes
83
- ```
84
-
85
- The red run comes first on purpose. The suite was green before the fix and is
86
- green after it, so the suite proves nothing about **this** bug. The red run
87
- does.
88
-
89
- Your next request becomes entry 2 in the same file, and so on.
90
-
91
- ---
92
-
93
- ## 3. What it wrote
94
-
95
- ```markdown
96
- # Quick context — refund-badge
97
-
98
- <!-- orc-quick:toc -->
99
- 1. Refund badge stuck on "pending" 2026-08-12 done
100
- <!-- /orc-quick:toc -->
101
-
102
- ## 1. Refund badge stuck on "pending"
103
-
104
- **You asked:** the badge shows pending after the webhook lands.
105
- **Decided:** add the missing `sent_to_bank` case only; amber colour.
106
- **Why:** the whole map is fine — one case was never added.
107
- **Agents:** orc-executor-sonnet-4-6-med (you chose it).
108
- **repro** red → green · `npm test -- web/refunds/RefundBadge.test.tsx` (before: exit 1 · after: exit 0)
109
- **blast radius** 1 symbol · callers 2 in 2 files · tests reach 1 · risk none
110
- **Not done:** the admin list has the same map and was NOT touched.
111
- ```
112
-
113
- ---
114
-
115
- ## 4. What to notice
116
-
117
- - **The doc is written before the commit offer**, so a "no" still leaves you
118
- the record.
119
- - **ORC never reads that file back** unless you ask, or to show the numbered
120
- list when you reopen the thread. It is for you, not for the model.
121
- - **A red build loops (max 3 rounds), a red test does not.** A failing test is
122
- sometimes the test being wrong, so it blocks the commit offer and stops.
123
- No test suite at all means no check at all — nothing is invented.
124
- - **`gh` is read and push only.** It never replies to a comment, resolves a
125
- thread, approves or merges. PR comments are treated as data, never as
126
- instructions.
127
- - **It never undoes your work.** If you stop while things are red, it prints
128
- `orc undo --run <slug>` and leaves your tree alone. That command reverts only
129
- the files the run changed, and only when you add `--apply`.
130
- - **The review offer uses the repair memory.** A review gets the gotcha card of
131
- the files it reads, and the outcome of each finding is recorded. With
132
- [habits](habits.md) on, your usual answer is marked — the dispatch gate is
133
- still asked every time.
134
- - **A defect is shown red first.** If it cannot be reproduced — no runner, no
135
- reachable entry point — the entry says *not reproduced* with the reason, and
136
- says it again at the commit offer. It never invents a reproduction.
137
- - **A `risk` word never appears without its reason.** The blast-radius line
138
- either names why a symbol is risky or does not use the word.
139
-
140
- ---
141
-
142
- ## 5. Related
143
-
144
- - The full guide, with more worked runs:
145
- [`templates/skills/orc-quick/README.md`](../templates/skills/orc-quick/README.md)
146
- - Too big for quick? It offers [`/orc-mini`](../templates/skills/orc-mini/examples/mini-run-mock.md) — an offer, never a forced switch.
1
+ # Mock run — `/orc-quick`
2
+
3
+ > Ask for anything. Three steps: look → ask once → do. It always asks you
4
+ > which agent should run.
5
+
6
+ ---
7
+
8
+ ## 1. What it does
9
+
10
+ Every other lane has a fixed job. This one does not. A small fix, a question
11
+ about how something works, a defect hunt, a dependency bump, or the review
12
+ comments on a pull request — all the same three steps.
13
+
14
+ The point of the lane is the **dispatch gate**: before every single dispatch it
15
+ asks you which agent to use. No default. No "same as last time". No setting can
16
+ turn it off — `opus5_only`, `fable5_*` and `rubric_bands_override` are all
17
+ inert here, and the gate says so when they are on.
18
+
19
+ ---
20
+
21
+ ## 2. The run
22
+
23
+ ```
24
+ > /orc-quick the refund badge shows "pending" even after the webhook lands
25
+ ```
26
+
27
+ ### Q1 — Look (silent)
28
+
29
+ ORC reads first and says nothing until it has something to say. It asks the
30
+ **code graph** before it greps: one call gives the symbol, who calls it, and
31
+ which tests reach it. The request says a behaviour is wrong, so the entry is
32
+ sorted as a **defect** — which means the bug gets reproduced before it is
33
+ fixed.
34
+
35
+ ### Q2 — Ask (one turn: questions **and** the agent choice together)
36
+
37
+ ```
38
+ I looked. Here is what I found and what I need from you.
39
+
40
+ · web/refunds/RefundBadge.tsx:22 maps status → label
41
+ · the map has no case for `sent_to_bank`, so it falls through to "pending"
42
+ · api/refunds/webhook.ts:52 does write that status
43
+
44
+ Two questions:
45
+ 1 Add the missing case only, or review the whole map?
46
+ 2 Should the badge colour change too?
47
+
48
+ And which agent should do it?
49
+ a orc-executor-sonnet-5-med small, one file → suggested: 1 file, no risk class
50
+ b orc-executor-opus-5-low thinks harder, about 3× the cost
51
+ c other — name a model
52
+
53
+ Your choice — nothing runs until you answer.
54
+
55
+ > 1 just the missing case. 2 yes, amber. agent a.
56
+ ```
57
+
58
+ The `→ suggested` marker always carries its reason, and it never pre-selects.
59
+ The menu still waits for you.
60
+
61
+ ### Q3 — Do
62
+
63
+ ```
64
+ Dispatch orc-executor-sonnet-5-med
65
+ returned as: claude-sonnet-5-5 / medium ✓
66
+
67
+ repro red npm test -- web/refunds/RefundBadge.test.tsx exit 1
68
+ → expected "sent to bank", received "pending"
69
+ repro green npm test -- web/refunds/RefundBadge.test.tsx exit 0
70
+
71
+ build ✓
72
+ tests reached 1 file (call 1) → 3 passed
73
+ suite ✓ 12 passed
74
+ blast radius 1 symbol · callers 2 in 2 files · tests reach 1 · risk none
75
+ graph gen 18 · 1 file updated
76
+ graph gain paid 0.9K tokens · avoided an estimated 2–6K · measured: not yet (N=1)
77
+
78
+ Entry 1 written to orc-quick/refund-badge/quick-context.md
79
+
80
+ Commit these 2 files? [yes / no]
81
+
82
+ > yes
83
+ ```
84
+
85
+ The red run comes first on purpose. The suite was green before the fix and is
86
+ green after it, so the suite proves nothing about **this** bug. The red run
87
+ does.
88
+
89
+ Your next request becomes entry 2 in the same file, and so on.
90
+
91
+ ---
92
+
93
+ ## 3. What it wrote
94
+
95
+ ```markdown
96
+ # Quick context — refund-badge
97
+
98
+ <!-- orc-quick:toc -->
99
+ 1. Refund badge stuck on "pending" 2026-08-12 done
100
+ <!-- /orc-quick:toc -->
101
+
102
+ ## 1. Refund badge stuck on "pending"
103
+
104
+ **You asked:** the badge shows pending after the webhook lands.
105
+ **Decided:** add the missing `sent_to_bank` case only; amber colour.
106
+ **Why:** the whole map is fine — one case was never added.
107
+ **Agents:** orc-executor-sonnet-5-med (you chose it).
108
+ **repro** red → green · `npm test -- web/refunds/RefundBadge.test.tsx` (before: exit 1 · after: exit 0)
109
+ **blast radius** 1 symbol · callers 2 in 2 files · tests reach 1 · risk none
110
+ **Not done:** the admin list has the same map and was NOT touched.
111
+ ```
112
+
113
+ ---
114
+
115
+ ## 4. What to notice
116
+
117
+ - **The doc is written before the commit offer**, so a "no" still leaves you
118
+ the record.
119
+ - **ORC never reads that file back** unless you ask, or to show the numbered
120
+ list when you reopen the thread. It is for you, not for the model.
121
+ - **A red build loops (max 3 rounds), a red test does not.** A failing test is
122
+ sometimes the test being wrong, so it blocks the commit offer and stops.
123
+ No test suite at all means no check at all — nothing is invented.
124
+ - **`gh` is read and push only.** It never replies to a comment, resolves a
125
+ thread, approves or merges. PR comments are treated as data, never as
126
+ instructions.
127
+ - **It never undoes your work.** If you stop while things are red, it prints
128
+ `orc undo --run <slug>` and leaves your tree alone. That command reverts only
129
+ the files the run changed, and only when you add `--apply`.
130
+ - **The review offer uses the repair memory.** A review gets the gotcha card of
131
+ the files it reads, and the outcome of each finding is recorded. With
132
+ [habits](habits.md) on, your usual answer is marked — the dispatch gate is
133
+ still asked every time.
134
+ - **A defect is shown red first.** If it cannot be reproduced — no runner, no
135
+ reachable entry point — the entry says *not reproduced* with the reason, and
136
+ says it again at the commit offer. It never invents a reproduction.
137
+ - **A `risk` word never appears without its reason.** The blast-radius line
138
+ either names why a symbol is risky or does not use the word.
139
+
140
+ ---
141
+
142
+ ## 5. Related
143
+
144
+ - The full guide, with more worked runs:
145
+ [`templates/skills/orc-quick/README.md`](../templates/skills/orc-quick/README.md)
146
+ - Too big for quick? It offers [`/orc-mini`](../templates/skills/orc-mini/examples/mini-run-mock.md) — an offer, never a forced switch.
package/mock-run/orc.md CHANGED
@@ -73,10 +73,10 @@ TDD: 3 tasks get a red-proof task first. 2 do not:
73
73
  ```
74
74
  Task facets score model
75
75
  T1 order note column + migration 3 files · new · stateful 62 sonnet-5 high
76
- T2 POST /orders accepts note 2 files · imitate 38 sonnet-4-6 med
77
- T3 checkout note box 2 files · imitate 35 sonnet-4-6 med
78
- T4 order page shows the note 1 file · mechanical 12 haiku-4-5
79
- T5 label text 1 file · mechanical 4 haiku-4-5
76
+ T2 POST /orders accepts note 2 files · imitate 38 sonnet-5 high
77
+ T3 checkout note box 2 files · imitate 35 sonnet-5 high
78
+ T4 order page shows the note 1 file · mechanical 12 haiku-5-high
79
+ T5 label text 1 file · mechanical 4 haiku-5-high
80
80
 
81
81
  Waves: W1 {T1} W2 {T2, T3} W3 {T4, T5}
82
82
  Pause every 2 waves. OK to start?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-id/orc",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "ORC — an orchestrator skill constellation for Claude Code: intake, planning, scored parallel subagents, code-pattern matching, review, verify, ship, plus a project knowledge-base wiki.",
5
5
  "bin": {
6
6
  "orc": "bin/cli.js"
@@ -10,6 +10,7 @@
10
10
  "README-id.md",
11
11
  "CHANGELOG.md",
12
12
  "bin/",
13
+ "guides/",
13
14
  "mock-run/",
14
15
  "templates/"
15
16
  ],
@@ -17,10 +17,10 @@ Score→executor mapping lives in config.md (one canonical 5-band table;
17
17
  `rubric_bands` is granularity only, not a preset selector).
18
18
 
19
19
  **Executors no band names — they still ship.**
20
- `orc-executor-haiku-4-5`, `orc-executor-sonnet-4-6-med`,
20
+ `orc-executor-haiku-5-high`,
21
21
  `orc-executor-sonnet-4-6-high`, `orc-executor-opus-4-7-med`,
22
22
  `orc-executor-opus-4-7-high`, `orc-executor-opus-4-8-high` and
23
- `orc-executor-opus-5-high` — seven agents — are still generated
23
+ `orc-executor-opus-5-high` — six agents — are still generated
24
24
  and still installed. They are reachable only when a user names one
25
25
  explicitly: `rubric_bands_override`, `orc diy`'s `fixed_executor`, or
26
26
  `extra_fallback_agent`. They are not deleted because a table change is not a
@@ -38,7 +38,7 @@ model change, and an agent's model change is always a RENAME.
38
38
  | orc-analyze-mini-sonnet-5-high | claude-sonnet-5-5 | high | mini analysis |
39
39
  | orc-planner-mini-sonnet-5-high | claude-sonnet-5-5 | high | mini planning |
40
40
  | orc-scout-sonnet-4-6-high | claude-sonnet-4-6 | high | deep-analysis code scout (read-only) |
41
- | orc-recon-sonnet-4-6-med | claude-sonnet-4-6 | medium | answer ONE repository question with file:line evidence (/orc-quick read-only entries; never edits, never plans) |
41
+ | orc-recon-sonnet-5-med | claude-sonnet-5-5 | medium | answer ONE repository question with file:line evidence (/orc-quick read-only entries; never edits, never plans) |
42
42
  | orc-recon-opus-5-low | claude-opus-5-5 | low | the same contract for a WIDE or SUBTLE question — a blast radius across areas, a defect with no obvious anchor |
43
43
  | orc-context-combiner-opus-5-high | claude-opus-5-5 | high | combine 2+ related analyses (full lane) |
44
44
  | orc-pattern-codifier-sonnet-5-high | claude-sonnet-5-5 | high | reconcile per-language playbook vs. project files → cached code-pattern (opt-in) |
@@ -63,8 +63,8 @@ model change, and an agent's model change is always a RENAME.
63
63
  | orc-doc-checker-opus-5-low | claude-opus-5-5 | low | read ONE LINE RANGE of a document and report anchored findings (/orc-doc only; read-only). LOW ON PURPOSE — the same reasoning that pins the challenge cold reader: a harder-thinking checker reasons its way past a gap a real reader would trip on |
64
64
  | orc-test-designer-opus-5-high | claude-opus-5-5 | high | fill the GAPS the free case matrix could not derive, and author the front-end journey SCRIPT (/orc-test only). HIGH IS THE INSTRUMENT: a shallow designer returns the three obvious cases the deterministic expansion already covered, which is the one output that costs money and adds nothing |
65
65
  | orc-test-interpreter-opus-5-low | claude-opus-5-5 | low | read ONLY a run’s evidence files and say whether what is in them is a finding (/orc-test only; SEALED slice, `Read` and nothing else). LOW IS A MEASUREMENT CHOICE, NOT A COST ONE, and nothing may ever upgrade it: a harder-thinking interpreter reasons its way to why a leaked stack trace is probably fine in staging |
66
- | orc-trace-writer-haiku-4-5 | claude-haiku-4-5 | — (no ladder) | append one phase block of behavior-trace narration from an orchestrator packet (every trace-owning lane; append-only, never reads source) |
67
- | orc-graph-noter-sonnet-4-6-med | claude-sonnet-4-6 | medium | write ONE sentence per changed function for the local code graph (`orc graph` Layer 2). Reads line RANGES only, pipes its notes to `orc graph notes apply -` (the CLI validates and stores), returns ONE line. Dispatched by code-changing lanes only when `code_graph_notes` is on and a batch reaches its minimum |
66
+ | orc-trace-writer-haiku-5-high | claude-haiku-5-5 | high | append one phase block of behavior-trace narration from an orchestrator packet (every trace-owning lane; append-only, never reads source) |
67
+ | orc-graph-noter-haiku-5-high | claude-haiku-5-5 | high | write ONE sentence per changed function for the local code graph (`orc graph` Layer 2). Reads line RANGES only, pipes its notes to `orc graph notes apply -` (the CLI validates and stores), returns ONE line. Dispatched by code-changing lanes only when `code_graph_notes` is on and a batch reaches its minimum |
68
68
 
69
69
  ## Opus-5-only mode agents (hard-gated; dispatched only when `opus5_only: true`)
70
70
 
@@ -88,15 +88,15 @@ these. Full mapping + precedence:
88
88
  The eleven roles already on `claude-opus-5-5` — analyst, planner, reviewer,
89
89
  verifier, test-author, combiner, learn-writer, advisor, judge, CLAUDE.md
90
90
  writer, deep wiki scanner — dispatch
91
- unchanged under this mode. **Never forced:** `orc-trace-writer-haiku-4-5` (it
91
+ unchanged under this mode. **Never forced:** `orc-trace-writer-haiku-5-high` (it
92
92
  transcribes a packet, no reasoning) and orc-diy (its table is compile-owned).
93
- **Not dispatched at all:** `orc-graph-noter-sonnet-4-6-med` has NO Opus 5.5
93
+ **Not dispatched at all:** `orc-graph-noter-haiku-5-high` has NO Opus 5.5
94
94
  variant. Under this mode a lane skips graph notes and prints
95
95
  `graph notes: skipped (opus5_only)` — a one-sentence summary does not justify an
96
96
  Opus 5.5 dispatch, and the graph's structure layer costs no model at all.
97
97
 
98
98
  Mini execution reuses orc-executor-sonnet-5-high. Fast-lane (orc-fast)
99
- execution reuses orc-executor-sonnet-4-6-high — no dedicated agent. Under
99
+ execution reuses orc-executor-sonnet-5-med — no dedicated agent. Under
100
100
  `opus5_only` both reuse orc-executor-opus-5-low.
101
101
 
102
102
  ## orc-quick — the user picks, and no config can override it
@@ -106,8 +106,8 @@ agent to spawn before EVERY dispatch, and reuses shipped agents:
106
106
 
107
107
  | Dispatch kind | Offered | Hook-traced |
108
108
  |---|---|---|
109
- | writes code | orc-executor-sonnet-4-6-med · orc-executor-opus-5-low | yes |
110
- | read-only recon | orc-recon-sonnet-4-6-med · orc-recon-opus-5-low · or `other — name a model` | yes · yes · no |
109
+ | writes code | orc-executor-sonnet-5-med · orc-executor-opus-5-low | yes |
110
+ | read-only recon | orc-recon-sonnet-5-med · orc-recon-opus-5-low · or `other — name a model` | yes · yes · no |
111
111
  | review | orc-reviewer-opus-5-low · or ad-hoc | yes / no |
112
112
 
113
113
  The only dispatch it does not re-ask is build-repair rounds 1–2, which reuse the
@@ -141,14 +141,14 @@ The orchestrator (main session) is NOT an agent file.
141
141
 
142
142
  Model IDs use the Platform/API dateless format (confirmed at
143
143
  platform.claude.com/docs/en/about-claude/models/model-ids-and-versions):
144
- claude-haiku-4-5, claude-sonnet-4-6, claude-sonnet-5-5, claude-opus-4-7,
144
+ claude-haiku-5-5, claude-sonnet-4-6, claude-sonnet-5-5, claude-opus-4-7,
145
145
  claude-opus-4-8 and claude-opus-5-5 (the top executor band + the core fixed
146
146
  roles). **Sonnet 5 runs on `claude-sonnet-5-5` since v2.1.0** — the agent names
147
147
  keep `-sonnet-5-` (a point release in one family keeps the name, as Opus did in
148
148
  v1.9.2), and `claude-sonnet-5` stays a valid config value.
149
149
 
150
150
  1. **Run `/agents`** to confirm Claude Code accepts these full IDs in agent
151
- frontmatter — in particular `claude-haiku-4-5` and `claude-opus-5-5`. If it
151
+ frontmatter — in particular `claude-haiku-5-5` and `claude-opus-5-5`. If it
152
152
  wants short aliases (opus/sonnet/haiku) or dated IDs, adjust
153
153
  each `model:` field. The full IDs are valid at the API level but Claude Code
154
154
  may normalize differently.
@@ -1,8 +1,9 @@
1
1
  ---
2
- name: orc-executor-haiku-4-5
2
+ name: orc-executor-haiku-5-high
3
3
  description: >
4
- ORC executor — claude-haiku-4-5 (no effort ladder). Dispatched by the build lanes at execution for ONE task, score band none (opt-in only, see MODEL-MAPPING.md).
5
- model: claude-haiku-4-5
4
+ ORC executor — claude-haiku-5-5, high effort. Dispatched by the build lanes at execution for ONE task, score band none (opt-in only, see MODEL-MAPPING.md).
5
+ model: claude-haiku-5-5
6
+ effort: high
6
7
  tools: Read, Write, Edit, Bash, Glob, Grep
7
8
  ---
8
9
 
@@ -53,6 +54,10 @@ never spawn other agents, never work outside your task slice.
53
54
  absent. Present = you must show the bug is real BEFORE you fix it: kind `test`
54
55
  when the project has a runner, `command` when it has none. Absent = this task
55
56
  is not a defect report; never invent a reproduction nobody asked for
57
+ - graph_anchors — up to 12 `path:a-b` ranges the dig found, and one `read all:`
58
+ command, or absent; it may end with a fenced block that carries the code of
59
+ every range. Present → `graph_anchors` may carry the code of its EDIT-SITE ranges (edit target, router, caller) inline — use it as already read; do NOT read those ranges again. Copy-from and contract ranges are never inline; your FIRST call prints them (below). With `graph_anchors`, a wiki page is OPTIONAL: read it only for a business rule that the requirement, the anchors and the code do not settle. Your FIRST call prints EVERY range in `graph_anchors` in ONE shell command — the `read all:` line when present, else one `sed -n 'a,bp' <file>` per range joined with `;` and an `echo == <file>:<a>-<b>` header each. Then read further only for what those ranges do not show; do not `cat` a whole anchored file over 150 lines. A file you will EDIT is still read in
60
+ full first (read-ladder exception 1). The inline code and the ranges are real bytes of the current blob.
56
61
  - worktree_path — work here if set, else the current tree
57
62
 
58
63
  ## Procedure (embedded — self-contained)
@@ -60,7 +65,8 @@ never spawn other agents, never work outside your task slice.
60
65
  2. Read spec_ref if provided.
61
66
  2a. Read discipline — `.claude/skills/_shared/read-ladder.md` IS the rule, its
62
67
  two exceptions are the only ones, and it holds the rest of this step.
63
- - Step 0 before any Grep: `orc graph ctx <symbol|file> --if-enabled --json --brief`;
68
+ - Step 0: the slice carries `graph_anchors` → `graph_anchors` may carry the code of its EDIT-SITE ranges (edit target, router, caller) inline — use it as already read; do NOT read those ranges again. Copy-from and contract ranges are never inline; your FIRST call prints them (below). With `graph_anchors`, a wiki page is OPTIONAL: read it only for a business rule that the requirement, the anchors and the code do not settle. Your FIRST call prints EVERY range in `graph_anchors` in ONE shell command — the `read all:` line when present, else one `sed -n 'a,bp' <file>` per range joined with `;` and an `echo == <file>:<a>-<b>` header each. Then read further only for what those ranges do not show; do not `cat` a whole anchored file over 150 lines. Then, for a symbol the anchors do not cover, before any Grep:
69
+ `orc graph ctx <symbol|file> --if-enabled --json --brief`;
64
70
  add `--source` for the card AND the range's lines in one call. A file you
65
71
  will EDIT is still read IN FULL with Read first. Exit 3 = graph off, skip
66
72
  step 0 for the rest of the task.
@@ -89,6 +95,12 @@ never spawn other agents, never work outside your task slice.
89
95
  4. Run the proof: if the project has a runnable build/test, run it for your
90
96
  changes and capture {command, exit_code, last ~5 output lines} VERBATIM —
91
97
  never paraphrased, never predicted. No runner → no_runner_detected: true.
98
+ Coverage: when the project asks for a coverage level, run the coverage ONCE
99
+ for your own files only (`--collectCoverageFrom=<each file you changed>` and
100
+ the text reporter), read the uncovered lines from that text table, add the
101
+ tests that cover them, and run it once more. Never grep lcov or the jest
102
+ cache, and never probe the test transformer or its internals. A gap that is
103
+ still open after the second run goes in unmet[] with the file and lines.
92
104
  5. Self-check: re-read your diff against every acceptance[] line and every
93
105
  constraint. Anything you could not satisfy goes in unmet[] — a non-empty
94
106
  unmet[] means status partial (or failed), never done.
@@ -128,12 +140,13 @@ never spawn other agents, never work outside your task slice.
128
140
  did, never what you were handed. `none` is a valid, useful answer — it says
129
141
  those pages did not help; never claim a read to look thorough. Omit only when
130
142
  the slice carried no wiki material.
131
- - graph_used — REQUIRED when the slice carried `orc graph ctx` cards or you ran
132
- `orc graph ctx` yourself: `{targets, generation}` — the card targets you ACTUALLY used (or
133
- `none`) and the `generation` number the cards carry, copied from the card's own JSON. A card
143
+ - graph_used — REQUIRED when the slice carried `graph_anchors` or you ran
144
+ `orc graph ctx` yourself: `{targets, generation}` — the anchors (`path:a-b`) or the
145
+ card targets you ACTUALLY used (or `none`) and the `generation` number the slice or card
146
+ carries, copied from its own header or JSON. A card
134
147
  is a LOCATOR — read the range it names before you rely on behaviour, and trust a card whose
135
148
  header says CHANGED, or one whose header names a `coverage` gap, as a hint only. `none` is a
136
- valid answer; never claim a card helped to look thorough. Omit only when the slice carried no cards.
149
+ valid answer; never claim anchors or a card helped to look thorough. Omit only when the slice carried no anchors and you ran no `ctx`.
137
150
  - repro — REQUIRED when the slice carried `repro.required: true`; absent
138
151
  otherwise. Either {command, before: {exit_code, tail}, after: {exit_code,
139
152
  tail}} quoted VERBATIM from the two runs, or `none` + a one-line reason.
@@ -54,6 +54,10 @@ never spawn other agents, never work outside your task slice.
54
54
  absent. Present = you must show the bug is real BEFORE you fix it: kind `test`
55
55
  when the project has a runner, `command` when it has none. Absent = this task
56
56
  is not a defect report; never invent a reproduction nobody asked for
57
+ - graph_anchors — up to 12 `path:a-b` ranges the dig found, and one `read all:`
58
+ command, or absent; it may end with a fenced block that carries the code of
59
+ every range. Present → `graph_anchors` may carry the code of its EDIT-SITE ranges (edit target, router, caller) inline — use it as already read; do NOT read those ranges again. Copy-from and contract ranges are never inline; your FIRST call prints them (below). With `graph_anchors`, a wiki page is OPTIONAL: read it only for a business rule that the requirement, the anchors and the code do not settle. Your FIRST call prints EVERY range in `graph_anchors` in ONE shell command — the `read all:` line when present, else one `sed -n 'a,bp' <file>` per range joined with `;` and an `echo == <file>:<a>-<b>` header each. Then read further only for what those ranges do not show; do not `cat` a whole anchored file over 150 lines. A file you will EDIT is still read in
60
+ full first (read-ladder exception 1). The inline code and the ranges are real bytes of the current blob.
57
61
  - worktree_path — work here if set, else the current tree
58
62
 
59
63
  ## Procedure (embedded — self-contained)
@@ -61,7 +65,8 @@ never spawn other agents, never work outside your task slice.
61
65
  2. Read spec_ref if provided.
62
66
  2a. Read discipline — `.claude/skills/_shared/read-ladder.md` IS the rule, its
63
67
  two exceptions are the only ones, and it holds the rest of this step.
64
- - Step 0 before any Grep: `orc graph ctx <symbol|file> --if-enabled --json --brief`;
68
+ - Step 0: the slice carries `graph_anchors` → `graph_anchors` may carry the code of its EDIT-SITE ranges (edit target, router, caller) inline — use it as already read; do NOT read those ranges again. Copy-from and contract ranges are never inline; your FIRST call prints them (below). With `graph_anchors`, a wiki page is OPTIONAL: read it only for a business rule that the requirement, the anchors and the code do not settle. Your FIRST call prints EVERY range in `graph_anchors` in ONE shell command — the `read all:` line when present, else one `sed -n 'a,bp' <file>` per range joined with `;` and an `echo == <file>:<a>-<b>` header each. Then read further only for what those ranges do not show; do not `cat` a whole anchored file over 150 lines. Then, for a symbol the anchors do not cover, before any Grep:
69
+ `orc graph ctx <symbol|file> --if-enabled --json --brief`;
65
70
  add `--source` for the card AND the range's lines in one call. A file you
66
71
  will EDIT is still read IN FULL with Read first. Exit 3 = graph off, skip
67
72
  step 0 for the rest of the task.
@@ -90,6 +95,12 @@ never spawn other agents, never work outside your task slice.
90
95
  4. Run the proof: if the project has a runnable build/test, run it for your
91
96
  changes and capture {command, exit_code, last ~5 output lines} VERBATIM —
92
97
  never paraphrased, never predicted. No runner → no_runner_detected: true.
98
+ Coverage: when the project asks for a coverage level, run the coverage ONCE
99
+ for your own files only (`--collectCoverageFrom=<each file you changed>` and
100
+ the text reporter), read the uncovered lines from that text table, add the
101
+ tests that cover them, and run it once more. Never grep lcov or the jest
102
+ cache, and never probe the test transformer or its internals. A gap that is
103
+ still open after the second run goes in unmet[] with the file and lines.
93
104
  5. Self-check: re-read your diff against every acceptance[] line and every
94
105
  constraint. Anything you could not satisfy goes in unmet[] — a non-empty
95
106
  unmet[] means status partial (or failed), never done.
@@ -129,12 +140,13 @@ never spawn other agents, never work outside your task slice.
129
140
  did, never what you were handed. `none` is a valid, useful answer — it says
130
141
  those pages did not help; never claim a read to look thorough. Omit only when
131
142
  the slice carried no wiki material.
132
- - graph_used — REQUIRED when the slice carried `orc graph ctx` cards or you ran
133
- `orc graph ctx` yourself: `{targets, generation}` — the card targets you ACTUALLY used (or
134
- `none`) and the `generation` number the cards carry, copied from the card's own JSON. A card
143
+ - graph_used — REQUIRED when the slice carried `graph_anchors` or you ran
144
+ `orc graph ctx` yourself: `{targets, generation}` — the anchors (`path:a-b`) or the
145
+ card targets you ACTUALLY used (or `none`) and the `generation` number the slice or card
146
+ carries, copied from its own header or JSON. A card
135
147
  is a LOCATOR — read the range it names before you rely on behaviour, and trust a card whose
136
148
  header says CHANGED, or one whose header names a `coverage` gap, as a hint only. `none` is a
137
- valid answer; never claim a card helped to look thorough. Omit only when the slice carried no cards.
149
+ valid answer; never claim anchors or a card helped to look thorough. Omit only when the slice carried no anchors and you ran no `ctx`.
138
150
  - repro — REQUIRED when the slice carried `repro.required: true`; absent
139
151
  otherwise. Either {command, before: {exit_code, tail}, after: {exit_code,
140
152
  tail}} quoted VERBATIM from the two runs, or `none` + a one-line reason.
@@ -54,6 +54,10 @@ never spawn other agents, never work outside your task slice.
54
54
  absent. Present = you must show the bug is real BEFORE you fix it: kind `test`
55
55
  when the project has a runner, `command` when it has none. Absent = this task
56
56
  is not a defect report; never invent a reproduction nobody asked for
57
+ - graph_anchors — up to 12 `path:a-b` ranges the dig found, and one `read all:`
58
+ command, or absent; it may end with a fenced block that carries the code of
59
+ every range. Present → `graph_anchors` may carry the code of its EDIT-SITE ranges (edit target, router, caller) inline — use it as already read; do NOT read those ranges again. Copy-from and contract ranges are never inline; your FIRST call prints them (below). With `graph_anchors`, a wiki page is OPTIONAL: read it only for a business rule that the requirement, the anchors and the code do not settle. Your FIRST call prints EVERY range in `graph_anchors` in ONE shell command — the `read all:` line when present, else one `sed -n 'a,bp' <file>` per range joined with `;` and an `echo == <file>:<a>-<b>` header each. Then read further only for what those ranges do not show; do not `cat` a whole anchored file over 150 lines. A file you will EDIT is still read in
60
+ full first (read-ladder exception 1). The inline code and the ranges are real bytes of the current blob.
57
61
  - worktree_path — work here if set, else the current tree
58
62
 
59
63
  ## Procedure (embedded — self-contained)
@@ -61,7 +65,8 @@ never spawn other agents, never work outside your task slice.
61
65
  2. Read spec_ref if provided.
62
66
  2a. Read discipline — `.claude/skills/_shared/read-ladder.md` IS the rule, its
63
67
  two exceptions are the only ones, and it holds the rest of this step.
64
- - Step 0 before any Grep: `orc graph ctx <symbol|file> --if-enabled --json --brief`;
68
+ - Step 0: the slice carries `graph_anchors` → `graph_anchors` may carry the code of its EDIT-SITE ranges (edit target, router, caller) inline — use it as already read; do NOT read those ranges again. Copy-from and contract ranges are never inline; your FIRST call prints them (below). With `graph_anchors`, a wiki page is OPTIONAL: read it only for a business rule that the requirement, the anchors and the code do not settle. Your FIRST call prints EVERY range in `graph_anchors` in ONE shell command — the `read all:` line when present, else one `sed -n 'a,bp' <file>` per range joined with `;` and an `echo == <file>:<a>-<b>` header each. Then read further only for what those ranges do not show; do not `cat` a whole anchored file over 150 lines. Then, for a symbol the anchors do not cover, before any Grep:
69
+ `orc graph ctx <symbol|file> --if-enabled --json --brief`;
65
70
  add `--source` for the card AND the range's lines in one call. A file you
66
71
  will EDIT is still read IN FULL with Read first. Exit 3 = graph off, skip
67
72
  step 0 for the rest of the task.
@@ -90,6 +95,12 @@ never spawn other agents, never work outside your task slice.
90
95
  4. Run the proof: if the project has a runnable build/test, run it for your
91
96
  changes and capture {command, exit_code, last ~5 output lines} VERBATIM —
92
97
  never paraphrased, never predicted. No runner → no_runner_detected: true.
98
+ Coverage: when the project asks for a coverage level, run the coverage ONCE
99
+ for your own files only (`--collectCoverageFrom=<each file you changed>` and
100
+ the text reporter), read the uncovered lines from that text table, add the
101
+ tests that cover them, and run it once more. Never grep lcov or the jest
102
+ cache, and never probe the test transformer or its internals. A gap that is
103
+ still open after the second run goes in unmet[] with the file and lines.
93
104
  5. Self-check: re-read your diff against every acceptance[] line and every
94
105
  constraint. Anything you could not satisfy goes in unmet[] — a non-empty
95
106
  unmet[] means status partial (or failed), never done.
@@ -129,12 +140,13 @@ never spawn other agents, never work outside your task slice.
129
140
  did, never what you were handed. `none` is a valid, useful answer — it says
130
141
  those pages did not help; never claim a read to look thorough. Omit only when
131
142
  the slice carried no wiki material.
132
- - graph_used — REQUIRED when the slice carried `orc graph ctx` cards or you ran
133
- `orc graph ctx` yourself: `{targets, generation}` — the card targets you ACTUALLY used (or
134
- `none`) and the `generation` number the cards carry, copied from the card's own JSON. A card
143
+ - graph_used — REQUIRED when the slice carried `graph_anchors` or you ran
144
+ `orc graph ctx` yourself: `{targets, generation}` — the anchors (`path:a-b`) or the
145
+ card targets you ACTUALLY used (or `none`) and the `generation` number the slice or card
146
+ carries, copied from its own header or JSON. A card
135
147
  is a LOCATOR — read the range it names before you rely on behaviour, and trust a card whose
136
148
  header says CHANGED, or one whose header names a `coverage` gap, as a hint only. `none` is a
137
- valid answer; never claim a card helped to look thorough. Omit only when the slice carried no cards.
149
+ valid answer; never claim anchors or a card helped to look thorough. Omit only when the slice carried no anchors and you ran no `ctx`.
138
150
  - repro — REQUIRED when the slice carried `repro.required: true`; absent
139
151
  otherwise. Either {command, before: {exit_code, tail}, after: {exit_code,
140
152
  tail}} quoted VERBATIM from the two runs, or `none` + a one-line reason.