@azure-id/orc 2.0.2 → 2.1.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 (121) hide show
  1. package/CHANGELOG.md +401 -0
  2. package/README-id.md +52 -23
  3. package/README.md +50 -22
  4. package/bin/build-agents.js +24 -25
  5. package/bin/clear-logs.js +620 -0
  6. package/bin/cli.js +1155 -158
  7. package/bin/fix.js +459 -0
  8. package/bin/gotcha.js +288 -8
  9. package/bin/habit.js +1538 -1453
  10. package/bin/mockrun-catalog.js +3 -0
  11. package/bin/onboarding-content.js +2 -1
  12. package/bin/pricing.json +28 -21
  13. package/bin/trace-write.js +869 -657
  14. package/bin/verify-contracts.js +108 -27
  15. package/bin/verify-package.js +17 -6
  16. package/bin/webui/api.js +125 -6
  17. package/bin/webui/css/panels/hookui.css +79 -0
  18. package/bin/webui/fixtures/behaviour.js +30 -0
  19. package/bin/webui/fixtures/extra.js +9 -9
  20. package/bin/webui/fixtures/flow.js +81 -81
  21. package/bin/webui/fixtures/hookui.js +506 -431
  22. package/bin/webui/fixtures/index.js +32 -3
  23. package/bin/webui/fixtures/knowledge.js +2 -2
  24. package/bin/webui/fixtures/maintenance.js +123 -42
  25. package/bin/webui/fixtures/rules.js +1007 -1002
  26. package/bin/webui/fixtures/settings.js +6 -7
  27. package/bin/webui/fixtures/stats.js +9 -6
  28. package/bin/webui/fixtures/wait.js +98 -97
  29. package/bin/webui/i18n/en/behaviour.json +13 -0
  30. package/bin/webui/i18n/en/hookui.json +290 -194
  31. package/bin/webui/i18n/en/maintenance.json +71 -52
  32. package/bin/webui/i18n/en/settings.json +60 -60
  33. package/bin/webui/i18n/id/behaviour.json +13 -0
  34. package/bin/webui/i18n/id/hookui.json +290 -194
  35. package/bin/webui/i18n/id/maintenance.json +71 -52
  36. package/bin/webui/i18n/id/settings.json +60 -60
  37. package/bin/webui/js/05-banners.js +181 -172
  38. package/bin/webui/js/06-edit.js +193 -183
  39. package/bin/webui/js/panels/behaviour.js +77 -12
  40. package/bin/webui/js/panels/hookui.js +2196 -1691
  41. package/bin/webui/js/panels/maintenance.js +336 -235
  42. package/bin/webui/js/panels/settings.js +726 -719
  43. package/mock-run/INDEX.md +1 -0
  44. package/mock-run/extra-slots.md +1 -1
  45. package/mock-run/habits.md +1 -1
  46. package/mock-run/orc-aftermath.md +392 -392
  47. package/mock-run/orc-budget.md +29 -33
  48. package/mock-run/orc-cli.md +200 -200
  49. package/mock-run/orc-explain.md +86 -86
  50. package/mock-run/orc-extra.md +389 -392
  51. package/mock-run/orc-fix.md +87 -0
  52. package/mock-run/orc-pattern.md +112 -112
  53. package/mock-run/orc.md +157 -157
  54. package/package.json +1 -1
  55. package/templates/agents/MODEL-MAPPING.md +32 -29
  56. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -2
  57. package/templates/agents/{orc-claude-writer-opus-5-med.md → orc-claude-writer-opus-5-low.md} +4 -4
  58. package/templates/agents/orc-executor-haiku-4-5.md +1 -1
  59. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  60. package/templates/agents/orc-executor-sonnet-4-6-high.md +1 -1
  61. package/templates/agents/orc-executor-sonnet-4-6-med.md +1 -1
  62. package/templates/agents/orc-executor-sonnet-5-high.md +2 -2
  63. package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
  64. package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
  65. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +2 -2
  66. package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -2
  67. package/templates/agents/orc-retro-sonnet-5-high.md +2 -2
  68. package/templates/agents/{orc-reviewer-opus-5-med.md → orc-reviewer-opus-5-low.md} +4 -4
  69. package/templates/agents/{orc-wiki-scanner-opus-5-med.md → orc-wiki-scanner-opus-5-low.md} +3 -3
  70. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +2 -2
  71. package/templates/commands/orc-fix.md +18 -0
  72. package/templates/commands/orc-wiki.md +64 -64
  73. package/templates/hooks/README.md +75 -7
  74. package/templates/hooks/orc-session-hook.js +78 -3
  75. package/templates/hooks/orc-statusline-render.js +317 -23
  76. package/templates/hooks/orc-statusline.js +162 -49
  77. package/templates/hooks/orc-subagent-line.js +23 -5
  78. package/templates/hooks/orc-weather-fetch.js +123 -0
  79. package/templates/skills/_shared/extra-dispatch.md +5 -5
  80. package/templates/skills/_shared/gotchas.md +27 -7
  81. package/templates/skills/_shared/habits.md +2 -2
  82. package/templates/skills/_shared/opus5-only.md +14 -14
  83. package/templates/skills/_shared/phases/review.md +2 -2
  84. package/templates/skills/_shared/phases/trace-verbs.md +17 -3
  85. package/templates/skills/_shared/phases/trace.md +136 -136
  86. package/templates/skills/_shared/review-slice.md +28 -1
  87. package/templates/skills/_shared/wait.md +1 -0
  88. package/templates/skills/orc/README.md +2 -2
  89. package/templates/skills/orc/SKILL.md +1 -1
  90. package/templates/skills/orc/config.md +25 -27
  91. package/templates/skills/orc/examples/full-run-mock.md +2 -1
  92. package/templates/skills/orc/references/effort-and-mode.md +17 -17
  93. package/templates/skills/orc/references/preflight-report.md +3 -3
  94. package/templates/skills/orc/references/ultra-mode.md +1 -1
  95. package/templates/skills/orc/schemas/checkpoint.md +122 -122
  96. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +3 -3
  97. package/templates/skills/orc/subskills/orc-review-verify/core.md +1 -1
  98. package/templates/skills/orc-analyze/SKILL.md +4 -2
  99. package/templates/skills/orc-claude/SKILL.md +14 -14
  100. package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
  101. package/templates/skills/orc-diy/SKILL.md +5 -5
  102. package/templates/skills/orc-fast/SKILL.md +8 -6
  103. package/templates/skills/orc-fix/SKILL.md +110 -0
  104. package/templates/skills/orc-mini/SKILL.md +4 -4
  105. package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
  106. package/templates/skills/orc-quick/README.md +1 -1
  107. package/templates/skills/orc-quick/SKILL.md +2 -2
  108. package/templates/skills/orc-quick/references/dispatch-gate.md +3 -2
  109. package/templates/skills/orc-quick/references/gh-mode.md +4 -2
  110. package/templates/skills/orc-retro/SKILL.md +1 -1
  111. package/templates/skills/orc-retro/examples/retro-mock.md +16 -16
  112. package/templates/skills/orc-wiki/README.md +325 -325
  113. package/templates/skills/orc-wiki/SKILL.md +195 -195
  114. package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
  115. package/templates/skills/orc-wiki/references/extra.md +2 -2
  116. package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
  117. package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -1
  118. package/templates/skills/orc-wiki/references/phases/phase-2.md +3 -3
  119. package/templates/skills/orc-wiki/references/phases/phase-3c.md +3 -2
  120. package/templates/agents/orc-claude-writer-opus-4-8-high.md +0 -48
  121. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +0 -74
