decide the phase 2 fork: turns stay on opencode run

The serve has a second, newer API surface nobody here had looked at, and it publishes
exactly what the parity doc calls impossible under stdin ignore: delivery steer and queue
on POST /prompt, an interrupt that does not tear down, and a per-session event stream with
an after cursor — the durable-replay machinery officer hand-built for claude, as a
primitive. That would have made migrating obvious.

It does not execute. A prompt is accepted with an admittedSeq, stored, emits
prompt.admitted and prompted, and then never steps. Ruled out separately: the model, the
permissions (build is *:allow, no pending requests), the per-request location (the surface
is location-scoped via header or a deepObject query, supplied everywhere, no change), and a
config gate. The legacy POST /session/id/message?directory= generates fine in 17s, so the
serve itself works — only the new pipeline is inert. session.next.* is the tell.

And not a version problem, which is the part everything here had backwards: this Mac runs
1.18.11 and alpha runs 1.17.9, measured. The dead pipeline was tested on the NEWER binary.
The original "this server runs 1.17.9" meant alpha and was copied to a machine where it was
false; corrected in runner.ts and the test.

So building against it now would produce code that looks finished and does nothing, which
is the failure mode this project keeps rediscovering. One request reopens the question
after any upgrade, and the doc names it.

Also de-flakes the lifecycle tests: they spawn real processes, and a fixed sleep(750) went
red once on a machine busy running these probes. Presence assertions poll now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-10 14:15:34 +01:00
co-authored by Claude Opus 5
parent 9118a9f76c
commit 41663bc207
4 changed files with 148 additions and 11 deletions
+8 -2
View File
@@ -89,8 +89,14 @@ a superseded OpenCode turn ran its whole completion path against the turn that r
**What bucket 0 being closed does and does not mean.** Every defect that made OpenCode behave *wrongly*
is gone. What remains is bucket 1 — capabilities Claude has and OpenCode does not — and most of the
visible ones (token streaming, mid-turn injection, background tasks, interrupt-without-teardown) are
downstream of `stdin: 'ignore'` and therefore of the Phase 2 fork, which is still Andre's call and still
unstarted. `docs/opencode-serve-path.md` frames it.
downstream of `stdin: 'ignore'` and therefore of the Phase 2 fork.
**The fork is decided: turns stay on `opencode run --dir`.** Not as a preference — the serve publishes a
newer `/api/session/*` surface offering exactly those capabilities natively (`delivery: "steer" |
"queue"`, `/interrupt`, a resumable per-session event stream), and on the newest binary we run it accepts
prompts and never executes them. `docs/opencode-fork-decision.md` has the probe, what was ruled out, and
the single request that reopens the question after an upgrade. Bucket 1 below is therefore **deferred by
evidence**, not pending a decision.
---