From a3a455422c882090c7267c6dff94bd847c1b33d8 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 29 Sep 2026 08:41:53 -0700 Subject: [PATCH] chore(quest): abandon the live-marker app quest Co-Authored-By: Claude Opus 5.5 --- quest/m1/README.md | 1 - quest/m1/announce-live-apps.md | 36 ---------------------------------- 2 files changed, 37 deletions(-) delete mode 100644 quest/m1/announce-live-apps.md diff --git a/quest/m1/README.md b/quest/m1/README.md index bfd771be85..5e0a1258ad 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -30,7 +30,6 @@ transport, benchmark tooling); worktrees isolate commits, not semantics. - [Close codes](/quest/m1/close-codes.md) - a client sees the peer's application close code over WebSocket and raw QUIC, like WebTransport - [Raw stream codes](/quest/m1/raw-stream-codes.md) - raw QUIC stream resets and stops carry the application's code, not an HTTP/3-mapped one - [WebTransport close upstream](/quest/m1/wt-close-upstream.md) - web-transport-moq delivers the close capsule itself, and moq-tokio's `CLOSE_LINGER` is deleted -- [Live in apps](/quest/m1/announce-live-apps.md) - the demo and `@moq/room` show "no broadcasts" from the `live` marker, which waits for the first session on page load - [IETF hidden default](/quest/m1/ietf-hidden-default.md) - a moq-transport peer without the MoQ Hidden option is advertised hidden namespaces; one with it filters per subscription - [Watch refusal](/quest/m1/watch-refusal.md) - `` shows an origin refusal as an error instead of sitting offline - [moqsink recoverable errors](/quest/m1/moqsink-keyframe-latch.md) - a leading delta or a timestamp rewind drops frames until a keyframe instead of invalidating a moqsink pad diff --git a/quest/m1/announce-live-apps.md b/quest/m1/announce-live-apps.md deleted file mode 100644 index c6f9969516..0000000000 --- a/quest/m1/announce-live-apps.md +++ /dev/null @@ -1,36 +0,0 @@ -# [M] Apps show "no broadcasts" from the live marker - -## Goal - -A browser page listing broadcasts shows an empty state once the relay has -said there are none, never a spinner that never resolves and never a false -empty state before the first session answered. The demo watch page and -`@moq/room` use `@moq/net`'s `live` marker, and `@moq/net` settles when an -origin stream opened before the first connection goes live. - -## Plan - -- #4261 (on `dev`) adds the `live` event, and #4266 the same marker in the - bindings. Open #4384 renames the announce events to Start/Update/End/Live; - follow its names if it lands first. The consumers it touches - (`demo/web/src/index.ts`, `js/room/src/room.ts`, `js/watch/src/broadcast.ts`, - `js/moq-boy`) skip it today. -- Page load: an origin stream opened before any session connects has no - session to wait on, so today it goes `live` at once and broadcasts arrive - after it. Settled: the reconnect loop (`js/net/src/connection/reload.ts`), - which already answers requests through `expect()`, holds the marker until - its first session lands `live` or its first dial gives up. An empty list - then means the relay said so or is unreachable, which a UI can tell apart. - Once a session is up, its own `live` ends the hold: every wire guarantees - one (ANNOUNCE_OK, ANNOUNCE_INIT, or the quiet-stream fallback). A peer that - accepts the announce stream and never answers is a peer bug, so no extra - timeout. - Check whether Rust's reconnecting client has the same gap. -- Apps: loading before `live`, an explicit empty state after it with nothing - announced, and an error state when the connection gives up. Libraries - expose the state as a signal; wording stays in the demo. -- Tests: an origin stream opened before connect is not `live` until the first - session is; a connection that cannot connect ends the wait. - -Public API: when `@moq/net` emits `live` changes; any state signal on -`@moq/room` or `@moq/watch` is additive. Lands on `dev` with #4261. Wire: none.