@@ -49,13 +49,14 @@ unavailable, apply the same checks manually from
49
49
 
50
50
  ## Step 2 — dispatch the compiled flow
51
51
 
52
+ First `orc lane config orc-diy --json`. **`habits{}` in it → print `habits.line`,
53
+ read `../_shared/habits.md` NOW**; none → ignore every `(H …)`. Then:
52
54
  Read `.claude/orc/diy/FLOW-COMPILED.md` and follow it as your orchestrator
53
55
  spine for this run — it is self-contained: tier self-check, locked rules,
54
56
  phase sequence, and the references it cherry-picks from the installed orc
55
57
  skill. Honor its generated header: if its own self-gate fails, stop exactly
56
- as it says. Do not consult this stub again for the rest of the run, and do
57
- not load orc's SKILL.md as a spine (the compiled flow already references the
58
- exact orc subskills and schemas it needs).
58
+ as it says. Never consult this stub again this run, and never load orc's
59
+ SKILL.md as a spine — the flow names every subskill and schema it needs.
59
60
 
60
61
  ## Lane contract (`../_shared/lane-contract.md` — read it ONLY when a call exits ≠ 0)
61
62
 
@@ -64,8 +65,7 @@ exact orc subskills and schemas it needs).
64
65
  - **Config:** `orc lane config orc-diy --json`. Obey `effective`, print every line
