Files
amethyst/nestsClient
Claude b2362f6504 refactor(nestsclient,quic): simplify-pass cleanups on moq-lite Lite-03/04 audit
Surface a few code-quality wins surfaced by the simplify pass on the
moq-lite Lite-03/04 audit. All semantic-preserving; tests untouched
in behavior.

  - **Derive `MoqLiteSession.version` from `transport.negotiatedSubProtocol`**
    instead of carrying it as a separate constructor parameter. The
    version was already redundant with the transport's negotiated
    ALPN; deriving it eliminates the parameter on
    `MoqLiteSession.client(...)` and the `resolveMoqLiteVersion()` /
    `moqVersion` plumbing in `connectNestsListener` /
    `connectNestsSpeaker`. Tests drive the version via
    `FakeWebTransport.pair(negotiatedSubProtocol = …)`, which already
    plumbs through to the session's derivation.

  - **Extract `MoqLiteSession.rejectSubscribe(bidi, errorCode, reason)`**
    helper that writes a `SubscribeDrop` body and `RESET_STREAM`s the
    bidi. Both Subscribe-rejection arms (`BROADCAST_DOES_NOT_EXIST`
    and `TRACK_DOES_NOT_EXIST`) now share this helper instead of
    duplicating the runCatching / write / reset shape. Future drop
    codes plug in without growing the duplication.

  - **Make `StrippedWtStream.stopSending` non-nullable.** The demux
    always wires it (every surfaced stream has a read side), so the
    `?:` "defensive" fallbacks in `StrippedWtReadStreamAdapter` and
    `StrippedWtBidiStreamAdapter` were dead code. Tightens the
    `StrippedWtStream` contract and shrinks the adapters.

  - **Extract `SEQ_BITS=23` / `SEQ_MASK=0x007F_FFFF` / `SEQ_MAX`
    constants** in `MoqLiteSession.openGroupStream`. The bit-pack
    formula now reads as `(trackPriority and 0xFF) shl SEQ_BITS) or
    (sequence and SEQ_MASK)` — layout is named, not derived from the
    hex literals scattered through the body.

Items deferred (noted but not done):

  - `handleInboundBidi` arm extraction — the per-arm variable capture
    (`dispatched`, `inboundSub`, `inboundSubPublisher`,
    `inboundAnnouncePublisher`) makes a clean refactor harder than
    the readability win. Defer until a future feature changes the
    dispatch shape and the refactor falls out naturally.
  - `Fake{Bidi,Read}Stream` / `ChannelWriteStream` constructor
    parameter explosion — the cells-as-nullable-named-params shape
    is already readable; the candidate `FakeStreamSignals` struct
    would force a left/right-direction flag on the bidi side, which
    is uglier than the explicit `myReset` / `peerReset` naming.
  - `MoqLiteCodec` `object` → versioned `class` — the
    `version: MoqLiteVersion = LITE_03` parameter on each method is
    the idiomatic Kotlin shape for an optional-with-default
    discriminator; converting to a class would bind state to
    instances and complicate the test path that exercises both
    versions per-call.
  - `announce()` / `probe()` pump abstraction — borderline; the
    embedded logging + tracing in `announce()` would have to be
    parameterized into the abstraction. Worth revisiting if a third
    similar pump appears.
  - `MoqLiteSubscribeDropCode` / `MoqLiteStreamCancelCode` sealed-
    class refactor — `Long` constants match the wire shape; sealed
    types would force conversion at every API boundary
    (codec accepts `Long`, transport accepts `Long`).

https://claude.ai/code/session_012TGfo99Ugz7fcCPv85a8Tq
2026-05-09 15:37:42 +00:00
..