@azure-id/orc 0.56.1 → 1.0.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 +2367 -2218
  2. package/README-id.md +49 -107
  3. package/README.md +45 -133
  4. package/bin/build-agents.js +18 -11
  5. package/bin/cli.js +33060 -29855
  6. package/bin/onboarding-content.js +0 -3
  7. package/bin/test-run.js +491 -0
  8. package/bin/verify-contracts.js +4256 -3277
  9. package/bin/verify-package.js +563 -498
  10. package/bin/webui/api.js +1186 -1163
  11. package/bin/webui/app.html +9 -0
  12. package/bin/webui/css/06-responsive.css +120 -108
  13. package/bin/webui/css/panels/extra.css +29 -0
  14. package/bin/webui/css/panels/lanes.css +134 -0
  15. package/bin/webui/css/panels/settings.css +79 -3
  16. package/bin/webui/fixtures/extra.js +2036 -1934
  17. package/bin/webui/fixtures/flow.js +2 -2
  18. package/bin/webui/fixtures/index.js +503 -486
  19. package/bin/webui/fixtures/lanes.js +218 -0
  20. package/bin/webui/fixtures/settings.js +261 -34
  21. package/bin/webui/fixtures/stats.js +3 -3
  22. package/bin/webui/i18n/TERMS.md +135 -134
  23. package/bin/webui/i18n/en/extra.json +345 -313
  24. package/bin/webui/i18n/en/lanes.json +29 -0
  25. package/bin/webui/i18n/en/nav.json +1 -0
  26. package/bin/webui/i18n/en/overview.json +2 -0
  27. package/bin/webui/i18n/en/settings.json +16 -5
  28. package/bin/webui/i18n/id/extra.json +345 -313
  29. package/bin/webui/i18n/id/lanes.json +29 -0
  30. package/bin/webui/i18n/id/nav.json +1 -0
  31. package/bin/webui/i18n/id/overview.json +2 -0
  32. package/bin/webui/i18n/id/settings.json +15 -4
  33. package/bin/webui/js/01-i18n.js +1 -0
  34. package/bin/webui/js/panels/extra.js +3199 -3011
  35. package/bin/webui/js/panels/lanes.js +259 -0
  36. package/bin/webui/js/panels/overview.js +10 -0
  37. package/bin/webui/js/panels/settings.js +149 -3
  38. package/package.json +39 -39
  39. package/templates/agents/MODEL-MAPPING.md +23 -35
  40. package/templates/agents/orc-executor-opus-4-7-high.md +1 -1
  41. package/templates/agents/orc-executor-opus-4-7-med.md +1 -1
  42. package/templates/agents/orc-executor-opus-4-8-high.md +1 -1
  43. package/templates/agents/orc-executor-opus-5-high.md +1 -1
  44. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  45. package/templates/agents/orc-executor-opus-5-med.md +1 -1
  46. package/templates/agents/orc-retro-opus-5-med.md +73 -73
  47. package/templates/agents/orc-retro-sonnet-5-high.md +72 -72
  48. package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -107
  49. package/templates/commands/orc-route.md +1 -1
  50. package/templates/commands/orc.md +1 -1
  51. package/templates/skills/_shared/README.md +7 -3
  52. package/templates/skills/_shared/config-precedence.md +198 -0
  53. package/templates/skills/_shared/drift-recovery.md +1 -1
  54. package/templates/skills/_shared/extra-dispatch.md +159 -7
  55. package/templates/skills/_shared/interview.md +1 -1
  56. package/templates/skills/_shared/opus5-only.md +9 -7
  57. package/templates/skills/_shared/phases/README.md +82 -0
  58. package/templates/skills/{orc/references → _shared/phases}/analyst-gates.md +15 -3
  59. package/templates/skills/_shared/phases/execution.md +143 -0
  60. package/templates/skills/{orc/references → _shared/phases}/house-rules.md +13 -1
  61. package/templates/skills/{orc/references → _shared/phases}/intake.md +15 -2
  62. package/templates/skills/_shared/phases/mock-example.md +56 -0
  63. package/templates/skills/{orc/references → _shared/phases}/plan-handoff.md +16 -3
  64. package/templates/skills/_shared/phases/planning.md +135 -0
  65. package/templates/skills/_shared/phases/preflight.md +76 -0
  66. package/templates/skills/_shared/phases/review.md +53 -0
  67. package/templates/skills/_shared/phases/scoring.md +65 -0
  68. package/templates/skills/{orc/references → _shared/phases}/security-checklist.md +12 -1
  69. package/templates/skills/_shared/phases/security.md +55 -0
  70. package/templates/skills/_shared/phases/ship.md +88 -0
  71. package/templates/skills/{orc/references/stop-and-resume.md → _shared/phases/stop-resume.md} +169 -160
  72. package/templates/skills/_shared/phases/summary.md +48 -0
  73. package/templates/skills/_shared/phases/testgen.md +51 -0
  74. package/templates/skills/{orc/references/trace-protocol.md → _shared/phases/trace.md} +49 -6
  75. package/templates/skills/_shared/phases/verify.md +70 -0
  76. package/templates/skills/{orc/references → _shared/phases}/wave-grouping.md +14 -2
  77. package/templates/skills/{orc/references → _shared/phases}/wiki-consult.md +13 -1
  78. package/templates/skills/_shared/read-ladder.md +48 -0
  79. package/templates/skills/context-combiner/SKILL.md +214 -187
  80. package/templates/skills/orc/README.md +148 -150
  81. package/templates/skills/orc/SKILL.md +70 -358
  82. package/templates/skills/orc/config.md +137 -389
  83. package/templates/skills/orc/examples/full-run-mock.md +1 -1
  84. package/templates/skills/orc/references/effort-and-mode.md +16 -18
  85. package/templates/skills/orc/references/phases/intake.md +47 -0
  86. package/templates/skills/orc/references/phases/integration.md +19 -0
  87. package/templates/skills/orc/references/preflight-report.md +4 -4
  88. package/templates/skills/orc/references/ultra-mode.md +117 -123
  89. package/templates/skills/orc/schemas/planning-output.md +279 -279
  90. package/templates/skills/orc/subskills/orc-planner/SKILL.md +260 -264
  91. package/templates/skills/orc/subskills/orc-pr/stack-gate.md +4 -1
  92. package/templates/skills/orc-aftermath/SKILL.md +153 -136
  93. package/templates/skills/orc-analyze/SKILL.md +247 -220
  94. package/templates/skills/orc-analyze/references/branching.md +51 -51
  95. package/templates/skills/orc-analyze/references/thin-input.md +1 -1
  96. package/templates/skills/orc-analyze-mini/SKILL.md +128 -112
  97. package/templates/skills/orc-boundary/SKILL.md +244 -208
  98. package/templates/skills/orc-brainstorm/SKILL.md +372 -339
  99. package/templates/skills/orc-budget/SKILL.md +243 -225
  100. package/templates/skills/orc-challenge/README.md +1 -1
  101. package/templates/skills/orc-challenge/SKILL.md +293 -255
  102. package/templates/skills/orc-challenge/examples/council-full-roster.md +1 -1
  103. package/templates/skills/orc-claude/SKILL.md +216 -199
  104. package/templates/skills/orc-diy/README.md +2 -1
  105. package/templates/skills/orc-diy/SKILL.md +129 -70
  106. package/templates/skills/orc-diy/references/blocks/analyze.md +1 -1
  107. package/templates/skills/orc-diy/references/compile.md +21 -7
  108. package/templates/skills/orc-diy/references/flow-schema.md +2 -2
  109. package/templates/skills/orc-doc/SKILL.md +44 -7
  110. package/templates/skills/orc-explain/SKILL.md +19 -0
  111. package/templates/skills/orc-export/SKILL.md +26 -5
  112. package/templates/skills/orc-fast/SKILL.md +215 -187
  113. package/templates/skills/orc-grill/SKILL.md +233 -207
  114. package/templates/skills/orc-handoff/SKILL.md +223 -204
  115. package/templates/skills/orc-learn/SKILL.md +176 -156
  116. package/templates/skills/orc-mini/SKILL.md +41 -23
  117. package/templates/skills/orc-pact/SKILL.md +250 -218
  118. package/templates/skills/orc-pattern/SKILL.md +149 -124
  119. package/templates/skills/orc-poly/SKILL.md +237 -216
  120. package/templates/skills/orc-poly/references/gather.md +1 -1
  121. package/templates/skills/orc-pr-driver/SKILL.md +196 -167
  122. package/templates/skills/orc-pr-driver/references/orc-run-split.md +1 -1
  123. package/templates/skills/orc-pr-setup/SKILL.md +212 -184
  124. package/templates/skills/orc-quick/README.md +2 -2
  125. package/templates/skills/orc-quick/SKILL.md +45 -12
  126. package/templates/skills/orc-quick/references/dispatch-gate.md +2 -3
  127. package/templates/skills/orc-retro/SKILL.md +244 -222
  128. package/templates/skills/orc-retro/examples/retro-mock.md +171 -171
  129. package/templates/skills/orc-route/SKILL.md +183 -165
  130. package/templates/skills/orc-verify/SKILL.md +100 -86
  131. package/templates/skills/orc-wiki/SKILL.md +55 -206
  132. package/templates/skills/orc-wiki/references/phases/phase-0.md +71 -0
  133. package/templates/skills/orc-wiki/references/phases/phase-1.md +35 -0
  134. package/templates/skills/orc-wiki/references/phases/phase-2.md +52 -0
  135. package/templates/skills/orc-wiki/references/phases/phase-3.md +57 -0
  136. package/templates/skills/orc-wiki/references/phases/phase-3c.md +36 -0
  137. package/templates/agents/orc-advisor-fable-5.md +0 -50
  138. package/templates/agents/orc-analyst-fable-5.md +0 -115
  139. package/templates/agents/orc-judge-fable-5.md +0 -79
  140. package/templates/agents/orc-planner-fable-5.md +0 -152
  141. package/templates/agents/orc-reviewer-fable-5.md +0 -57
  142. package/templates/skills/_shared/fable5-override.md +0 -56
  143. package/templates/skills/orc-diy/references/blocks/execution.md +0 -42
  144. package/templates/skills/orc-diy/references/blocks/mock-example.md +0 -22
  145. package/templates/skills/orc-diy/references/blocks/planning.md +0 -34
  146. package/templates/skills/orc-diy/references/blocks/review.md +0 -18
  147. package/templates/skills/orc-diy/references/blocks/scoring.md +0 -16
  148. package/templates/skills/orc-diy/references/blocks/security.md +0 -25
  149. package/templates/skills/orc-diy/references/blocks/ship.md +0 -25
  150. package/templates/skills/orc-diy/references/blocks/summary.md +0 -18
  151. package/templates/skills/orc-diy/references/blocks/testgen.md +0 -17
  152. package/templates/skills/orc-diy/references/blocks/trace.md +0 -28
  153. package/templates/skills/orc-diy/references/blocks/verify.md +0 -25