65
66
  in `announce[]` VERBATIM at preflight, and honour `stops[]` before wave 1.
66
67
  Never merge `.claude/orc.config.yaml` yourself (`../_shared/config-precedence.md`).
67
- - **Habits:** `habits{}` in the config answer → read `../_shared/habits.md`. No
68
- `habits{}` → ignore every `(H …)` mark.
68
+ - **Habits:** Step 2, first.
69
69
  - **Rules:** `orc rules slice --lane orc-diy --json` is the ONLY assembler
70
70
  (`../_shared/phases/rules.md`). Its `line` prints VERBATIM at preflight.
71
71
 
@@ -38,6 +38,11 @@ without the manifest (`../_shared/lane-contract.md` §Phases).
38
38
 
39
39
  Emit a `GATE` trace line per check.
40
40
 
41
+ **0. Config, FIRST.** `orc lane config orc-fast --json`: obey `effective`, print
42
+ `announce[]` VERBATIM, honour `stops[]`; never merge `.claude/orc.config.yaml`
43
+ (`../_shared/config-precedence.md`). **`habits{}` in it → print `habits.line`,
44
+ read `../_shared/habits.md` NOW.**
45
+
41
46
  **a. Wiki gate.** Decide existence with `orc wiki status` — the deterministic
42
47
  probe in `../_shared/detecting-artifacts.md`, never an ad-hoc `find` (`.claude`
43
48
  is hidden). `none` = gate FAILED → fallback; else read the tier from
@@ -76,9 +81,8 @@ then one `orc graph notes pending` batch — the next run starts from this cache
76
81
 
77
82
  **d. Extra — a PROBE, not a gate (P0).** Run `orc extra resolve --slot fast-executor --json` (0 = extra, 1 = Claude) — **a gate that is never probed is a gate that is always off**, and without this step the lane silently runs on Claude however `extra_enabled` and `orc extra role` were set. `extra` → print the `extra:` line HERE and carry the answer into F2; `claude` → print nothing, never fall back, never stop.
78
83
 
79
- The SHAPE of these steps — the order, and the four rules that make it worth
80
- having — is `../_shared/phases/preflight.md` (`core`). The probes
81
- themselves are this lane's own and stay here.
84
+ Their shape and four rules: `../_shared/phases/preflight.md` (`core`). The
85
+ probes are this lane's own.
82
86
 
83
87
  ## Phase F1 — Fit gate + micro-intake (one pass, ONE user round-trip)
84
88
 
