Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
80db9c7
quest: claim ietf-fetch-location
kixelated Oct 7, 2026
c334121
feat(ietf): serve draft-20 FETCH within one group
kixelated Oct 7, 2026
09558a2
quest: claim ietf-fetch-only
kixelated Oct 7, 2026
c02ed6f
feat(moq-net): serve IETF TRACK_STATUS and keep timestamps without pr…
kixelated Oct 7, 2026
4dcd043
feat(moq-net): learn fetch-only IETF tracks from TRACK_STATUS
kixelated Oct 7, 2026
ee8656b
docs: TRACK_STATUS for fetch-only demand; carry the opt-out into its …
kixelated Oct 7, 2026
594e25e
style: rustfmt
kixelated Oct 7, 2026
4ff8c90
fix(moq-net): fail a pending TRACK_STATUS with the session
kixelated Oct 7, 2026
047e1ae
quest: link the opt-out quest to its PR
kixelated Oct 7, 2026
4df226b
Merge origin/main into quest/m1/ietf-fetch-only
kixelated Oct 7, 2026
656bd6b
Merge branch 'main' into quest/m1/ietf-fetch-location
kixelated Oct 7, 2026
24c3846
fix(ietf): refuse an empty draft-20 FETCH answer
kixelated Oct 7, 2026
39dfccf
feat(moq-net): ask for an IETF track's properties once per copy
kixelated Oct 7, 2026
b40a1b9
fix(ietf): report a draft-20 FETCH's last object read as its End Loca…
kixelated Oct 7, 2026
d51ff3d
Merge remote-tracking branch 'origin/main' into iterate/ietf-fetch-only
kixelated Oct 7, 2026
eaac1b3
Merge remote-tracking branch 'origin/main' into fetch-only-iterate
kixelated Oct 7, 2026
793ae1b
feat(moq-net): a refused TRACK_STATUS refuses the fetch-only request
kixelated Oct 7, 2026
ba732bb
fix(moq-net): a resumed draft-17 copy takes SUBSCRIBE_OK's timescale
kixelated Oct 7, 2026
3ad859e
docs: rewrap the TRACK_STATUS paragraph
kixelated Oct 7, 2026
c9d766e
Merge remote-tracking branch 'origin/main' into fetch-only-iterate
kixelated Oct 7, 2026
d075aa2
Merge branch 'main' into quest/m1/ietf-fetch-location
kixelated Oct 7, 2026
ac1e723
style: cargo fmt the timescale assertion
kixelated Oct 7, 2026
fb4f866
Merge remote-tracking branch 'origin/main' into quest/m1/ietf-fetch-only
kixelated Oct 8, 2026
e0a40d2
fix(moq-net): adapt TRACK_STATUS and tests to main's epoch and untime…
kixelated Oct 8, 2026
0a5e3e1
feat(moq-net): draft-17 fetch-only demand still subscribes
kixelated Oct 8, 2026
dbe2dd9
Merge remote-tracking branch 'origin/quest/m1/ietf-fetch-only' into q…
kixelated Oct 8, 2026
8c6a356
Merge remote-tracking branch 'origin/quest/m1/ietf-fetch-only' into q…
kixelated Oct 8, 2026
90cada6
quest: drop the link to the finished ietf-fetch-only quest
kixelated Oct 8, 2026
142d21e
Merge remote-tracking branch 'origin/quest/m1/ietf-fetch-only' into q…
kixelated Oct 8, 2026
3f4520c
fix(ietf): answer an empty draft-20 FETCH and report the requested En…
kixelated Oct 8, 2026
1388489
Merge remote-tracking branch 'origin/main' into quest/m1/ietf-fetch-only
kixelated Oct 8, 2026
0c6ac73
Merge remote-tracking branch 'origin/quest/m1/ietf-fetch-only' into q…
kixelated Oct 8, 2026
4387ecf
fix(ietf): cap a draft-20 FETCH only at the track's end, and refuse a…
kixelated Oct 8, 2026
7cdf309
Merge remote-tracking branch 'origin/main' into quest/m1/ietf-fetch-only
kixelated Oct 8, 2026
5439773
Merge remote-tracking branch 'origin/quest/m1/ietf-fetch-only' into q…
kixelated Oct 8, 2026
5a47135
fix(moq-net): gate TRACK_STATUS_OK's parameters per draft like SUBSCR…
kixelated Oct 8, 2026
190479a
fix(ietf): cap a draft-20 FETCH at Largest Object wherever the cache …
kixelated Oct 8, 2026
4f5ce1c
Merge remote-tracking branch 'origin/main' into quest/m1/ietf-fetch-only
kixelated Oct 8, 2026
52bf1a4
Merge remote-tracking branch 'origin/quest/m1/ietf-fetch-only' into q…
kixelated Oct 8, 2026
9901fc4
Merge remote-tracking branch 'origin/main' into quest/m1/ietf-fetch-l…
kixelated Oct 8, 2026
770fd19
fix(ietf): bound a draft-20 FETCH by Largest Object only when the cac…
kixelated Oct 8, 2026
05a047d
fix(ietf): refuse a draft-20 FETCH of an empty group past the live La…
kixelated Oct 8, 2026
a0b777b
style: cargo fmt the draft-20 FETCH bound
kixelated Oct 8, 2026
a68224c
docs(ietf): say the draft-20 FETCH bound also refuses behind an empty…
kixelated Oct 8, 2026
28c75f4
Merge remote-tracking branch 'origin/main' into fetch-location-iterate
kixelated Oct 9, 2026
53629af
test(ietf): pin a draft-20 FETCH behind an aborted newest group
kixelated Oct 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/concept/standard.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ maps everything else to "not supported" or a harmless equivalent. The
subset drops. What a peer actually observes against this implementation:

- **Pull.** Subscribers ask. Single-track `PUBLISH` offers are declined; announce a namespace and serve the resulting subscriptions. Announcements go out unsolicited, and we also ask for every prefix we may discover. The solicit `SETUP` option makes us wait to be asked. Without it, a draft 16+ peer also gets each match as a `NAMESPACE` on its `SUBSCRIBE_NAMESPACE` stream, so it hears the namespace twice. We never send `PUBLISH`: on drafts 16 and 17 a `SUBSCRIBE_NAMESPACE` asking only for `PUBLISH` is refused, one asking for both gets only `NAMESPACE`, and any other Subscribe Options value closes the session.
- **History is one group.** On drafts 14 through 19 a `FETCH` returns one whole group from the cache, or the saved prefix of the group a new subscription just joined. A range of groups is refused, as is any `FETCH` on draft 20 and later. JavaScript publishing refuses every `FETCH`. Datagrams are never fetchable. A Rust reader that only fetches learns the track from `TRACK_STATUS` instead of subscribing, so a finished track stays fetchable; draft 17 still subscribes, since its `TRACK_STATUS` answer cannot say whether the track is timed.
- **History is one group.** A `FETCH` returns one group from the cache, or on drafts 14 through 19 the saved prefix of the group a new subscription just joined. A range of groups is refused, as is a draft 20+ `LOCATION_FILTER` that ends at Largest Object rather than an absolute End Location. On draft 20 and later, `FETCH_OK`'s End Location is the requested end, capped at Largest Object: a range holding no objects gets an empty fetch stream, and only a start past Largest Object is refused, with `INVALID_RANGE`. A relay's copy with no upstream subscription can't know Largest Object short of the track's end, so it echoes the requested end instead. JavaScript publishing refuses every `FETCH`. Datagrams are never fetchable. A Rust reader that only fetches learns the track from `TRACK_STATUS` instead of subscribing, so a finished track stays fetchable; draft 17 still subscribes, since its `TRACK_STATUS` answer cannot say whether the track is timed.
- **Timing.** A track whose `SUBSCRIBE_OK` declares no `TIMESCALE` is untimed, as is every track on drafts 14 through 16. A Rust reader that never subscribed takes the units from `TRACK_STATUS` on draft 18 and later.
- **Strict SETUP and parameters.** Repeated unknown `SETUP` options, GREASE included, are accepted if well-formed; a repeated known option is rejected. On draft 17 and later, a `GROUP_ORDER` other than Ascending (1) or Descending (2) closes the session. Message parameters follow the negotiated draft's lists: drafts 14 and 15 ignore an unknown or misplaced parameter, draft 16 ignores one defined only for another message but closes the session on an unknown one, and draft 17 and later close it on both.
- **One credential per session**, carried in `SETUP` and forwarded to the [auth server](/bin/relay/auth#the-contract) unverified. A token attached to an individual request is ignored. An alias reference or a second token closes the session.
Expand Down
1 change: 0 additions & 1 deletion quest/m1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ were done or not worth their cost.
- [Bump web-transport-iroh for the capsule close](/quest/m1/iroh-capsule-bump.md) - condition: moq-dev/web-transport#419 ships in a release, then moq's iroh HTTP/3 client reports a peer's close capsule
- [SUBSCRIBE_DROP](/quest/m1/subscribe-drop.md) - every stream group in a lite subscription arrives or is dropped by name, and lite-07 drops its stream count for it
- [lite-07 Live flag](/quest/m1/lite-live.md) - a separate `Live` field on lite-07 SUBSCRIBE, so merged floors never starve a subscriber; late lower groups build on it
- [Draft-20 FETCH](/quest/m1/ietf-fetch-location.md) - a draft-20+ FETCH within one group is served from its LOCATION_FILTER, as older drafts are
- [FETCH_OK properties](/quest/m1/fetch-ok-properties.md) - our FETCH_OK carries the track properties SUBSCRIBE_OK does, as draft 16+ requires
- [Subscribe ranges](/quest/m1/subscribe-ranges/README.md) - a lite-07 SUBSCRIBE asks for past and live ranges in either order and replaces FETCH; relays fill misses by range, including over moq-transport
- [Cross-relay bursts re-run](/quest/m1/cross-relay-bursts.md) - condition: the #4349 reporter re-runs their A/B/C comparison against current cdn.moq.pro
Expand Down
9 changes: 1 addition & 8 deletions quest/m1/fetch-ok-properties.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ opts out with INCLUDE_PROPERTIES = 0. Other fetch-only readers still need it.
subscriber takes the units only from SUBSCRIBE_OK, and a fetch-only reader
is untimed. Rejected: omitting timescale from FETCH_OK and leaving
fetch-only readers untimed.
- Honour INCLUDE_PROPERTIES (0x35) on FETCH from draft 20, once
[Draft-20 FETCH](/quest/m1/ietf-fetch-location.md) serves draft-20 FETCH at
all (today our publisher refuses every one). It defaults to sending the
- Honour INCLUDE_PROPERTIES (0x35) on FETCH from draft 20. It defaults to sending the
properties; at 0 the block is present but empty. `fetch.rs` decodes it into
`Fetch::properties_wanted`, which the publisher does not honour yet.
- Test per draft range: FETCH_OK round-trips the properties SUBSCRIBE_OK would
Expand All @@ -46,8 +44,3 @@ change how a fetch-only reader learns the track's properties.

Public API: none. Wire: FETCH_OK gains its properties on drafts that define
the block. Interop: run `just test interop --all`.

## Required

- [Draft-20 FETCH](/quest/m1/ietf-fetch-location.md) - draft-20 FETCH is served at all, and edits the same `run_fetch_stream`

26 changes: 0 additions & 26 deletions quest/m1/ietf-fetch-location.md

This file was deleted.

6 changes: 3 additions & 3 deletions quest/m1/subscribe-ranges/ietf.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ SUBSCRIBE, as open #4974 does for fetch-only demand.
Serving downstream lifts the one-group refusal ("FETCH spanning several
groups not supported") in `run_fetch_stream`
(`rs/moq-net/src/ietf/publisher.rs`) for every draft, including draft-20's
`FetchType::Filtered` once [Draft-20 FETCH](/quest/m1/ietf-fetch-location.md)
serves it.
`FetchType::Filtered`. Capping at the Largest Object also lifts the draft-20
refusal of a filter bounded by it ("FETCH relative to Largest Object not
supported"): no filter, a relative start, or an absolute start with no end.

## Required

- [Model ranges](/quest/m1/subscribe-ranges/model.md) - the range requests this answers
- [Draft-20 FETCH](/quest/m1/ietf-fetch-location.md) - serves draft-20 FETCH through the same group-span path this widens (#4971)
Loading
Loading