diff --git a/docs/opencode-parity.md b/docs/opencode-parity.md index 74212af2..db07cc71 100644 --- a/docs/opencode-parity.md +++ b/docs/opencode-parity.md @@ -67,7 +67,7 @@ These are live defects, not missing features. Each makes OpenCode less usable th | B7 | **Latent spurious `cut-off`.** `resume-cursor` defaults `model` to `claude-code`; `endTurnIfAgentIsGone` then asks the Claude sidecar about a key it never had, gets `false`, and appends a durable "agent went away" row to a live turn. Currently masked only because the client always happens to send `model` alongside `sessionId`. | `websocket.ts:607,621,749-757` | A permanent, reload-surviving false error row. | | B8 | **In-flight `opencode run` children survive sidecar shutdown** and are not tracked, so their output is lost. Separately, `sweepStaleServes` is `/proc`-based and therefore a no-op on macOS — orphaned serves accumulate on this machine. | `index.ts:197-209`, `:41-75` | | -**Status, 2026-08-10: B1–B7 are fixed. B8 is the only one left.** +**Status, 2026-08-10: bucket 0 is CLOSED — B1–B8 are all fixed.** B1–B6 in phases 0 and 1 (`22bcd7d`, `492509a`, `013e629`, `7774a25`) — see `docs/opencode-phase1-report.md`. B7 fixed separately, after the review: `decideResume` in `websocket.ts` replaces `msg.model || DEFAULT_MODEL`. @@ -78,10 +78,20 @@ bus (so an OpenCode turn's output never arrives) and pins `session.model`, so st `killClaude` on a key that sidecar never held — a stop button that silently does nothing. All three had the one cause, and all three were masked by the client always sending `model`. +B8 fixed the same day, both halves. `stopAllOpenCodeTurns` on shutdown, settling each turn synchronously +so the transcript says why it ended; and a pidfile sweep beside the `/proc` one, which was a no-op on +macOS and let orphaned serves accumulate there. + Also fixed after the review, and not in this table because it was found by reviewing the fix for B5/B6: a superseded OpenCode turn ran its whole completion path against the turn that replaced it. See `docs/opencode-phase1-review.md`. +**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. + --- ## Bucket 1 — Claude has it, OpenCode does not