@@ -182,9 +186,7 @@ in the SAME step. A phase that ends with `zero new trace lines is a protocol vio
182
186
 
183
187
  - **Calls:** `orc lane calls orc-fast --json` names every call and its exit codes.
184
188
  **An exit code is an ANSWER where it says so, not a failure.** Make no other call.
185
- - **Config:** `orc lane config orc-fast --json`. Obey `effective`, print every line
186
- in `announce[]` VERBATIM at preflight, and honour `stops[]` before wave 1.
187
- Never merge `.claude/orc.config.yaml` yourself (`../_shared/config-precedence.md`).
189
+ - **Config:** F0 step 0.
188
190
  - **Rules:** `orc rules slice --lane orc-fast --json` is the ONLY assembler
189
191
  (`../_shared/phases/rules.md`). Its `line` prints VERBATIM at preflight.
190
192
 
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: orc-fix
3
+ description: >
4
+ Say "this is a fix, and here is what it fixes". Use for "/orc-fix", "this
5
+ fixes Sonar typescript:S3776", "ORC caused this defect", "this bug came from
6
+ AI-generated code", "record this fix". It classifies the fix from evidence,
7
+ asks once, and records it so the next review sees it. A rider: it opens no
8
+ run and returns to exactly where the run was. With no run open it can also
9
+ make the fix, like /orc-quick.
10
+ ---
11
+
12
+ # ORC — the fix record
13
+
14
+ A RIDER lane, like `/orc-wait` and `/orc-explain`. It opens no run of its own,
15
+ writes no `run-<lane>-<slug>` pointer and never writes `.current`. The user can
16
+ call it at any time — also while another lane waits at a question.
17
+
18
+ ## What this lane never does
19
+
20
+ - It never begins between a dispatch and its validated return.
21
+ - It never changes the host run: no re-plan, no re-score, no new task. A
22
+ suspend does not widen anyone's authority.
23
+ - With a run open, it never writes code. The host lane makes the fix — two
24
+ writers on one tree is the conflict `/orc-wait` forbids (DE-12).
25
+ - It never sets `miss` itself, and never records `author: orc`. The CLI does
26
+ the first, and refuses the second.
27
+
28
+ ## F0 — look (silent)
29
+
30
+ Run `orc fix classify --text "<the user's words>" --json`. The CLI reads the
31
+ git state, `git blame` on the named lines, the traces and the host run, and
32
+ proposes ONE class on two axes:
33
+
34
+ - `source` (what found it): `sonar` · `ci` · `defect` · `pr` · `review` · `other`
35
+ - `introduced_by` (who wrote the bad lines): `orc` · `ai` · `human` · `unknown`
36
+
37
+ | exit | meaning | what you do |
38
+ |---|---|---|
39
+ | 0 | classified | go to F1 |
40
+ | 1 | a dispatch is in flight | say so, wait for its return, then run F0 again |
41
+ | 2 | no text | ask what the fix fixes |
42
+
43
+ Never classify in your head. The user's three cases: "a SonarQube fix" →
44
+ `source: sonar`; "a defect caused by ORC" → `source: defect, introduced_by:
45
+ orc`; "a bug caused by AI-generated code" → `introduced_by: ai`.
46
+
47
+ ## F1 — ask once (H `fix.f1.class`)
48
+
49
+ Show the proposed class, every `evidence` line and the file, then:
50
+
51
+ ```text
52
+ This fix: source sonar · introduced by ORC (run-mini-total-290926)
53
+ - a Sonar rule key (typescript:S3776)
54
+ - git blame → 4c1e2a9: the commit falls inside the run's trace window ...
55
+ 1. confirm 2. change the class 3. cancel
56
+ ```
57
+
58
+ The user's word wins over the evidence. A changed class goes into the record
59
+ as `class_by: "user"`; a confirmed one as `class_by: "evidence"`. Cancel →
60
+ nothing is written; return to the run.
61
+
62
+ ## F2 — record
63
+
64
+ Pipe the classify answer's `record` object (with the user's class and
65
+ `class_by`) to `orc fix record - --json`. The CLI:
66
+
67
+ 1. writes ONE observation through the gotcha store — with a Sonar issue key it
68
+ uses the importer's own id, so a later `gotcha sync` completes the same row;
69
+ 2. computes `miss` from the stored review scopes;
70
+ 3. writes ONE `FIX` line into the HOST run's trace, when one is open;
71
+ 4. prints ONE line. Show it VERBATIM, then stop.
72
+
73
+ Exit 1 → a dispatch started meanwhile; nothing was written. Wait, then F2 again.
74
+
75
+ ## No run open — offer the fix (DE-12)
76
+
77
+ `mode: may-fix` from F0 → offer to make the fix before F2, like `/orc-quick`:
78
+
79
+ 1. The user picks the executor at the `/orc-quick` dispatch gate (that lane's
80
+ `dispatch-gate.md` reference, "Writing code") — nothing spawns without a yes.
81
+ 2. The slice carries `orc rules slice --lane orc-fix --json` (below).
82
+ 3. The smoke gate (`../_shared/smoke-gate.md`): red blocks the record.
83
+ 4. F2 with `outcome: "addressed"` and `via: "orc-fix"`.
84
+
85
+ The user can also say "record only" — then F2 at once.
86
+
87
+ ## Config
88
+
89
+ `orc lane config orc-fix --json`, obey `effective`. Never merge
90
+ `.claude/orc.config.yaml` yourself (`../_shared/config-precedence.md`).
91
+
92
+ ## Rules — the anti-slop card (`../_shared/phases/rules.md`)
93
+
94
+ `orc rules slice --lane orc-fix --json` is the ONLY assembler. It rides only in
95
+ an executor slice of the no-run fix.
96
+
97
+ ## Habits and trace
98
+
99
+ **Habits:** the host run had `habits{}` in its config answer → read
100
+ `../_shared/habits.md`; its next packet takes the `ASK` for `fix.f1.class`
101
+ (class `never`: a fact is never a habit). No `habits{}` → ignore `(H …)`.
102
+
103
+ **Trace:** the CLI writes the `FIX` line itself. You do not narrate it and you
104
+ do not repeat it. With no run open, nothing is traced — the record is the
105
+ observation.
106
+
107
+ ## Waiting mid-run (`/orc-wait`)
108
+
109
+ Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
110
+ Checkpoint **none** · safe point **after the record is written**. Nothing here to checkpoint, so all three modes behave identically — say so rather than asking.
@@ -93,7 +93,7 @@ Docs-only → gate N/A, say so. `orc run inflight` FIRST — exit 2 REFUSES, bec
93
93
  (`return-validation.md` §0). **A `risk: high` row adds ONE option,
94
94
  never a phase** (H `mini.phase-m.risk-high`): an exported symbol with fan-in 3+ that no test reaches adds one
95
95
  option to the EXISTING end-of-run batch (mock example · test authoring · ship)
96
- — *a. dispatch `orc-reviewer-opus-5-med` with `../_shared/review-slice.md`* (H `any.ship.review-before-push`) *(P0/P1 block the commit
96
+ — *a. dispatch `orc-reviewer-opus-5-low` with `../_shared/review-slice.md`* (H `any.ship.review-before-push`) *(P0/P1 block the commit
97
97
  offer once) · b. write a test in Phase T · c. ship anyway*. No new user turn;
98
98
  mini still skips full review.
99
99
 
@@ -154,9 +154,9 @@ Models pinned in `.claude/agents/`; look one up here, never reconstruct a name (
154
154
 
155
155
  | Role | Agent (dispatch this) | Model / effort | When `opus5_only` |
156
156
  |------|-----------------------|----------------|-------------------|
157
- | mini analysis (docs only) | `orc-analyze-mini-sonnet-5-high` | claude-sonnet-5 / high | `orc-analyze-mini-opus-5-med` |
158
- | mini planning | `orc-planner-mini-sonnet-5-high` | claude-sonnet-5 / high | `orc-planner-mini-opus-5-med` |
159
- | mini execution | `orc-executor-sonnet-5-high` | claude-sonnet-5 / high | `orc-executor-opus-5-low` |
157
+ | mini analysis (docs only) | `orc-analyze-mini-sonnet-5-high` | claude-sonnet-5-5 / high | `orc-analyze-mini-opus-5-med` |
158
+ | mini planning | `orc-planner-mini-sonnet-5-high` | claude-sonnet-5-5 / high | `orc-planner-mini-opus-5-med` |
159
+ | mini execution | `orc-executor-sonnet-5-high` | claude-sonnet-5-5 / high | `orc-executor-opus-5-low` |
160
160
  | test authoring (opt-in) | `orc-test-author-opus-5-med` | claude-opus-5-5 / medium | unchanged |
161
161
 
162
162
  ## Lane contract (`../_shared/lane-contract.md` — read it ONLY when a call exits ≠ 0)
@@ -31,10 +31,10 @@ O: GATE complexity :: complexity: mini-ok — 2 files · confident callers 1 in
31
31
 
32
32
  ## Phase 3 — Execute (ONE subagent)
33
33
  O: graph: --for-slice card (2 files) · wiki: 1 path (pointer, body never read here)
34
- O: → claude-sonnet-5 / high :: DISPATCH orc-executor-sonnet-5-high :: add --json flag
34
+ O: → claude-sonnet-5-5 / high :: DISPATCH orc-executor-sonnet-5-high :: add --json flag
35
35
  [executor edits cli/report.py + updates tests, returns actual_files + actual_model
36
36
  + evidence {`pytest tests/test_report.py`, exit 0, tail quoted} + empty unmet[]]
37
- O: VERIFY actual=claude-sonnet-5/high ✅ MATCH · evidence present ✓
37
+ O: VERIFY actual=claude-sonnet-5-5/high ✅ MATCH · evidence present ✓
38
38
 
39
39
  ## Phase M — Smoke gate (build + test; blocks ship on red)
40
40
  O: GRAPH-CHANGES → tests reached 1 file (call 1)
@@ -60,5 +60,7 @@ O: Self-QA plan: test-generator/report-json-flag/TEST-PLAN.md (committed on ship
60
60
  O: Current branch: feat/report-json. Commit? Push? PR?
61
61
  U: commit
62
62
  O: knowledge: wiki 1 page offered · used tests/test_report.py note · graph used 1 target
63
+ (risk none → no review option, so no `orc gotcha observe` call. A risk-high run
64
+ that took option a records each finding with it, `run` included.)
63
65
  O: [commits] Done. Usage: dispatch log below + run /usage for your limits.
64
66
  (Switch to full flow any time — the run folder + checkpoint are shared.)
@@ -139,7 +139,7 @@ Code review this change?
139
139
 
140
140
  ```