@@ -1,171 +1,171 @@
1
- # Worked example — /orc-retro run (mock; orient only, never execute from this)
2
-
3
- The retro is the READER end of the behavior-trace flywheel: it mines the `.txt`
4
- traces (logging is permanent — every run writes one), aggregates the CLOSED verb
5
- set, and files a calibration report UPSTREAM to the ORC repo. It never tunes
6
- your project, never self-tunes, and writes no trace of its own.
7
-
8
- ## Happy path
9
-
10
- Setup: `.claude/orc/logs/` holds 3 traces (logging was on for a while). The
11
- delivery target is the configured `retro_repo` (default `azure-id/orc`). The
12
- `gh` CLI is installed and authed.
13
-
14
- ```
15
- U: /orc-retro
16
- ```
17
-
18
- ### Step 0 — P0 preflight (a delivery channel, or no run at all)
19
-
20
- ```
21
- C: Probing delivery channel…
22
- gh --version → gh 2.62.0 ✓ gh auth status → logged in as joshua-k ✓
23
- Channel = gh. Target = retro_repo (azure-id/orc).
24
- ```
25
-
26
- If BOTH `gh` and a GitHub MCP were missing → STOP here: mine nothing, spawn
27
- nothing, write no local report. Tell the user to `gh auth login` (or connect a
28
- GitHub MCP) and re-run.
29
-
30
- ### Step 1 — collect traces
31
-
32
- ```
33
- C: log_dir = .claude/orc/logs
34
- Found 3 traces:
35
- • run-orc-feat-auth-090726-144001.txt (lane=orc, 42 lines)
36
- • run-claude-readme-100726-091401.txt (lane=claude, 5 lines)
37
- • run-mini-fix-cache-110726-101200.txt (lane=mini, 11 lines)
38
- Lane comes free from the filename; each has a .jsonl companion.
39
- Mining all 3. n=3 runs — small-sample edge; weak signals get labeled.
40
- ```
41
-
42
- The three lanes contribute DIFFERENT verb sets — the miner only gets what each
43
- lane wrote:
44
-
45
- `run-orc-feat-auth-090726-144001.txt` (full pipeline — the rich one; every
46
- non-hook line was written by the trace writer from a phase packet):
47
- ```
48
- [090726 14:40:02.300] writer SCORE task=T3 score=72 band=[70,80) model=opus-4-7 :: multi-file, judgment
49
- [090726 14:40:03.010] writer DISPATCH orc-executor-opus-4-7-high :: T3 expect=opus-4-7/high
50
- [090726 14:44:12.900] writer VERIFY T3 actual=opus-4-7/high ✅ MATCH
51
- [090726 14:44:13.000] writer VERIFY T5 actual=sonnet-4-6/high ⛔ DOWNGRADE expected=opus-4-8/high
52
- [090726 15:02:00.000] reviewer FINDING p0=1 p1=0 p2=3 p3=2
53
- [090726 15:04:10.000] writer GATE coverage bounce :: T4 unowned (no owning req)
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=[70,80) model=opus-4-7 retries=1 requeues=0 needs_context=0 unmet=0
56
- [090726 15:12:00.000] writer FINISH :: shipped PR #123
57
- ```
58
-
59
- `run-claude-readme-100726-091401.txt` (single-dispatch lane — ONE end-of-run
60
- packet; its meaningful signal is the writer's tier honesty):
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
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
66
- [100726 09:15:48.120] writer FINISH :: refresh CLAUDE.md v0.0.3
67
- ```
68
-
69
- ### Step 2 — dispatch the miner (never mines itself)
70
-
71
- ```
72
- C: Spawning orc-retro-sonnet-5-high → claude-sonnet-5 / high
73
- slice: trace_files=[3 paths] + verb_reference=orc/references/trace-protocol.md
74
- (This lane writes NO run pointer and emits NO markers — tracing the retro
75
- would pollute the very data it mines.)
76
- ```
77
-
78
- The miner parses `[stamp] actor VERB :: tail`, skips any line outside the closed
79
- verb set, and returns EXACTLY the contract:
80
-
81
- ```yaml
82
- runs_analyzed: 3
83
- tasks_analyzed: 6
84
- band_stats:
85
- - {band: "[70,80)", model: opus-4-7, tasks: 2, avg_retries: 0.5, avg_requeues: 0, avg_needs_context: 0, avg_unmet: 0}
86
- - {band: "[50,70)", model: sonnet-5, tasks: 3, avg_retries: 1.3, avg_requeues: 0.7, avg_needs_context: 1.0, avg_unmet: 0.3}
87
- downgrades:
88
- - {agent: orc-executor-opus-4-8-high, expected: opus-4-8/high, 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}
90
- leaks:
91
- - {kind: verdict-fail, evidence: "run-orc-feat-auth-090726-144001.txt:L31 (FINDING p0=1)", count: 1}
92
- - {kind: gate-bounce, evidence: "run-orc-feat-auth-090726-144001.txt:L33 (coverage bounce)", count: 1}
93
- - {kind: context-gap, evidence: "run-mini-fix-cache-110726-101200.txt:L4,L7", count: 2}
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."
97
- confidence: strong
98
- - finding: "sonnet-5 band [50,70) 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 [50,70) band slice detail."
100
- confidence: weak # n<3 in this band
101
- actual_model: claude-sonnet-5
102
- actual_effort: high
103
- ```
104
-
105
- A recommendation with no evidence line references is DROPPED — the retro obeys
106
- the same evidence-or-advisory rule it audits.
107
-
108
- ### Step 3 — validate, write the local report, show the summary
109
-
110
- ```
111
- C: Return validates. Writing report →
112
- .claude/orc/logs/retro/130726-report.md (retro/ subfolder keeps the top
113
- level to run traces + their sidecars)
114
-
115
- ── orc-retro summary (n=3 runs, 6 tasks) ──────────────────────────────
116
- Scoring calibrated? ~ mostly — [70,80) clean; [50,70) shows a context-gap (weak, n=3)
117
- Workers honest? ⛔ NO — 2 silent downgrades (opus-4-8 → sonnet-4-6)
118
- Where it leaks? 1 coverage-gate bounce, 1 P0 review finding, 2 context-gaps
119
- Narrated? 11/12 phases had a writer dispatch (1 execution phase blind)
120
- Recommendations: 2 (1 strong, 1 weak)
121
- ───────────────────────────────────────────────────────────────────────
122
- ```
123
-
124
- The report is AI-readable: YAML frontmatter mirroring the return contract
125
- (`schema: orc-retro/v1`, every array verbatim), then short human sections
126
- (Verdicts / Per-band table / Recommendations, each with its evidence + n).
127
-
128
- ### Step 4 — deliver upstream (the point of the retro)
129
-
130
- ```
131
- C: cwd remote ≠ retro_repo → shallow-clone azure-id/orc into a temp dir.
132
- branch retro/130726 → add retro/incoming/130726-myproject-report.md → push
133
- gh pr create -R azure-id/orc --title "orc-retro: 130726 — 3 runs, 2 recommendations"
134
- ✅ https://github.com/azure-id/orc/pull/318
135
- ```
136
-
137
- If push or PR creation fails (e.g. no write access), fall back to
138
- `gh issue create -R azure-id/orc` with the full report as the body. Either way,
139
- end by showing the created PR/issue URL. If delivery itself errors after the
140
- preflight passed, surface the error verbatim and point at the local report copy
141
- — never claim it was filed.
142
-
143
- ## Early-exit branches
144
-
145
- No delivery channel (preflight fails):
146
- ```
147
- U: /orc-retro
148
- C: gh not authed, no GitHub MCP in this session.
149
- ✋ Retro needs somewhere to file its report. Run `gh auth login` (or connect a
150
- GitHub MCP), then re-run. Mining nothing until then.
151
- ```
152
-
153
- No traces yet (no ORC runs have happened):
154
- ```
155
- U: /orc-retro
156
- C: Channel OK. log_dir has 0 *.txt files.
157
- Nothing to mine — no ORC runs have been traced yet. Run some ORC work, then
158
- come back. Never invents findings from zero data.
159
- ```
160
-
161
- ## What each lane contributes to the mine
162
-
163
- - **Full `/orc`** — the rich one: `SCORE`/`OUTCOME` (band calibration), GATE
164
- bounce rates (which role's discipline leaks), `FINDING`/`VERDICT`
165
- (review/verify health), plus `VERIFY` (tier honesty).
166
- - **orc-mini** — `DISPATCH`/`VERIFY`/`FINISH` + any `CONTEXT-GAP`; no scoring
167
- or review markers.
168
- - **orc-claude** — single-dispatch: `DISPATCH`/`VERIFY`/`FINISH` only. Its one
169
- contribution is the writer's tier-honesty `VERIFY` — exactly the `⛔ DOWNGRADE`
170
- in this mock. Before orc-claude wrote its trace at all, that downgrade was
171
- invisible; now it lands in `downgrades[]`.
1
+ # Worked example — /orc-retro run (mock; orient only, never execute from this)
2
+
3
+ The retro is the READER end of the behavior-trace flywheel: it mines the `.txt`
4
+ traces (logging is permanent — every run writes one), aggregates the CLOSED verb
5
+ set, and files a calibration report UPSTREAM to the ORC repo. It never tunes
6
+ your project, never self-tunes, and writes no trace of its own.
7
+
8
+ ## Happy path
9
+
10
+ Setup: `.claude/orc/logs/` holds 3 traces (logging was on for a while). The
11
+ delivery target is the configured `retro_repo` (default `azure-id/orc`). The
12
+ `gh` CLI is installed and authed.
13
+
14
+ ```
15
+ U: /orc-retro
16
+ ```
17
+
18
+ ### Step 0 — P0 preflight (a delivery channel, or no run at all)
19
+
20
+ ```
21
+ C: Probing delivery channel…
22
+ gh --version → gh 2.62.0 ✓ gh auth status → logged in as joshua-k ✓
23
+ Channel = gh. Target = retro_repo (azure-id/orc).
24
+ ```
25
+
26
+ If BOTH `gh` and a GitHub MCP were missing → STOP here: mine nothing, spawn
27
+ nothing, write no local report. Tell the user to `gh auth login` (or connect a
28
+ GitHub MCP) and re-run.
29
+
30
+ ### Step 1 — collect traces
31
+
32
+ ```
33
+ C: log_dir = .claude/orc/logs
34
+ Found 3 traces:
35
+ • run-orc-feat-auth-090726-144001.txt (lane=orc, 42 lines)
36
+ • run-claude-readme-100726-091401.txt (lane=claude, 5 lines)
37
+ • run-mini-fix-cache-110726-101200.txt (lane=mini, 11 lines)
38
+ Lane comes free from the filename; each has a .jsonl companion.
39
+ Mining all 3. n=3 runs — small-sample edge; weak signals get labeled.
40
+ ```
41
+
42
+ The three lanes contribute DIFFERENT verb sets — the miner only gets what each
43
+ lane wrote:
44
+
45
+ `run-orc-feat-auth-090726-144001.txt` (full pipeline — the rich one; every
46
+ non-hook line was written by the trace writer from a phase packet):
47
+ ```
48
+ [090726 14:40:02.300] writer SCORE task=T3 score=72 band=[65,90) model=opus-5 :: multi-file, judgment
49
+ [090726 14:40:03.010] writer DISPATCH orc-executor-opus-5-low :: T3 expect=opus-5/low
50
+ [090726 14:44:12.900] writer VERIFY T3 actual=opus-5/low ✅ MATCH
51
+ [090726 14:44:13.000] writer VERIFY T5 actual=sonnet-4-6/high ⛔ DOWNGRADE expected=opus-5/med
52
+ [090726 15:02:00.000] reviewer FINDING p0=1 p1=0 p2=3 p3=2
53
+ [090726 15:04:10.000] writer GATE coverage bounce :: T4 unowned (no owning req)
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
56
+ [090726 15:12:00.000] writer FINISH :: shipped PR #123
57
+ ```
58
+
59
+ `run-claude-readme-100726-091401.txt` (single-dispatch lane — ONE end-of-run
60
+ packet; its meaningful signal is the writer's tier honesty):
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
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
66
+ [100726 09:15:48.120] writer FINISH :: refresh CLAUDE.md v0.0.3
67
+ ```
68
+
69
+ ### Step 2 — dispatch the miner (never mines itself)
70
+
71
+ ```
72
+ C: Spawning orc-retro-sonnet-5-high → claude-sonnet-5 / high
73
+ slice: trace_files=[3 paths] + verb_reference=_shared/phases/trace.md
74
+ (This lane writes NO run pointer and emits NO markers — tracing the retro
75
+ would pollute the very data it mines.)
76
+ ```
77
+
78
+ The miner parses `[stamp] actor VERB :: tail`, skips any line outside the closed
79
+ verb set, and returns EXACTLY the contract:
80
+
81
+ ```yaml
82
+ runs_analyzed: 3
83
+ tasks_analyzed: 6
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}
87
+ downgrades:
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}
90
+ leaks:
91
+ - {kind: verdict-fail, evidence: "run-orc-feat-auth-090726-144001.txt:L31 (FINDING p0=1)", count: 1}
92
+ - {kind: gate-bounce, evidence: "run-orc-feat-auth-090726-144001.txt:L33 (coverage bounce)", count: 1}
93
+ - {kind: context-gap, evidence: "run-mini-fix-cache-110726-101200.txt:L4,L7", count: 2}
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."
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."
100
+ confidence: weak # n<3 in this band
101
+ actual_model: claude-sonnet-5
102
+ actual_effort: high
103
+ ```
104
+
105
+ A recommendation with no evidence line references is DROPPED — the retro obeys
106
+ the same evidence-or-advisory rule it audits.
107
+
108
+ ### Step 3 — validate, write the local report, show the summary
109
+
110
+ ```
111
+ C: Return validates. Writing report →
112
+ .claude/orc/logs/retro/130726-report.md (retro/ subfolder keeps the top
113
+ level to run traces + their sidecars)
114
+
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)
118
+ Where it leaks? 1 coverage-gate bounce, 1 P0 review finding, 2 context-gaps
119
+ Narrated? 11/12 phases had a writer dispatch (1 execution phase blind)
120
+ Recommendations: 2 (1 strong, 1 weak)
121
+ ───────────────────────────────────────────────────────────────────────
122
+ ```
123
+
124
+ The report is AI-readable: YAML frontmatter mirroring the return contract
125
+ (`schema: orc-retro/v1`, every array verbatim), then short human sections
126
+ (Verdicts / Per-band table / Recommendations, each with its evidence + n).
127
+
128
+ ### Step 4 — deliver upstream (the point of the retro)
129
+
130
+ ```
131
+ C: cwd remote ≠ retro_repo → shallow-clone azure-id/orc into a temp dir.
132
+ branch retro/130726 → add retro/incoming/130726-myproject-report.md → push
133
+ gh pr create -R azure-id/orc --title "orc-retro: 130726 — 3 runs, 2 recommendations"
134
+ ✅ https://github.com/azure-id/orc/pull/318
135
+ ```
136
+
137
+ If push or PR creation fails (e.g. no write access), fall back to
138
+ `gh issue create -R azure-id/orc` with the full report as the body. Either way,
139
+ end by showing the created PR/issue URL. If delivery itself errors after the
140
+ preflight passed, surface the error verbatim and point at the local report copy
141
+ — never claim it was filed.
142
+
143
+ ## Early-exit branches
144
+
145
+ No delivery channel (preflight fails):
146
+ ```
147
+ U: /orc-retro
148
+ C: gh not authed, no GitHub MCP in this session.
149
+ ✋ Retro needs somewhere to file its report. Run `gh auth login` (or connect a
150
+ GitHub MCP), then re-run. Mining nothing until then.
151
+ ```
152
+
153
+ No traces yet (no ORC runs have happened):
154
+ ```
155
+ U: /orc-retro
156
+ C: Channel OK. log_dir has 0 *.txt files.
157
+ Nothing to mine — no ORC runs have been traced yet. Run some ORC work, then
158
+ come back. Never invents findings from zero data.
159
+ ```
160
+
161
+ ## What each lane contributes to the mine
162
+
163
+ - **Full `/orc`** — the rich one: `SCORE`/`OUTCOME` (band calibration), GATE
164
+ bounce rates (which role's discipline leaks), `FINDING`/`VERDICT`
165
+ (review/verify health), plus `VERIFY` (tier honesty).
166
+ - **orc-mini** — `DISPATCH`/`VERIFY`/`FINISH` + any `CONTEXT-GAP`; no scoring
167
+ or review markers.
168
+ - **orc-claude** — single-dispatch: `DISPATCH`/`VERIFY`/`FINISH` only. Its one
169
+ contribution is the writer's tier-honesty `VERIFY` — exactly the `⛔ DOWNGRADE`
170
+ in this mock. Before orc-claude wrote its trace at all, that downgrade was
171
+ invisible; now it lands in `downgrades[]`.