feat(execute)!: hand waves over as session orders, never start Claude Code (green)

Operator decision 27.09.2026: Voyage works the PM way, so nothing in it
starts Claude Code. Work that needs another session becomes an order plus
a starter line the user gives a session they open themselves; Voyage
never starts the session.

/trekexecute's multi-session path (Phase 2.6) now prepares one wave at a
time: worktree per session, then lib/util/session-orders.mjs writes one
order per session (worktree, steps, done-condition, starter) plus
orders/wave.json, and the run stops. Running the same command again reads
each session's progress file (status mode), merges sequentially with
push-before-cleanup as before, and prepares the next wave. Phase 2.5 skips
the destructive pre-flight while a wave is in flight. Phase 7.6 recovery is
handed over the same way. Hard rule 21: never start Claude Code.

Removed with it, because they existed only for launched children: the
ANTHROPIC_API_KEY billing check (and its dry-run line and Hard rule 1
exception), the hooks-fire version precheck, the safety preamble, the
scoped-tool/turn/budget flags, templates/headless-launch-template.md, the
decomposer's launch.sh (now orders.md), /trekplan's "launch", the README
billing and MCP tuning sections, and scripts/q3-cache-prefix-experiment.mjs
(an experiment that spawned the binary; its results stay in docs/).
/trekresearch's deep-research pre-gate no longer runs the binary for its
version; the post-hoc check was already the authoritative guard.

Chose orders + starters over in-session subagents because the order's done
criterion asks for exactly that, and because /trekexecute disallows the
Agent tool on purpose (Hard rule 10); reopening that is a separate change.

Gate: 54 -> 0 hit lines outside EXEMPT. npm test 1250 (1245 pass, 0 fail,
5 skipped: 3 are the retired-reference scan without its local list).
verify.sh 7/0. The fixture run (tests/lib/session-orders.test.mjs) writes
two orders and wave.json for wave 1 and leaves a trap binary untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-27 15:35:22 +02:00
commit 219e40cd91
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q
18 changed files with 664 additions and 1108 deletions

50
tests/fixtures/session-orders/plan.md vendored Normal file
View file

@ -0,0 +1,50 @@
---
plan_version: "1.7"
slug: demo
---
# Plan: demo (fixture for session orders)
## Implementation Plan
### Step 1: Add the parser
### Step 2: Add the formatter
### Step 3: Add the CLI
### Step 4: Wire the plugin subdir
### Step 5: Integrate
## Execution Strategy
### Session 1: Parser
- **Steps:** 1, 2
- **Wave:** 1
- **Depends on:** none
- **Scope fence:**
- Touch: lib/parser.mjs, lib/format.mjs
- Never touch: lib/cli.mjs, plugins/demo/
### Session 2: Plugin subdir
- **Steps:** 3–4
- **Wave:** 1
- **Depends on:** none
- **cwd:** plugins/demo
- **Scope fence:**
- Touch: lib/cli.mjs, plugins/demo/
- Never touch: lib/parser.mjs, lib/format.mjs
### Session 3: Integration
- **Steps:** 5
- **Wave:** 2
- **Depends on:** Session 1, Session 2
- **Scope fence:**
- Touch: README.md
- Never touch: lib/
### Execution Order
- **Wave 1:** Session 1, Session 2 (parallel)
- **Wave 2:** Session 3 (after Wave 1)
## Verification
- `node --test`