141
141
  Which reviewer?
142
- 1. orc-reviewer-opus-5-med knows your express@v3 pattern
142
+ 1. orc-reviewer-opus-5-low knows your express@v3 pattern
143
143
  2. other — name model + effort
144
144
  ```
145
145
 
@@ -223,7 +223,7 @@ with a range; never restate it as a saving.
223
223
  Append entry N to `orc-quick/<slug>/quick-context.md`
224
224
  (`references/context-doc.md`, only `## Entry shape` or `## A read-only entry`).
225
225
  Every request gets an entry — a read-only dig too, where the answer IS the
226
- result. Then record what it proved (`../_shared/gotchas.md` §10). A code-writing entry
226
+ result. A code-writing entry
227
227
  ends with the card (`../_shared/phases/summary.md` §End-of-run card).
228
228
 
229
229
  ### 3.4 If the user stops while it is red
@@ -245,7 +245,7 @@ committed, and print the card's `undo` row as the undo.
245
245
  or merge — even when the user said "push". A `repro: none` entry shows the
246
246
  **not reproduced** line here.
247
247
 
248
- Write the results of these offers back into entry N. **Then:** another request →
248
+ Write the results of these offers back into entry N. Then record what it proved (`../_shared/gotchas.md` §10). **Then:** another request →
249
249
  **Q1** as entry N+1, and Q0 never runs again; the user is done → emit `OUTCOME`
