@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,70 +1,129 @@
1
- ---
2
- name: orc-diy
3
- description: >
4
- User-composable ORC lane. Use for "/orc-diy" or "run my custom orc flow".
5
- The pipeline shape (analyze/review/verify/security/testgen on-off, scoring
6
- or a fixed executor, autonomy, ship mode, session tier) is configured
7
- ENTIRELY through the `orc diy` CLI and compiled into a flow file —
8
- never configured in-session. HARD-GATED: no config or a stale compile →
9
- this skill never runs the custom flow; it explains the CLI steps and offers
10
- plain /orc instead. "/orc-diy compile" re-runs the deterministic CLI
11
- compiler. See references/flow-schema.md and references/compile.md.
12
- ---
13
-
14
- # ORC-DIY (stub — gate + dispatcher)
15
-
16
- You are the entry gate for the user's compiled custom flow. You NEVER invent,
17
- modify, or interpret flow configuration in-session — the `orc diy` CLI is the
18
- only writer, the compiler is the only builder, and this stub only gates and
19
- dispatches. All state lives in the project's `.claude/` (project-scoped; no
20
- global variant).
21
-
22
- ## Step 0 — route `compile`
23
-
24
- If the invocation argument is `compile` (from `/orc-diy compile`): run
25
- `orc diy compile` via Bash and relay its output. If the `orc` CLI is not on
26
- PATH, tell the user to run `orc diy compile` in their own terminal — do NOT
27
- reimplement the compiler in-session. Then end the turn. (`status` routes the
28
- same way to `orc diy status`.)
29
-
30
- ## Step 1 — the hard gate (every other invocation)
31
-
32
- Run `orc diy status` via Bash and branch on the reported state. If the CLI is
33
- unavailable, apply the same checks manually from
34
- `.claude/orc-diy.config.yaml` + `.claude/orc/diy/flow.lock.json` per
35
- `references/flow-schema.md` — and treat ANYTHING you cannot verify as STALE
36
- (fail closed).
37
-
38
- - **UNCONFIGURED** — no config exists. Tell the user, in this order: what
39
- orc-diy is (one sentence), the exact bootstrap
40
- (`orc diy init` → optionally `orc diy set <key> <value>` →
41
- `orc diy compile` — see the skill's README for the full guide), then ask
42
- ONE question: *"Run this request through the regular full `/orc` lane
43
- instead?"* Yes → invoke the `orc` skill with the user's original request
44
- carried over verbatim. No → end the turn. Never proceed on an
45
- unconfigured flow, and never write the config yourself.
46
- - **STALE** — configured but not runnable. Report the specific reason the
47
- status gave (config changed since compile / orc was updated / compiled
48
- flow modified or missing) and the fix (`orc diy compile`), then the same
49
- single `/orc` fallback question as above. Never run a stale flow.
50
- - **READY** — proceed to Step 2.
51
-
52
- ## Step 2 — dispatch the compiled flow
53
-
54
- Read `.claude/orc/diy/FLOW-COMPILED.md` and follow it as your orchestrator
55
- spine for this run — it is self-contained: tier self-check, locked rules,
56
- phase sequence, and the references it cherry-picks from the installed orc
57
- skill. Honor its generated header: if its own self-gate fails, stop exactly
58
- as it says. Do not consult this stub again for the rest of the run, and do
59
- not load orc's SKILL.md as a spine (the compiled flow already references the
60
- exact orc subskills and schemas it needs).
61
-
62
- ## Hard rules
63
-
64
- 1. The compiled flow is a build artifact NEVER edit
65
- `FLOW-COMPILED.md`, `flow.lock.json`, or `orc-diy.config.yaml` yourself,
66
- and never "patch" the flow conversationally. Config changes go through
67
- `orc diy set` + `orc diy compile`, both run by the user.
68
- 2. Fail closed: any gate ambiguity = STALE, with the reason shown.
69
- 3. The fallback ask is ONE question with two outcomes (`/orc` or stop) —
70
- never a menu, never a silent fallback.
1
+ ---
2
+ name: orc-diy
3
+ description: >
4
+ User-composable ORC lane. Use for "/orc-diy" or "run my custom orc flow".
5
+ The pipeline shape (analyze/review/verify/security/testgen on-off, scoring
6
+ or a fixed executor, autonomy, ship mode, session tier) is configured
7
+ ENTIRELY through the `orc diy` CLI and compiled into a flow file —
8
+ never configured in-session. HARD-GATED: no config or a stale compile →
9
+ this skill never runs the custom flow; it explains the CLI steps and offers
10
+ plain /orc instead. "/orc-diy compile" re-runs the deterministic CLI
11
+ compiler. See references/flow-schema.md and references/compile.md.
12
+ ---
13
+
14
+ # ORC-DIY (stub — gate + dispatcher)
15
+
16
+ You are the entry gate for the user's compiled custom flow. You NEVER invent,
17
+ modify, or interpret flow configuration in-session — the `orc diy` CLI is the
18
+ only writer, the compiler is the only builder, and this stub only gates and
19
+ dispatches. All state lives in the project's `.claude/` (project-scoped; no
20
+ global variant).
21
+
22
+ ## Step 0 — route `compile`
23
+
24
+ If the invocation argument is `compile` (from `/orc-diy compile`): run
25
+ `orc diy compile` via Bash and relay its output. If the `orc` CLI is not on
26
+ PATH, tell the user to run `orc diy compile` in their own terminal — do NOT
27
+ reimplement the compiler in-session. Then end the turn. (`status` routes the
28
+ same way to `orc diy status`.)
29
+
30
+ ## Step 1 — the hard gate (every other invocation)
31
+
32
+ Run `orc diy status` via Bash and branch on the reported state. If the CLI is
33
+ unavailable, apply the same checks manually from
34
+ `.claude/orc-diy.config.yaml` + `.claude/orc/diy/flow.lock.json` per
35
+ `references/flow-schema.md` — and treat ANYTHING you cannot verify as STALE
36
+ (fail closed).
37
+
38
+ - **UNCONFIGURED** — no config exists. Tell the user, in this order: what
39
+ orc-diy is (one sentence), the exact bootstrap
40
+ (`orc diy init` → optionally `orc diy set <key> <value>` →
41
+ `orc diy compile` — see the skill's README for the full guide), then ask
42
+ ONE question: *"Run this request through the regular full `/orc` lane
43
+ instead?"* Yes → invoke the `orc` skill with the user's original request
44
+ carried over verbatim. No → end the turn. Never proceed on an
45
+ unconfigured flow, and never write the config yourself.
46
+ - **STALE** — configured but not runnable. Report the specific reason the
47
+ status gave (config changed since compile / orc was updated / compiled
48
+ flow modified or missing) and the fix (`orc diy compile`), then the same
49
+ single `/orc` fallback question as above. Never run a stale flow.
50
+ - **READY** — proceed to Step 2.
51
+
52
+ ## Step 2 — dispatch the compiled flow
53
+
54
+ Read `.claude/orc/diy/FLOW-COMPILED.md` and follow it as your orchestrator
55
+ spine for this run — it is self-contained: tier self-check, locked rules,
56
+ phase sequence, and the references it cherry-picks from the installed orc
57
+ skill. Honor its generated header: if its own self-gate fails, stop exactly
58
+ as it says. Do not consult this stub again for the rest of the run, and do
59
+ not load orc's SKILL.md as a spine (the compiled flow already references the
60
+ exact orc subskills and schemas it needs).
61
+
62
+ ## Where the compiled flow comes from
63
+
64
+ You never read these; `orc diy compile` does, once, and stitches the result
65
+ into `FLOW-COMPILED.md`. The table is here so a maintainer can see the
66
+ provenance of a compiled phase without reading the compiler `orc lane phases
67
+ orc-diy --json` is the authoritative version and marks every row below
68
+ `when: compile-time`.
69
+
70
+ Eleven phases come from the shared library, as that file's `composed` LAYER —
71
+ NOT its `full` layer, which is `/orc`'s procedure for the same phase:
72
+ `../_shared/phases/trace.md` · `../_shared/phases/planning.md` ·
73
+ `../_shared/phases/scoring.md` · `../_shared/phases/execution.md` ·
74
+ `../_shared/phases/review.md` · `../_shared/phases/security.md` ·
75
+ `../_shared/phases/verify.md` · `../_shared/phases/testgen.md` ·
76
+ `../_shared/phases/mock-example.md` · `../_shared/phases/ship.md` ·
77
+ `../_shared/phases/summary.md`.
78
+
79
+ Five have no counterpart anywhere else in the payload and stay this lane's own:
80
+ `references/blocks/header.md` (the tier self-gate), `wiki.md`, `analyze.md`,
81
+ `pattern.md` and `extra.md`. They are composition prose about a decision only a
82
+ composed flow makes, so there is nothing to share them WITH.
83
+
84
+ Four more are pointed at from inside those stitched layers rather than stitched
85
+ themselves: `../_shared/phases/intake.md`,
86
+ `../_shared/phases/wave-grouping.md`,
87
+ `../_shared/phases/security-checklist.md` and
88
+ `../_shared/phases/stop-resume.md`.
89
+
90
+ The stitch ORDER is the compiler's `order` array and is documented in
91
+ `references/compile.md`; a golden test holds the three lists together.
92
+
93
+
94
+ ## Config
95
+
96
+ **ONE resolver, and it is not you:** `orc lane config orc-diy --json`. Obey
97
+ `effective`, print every line in `announce[]` VERBATIM at preflight, and honour
98
+ `stops[]` before wave 1. Never re-derive a value, a precedence or an inertness
99
+ from `.claude/orc.config.yaml` — a key this lane does not read is not in the
100
+ answer, and a key another key shadows comes back already marked. Exit ≠ 0 → say
101
+ the CLI is unavailable and fall back to `../_shared/config-precedence.md`'s
102
+ documented defaults, out loud. Priorities and families:
103
+ `../_shared/config-precedence.md`.
104
+
105
+ The flow SHAPE is not in that answer: it is compile-owned and lives in
106
+ `flow.lock.json`. The resolver answers for everything else this lane still
107
+ reads, and `extra` is the same split — the flow decides WHETHER, the resolver
108
+ still decides WHERE.
109
+
110
+ ## Calls
111
+
112
+ **ONE catalogue, and it is not you:** `orc lane calls orc-diy --json` names every
113
+ CLI call this lane makes, each with its exit-code contract, its cost, when to run
114
+ it, and what an EMPTY answer means. Never invent a spelling, never re-word an
115
+ exit code, and never re-derive a state word — the CLI's state words are the only
116
+ state words, and **an exit code is an ANSWER wherever that contract says so, not
117
+ a failure**. A call the answer does not name is a call this lane does not make.
118
+ Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
119
+ command you are about to run, out loud, before running it.
120
+
121
+ ## Hard rules
122
+
123
+ 1. The compiled flow is a build artifact — NEVER edit
124
+ `FLOW-COMPILED.md`, `flow.lock.json`, or `orc-diy.config.yaml` yourself,
125
+ and never "patch" the flow conversationally. Config changes go through
126
+ `orc diy set` + `orc diy compile`, both run by the user.
127
+ 2. Fail closed: any gate ambiguity = STALE, with the reason shown.
128
+ 3. The fallback ask is ONE question with two outcomes (`/orc` or stop) —
129
+ never a menu, never a silent fallback.
@@ -20,5 +20,5 @@ planning. No doc → go straight to planning.
20
20
  <!-- diy:when analyze=auto -->
