@azure-id/orc 1.9.2 → 2.0.2
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.
- package/CHANGELOG.md +321 -0
- package/README-id.md +21 -36
- package/README.md +25 -36
- package/bin/build-agents.js +117 -20
- package/bin/cli.js +725 -29
- package/bin/gotcha-import.js +1081 -0
- package/bin/gotcha.js +1286 -0
- package/bin/graph-query.js +1 -1
- package/bin/graph.js +717 -717
- package/bin/habit.js +1453 -0
- package/bin/mockrun-catalog.js +281 -276
- package/bin/run-undo.js +398 -0
- package/bin/trace-write.js +657 -0
- package/bin/verify-contracts.js +525 -79
- package/bin/verify-package.js +51 -4
- package/bin/webui/api.js +26 -0
- package/bin/webui/app.html +239 -232
- package/bin/webui/css/00-tokens.css +110 -92
- package/bin/webui/css/04-motion.css +87 -0
- package/bin/webui/css/06-responsive.css +203 -178
- package/bin/webui/css/panels/behaviour.css +205 -0
- package/bin/webui/fixtures/behaviour.js +532 -0
- package/bin/webui/fixtures/index.js +34 -0
- package/bin/webui/fixtures/knowledge.js +7 -1
- package/bin/webui/fixtures/stats.js +16 -0
- package/bin/webui/i18n/en/behaviour.json +143 -0
- package/bin/webui/i18n/en/nav.json +25 -24
- package/bin/webui/i18n/en/tour.json +37 -35
- package/bin/webui/i18n/id/behaviour.json +143 -0
- package/bin/webui/i18n/id/nav.json +25 -24
- package/bin/webui/i18n/id/tour.json +37 -35
- package/bin/webui/js/01-i18n.js +155 -154
- package/bin/webui/js/90-tour.js +498 -494
- package/bin/webui/js/91-shortcuts.js +126 -126
- package/bin/webui/js/99-boot.js +121 -118
- package/bin/webui/js/panels/behaviour.js +1022 -0
- package/mock-run/INDEX.md +109 -107
- package/mock-run/gotcha-import.md +118 -0
- package/mock-run/habits.md +129 -0
- package/mock-run/orc-quick.md +6 -1
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +7 -7
- package/templates/agents/orc-advisor-opus-5-xhigh.md +1 -7
- package/templates/agents/orc-analyze-mini-opus-5-med.md +1 -6
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +1 -4
- package/templates/agents/orc-claude-writer-opus-4-8-high.md +48 -53
- package/templates/agents/orc-claude-writer-opus-5-med.md +1 -8
- package/templates/agents/orc-context-combiner-opus-5-high.md +1 -11
- package/templates/agents/orc-executor-haiku-4-5.md +14 -6
- package/templates/agents/orc-executor-opus-4-7-high.md +14 -6
- package/templates/agents/orc-executor-opus-4-7-med.md +14 -6
- package/templates/agents/orc-executor-opus-4-8-high.md +14 -6
- package/templates/agents/orc-executor-opus-5-high.md +14 -6
- package/templates/agents/orc-executor-opus-5-low.md +14 -6
- package/templates/agents/orc-executor-opus-5-med.md +14 -6
- package/templates/agents/orc-executor-sonnet-4-6-high.md +14 -6
- package/templates/agents/orc-executor-sonnet-4-6-med.md +14 -6
- package/templates/agents/orc-executor-sonnet-5-high.md +14 -6
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -10
- package/templates/agents/orc-judge-opus-5-xhigh.md +5 -9
- package/templates/agents/orc-learn-writer-opus-5-low.md +1 -7
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +1 -8
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +58 -63
- package/templates/agents/orc-planner-mini-opus-5-med.md +1 -4
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +1 -2
- package/templates/agents/orc-planner-opus-5-med.md +1 -4
- package/templates/agents/orc-recon-opus-5-low.md +1 -8
- package/templates/agents/orc-recon-sonnet-4-6-med.md +1 -8
- package/templates/agents/orc-retro-opus-5-med.md +6 -8
- package/templates/agents/orc-retro-sonnet-5-high.md +6 -7
- package/templates/agents/orc-reviewer-opus-5-med.md +52 -16
- package/templates/agents/orc-scout-opus-5-low.md +1 -6
- package/templates/agents/orc-scout-sonnet-4-6-high.md +35 -39
- package/templates/agents/orc-system-analyst-opus-5-high.md +1 -6
- package/templates/agents/orc-test-author-opus-5-med.md +4 -5
- package/templates/agents/orc-trace-writer-haiku-4-5.md +3 -7
- package/templates/agents/orc-verifier-opus-5-med.md +16 -8
- package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +74 -79
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +1 -8
- package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +97 -106
- package/templates/commands/orc-analyze.md +13 -21
- package/templates/commands/orc-fast.md +10 -15
- package/templates/commands/orc-poly.md +12 -21
- package/templates/commands/orc-pr-driver.md +11 -30
- package/templates/commands/orc-pr-setup.md +10 -31
- package/templates/commands/orc-route.md +11 -41
- package/templates/commands/orc-test.md +5 -60
- package/templates/hooks/README.md +34 -0
- package/templates/hooks/orc-session-hook.js +264 -0
- package/templates/hooks/orc-statusline.js +3 -1
- package/templates/skills/_shared/README.md +9 -0
- package/templates/skills/_shared/code-graph.md +47 -55
- package/templates/skills/_shared/config-precedence.md +3 -1
- package/templates/skills/_shared/extra-dispatch.md +73 -88
- package/templates/skills/_shared/gotchas.md +228 -177
- package/templates/skills/_shared/habits.md +101 -0
- package/templates/skills/_shared/lane-contract.md +84 -0
- package/templates/skills/_shared/phases/README.md +142 -83
- package/templates/skills/_shared/phases/analyst-gates.md +10 -21
- package/templates/skills/_shared/phases/execution.md +8 -14
- package/templates/skills/_shared/phases/house-rules.md +27 -32
- package/templates/skills/_shared/phases/intake.md +127 -133
- package/templates/skills/_shared/phases/mock-example.md +46 -56
- package/templates/skills/_shared/phases/plan-handoff.md +91 -97
- package/templates/skills/_shared/phases/planning.md +7 -17
- package/templates/skills/_shared/phases/preflight.md +19 -42
- package/templates/skills/_shared/phases/review.md +23 -27
- package/templates/skills/_shared/phases/rules.md +18 -42
- package/templates/skills/_shared/phases/scoring.md +55 -65
- package/templates/skills/_shared/phases/security-checklist.md +46 -50
- package/templates/skills/_shared/phases/security.md +45 -55
- package/templates/skills/_shared/phases/ship.md +6 -15
- package/templates/skills/_shared/phases/stop-resume.md +2 -5
- package/templates/skills/_shared/phases/summary.md +73 -48
- package/templates/skills/_shared/phases/testgen.md +41 -51
- package/templates/skills/_shared/phases/trace-verbs.md +433 -0
- package/templates/skills/_shared/phases/trace.md +136 -367
- package/templates/skills/_shared/phases/verify.md +62 -70
- package/templates/skills/_shared/phases/wave-grouping.md +128 -133
- package/templates/skills/_shared/phases/wiki-consult.md +10 -6
- package/templates/skills/_shared/read-ladder.md +2 -55
- package/templates/skills/_shared/return-validation.md +17 -70
- package/templates/skills/_shared/review-slice.md +79 -0
- package/templates/skills/_shared/smoke-gate.md +46 -28
- package/templates/skills/context-combiner/SKILL.md +15 -44
- package/templates/skills/orc/SKILL.md +34 -62
- package/templates/skills/orc/references/pattern-gate.md +89 -89
- package/templates/skills/orc/references/phases/intake.md +41 -47
- package/templates/skills/orc/references/phases/integration.md +13 -19
- package/templates/skills/orc/references/preflight-report.md +8 -9
- package/templates/skills/orc/references/ultra-mode.md +8 -6
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +27 -73
- package/templates/skills/orc/subskills/orc-execution/core.md +12 -99
- package/templates/skills/orc/subskills/orc-execution/subagent.md +14 -13
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +11 -52
- package/templates/skills/orc/subskills/orc-review-verify/core.md +52 -135
- package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -7
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +11 -22
- package/templates/skills/orc/subskills/orc-testgen/core.md +20 -59
- package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -7
- package/templates/skills/orc-advisor/SKILL.md +56 -60
- package/templates/skills/orc-analyze/SKILL.md +30 -66
- package/templates/skills/orc-analyze/schemas/report-audit.md +2 -1
- package/templates/skills/orc-analyze/schemas/report-prose.md +2 -1
- package/templates/skills/orc-analyze-mini/SKILL.md +35 -70
- package/templates/skills/orc-diy/README.md +31 -0
- package/templates/skills/orc-diy/SKILL.md +23 -74
- package/templates/skills/orc-diy/references/blocks/pattern.md +18 -18
- package/templates/skills/orc-fast/SKILL.md +44 -72
- package/templates/skills/orc-judge/SKILL.md +77 -82
- package/templates/skills/orc-mini/SKILL.md +61 -109
- package/templates/skills/orc-pattern/SKILL.md +27 -48
- package/templates/skills/orc-poly/SKILL.md +32 -61
- package/templates/skills/orc-pr-driver/SKILL.md +25 -51
- package/templates/skills/orc-pr-driver/references/green-gate.md +113 -105
- package/templates/skills/orc-pr-setup/SKILL.md +20 -45
- package/templates/skills/orc-quick/README.md +43 -2
- package/templates/skills/orc-quick/SKILL.md +76 -107
- package/templates/skills/orc-quick/references/dispatch-gate.md +16 -5
- package/templates/skills/orc-quick/references/gh-mode.md +48 -1
- package/templates/skills/orc-quick/references/look.md +3 -1
- package/templates/skills/orc-retro/SKILL.md +19 -18
- package/templates/skills/orc-retro/examples/retro-mock.md +1 -1
- package/templates/skills/orc-route/SKILL.md +25 -45
- package/templates/skills/orc-test/SKILL.md +16 -37
- package/templates/skills/orc-verify/SKILL.md +14 -32
- package/templates/skills/orc-wait/SKILL.md +156 -163
- package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-1.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-2.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-3.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-3c.md +1 -6
|
@@ -15,7 +15,7 @@ questions, dispatches one agent, and writes down what happened. **Three steps
|
|
|
15
15
|
per request, one user turn. Fewer than any other lane. Do not add steps.**
|
|
16
16
|
|
|
17
17
|
**You never implement — you spawn.** You read only to FIND the right files. To
|
|
18
|
-
UNDERSTAND something, you dispatch an agent.
|
|
18
|
+
UNDERSTAND something, you dispatch an agent.
|
|
19
19
|
|
|
20
20
|
**It is open.** Almost any request works (`README.md` §1). For anything else:
|
|
21
21
|
decide if it only READS or also WRITES → pick what to dispatch → **ask the
|
|
@@ -28,37 +28,40 @@ waves, no scoring, no acceptance pass (`README.md` §2).
|
|
|
28
28
|
|
|
29
29
|
## Phases
|
|
30
30
|
|
|
31
|
-
`orc lane phases orc-quick --json` is this lane's pipeline
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
manifest, because a `read: section` pointer names a HEADING and a renamed heading
|
|
35
|
-
is a pointer into nothing.
|
|
31
|
+
`orc lane phases orc-quick --json` is this lane's pipeline. **The CLI owns the order**:
|
|
32
|
+
never derive it from the headings below, and never rename or renumber one
|
|
33
|
+
without the manifest (`../_shared/lane-contract.md` §Phases).
|
|
36
34
|
|
|
37
35
|
## Q0 — Preflight (ONE time per session, silent, nothing can stop the run)
|
|
38
36
|
|
|
39
37
|
1. **Config.** Read `log_dir` only. Read no other key. **One exception, and it
|
|
40
|
-
is a PROBE, not a key read:** `
|
|
41
|
-
(
|
|
42
|
-
in one, so the code-writing menu can offer line 3.
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
is a PROBE, not a key read:** `probes["extra-slot"]` in the `orc lane config`
|
|
39
|
+
answer (`resolved`: extra or claude) answers the master gate, the position and the
|
|
40
|
+
routing in one, so the code-writing menu can offer line 3. Do not call
|
|
41
|
+
`orc extra resolve --slot quick-executor`. **A gate that is never probed is a
|
|
42
|
+
gate that is always off.** Keep the answer for this session; it is an OPTION
|
|
43
|
+
on a menu, never a default (`references/dispatch-gate.md`). **`habits{}` in
|
|
44
|
+
that answer → print `habits.line`, read `../_shared/habits.md` NOW**; none →
|
|
45
|
+
ignore every `(H …)` mark.
|
|
45
46
|
2. **Trace + the running record.** Write `log_dir/.current` =
|
|
46
47
|
`run-quick-<slug>-<DDMMYY>-<HHMMSS>.txt` and `touch the trace file` of that
|
|
47
|
-
name in the SAME step. Both, or neither. Create
|
|
48
|
+
name in the SAME step. Both, or neither. Then `orc run snapshot --run <run-slug>`. Create
|
|
48
49
|
`.claude/orc/run/<run-slug>/quick-checkpoint.md` in the same step too: from
|
|
49
50
|
now on append every event to it WITH THE TIME IT HAPPENED (`HH:MM:SS`). Each
|
|
50
51
|
trace packet is built from that file, never stamped "now".
|
|
51
|
-
3. **Knowledge probes** (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
framework key from
|
|
55
|
-
…), never a file
|
|
52
|
+
3. **Knowledge probes** — from `probes{}` (preflight.md step 3;
|
|
53
|
+
`../_shared/detecting-artifacts.md`). `orc wiki status` → only `none` means
|
|
54
|
+
no wiki. `<lang>` is cached when
|
|
55
|
+
`probes["pattern-status"].langs` names it; `<lang>` is a framework key from
|
|
56
|
+
`../orc-pattern/references/INDEX.md` (`express`, `react`, …), never a file
|
|
57
|
+
extension. Call `orc pattern status <lang>` only when you are not sure the
|
|
58
|
+
key is a framework key. **Both are helpful extras only:** missing
|
|
56
59
|
knowledge never stops the run, never causes a fallback, never triggers a
|
|
57
60
|
scan. Print ONE line each.
|
|
58
|
-
4. **Code graph cache — never skipped** (`../_shared/code-graph.md` §0).
|
|
59
|
-
`
|
|
60
|
-
|
|
61
|
-
packet VERBATIM. Exit 3 = off → no other graph call this session. Every graph
|
|
61
|
+
4. **Code graph cache — never skipped** (`../_shared/code-graph.md` §0). Print
|
|
62
|
+
`probes["graph-status"].line`; run
|
|
63
|
+
`orc graph status --if-enabled --heal --json --brief` only when `heal_needed` is true. Put the `trace` (`GRAPH-CONSULT …`) in
|
|
64
|
+
the packet VERBATIM. Exit 3 = off → no other graph call this session. Every graph
|
|
62
65
|
call carries `--if-enabled`, so the CLI reads the `code_graph` keys —
|
|
63
66
|
this lane still reads `log_dir` and nothing else.
|
|
64
67
|
5. **`gh` probe — only when the request names a PR** (`pr <n>`, `PR <n>`, a
|
|
@@ -67,8 +70,7 @@ is a pointer into nothing.
|
|
|
67
70
|
works; ask the user to paste the comments instead.
|
|
68
71
|
6. Emit one `GATE` line per check — `GATE graph` included.
|
|
69
72
|
|
|
70
|
-
|
|
71
|
-
probes themselves are this lane's own and stay here.
|
|
73
|
+
Shape: `../_shared/phases/preflight.md` (`core`); the probes stay here.
|
|
72
74
|
|
|
73
75
|
## Q1 — LOOK (silent — no questions here)
|
|
74
76
|
|
|
@@ -89,7 +91,7 @@ rule and the never-write-to-GitHub boundary are in `references/gh-mode.md`.
|
|
|
89
91
|
|
|
90
92
|
**Intent ledger.** Read the user's message for things they already decided —
|
|
91
93
|
which agent, update tests, review, commit, push. Do not ask those again in Q3.
|
|
92
|
-
Print it on ONE line
|
|
94
|
+
Print it on ONE line:
|
|
93
95
|
`ledger: review=yes commit=yes push=yes · test-update=ask · dispatch=ask`
|
|
94
96
|
|
|
95
97
|
**The dig — graph first** (`references/look.md`). Ask the graph BEFORE any
|
|
@@ -111,7 +113,7 @@ Grep; Grep only for what the graph does not know.
|
|
|
111
113
|
|
|
112
114
|
**Cap: 12 files.** If you go over, or you cannot find the right files, or the
|
|
113
115
|
job needs more than about 3 files of real edits: print a `GATE` line, say it
|
|
114
|
-
plainly, and **offer** `/orc-mini` (`../_shared/fallback-handoff.md`, REASON
|
|
116
|
+
plainly, and **offer** `/orc-mini` (H `quick.q1.too-big`; `../_shared/fallback-handoff.md`, REASON
|
|
115
117
|
`dig-inconclusive` or `scope-too-large`). Never keep digging in silence. It is
|
|
116
118
|
an OFFER — the user may still say "keep going".
|
|
117
119
|
|
|
@@ -132,18 +134,20 @@ the job is not quick: offer the Q1 fallback.
|
|
|
132
134
|
|
|
133
135
|
### b. The dispatch gate — HARD, never skip it
|
|
134
136
|
|
|
135
|
-
**Ask before every single dispatch** — the three kinds are code, read-only
|
|
136
|
-
(recon) and review. **The menu
|
|
137
|
+
**Ask before every single dispatch** (H `quick.q2.gate.code` · `quick.q2.gate.recon`) — the three kinds are code, read-only
|
|
138
|
+
(recon) and review. **The menu: `references/dispatch-gate.md`, only
|
|
139
|
+
`### Writing code` or `### Read-only work (recon)`, `## The suggestion` and `## Rules`.**
|
|
137
140
|
Every menu ends with `Your choice — nothing runs until you answer.`
|
|
138
141
|
|
|
139
142
|
Rules:
|
|
140
|
-
- Never pick for the user. Never reuse the last answer
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
pre-selection
|
|
143
|
+
- Never pick for the user. Never reuse the last answer by yourself. One line
|
|
144
|
+
MAY carry `→ suggested` with its reason — from the dig (`## The suggestion`),
|
|
145
|
+
or from `habits.suggestions` (the CLI's count of your own past picks, printed
|
|
146
|
+
with its numbers). A suggestion is never a pre-selection; the gate is asked
|
|
147
|
+
every time.
|
|
144
148
|
- If the user already said it ("use opus 5 low"), the gate is **answered**, not
|
|
145
149
|
skipped. Say which one you are using.
|
|
146
|
-
- No config changes this menu. See `##
|
|
150
|
+
- No config changes this menu. See `## Lane contract`.
|
|
147
151
|
- If the model asked for is higher than the session model, say so once: the
|
|
148
152
|
subagent will quietly drop to the session model and you will report it.
|
|
149
153
|
|
|
@@ -164,17 +168,17 @@ carries `repro` — the EXECUTOR writes it red, then fixes it green, never you
|
|
|
164
168
|
(`references/defect.md`). An **ad-hoc** dispatch is also told to report its own
|
|
165
169
|
`actual_model` and `actual_effort`.
|
|
166
170
|
|
|
167
|
-
Check the return with `../_shared/return-validation.md
|
|
168
|
-
`pattern_version` + `invariants_checked`,
|
|
169
|
-
carried a card = malformed), `repro` when
|
|
170
|
-
`actual_model` / `actual_effort` → emit `VERIFY`, which names
|
|
171
|
+
Check the return with `../_shared/return-validation.md` §1–§3 + each injected
|
|
172
|
+
field's §: honest `unmet[]`, `pattern_version` + `invariants_checked`,
|
|
173
|
+
`graph_used` (absent on a slice that carried a card = malformed), `repro` when
|
|
174
|
+
the slice asked for it, and `actual_model` / `actual_effort` → emit `VERIFY`, which names
|
|
171
175
|
`graph_used=<n> targets gen <n>` and `repro red→green` beside the model match,
|
|
172
|
-
and show
|
|
176
|
+
and show ⛔ DOWNGRADE if they differ. Also compare `git status --short`
|
|
173
177
|
before and after: a file changed outside `declared_files` is a violation. A
|
|
174
178
|
**recon** return adds one check: `answer` ≤ 12 lines. A broken return = a
|
|
175
179
|
failure: re-dispatch once, then offer the fallback.
|
|
176
180
|
|
|
177
|
-
**Before any re-dispatch, run `orc run inflight
|
|
181
|
+
**Before any re-dispatch, run `orc run inflight`**. A Task error does not kill the agent behind it, and exit 2 REFUSES by default — `a lane that re-dispatches over a live attempt` has broken the contract. Canonical: `return-validation.md` §0.
|
|
178
182
|
|
|
179
183
|
### 3.2 Build and tests — there is NO smoke gate
|
|
180
184
|
|
|
@@ -193,15 +197,13 @@ the suite — a runner that takes no file list → one line saying so — and ap
|
|
|
193
197
|
` → <n> passed`. Then the suite. Then print its `blast_line` VERBATIM: the CLI
|
|
194
198
|
attaches every `risk` word's `why`, so never restate it. Exit 3 → nothing.
|
|
195
199
|
|
|
196
|
-
`tests reached 3 files (ROUTE 2 · call 1) → 12 passed` · then the suite · then
|
|
197
|
-
`blast radius 3 symbols · callers 7 in 4 files · tests reach 2 · risk high: <symbol> (exported, fan-in 4, no test reaches it)`
|
|
198
|
-
|
|
199
200
|
**Build is RED → repair loop.** Rounds 1 and 2 reuse the same executor; round 3
|
|
200
201
|
**asks again**; after 3, ask and show how the errors MOVED, not just "still
|
|
201
202
|
red". Each new batch of 3 works the same way. Shape and wording:
|
|
202
|
-
|
|
203
|
+
its `## The build repair loop`. Put every round in the entry's dispatch table.
|
|
203
204
|
|
|
204
|
-
**Tests are RED →
|
|
205
|
+
**Tests are RED → the flaky check first** (`../_shared/smoke-gate.md` §Flaky).
|
|
206
|
+
Still red → stop, do NOT loop. Show the failures. Let the user choose:
|
|
205
207
|
fix it with a new gated dispatch · the test itself is wrong · accept it · stop.
|
|
206
208
|
Never offer commit while tests are red.
|
|
207
209
|
|
|
@@ -219,20 +221,22 @@ after the entry is appended, `orc graph gain --run <this run> --if-enabled
|
|
|
219
221
|
with a range; never restate it as a saving.
|
|
220
222
|
|
|
221
223
|
Append entry N to `orc-quick/<slug>/quick-context.md`
|
|
222
|
-
(`references/context-doc.md
|
|
223
|
-
|
|
224
|
+
(`references/context-doc.md`, only `## Entry shape` or `## A read-only entry`).
|
|
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
|
|
227
|
+
ends with the card (`../_shared/phases/summary.md` §End-of-run card).
|
|
224
228
|
|
|
225
229
|
### 3.4 If the user stops while it is red
|
|
226
230
|
|
|
227
231
|
**Never undo anything yourself.** Say how many files changed, that nothing is
|
|
228
|
-
committed, and print
|
|
232
|
+
committed, and print the card's `undo` row as the undo.
|
|
229
233
|
|
|
230
234
|
### 3.5 Offers (skip any the ledger already answered)
|
|
231
235
|
|
|
232
|
-
1. **Update tests and run them** — only if a test suite exists AND the change
|
|
236
|
+
1. **Update tests and run them** (H `quick.q3.offer.tests`) — only if a test suite exists AND the change
|
|
233
237
|
made a test wrong or left new code untested. If the executor already fixed
|
|
234
238
|
the tests and they pass, **do not ask at all**.
|
|
235
|
-
2. **Code review** — this is a dispatch, so **ask the gate first**. Pattern
|
|
239
|
+
2. **Code review** (H `quick.q3.offer.review`) — this is a dispatch, so **ask the gate first**. Pattern
|
|
236
240
|
cached → review against it. Findings use the `P0|P1|P2|P3` ladder: P0/P1
|
|
237
241
|
block the commit offer and get one repair round; P2/P3 are advice only.
|
|
238
242
|
3. **Commit / push / stop** — stage **only the files the task changed**. Never
|
|
@@ -252,72 +256,37 @@ Write the results of these offers back into entry N. **Then:** another request
|
|
|
252
256
|
One folder per thread, **one file inside, never a second file**:
|
|
253
257
|
`<projectRoot>/orc-quick/<slug>/quick-context.md`, with a list between
|
|
254
258
|
`<!-- orc-quick:toc -->` markers at the top. **Never read the body** — two
|
|
255
|
-
exceptions: the TOC block on re-open, and when the user asks.
|
|
256
|
-
`references/context-doc.md`.
|
|
259
|
+
exceptions: the TOC block on re-open, and when the user asks.
|
|
257
260
|
|
|
258
261
|
## Behavior trace (always on)
|
|
259
262
|
|
|
260
|
-
`../_shared/phases/trace.md` (`core`, at run start; `orc lane phases`
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
`
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
`
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
documented defaults, out loud. Priorities and families:
|
|
280
|
-
`../_shared/config-precedence.md`.
|
|
281
|
-
|
|
282
|
-
**Nothing can override this lane.** orc-quick has no config key of its own.
|
|
283
|
-
These config keys **do nothing here**: `opus5_only` · `rubric_bands_override` ·
|
|
284
|
-
`extra_resume` · `extra_on_failure` · `extra_fallback_agent`. All five come back
|
|
285
|
-
INERT with a reason — say that at the gate so the user is not confused
|
|
286
|
-
(`../_shared/opus5-only.md` names orc-quick as the one exception). The user
|
|
287
|
-
always picks the agent. **`extra_enabled` is the one key that does something
|
|
288
|
-
here, and it is small:** with a `quick-executor` position held
|
|
289
|
-
(`orc extra role`), the code-writing menu gets a THIRD option that sends the
|
|
290
|
-
slice to a third party — never a default, never sticky, asked again after a
|
|
291
|
-
failure. Recon and review stay on Claude. See `references/dispatch-gate.md`
|
|
292
|
-
rule 4 and `../_shared/extra-dispatch.md`.
|
|
293
|
-
|
|
294
|
-
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
295
|
-
|
|
296
|
-
`orc rules slice --lane orc-quick --json` is the ONLY assembler; never build
|
|
297
|
-
the card here. It rides under the house rules and above the task —
|
|
298
|
-
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
299
|
-
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
300
|
-
never a silent choice) and `rules_overridden[]`.
|
|
301
|
-
## Calls
|
|
302
|
-
|
|
303
|
-
**ONE catalogue, and it is not you:** `orc lane calls orc-quick --json` names every
|
|
304
|
-
CLI call this lane makes, each with its exit-code contract, its cost, when to run
|
|
305
|
-
it, and what an EMPTY answer means. Never invent a spelling, never re-word an
|
|
306
|
-
exit code, and never re-derive a state word — the CLI's state words are the only
|
|
307
|
-
state words, and **an exit code is an ANSWER wherever that contract says so, not
|
|
308
|
-
a failure**. A call the answer does not name is a call this lane does not make.
|
|
309
|
-
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
310
|
-
command you are about to run, out loud, before running it.
|
|
263
|
+
`../_shared/phases/trace.md` (`core`, at run start; `orc lane phases orc-quick --json` →
|
|
264
|
+
`trace_grammar` gives the verbs). Lane token `quick`, tier
|
|
265
|
+
**Iterative** — the unit is ONE finished numbered entry. Build each packet from
|
|
266
|
+
`quick-checkpoint.md`, so every event carries the time it happened; one time for
|
|
267
|
+
every event is a protocol violation. Pipe each packet to
|
|
268
|
+
`orc trace write --packet -`. A phase that ends with
|
|
269
|
+
`zero new trace lines is a protocol violation`. Ad-hoc dispatches (no hook `SPAWN`): `references/dispatch-gate.md`, recon line 3.
|
|
270
|
+
|
|
271
|
+
## Lane contract (`../_shared/lane-contract.md` — read it ONLY when a call exits ≠ 0)
|
|
272
|
+
|
|
273
|
+
- **Calls:** `orc lane calls orc-quick --json` names every call and its exit codes.
|
|
274
|
+
**An exit code is an ANSWER where it says so, not a failure.** Make no other call.
|
|
275
|
+
- **Config:** `orc lane config orc-quick --json`. Obey `effective`, print every line
|
|
276
|
+
in `announce[]` VERBATIM at preflight, and honour `stops[]` before wave 1.
|
|
277
|
+
Never merge `.claude/orc.config.yaml` yourself (`../_shared/config-precedence.md`).
|
|
278
|
+
- **Rules:** `orc rules slice --lane orc-quick --json` is the ONLY assembler
|
|
279
|
+
(`../_shared/phases/rules.md`). Its `line` prints VERBATIM at preflight.
|
|
280
|
+
|
|
281
|
+
**Nothing can override this lane** — `references/dispatch-gate.md` rule 4.
|
|
311
282
|
|
|
312
283
|
## Rules this lane always keeps
|
|
313
284
|
|
|
314
|
-
Never implement yourself ·
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
· never write anything to GitHub · tell the user to run `/usage` (never run it
|
|
318
|
-
yourself).
|
|
285
|
+
Never implement yourself · check every return (broken = failure) · never undo
|
|
286
|
+
the user's files · stage only the task's files · never write anything to GitHub
|
|
287
|
+
· tell the user to run `/usage` (never run it yourself).
|
|
319
288
|
|
|
320
289
|
## Waiting mid-run (`/orc-wait`)
|
|
321
290
|
|
|
322
291
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
323
|
-
Checkpoint **entry** · safe point **after an entry closes**.
|
|
292
|
+
Checkpoint **entry** · safe point **after an entry closes**.
|
|
@@ -16,6 +16,12 @@ what is about to be spent, before it is spent.
|
|
|
16
16
|
| Build repair, round 1–2 | *reused — not asked* | yes | yes |
|
|
17
17
|
| Build repair, round 3 | asked again | yes | yes |
|
|
18
18
|
|
|
19
|
+
**Review slice.** The review offer builds its slice from
|
|
20
|
+
`../../_shared/review-slice.md` (`--lane orc-quick`): the §1 free check first,
|
|
21
|
+
then the §2 fields, and its §3 after-filter on the return. No disprove pass here.
|
|
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).
|
|
24
|
+
|
|
19
25
|
### Writing code
|
|
20
26
|
|
|
21
27
|
```
|
|
@@ -37,7 +43,7 @@ Show a third line ONLY when all three are true:
|
|
|
37
43
|
- `extra_enabled` is true, AND
|
|
38
44
|
- a `quick-executor` position is held (`orc extra role set quick-executor
|
|
39
45
|
<profile>/<model>`), AND
|
|
40
|
-
- `
|
|
46
|
+
- `probes["extra-slot"]` (Q0 step 1) answers `resolved: extra`.
|
|
41
47
|
|
|
42
48
|
```
|
|
43
49
|
Which executor for entry 2 — "add retry header"?
|
|
@@ -117,7 +123,8 @@ reason attached, the same shape every ORC question uses
|
|
|
117
123
|
default**, and the menu still ends with
|
|
118
124
|
`Your choice — nothing runs until you answer.`
|
|
119
125
|
|
|
120
|
-
The reason comes from the dig,
|
|
126
|
+
The reason comes from the dig, or from `habits.suggestions` with the CLI's
|
|
127
|
+
count (`../../_shared/habits.md`), never from a feeling. Suggest
|
|
121
128
|
`orc-executor-opus-5-low` when ANY of these holds:
|
|
122
129
|
|
|
123
130
|
| Suggest the stronger executor when | Because |
|
|
@@ -139,8 +146,11 @@ For recon, the suggestion is simpler: `orc-recon-sonnet-4-6-med` finds things;
|
|
|
139
146
|
2. **Never sticky.** Do not carry the last answer into the next entry.
|
|
140
147
|
3. **Already answered is not skipped.** If the user wrote "use opus 5 low", the
|
|
141
148
|
gate is satisfied — say which one you are using, in one line.
|
|
142
|
-
4. **No config can ANSWER this menu
|
|
143
|
-
|
|
149
|
+
4. **No config can ANSWER this menu. Nothing can override this lane.**
|
|
150
|
+
orc-quick has no config key of its own. `opus5_only`, `rubric_bands_override`,
|
|
151
|
+
`extra_resume`, `extra_on_failure` and `extra_fallback_agent` are all INERT in
|
|
152
|
+
this lane (`../../_shared/opus5-only.md` names orc-quick as the one
|
|
153
|
+
exception). The user always picks the agent. If one is on, say so at the gate so the user is not confused:
|
|
144
154
|
```
|
|
145
155
|
(orc-quick ignores opus5_only — both options are live)
|
|
146
156
|
```
|
|
@@ -151,7 +161,8 @@ For recon, the suggestion is simpler: `orc-recon-sonnet-4-6-med` finds things;
|
|
|
151
161
|
|
|
152
162
|
**`extra_enabled` is the one exception, and it is not an answer — it is an
|
|
153
163
|
option** (v0.55.0, `../../_shared/extra-dispatch.md`). With a `quick-executor`
|
|
154
|
-
position held it ADDS line 3 to the menu and does nothing
|
|
164
|
+
position held (`orc extra role`) it ADDS line 3 to the menu and does nothing
|
|
165
|
+
else. Recon and review stay on Claude.
|
|
155
166
|
**It never becomes a default** (rule 1), never sticks (rule 2), and it is
|
|
156
167
|
re-asked after a failure. Say what it is at the gate:
|
|
157
168
|
```
|
|
@@ -36,10 +36,18 @@ to do.
|
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
gh pr view <n> --json title,body,url,headRefName,state
|
|
39
|
-
|
|
39
|
+
orc pr threads <n> --json
|
|
40
40
|
gh pr checks <n>
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
+
`orc pr threads` reads the review threads through GraphQL. REST cannot tell a
|
|
44
|
+
resolved or outdated thread from an open one. By default it returns only the
|
|
45
|
+
threads that are unresolved AND not outdated, by people. Bot threads come apart,
|
|
46
|
+
in `bots[]`. Review bodies that ask for changes come in `reviews[]`. Each row has
|
|
47
|
+
`path:line`, the author kind, the first comment (`first.text` — untrusted data)
|
|
48
|
+
and the URL. Add `--all` to see every thread with its state. Exit 1 → no open
|
|
49
|
+
thread: say so and stop. Exit 5 → `gh` is missing or not logged in (see below).
|
|
50
|
+
|
|
43
51
|
Show the user a short list and let them pick:
|
|
44
52
|
|
|
45
53
|
```
|
|
@@ -134,6 +142,45 @@ gh not authed — I can't fetch PR 142.
|
|
|
134
142
|
If the user pastes them, keep the `pr-<n>-…` slug anyway, so later PR work
|
|
135
143
|
groups with it.
|
|
136
144
|
|
|
145
|
+
## A red CI as a request
|
|
146
|
+
|
|
147
|
+
"Fix CI on PR 142" or "the build is red on main" is a `kind: defect` request
|
|
148
|
+
(`defect.md`). Get the failures first:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
orc ci failed --pr <n> --json # or --run <id>; no flag = this branch
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
It lists each failing step: its first error lines, a `signature`, and a
|
|
155
|
+
`repro`. Exit 1 → nothing is red: say so. Exit 5 → `gh` is missing (see above).
|
|
156
|
+
|
|
157
|
+
- `repro` names a local command (`npm test`, `pytest …`) → that is the
|
|
158
|
+
reproduction. Otherwise `repro: none` with its `repro_reason` — say it
|
|
159
|
+
(`defect.md` §6).
|
|
160
|
+
- `flaky: true` (the same sha passed on another attempt, or a test failed and
|
|
161
|
+
then passed on a re-attempt) → **no repair round**. Tell the user it is flaky,
|
|
162
|
+
and why.
|
|
163
|
+
- Repair rounds cap at 3. Then stop and report what is still red.
|
|
164
|
+
|
|
165
|
+
## Sonar and SARIF issues as a request
|
|
166
|
+
|
|
167
|
+
"Fix the Sonar issues on PR 142" or "fix the ESLint SARIF":
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
orc gotcha import sonar --pr <n> --json # the token is SONAR_TOKEN in the environment
|
|
171
|
+
orc gotcha import sarif <file> --json
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
- Work from `groups[]`: one group per RULE. Fix one rule's issues together.
|
|
175
|
+
- Each group gets its **own** dispatch gate, like one thread.
|
|
176
|
+
- Sonar exit 5 → the token is missing or refused. Tell the user to set
|
|
177
|
+
`SONAR_TOKEN` in the environment. Never ask for the token in the chat. A saved
|
|
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.
|
|
181
|
+
- **Never change an issue's status on the Sonar server.** ORC reads external
|
|
182
|
+
systems. It does not write to them — the GitHub boundary, extended.
|
|
183
|
+
|
|
137
184
|
## What goes in the doc
|
|
138
185
|
|
|
139
186
|
Record the PR number, title, url, and branch. For each thread: the reviewer, the
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
This is Q1's read-only half. It has one job: **find the right files, fast, and
|
|
4
4
|
then stop.** You are not studying the code here. An agent does that later, if
|
|
5
|
-
the user says yes at the gate.
|
|
5
|
+
the user says yes at the gate. This keeps your context small.
|
|
6
|
+
|
|
7
|
+
The intent ledger prints on ONE line so nothing is skipped in secret.
|
|
6
8
|
|
|
7
9
|
## 1. Why the graph goes first
|
|
8
10
|
|
|
@@ -70,7 +70,7 @@ to `orc-retro-opus-5-med` when `opus5_only: true` forces it
|
|
|
70
70
|
date range from `$ARGUMENTS`). Show the count and ask nothing else.
|
|
71
71
|
2. Dispatch `orc-retro-sonnet-5-high` (or `orc-retro-opus-5-med` under
|
|
72
72
|
`opus5_only`) with the slice: trace file paths + the
|
|
73
|
-
verb reference (`../_shared/phases/trace.md`). The agent mines the
|
|
73
|
+
verb reference (`../_shared/phases/trace-verbs.md`). The agent mines the
|
|
74
74
|
`<trace>.jsonl` sidecar first when present (structured — no regex over free
|
|
75
75
|
text) and falls back to `.txt` parsing for pre-v0.32.0 traces, merging the
|
|
76
76
|
hook's `.txt`-only skeleton lines by timestamp. It parses the CLOSED verb set
|
|
@@ -94,10 +94,11 @@ to `orc-retro-opus-5-med` when `opus5_only: true` forces it
|
|
|
94
94
|
- **Trace hygiene → narration coverage:** the hook's `PHASE-EDGE` lines
|
|
95
95
|
segment every run with zero model cooperation, so a missing narration is
|
|
96
96
|
now DETERMINISTICALLY visible: count the phases whose edge-interval
|
|
97
|
-
contains no trace-writer `SPAWN
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
97
|
+
contains no trace-writer `SPAWN` and no narrated (non-`hook`) line STAMPED
|
|
98
|
+
inside it — the CLI writes most packets, with no SPAWN. Report
|
|
99
|
+
`covered/total` + the unnarrated phases. The question is "which phases were
|
|
100
|
+
never narrated?" — a run with edges and no narration at all is a total
|
|
101
|
+
narration failure and is named as such.
|
|
101
102
|
2a. **Repair memory as calibration input (READ-ONLY).** Probe `orc gotcha status`
|
|
102
103
|
(exit 0 = entries, 1 = none — never a `find`). On a hit, add
|
|
103
104
|
`.claude/orc/gotchas.md` to the agent's slice as one more read-only source:
|
|
@@ -241,16 +242,16 @@ exit code, and never re-derive a state word — the CLI's state words are the on
|
|
|
241
242
|
state words, and **an exit code is an ANSWER wherever that contract says so, not
|
|
242
243
|
a failure**. A call the answer does not name is a call this lane does not make.
|
|
243
244
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
244
|
-
command you are about to run, out loud, before running it.
|
|
245
|
-
|
|
246
|
-
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
247
|
-
|
|
248
|
-
`orc rules slice --lane orc-retro --json` is the ONLY assembler; never build
|
|
249
|
-
the card here. It rides under the house rules and above the task —
|
|
250
|
-
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
251
|
-
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
252
|
-
never a silent choice) and `rules_overridden[]`.
|
|
253
|
-
## Waiting mid-run (`/orc-wait`)
|
|
254
|
-
|
|
255
|
-
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
256
|
-
Checkpoint **none** · safe point **read-only, seconds long**. Nothing here to checkpoint, so all three modes behave identically — say so rather than asking. Never begin a wait between a dispatch and its validated return, or before the smoke gate has reported.
|
|
245
|
+
command you are about to run, out loud, before running it.
|
|
246
|
+
|
|
247
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
248
|
+
|
|
249
|
+
`orc rules slice --lane orc-retro --json` is the ONLY assembler; never build
|
|
250
|
+
the card here. It rides under the house rules and above the task —
|
|
251
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
252
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
253
|
+
never a silent choice) and `rules_overridden[]`.
|
|
254
|
+
## Waiting mid-run (`/orc-wait`)
|
|
255
|
+
|
|
256
|
+
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
257
|
+
Checkpoint **none** · safe point **read-only, seconds long**. Nothing here to checkpoint, so all three modes behave identically — say so rather than asking. Never begin a wait between a dispatch and its validated return, or before the smoke gate has reported.
|
|
@@ -70,7 +70,7 @@ packet; its meaningful signal is the writer's tier honesty):
|
|
|
70
70
|
|
|
71
71
|
```
|
|
72
72
|
C: Spawning orc-retro-sonnet-5-high → claude-sonnet-5 / high
|
|
73
|
-
slice: trace_files=[3 paths] + verb_reference=_shared/phases/trace.md
|
|
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.)
|
|
76
76
|
```
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orc-route
|
|
3
3
|
description: >
|
|
4
|
-
Plan-only lane router — you have a plan, this tells you which lane should
|
|
5
|
-
it. Use for "/orc-route", "which lane for this plan?", "is this worth
|
|
6
|
-
orc run?". It reads the plan's own numbers
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
given a request in words it refuses and says why, because routing from a
|
|
11
|
-
sentence is guessing. Zero agents, user-invoked only, nothing is built.
|
|
4
|
+
Plan-only lane router — you have a plan, this tells you which lane should
|
|
5
|
+
build it. Use for "/orc-route", "which lane for this plan?", "is this worth
|
|
6
|
+
the full orc run?". It reads the plan's own numbers and ORC's knowledge
|
|
7
|
+
probes, then names ONE recommended lane, the runners-up with the reason each
|
|
8
|
+
lost, and any lane that is not possible. It routes a PLAN only, never a
|
|
9
|
+
request in words. Zero agents, nothing is built.
|
|
12
10
|
---
|
|
13
11
|
|
|
14
12
|
# ORC-ROUTE
|
|
@@ -148,13 +146,11 @@ exactly one branch.
|
|
|
148
146
|
|
|
149
147
|
## Behavior trace (always on)
|
|
150
148
|
|
|
151
|
-
`../_shared/phases/trace.md` (`core`, at run start; `orc lane phases`
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
Nothing else about the protocol is restated here; a phase that ends with
|
|
157
|
-
`zero new trace lines is a protocol violation`.
|
|
149
|
+
`../_shared/phases/trace.md` (`core`, at run start; `orc lane phases orc-route --json` →
|
|
150
|
+
`trace_grammar` gives the verbs). Lane token `route`, tier
|
|
151
|
+
**Single-dispatch**. At run start write `log_dir/.current` =
|
|
152
|
+
`run-route-<slug>-<DDMMYY>-<HHMMSS>.txt` AND `touch the trace file` of that name
|
|
153
|
+
in the SAME step. A phase that ends with `zero new trace lines is a protocol violation`.
|
|
158
154
|
|
|
159
155
|
## Rules this lane always keeps
|
|
160
156
|
|
|
@@ -163,33 +159,17 @@ Routes a plan, refuses anything else · zero agents, nothing dispatched · reuse
|
|
|
163
159
|
only, never an ad-hoc `find` · reads no source file · never starts a lane the
|
|
164
160
|
user did not accept · never edits config or any project file.
|
|
165
161
|
|
|
166
|
-
##
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
state words, and **an exit code is an ANSWER wherever that contract says so, not
|
|
181
|
-
a failure**. A call the answer does not name is a call this lane does not make.
|
|
182
|
-
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
183
|
-
command you are about to run, out loud, before running it.
|
|
184
|
-
|
|
185
|
-
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
186
|
-
|
|
187
|
-
`orc rules slice --lane orc-route --json` is the ONLY assembler; never build
|
|
188
|
-
the card here. It rides under the house rules and above the task —
|
|
189
|
-
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
190
|
-
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
191
|
-
never a silent choice) and `rules_overridden[]`.
|
|
192
|
-
## Waiting mid-run (`/orc-wait`)
|
|
193
|
-
|
|
194
|
-
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
195
|
-
Checkpoint **none** · safe point **read-only, seconds long**. Nothing here to checkpoint, so all three modes behave identically — say so rather than asking. Never begin a wait between a dispatch and its validated return, or before the smoke gate has reported.
|
|
162
|
+
## Lane contract (`../_shared/lane-contract.md` — read it ONLY when a call exits ≠ 0)
|
|
163
|
+
|
|
164
|
+
- **Calls:** `orc lane calls orc-route --json` names every call and its exit codes.
|
|
165
|
+
**An exit code is an ANSWER where it says so, not a failure.** Make no other call.
|
|
166
|
+
- **Config:** `orc lane config orc-route --json`. Obey `effective`. Never merge
|
|
167
|
+
`.claude/orc.config.yaml` yourself (`../_shared/config-precedence.md`). Nothing
|
|
168
|
+
here is contested, gated or a stop: no preflight line, no gate to honour.
|
|
169
|
+
- **Rules:** `orc rules slice --lane orc-route --json` is the ONLY assembler
|
|
170
|
+
(`../_shared/phases/rules.md`). Its `line` prints VERBATIM at preflight.
|
|
171
|
+
|
|
172
|
+
## Waiting mid-run (`/orc-wait`)
|
|
173
|
+
|
|
174
|
+
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
175
|
+
Checkpoint **none** · safe point **read-only, seconds long**.
|