250
250
  + `FINISH`, send the last trace packet, and only THEN delete `log_dir/.current`.
251
251
 
@@ -12,7 +12,7 @@ what is about to be spent, before it is spent.
12
12
  |------|-------|--------------------|-----------------|
13
13
  | Writes code | `orc-executor-sonnet-4-6-med` · `orc-executor-opus-5-low` · **a third option when a `quick-executor` position is held** | yes | yes (a foreign return has no `actual_model` — §2b) |
14
14
  | Read only (recon) | `orc-recon-sonnet-4-6-med` · `orc-recon-opus-5-low` · **other — name a model** | yes · yes · no | yes |
15
- | Review | `orc-reviewer-opus-5-med` · or ad-hoc | yes / no | yes |
15
+ | Review | `orc-reviewer-opus-5-low` · or ad-hoc | yes / no | yes |
16
16
  | Build repair, round 1–2 | *reused — not asked* | yes | yes |
17
17
  | Build repair, round 3 | asked again | yes | yes |
18
18
 
@@ -20,7 +20,8 @@ what is about to be spent, before it is spent.
20
20
  `../../_shared/review-slice.md` (`--lane orc-quick`): the §1 free check first,
21
21
  then the §2 fields, and its §3 after-filter on the return. No disprove pass here.
22
22
  A finding the user calls "not a problem here" is a `disputed` outcome; record
23
- each outcome and the `FINDING-OUTCOME` line (`../../_shared/gotchas.md` §10).
23
+ each outcome with `orc gotcha observe` (one per finding, with `run`) and the
24
+ `FINDING-OUTCOME` line (`../../_shared/gotchas.md` §10).
24
25
 
25
26
  ### Writing code
26
27
 
@@ -176,8 +176,10 @@ orc gotcha import sarif <file> --json
176
176
  - Sonar exit 5 → the token is missing or refused. Tell the user to set
177
177
  `SONAR_TOKEN` in the environment. Never ask for the token in the chat. A saved
178
178
  answer also works: `--file <saved.json>`.