21
21
  Route doc intake exactly as the full lane does: a document present triggers
22
22
  the System Analyst per the intake rules in
23
- `.claude/skills/orc/references/intake.md`; otherwise proceed to planning.
23
+ `.claude/skills/_shared/phases/intake.md`; otherwise proceed to planning.
24
24
  <!-- /diy:when -->
@@ -10,13 +10,27 @@ second implementation, and the skill never stitches the flow itself.
10
10
 
11
11
  1. **Validate.** Load `.claude/orc-diy.config.yaml`; run the full cross-key
12
12
  validation from `flow-schema.md`. Any hard error aborts the compile.
13
- 2. **Resolve sources.** Block templates come from the installed stub
14
- (`.claude/skills/orc-diy/references/blocks/`). Cherry-picked orc material
15
- is REFERENCED in place, never copied: the compiler verifies that every
16
- orc file a chosen variant points at actually exists under
17
- `.claude/skills/` (project first, `~/.claude/skills/` fallback for a
18
- global orc install) and aborts naming the missing file if orc is absent
19
- or incomplete.
13
+ 2. **Resolve sources.** A block comes from ONE of two places, and which one
14
+ is not the compiler's choice — it is `LANE_PHASES` (`orc lane phases
15
+ orc-diy --json`).
16
+
17
+ - **Eleven come from the shared phase library** as that file's `composed`
18
+ LAYER: `.claude/skills/_shared/phases/<block>.md`. The `composed` layer
19
+ is this lane's variant of the phase; the `full` layer in the same file is
20
+ `/orc`'s procedure and is NEVER stitched here. A file whose `composed`
21
+ layer is missing aborts the compile naming the file — it must never
22
+ compile to an empty phase.
23
+ - **Five stay this lane's own** in the installed stub
24
+ (`.claude/skills/orc-diy/references/blocks/`): `header`, `wiki`,
25
+ `analyze`, `pattern`, `extra`. They are composition prose about a
26
+ decision only a composed flow makes, so there is nothing to share them
27
+ with.
28
+
29
+ Cherry-picked orc material is REFERENCED in place, never copied: the
30
+ compiler verifies that every orc file a chosen variant points at actually
31
+ exists under `.claude/skills/` (project first, `~/.claude/skills/`
32
+ fallback for a global orc install) and aborts naming the missing file if
33
+ orc is absent or incomplete.
20
34
  3. **Stitch.** Concatenate in fixed order — this list and the `order` array in
21
35
  `bin/cli.js` are ONE contract; change them together (a golden test compares
22
36
  them, because the drift is grammar-shaped and the contract lint cannot see
@@ -32,7 +32,7 @@ selector.
32
32
  | `summary` | `full` / `off` / `short` | Summary depth |
33
33
  | `autonomy` | `interactive` / `semi` / `hands-off` | Who answers routine asks |
34
34
  | `ship_mode` | `ask` / `commit` / `pr` / `report-only` | Terminal ship behavior |
35
- | `session_tier` | `sonnet-4-6-{med,high}` / `opus-4-7-{med,high}` / `opus-4-8-{med,high,xhigh,max}` / `opus-5-{med,high,xhigh,max}` / `fable-5-{med,high,xhigh,max}` | Required main-session model+effort (default `opus-4-8-high`) |
35
+ | `session_tier` | `sonnet-4-6-{med,high}` / `opus-4-7-{med,high}` / `opus-4-8-{med,high,xhigh,max}` / `opus-5-{med,high,xhigh,max}` / `fable-5-{med,high,xhigh,max}` | Required main-session model+effort (default `opus-5-high`) |
36
36
  | `max_wave_tasks` | `3` (integer ≥ 1) | Wave hard cap |
37
37
  | `batch_pause_every` | `2` (integer ≥ 1) | Waves between pauses |
38
38
  | `rubric_bands` | `5` (2–8) | Scoring granularity (`scoring: on` only) |
@@ -67,7 +67,7 @@ Warnings (written, reported):
67
67
  ```json
