docs(review 006 Unit 4): spec reconciliation — OQ-05 resolved, WS data-channel docs to the landed state

- OQ-05: deferred → resolved (2026-09-04, review 006 Unit 2+3); the
  consumer-set reframe recorded (WS is also the native-client fallback
  behind hostile NAT/firewall; OQ-04 does not block the wiring).
- ADR-067: status amendment + the v1-cut blockquote gains the Wired
  (2026-09-04) note — per-session-fork shape, openable surface, gates.
- ADR-048: landed-state amendment — §4's hub→browser direction has its
  object (op/register → connection overlay, hub composes via the
  retained Arc<CallConnection>); the op/register ACL posture (UP-02,
  SRV-10 precedent) recorded.
- websocket.md: the step-7 deferral note and the §"Data channels for
  browsers" status block removed (the section now documents the landed
  surface: with_ws_openable_alpns, the OpenableAlpns fallback, cap
  policy, discovery, gates); idle-knob deployment note for silent data
  channels (semantics unchanged; the 60 s default bites more often —
  set None at assembly for long-lived interactive channels).
- Review 003 status → remediated (all findings closed; log in review
  006); its Unit-4 section marked landed.
- alknet-ADR-044 §5 pointer checked: not stale.

Verification: cargo test 454 / 0; --all-features 582 / 0; clippy
(both) clean; fmt clean; doc clean.
This commit is contained in:
2026-09-04 16:17:11 +00:00
parent 2053420f7d
commit 64fa10be31
5 changed files with 100 additions and 33 deletions
+29 -17
View File
@@ -80,8 +80,8 @@ with their resolutions; new alkhttp OQs start at OQ-01.
- **Origin**: review-001 finding WS-03 (`docs/reviews/001-initial-implementation-review.md`),
[ADR-067](decisions/067-websocket-carries-channels.md),
[ADR-048](decisions/048-websocket-native-session-not-gateway.md)
- **Status**: deferred(scope: v1 cut — no browser consumer yet; reopened
when one lands)
- **Status**: resolved (2026-09-04 — review 006 Unit 2+3, `030c5ef`;
upstream mechanisms in alkcall 0.3.0)
- **Priority**: medium
- **Question**: ADR-067 §"Data channels for browsers" promises
browser-opened data channels (open ops on channel 0 → chunk
@@ -96,25 +96,37 @@ with their resolutions; new alkhttp OQs start at OQ-01.
deferred is the *wiring*: passing the deployment's openable-ALPN
registrations and `ChannelLifecyclePolicy` through the WS upgrade
path, plus a browser-opened-channel end-to-end test.
- **Resolution**: (pending — v1 cut recorded 2026-08-29 in ADR-067 and
ADR-048; the recently landed WS robustness work — idle-read timeout,
session caps/eviction, pump consolidation — is the foundation the
deferred work builds on. **2026-09-03**: the alkcall mechanisms this
wiring composes on landed — alkcall review 004 Units 13: the
per-session fork as dispatch registry (alkcall ADR-047 §4 amendment
#2), the opt-in connect-side serving loop
(`Dispatcher::serve_single_stream`), and the `op/register` bootstrap
op (alkcall ADR-022 amendment 2026-09-03). **2026-09-04**: alkcall
review 005 remediated the landed mechanisms (serving-loop
concurrency, `op/register` collision policy, spec round-trip
completeness) and alkcall 0.3.0 shipped them; alkhttp now consumes
0.3. What remains here is alkhttp-side wiring only — alkhttp review
003 Unit 2.)
- **Resolution**: The wiring landed (2026-09-04, alkhttp review 006
Unit 2+3): the `install_channel_zero` hook forks the deployment's
base registry per session, registers the generic channel ops, the
deployment's openable ALPNs (`HttpAdapter::with_ws_openable_alpns`,
request-extension fallback), the bootstrap discovery set, and
`op/register` (alkcall ADR-022 amendment), then dispatches over the
fork — alkcall ADR-047 §4 amendment #2's per-session-fork shape.
The session retains its live `Arc<CallConnection>` in `WsSessions`
(evicted with the session). One premise of the original deferral
was corrected along the way (review-003 WS-23): "reopened when a
browser consumer lands" underestimated the consumer set — WS is
also the native-client fallback behind hostile NAT/firewall, and a
Rust WS consumer (the `test_support` client shape) is a legitimate
first consumer. **OQ-04 does not block this wiring**; a browser
consumer needs only binary-frame parsing + byte reassembly ahead of
wasm-targeted alkcall. What the deferral rationale got right: the
alkcall-side machinery was indeed complete — but two wiring
blockers turned out to be design gaps (review-003 WS-24/WS-25),
resolved upstream in alkcall 0.3.0 before the wiring could land.
Gate coverage: the six e2e gates in `tests/ws_upgrade_session.rs`
(open/discoverable/bytes round-trip, close + ledger decrement, cap
denial, mid-open disconnect teardown, `TooLarge` demux resync,
`op/register` + collision), plus the `services/list-peers`
announced-op discovery gate (alkcall 0.3.1).
- **Cross-references**: [ADR-067](decisions/067-websocket-carries-channels.md),
[ADR-048](decisions/048-websocket-native-session-not-gateway.md),
[websocket.md](websocket.md), tasks/websocket/review-001-ws-data-channel-decision.md,
alkcall reviews 004005 (`alkcall/docs/reviews/004-per-connection-dispatch-and-client-serving-review.md`,
`alkcall/docs/reviews/005-serving-loop-concurrency-and-op-register-review.md`)
`alkcall/docs/reviews/005-serving-loop-concurrency-and-op-register-review.md`),
alkhttp review 003 (the drill-down), review 006 (the consequence
review + remediation log)
## Resolved (ported)