179
- - The import records each issue as an observation. After a green fix, the next
180
- import records the group as `addressed`. Do not record it yourself.
179
+ - The import records each issue as an observation. After a green fix, record
180
+ each fixed issue ONCE through the `/orc-fix` record step (`via: "orc-quick"`,
181
+ with its Sonar issue key — `../../_shared/gotchas.md` §10). It uses the
182
+ importer's own id, so the next import completes the SAME row with `addressed`.
181
183
  - **Never change an issue's status on the Sonar server.** ORC reads external
182
184
  systems. It does not write to them — the GitHub boundary, extended.
183
185
 
@@ -22,7 +22,7 @@ return spoke of that flywheel. It turns the raw `.txt` traces into an answer to
22
22
  three questions: **is the scoring rubric calibrated? are the workers honest?
23
23
  where does the pipeline leak?**
24
24
 
25
- Run as Opus 4.8 high (orchestrator). The mining itself is dispatched to
25
+ Run as Opus 5.5 low or better (orchestrator). The mining itself is dispatched to
26
26
  `orc-retro-sonnet-5-high` — cheap, because it reads trace text, not code — or
27
27
  to `orc-retro-opus-5-med` when `opus5_only: true` forces it
28
28
  (`../_shared/opus5-only.md`).
@@ -45,31 +45,31 @@ lane wrote:
45
45
  `run-orc-feat-auth-090726-144001.txt` (full pipeline — the rich one; every
46
46
  non-hook line was written by the trace writer from a phase packet):
47
47
  ```
48
- [090726 14:40:02.300] writer SCORE task=T3 score=72 band=[65,90) model=opus-5 :: multi-file, judgment
48
+ [090726 14:40:02.300] writer SCORE task=T3 score=72 band=[41,90) model=opus-5 :: multi-file, judgment
49
49
  [090726 14:40:03.010] writer DISPATCH orc-executor-opus-5-low :: T3 expect=opus-5/low
50
50
  [090726 14:44:12.900] writer VERIFY T3 actual=opus-5/low ✅ MATCH
51
51
  [090726 14:44:13.000] writer VERIFY T5 actual=sonnet-4-6/high ⛔ DOWNGRADE expected=opus-5/med
52
52
  [090726 15:02:00.000] reviewer FINDING p0=1 p1=0 p2=3 p3=2
53
53
  [090726 15:04:10.000] writer GATE coverage bounce :: T4 unowned (no owning req)
54
54
  [090726 15:10:00.000] verifier VERDICT pass :: 8/8 acceptance criteria
55
- [090726 15:11:30.000] writer OUTCOME task=T3 score=72 band=[65,90) model=opus-5 retries=1 requeues=0 needs_context=0 unmet=0
55
+ [090726 15:11:30.000] writer OUTCOME task=T3 score=72 band=[41,90) model=opus-5 retries=1 requeues=0 needs_context=0 unmet=0
56
56
  [090726 15:12:00.000] writer FINISH :: shipped PR #123
57
57
  ```
58
58
 