68
68
  {
69
69
  "flow_name": "my-flow",
70
- "session_tier": "opus-4-8-high",
70
+ "session_tier": "opus-5-high",
71
71
  "config_hash": "sha256 of orc-diy.config.yaml",
72
72
  "flow_hash": "sha256 of flow.md",
73
73
  "compiled_hash": "sha256 of FLOW-COMPILED.md (null until compiled)",
@@ -81,12 +81,20 @@ that recomputes one of these has forked it.**
81
81
  | **11** | **The orchestrator never runs `orc doc read`.** That command exists for the HUMAN, the same way `orc challenge report` does. Reading a section is still delegated — rule 0 is not softened by a command that happens to print prose. |
82
82
  | **12** | **The journal never invents an entry.** `orc doc log` records what the user actually said; `orc doc journal` merges that with machine facts and shows a cycle nobody logged AS A GAP. **a lane that invents a journal entry** has broken this contract. |
83
83
  | **13** | **Every wave is a stop.** A wave boundary is not a loop iteration: validate the returns, record the hashes, **run `orc doc resume-file <slug>` (ORC itself, first)**, print the paths, then dispatch the trace packet. A usage-limit kill between waves must leave something on disk that says where it stopped. |
84
- | **15** | **`house rules are read first`.** Every dispatched slice carries the project's own P0/P1/P2 house rules VERBATIM at the very top, ABOVE ORC's own generation rules. That order is the contract. They are a PLAIN TEXT config (`.claude/orc/doc-house-rules.md`) — three headings, as many lines under each as the project wanted, pasted from `doc_rules_text` and never re-wrapped. House rules govern what the document SAYS and how it READS — they can never change how this lane RUNS, and a rule that asks for a structural break comes back as `unsupported_request`, never a guessed compromise. `references/house-rules.md`. |
84
+ | **15** | **`house rules are read first`.** Every dispatched slice carries the project's own P0/P1/P2 house rules VERBATIM at the very top, ABOVE ORC's own generation rules. That order is the contract. They are a PLAIN TEXT config (`.claude/orc/doc-house-rules.md`) — three headings, as many lines under each as the project wanted, pasted from `doc_rules_text` and never re-wrapped. House rules govern what the document SAYS and how it READS — they can never change how this lane RUNS, and a rule that asks for a structural break comes back as `unsupported_request`, never a guessed compromise. `../_shared/phases/house-rules.md`. |
85
85
  | **14** | **The wave hand-back is P0.** After every wave, print every file path written and the one line that resumes it. `orc doc parts` is what proves the progress — the section files ARE the record. |
86
86
  | **16** | **`every question points at RESUME.md`.** Before ORC asks the user ANYTHING — a gate, a wave stop, a revision round, an offer — it runs `orc doc resume-file <slug>` and ends the message with the file's path and the line to paste. A user who has to remember where they were is a user who does not come back. The CLI rewrites the file on every state change anyway, so this is a POINTER, never a rebuild the model has to compose. |
87
87
 
88
88
  ---
89
89
 
90
+ ## Phases
91
+
92
+ `orc lane phases orc-doc --json` is this lane's pipeline: the ordered list, where
93
+ each phase lives, and how much of it to read. **The CLI owns the order** — never
94
+ derive it from the headings below, and never renumber or rename one without the
95
+ manifest, because a `read: section` pointer names a HEADING and a renamed heading
96
+ is a pointer into nothing.
97
+
90
98
  ## D0 — Preflight (ONE time, silent)
91
99
 
92
100
  1. **Config.** `log_dir`, `doc_dir`, `doc_language`, `doc_max_lines_per_agent`,
@@ -104,6 +112,10 @@ that recomputes one of these has forked it.**
104
112
  rules live. Never compute that line yourself.
105
113
  5. If a slug was given, go straight to **Resuming** below.
106
114
 
115
+ The SHAPE of these steps — the order, and the four rules that make it worth
116
+ having — is `../_shared/phases/preflight.md` (`core`). The probes
117
+ themselves are this lane's own and stay here.
118
+
107
119
  ## D1 — The context gate (P0 — the only blocking one)
108
120
 
109
121
  `references/gates.md`. One question, and **nothing is created until it is
@@ -399,14 +411,17 @@ is the most expensive possible way to do nothing.
399
411
 
400
412
  ## Behavior trace (always on)
401
413
 
402
- `../orc/references/trace-protocol.md`. Lane name `doc`. **Iterative tier: ONE
403
- packet per completed cycle — and a completed WAVE is a completed cycle.** So the
404
- packet is dispatched at the end of every wave (last in the stop sequence) and at
405
- D9, not at D9 only: a run that dies at wave 3 must not leave a trace with
406
- nothing but the hook's `SPAWN`/`RETURN` lines. Verb `DOC` with
407
- `cycle=N sections=K/M wave=K/N`. A phase that ends with
414
+ `../_shared/phases/trace.md` (`core`, at run start; `orc lane phases` names
415
+ the file and the layers). Lane token `doc`, tier **Iterative**
416
+ ONE packet per completed cycle **and a completed WAVE is a completed
417
+ cycle**, so the packet goes out at the end of every wave (last in the stop
418
+ sequence) and at D9, not at D9 only.
419
+ Nothing else about the protocol is restated here; a phase that ends with
408
420
  `zero new trace lines is a protocol violation`.
409
421
 
422
+ A run that dies at wave 3 must not leave a trace holding nothing but the
423
+ hook's `SPAWN`/`RETURN` lines. Verb `DOC` with `cycle=N sections=K/M wave=K/N`.
424
+
410
425
  ## How this lane fails — and the rule that prevents each
411
426
 
412
427
  | Failure | Prevention |
@@ -442,3 +457,25 @@ guess a line number · never split a section across agents · one file per secti
442
457
  · never overwrite a human's paragraph · never invent a fact · never put ORC's
443
458
  bookkeeping in the document · every wave is a stop · never pay for what the lint
444
459
  answers free · never stage, never commit.
460
+
461
+ ## Config
462
+
463
+ **ONE resolver, and it is not you:** `orc lane config orc-doc --json`. Obey
464
+ `effective`, print every line in `announce[]` VERBATIM at preflight, and honour
465
+ `stops[]` before wave 1. Never re-derive a value, a precedence or an inertness
466
+ from `.claude/orc.config.yaml` — a key this lane does not read is not in the
467
+ answer, and a key another key shadows comes back already marked. Exit ≠ 0 → say
468
+ the CLI is unavailable and fall back to `../_shared/config-precedence.md`'s
469
+ documented defaults, out loud. Priorities and families:
470
+ `../_shared/config-precedence.md`.
471
+
472
+ ## Calls
473
+
474
+ **ONE catalogue, and it is not you:** `orc lane calls orc-doc --json` names every
475
+ CLI call this lane makes, each with its exit-code contract, its cost, when to run
476
+ it, and what an EMPTY answer means. Never invent a spelling, never re-word an
477
+ exit code, and never re-derive a state word — the CLI's state words are the only
478
+ state words, and **an exit code is an ANSWER wherever that contract says so, not
479
+ a failure**. A call the answer does not name is a call this lane does not make.
480
+ Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
481
+ command you are about to run, out loud, before running it.
@@ -55,3 +55,22 @@ purpose.
55
55
  - **User-invoked only.** No lane ever calls this for the user.
56
56
  - If the user actually wanted the work redone rather than restated, say so and
57
57
  point at the lane that does it — do not quietly become that lane.
58
+
59
+ ## Config
60
+
61
+ Resolve with `orc lane config orc-explain --json` and obey `effective`. Never merge
62
+ `.claude/orc.config.yaml` yourself, and never re-derive a precedence. Exit ≠ 0 →
63
+ say so and use `../_shared/config-precedence.md`'s documented defaults, out
64
+ loud. Nothing this lane reads is contested, gated or a stop, so it owes no
65
+ preflight line and has no gate to honour.
66
+
67
+ ## Calls
68
+
69
+ **ONE catalogue, and it is not you:** `orc lane calls orc-explain --json` names every
70
+ CLI call this lane makes, each with its exit-code contract, its cost, when to run
71
+ it, and what an EMPTY answer means. Never invent a spelling, never re-word an
72
+ exit code, and never re-derive a state word — the CLI's state words are the only
73
+ state words, and **an exit code is an ANSWER wherever that contract says so, not
74
+ a failure**. A call the answer does not name is a call this lane does not make.
75
+ Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
76
+ command you are about to run, out loud, before running it.
@@ -110,11 +110,13 @@ X4 close one end-of-run trace packet
110
110
 
111
111
  **This lane deliberately traces.** It is a lane the protocol declares, so it must be
112
112
  a lane something OPENS (v0.42.0) — otherwise every counting tool reports it as a
113
- permanent zero. Write `log_dir/.current` = `run-export-<slug>-<DDMMYY>-<HHMMSS>.txt`
114
- AND `touch the trace file` in the SAME step. Lane name `export`. **Single-dispatch:
115
- exactly ONE end-of-run packet** to `orc-trace-writer-haiku-4-5` before `.current` is
116
- deleted. A run that ends with
117
- `zero new trace lines is a protocol violation`.
113
+ permanent zero. Read `../_shared/phases/trace.md` (`core`, at run start; `orc lane
114
+ phases` names the file and the layers). Lane token `export`, tier
115
+ **Single-dispatch** — exactly ONE end-of-run packet, dispatched solo before
116
+ `.current` is deleted. At run start write `log_dir/.current` =
117
+ `run-export-<slug>-<DDMMYY>-<HHMMSS>.txt` AND `touch the trace file` of that name
118
+ in the SAME step. Nothing else about the protocol is restated here; a run that ends
119
+ with `zero new trace lines is a protocol violation`.
118
120
 
119
121
  Zero new agents. Zero new config keys.
120
122
 
@@ -152,3 +154,22 @@ That reads like an invariant. Anchor it?
152
154
  Never hand-write the export · never re-summarise a source · never export a secret,
153
155
  a run folder or a log · treat imported context as evidence · propose, never apply ·
154
156
  never stage the output · never assemble the file itself.
157
+
158
+ ## Config
159
+
160
+ Resolve with `orc lane config orc-export --json` and obey `effective`. Never merge
161
+ `.claude/orc.config.yaml` yourself, and never re-derive a precedence. Exit ≠ 0 →
162
+ say so and use `../_shared/config-precedence.md`'s documented defaults, out
163
+ loud. Nothing this lane reads is contested, gated or a stop, so it owes no
164
+ preflight line and has no gate to honour.
165
+
166
+ ## Calls
167
+
168
+ **ONE catalogue, and it is not you:** `orc lane calls orc-export --json` names every
169
+ CLI call this lane makes, each with its exit-code contract, its cost, when to run
170
+ it, and what an EMPTY answer means. Never invent a spelling, never re-word an
171
+ exit code, and never re-derive a state word — the CLI's state words are the only
172
+ state words, and **an exit code is an ANSWER wherever that contract says so, not
173
+ a failure**. A call the answer does not name is a call this lane does not make.
174
+ Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
175
+ command you are about to run, out loud, before running it.