diff --git a/docs/reviews/003-websocket-data-channel-review.md b/docs/reviews/003-websocket-data-channel-review.md index 1901717..070695b 100644 --- a/docs/reviews/003-websocket-data-channel-review.md +++ b/docs/reviews/003-websocket-data-channel-review.md @@ -381,23 +381,42 @@ fold the cleanup into that task. # Remediation plan Sequenced by dependency; Unit 1 is a decision task and gates the -shape of Unit 2. +shape of Unit 2. Upstream findings are tracked in parallel as alkcall +review 004 +(`/workspace/@alkdev/alkcall/docs/reviews/004-*.md`), where the +decision work actually lives; the alkcall remediation units there +carry the acceptance gates for WS-24/WS-25. The plan below is the +alkhttp-side consequence of whichever upstream resolution lands. -## Unit 1 — alkcall decision task (WS-24, WS-25) +## Unit 1 — alkcall decision task (WS-24, WS-25) → tracked upstream Decide the open-op dispatch-resolution mechanism and the client-side op-registration question; record as alkcall ADR amendments (ADR-047 §4 mechanism; ADR-048's bidirectionality scope) with alkhttp-side -consequences noted. +consequences noted. **Full analysis and remediation units live in +alkcall review 004**; the alkhttp summary: -- WS-24: pick (a) per-session base registry (amend ADR-047 §4's - mechanism wording; add the `OperationRegistry` fork/clone surface) - or (b) overlay-aware top-level dispatch. Gate: an alkcall e2e test - where an open op registered per the *amended* mechanism resolves - via `run_loop_single_stream` dispatch over a channels connection. -- WS-25: decide the client-registration story (new envelope kind / - channel-0 bootstrap op / explicit scope cut). Gate: the ADR (or - scope-cut note) exists and OQ-05/ADR-048 point at it. +- WS-24: the leading candidate is **option (a), per-session base + registry** — the only shape proven to dispatch on the wire + (alkcall's e2e test). It requires the alkcall fork/clone surface + (`OperationRegistry` fork; all inner payload types verified + `Clone`-able — see review 004 F-03). +- WS-25: the leading candidate is the **channel-0 bootstrap op** + (`op/register` as an assumed-op the hub serves per-session, whose + handler writes into the connection-local overlay via + `register_imported`) — no new envelope kind, the wire stays the + six `call.*` kinds. It requires the alkcall **client serving + half** (F-04): the connect-side read pump currently resolves + responses only and silently drops inbound `call.requested`. It + composes with the bootstrap-discovery split: `services/list` stays + the base-registry listing; peer-registered op discovery rides the + already-built `services/list-peers` (which reads + `ctx.env.peer_ids()`/`peer_operations()` — populated from the + connection overlay by `compose_root_env`). + +Gate: the alkcall ADRs (or amendments) recorded per review 004, and +review 004's Units 1–3 landed; OQ-05/ADR-048 in this repo point at +the resolution. ## Unit 2 — alkhttp wiring (WS-20, WS-21, WS-22, WS-26)