59
59
  `run-claude-readme-100726-091401.txt` (single-dispatch lane — ONE end-of-run
60
60
  packet; its meaningful signal is the writer's tier honesty):
61
61
  ```
62
- [100726 09:14:02.110] writer DISPATCH orc-claude-writer :: refresh expect=opus-4-8/high
63
- [100726 09:14:02.230] hook SPAWN orc-claude-writer-opus-4-8-high
62
+ [100726 09:14:02.110] writer DISPATCH orc-claude-writer :: refresh expect=opus-5/low
63
+ [100726 09:14:02.230] hook SPAWN orc-claude-writer-opus-5-low
64
64
  [100726 09:15:47.900] hook RETURN
65
- [100726 09:15:48.010] writer VERIFY writer actual=sonnet-4-6/high ⛔ DOWNGRADE expected=opus-4-8/high
65
+ [100726 09:15:48.010] writer VERIFY writer actual=sonnet-4-6/high ⛔ DOWNGRADE expected=opus-5/low
66
66
  [100726 09:15:48.120] writer FINISH :: refresh CLAUDE.md v0.0.3
67
67
  ```
68
68
 
69
69
  ### Step 2 — dispatch the miner (never mines itself)
70
70
 
71
71
  ```
72
- C: Spawning orc-retro-sonnet-5-high → claude-sonnet-5 / high
72
+ C: Spawning orc-retro-sonnet-5-high → claude-sonnet-5-5 / high
73
73
  slice: trace_files=[3 paths] + verb_reference=_shared/phases/trace-verbs.md
74
74
  (This lane writes NO run pointer and emits NO markers — tracing the retro
75
75
  would pollute the very data it mines.)
@@ -82,23 +82,23 @@ verb set, and returns EXACTLY the contract:
82
82
  runs_analyzed: 3
83
83
  tasks_analyzed: 6
84
84
  band_stats:
85
- - {band: "[65,90)", model: opus-5, tasks: 2, avg_retries: 0.5, avg_requeues: 0, avg_needs_context: 0, avg_unmet: 0}
86
- - {band: "[55,65)", model: sonnet-5, tasks: 3, avg_retries: 1.3, avg_requeues: 0.7, avg_needs_context: 1.0, avg_unmet: 0.3}
85
+ - {band: "[41,90)", model: opus-5, tasks: 2, avg_retries: 0.5, avg_requeues: 0, avg_needs_context: 0, avg_unmet: 0}
86
+ - {band: "[31,41)", model: sonnet-5, tasks: 3, avg_retries: 1.3, avg_requeues: 0.7, avg_needs_context: 1.0, avg_unmet: 0.3}
87
87
  downgrades:
88
88
  - {agent: orc-executor-opus-5-low, expected: opus-5/low, actual: sonnet-4-6/high, run: feat-auth-090726}
89
- - {agent: orc-claude-writer-opus-4-8-high, expected: opus-4-8/high, actual: sonnet-4-6/high, run: orc-claude-100726}
89
+ - {agent: orc-claude-writer-opus-5-low, expected: opus-5/low, actual: sonnet-4-6/high, run: orc-claude-100726}
90
90
  leaks:
91
91
  - {kind: verdict-fail, evidence: "run-orc-feat-auth-090726-144001.txt:L31 (FINDING p0=1)", count: 1}
92
92
  - {kind: gate-bounce, evidence: "run-orc-feat-auth-090726-144001.txt:L33 (coverage bounce)", count: 1}
93
93
  - {kind: context-gap, evidence: "run-mini-fix-cache-110726-101200.txt:L4,L7", count: 2}
94
94
  recommendations:
95
- - finding: "Both downgrades share a fingerprint: an opus-4-8/high pin ran as sonnet-4-6 — the main session was below Opus when the child spawned."
96
- suggested_change: "Not a rubric issue — surface to the user: run the pinned lanes from an Opus 4.8 session. No config edit."
95
+ - finding: "Both downgrades share a fingerprint: an opus-5/low pin ran as sonnet-4-6 — the main session was below Opus when the child spawned."
96
+ suggested_change: "Not a rubric issue — surface to the user: run the pinned lanes from an Opus 5.5 session. No config edit."
97
97
  confidence: strong
98
- - finding: "sonnet-5 band [55,65) shows avg_needs_context=1.0 across 3 tasks — slices may be under-specified."
99
- suggested_change: "config.md — tighten the planner's declared-files discipline, or nudge the [55,65) band slice detail."
98
+ - finding: "sonnet-5 band [31,41) shows avg_needs_context=1.0 across 3 tasks — slices may be under-specified."
99
+ suggested_change: "config.md — tighten the planner's declared-files discipline, or nudge the [31,41) band slice detail."
100
100
  confidence: weak # n<3 in this band
101
- actual_model: claude-sonnet-5
101
+ actual_model: claude-sonnet-5-5
102
102
  actual_effort: high
103
103
  ```
104
104
 
@@ -113,8 +113,8 @@ C: Return validates. Writing report →
113
113
  level to run traces + their sidecars)
114
114
 
115
115
  ── orc-retro summary (n=3 runs, 6 tasks) ──────────────────────────────
116
- Scoring calibrated? ~ mostly — [65,90) clean; [40,65) shows a context-gap (weak, n=3)
117
- Workers honest? ⛔ NO — 2 silent downgrades (opus-4-8 → sonnet-4-6)
116
+ Scoring calibrated? ~ mostly — [41,90) clean; [31,41) shows a context-gap (weak, n=3)
117
+ Workers honest? ⛔ NO — 2 silent downgrades (opus-5 → sonnet-4-6)
118
118
  Where it leaks? 1 coverage-gate bounce, 1 P0 review finding, 2 context-gaps
119
119
  Narrated? 11/12 phases had a writer dispatch (1 execution phase blind)
120
120
  Recommendations: 2 (1 strong, 1 weak)