Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 2 additions & 3 deletions quest/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ kind, at its priority rank.

- [m0: bug fixes](/quest/m0/README.md) - defects in what main ships today,
security first
- [m1: the dev line](/quest/m1/README.md) - the thread-per-core runtime, net
model follow-ups, breaking bindings work, and the archive line that gates
the dev merge
- [m1: the dev line](/quest/m1/README.md) - the breaking API and wire
changes, the archive line that gates the dev merge, and the merge itself
- [m2: features](/quest/m2/README.md) - new capabilities on stable surfaces,
from wire extensions to E2EE to developer packages
- [m3: prototypes](/quest/m3/README.md) - experiments, spikes, hardware
Expand Down
2 changes: 1 addition & 1 deletion quest/m0/3479-mux-jitter-flush-span.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,4 @@ The work:
## Related

- [Auto latency](/quest/m0/3477-watch-auto-latency.md) - reads this field as its codec floor
- [#3208](/quest/m1/3208-make-2-5-ms-opus-frame-durations-work-across-bindings.md) - the same ceiling rule for Opus frame durations
- [#3208](https://github.com/moq-dev/moq/issues/3208) - the same ceiling rule for Opus frame durations
4 changes: 2 additions & 2 deletions quest/m0/3492-ietf-track-status-refusal.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ answers PUBLISH with NOT_SUPPORTED and closes the writer explicitly (#3348):

- Decode the request so the stream is consumed, reply with the per-draft
refusal (TRACK_STATUS_ERROR on draft-14, REQUEST_ERROR from draft-15 on) using
the code type [IETF error codes](/quest/m0/ietf-error-codes.md) introduces,
the code type [IETF error codes](https://github.com/moq-dev/moq/pull/3531) introduces,
and close the writer. On draft-14 and 15 the request rides a virtual stream
over the control stream whose reset is a no-op, so the explicit reply is the
only way bytes reach the peer.
Expand All @@ -30,7 +30,7 @@ Branch from dev, where the error registry lands.

## Required

- [IETF error codes](/quest/m0/ietf-error-codes.md) - the registered NOT_SUPPORTED value per draft comes from its code type
- [IETF error codes](https://github.com/moq-dev/moq/pull/3531) - the registered NOT_SUPPORTED value per draft comes from its code type

## Closes

Expand Down
2 changes: 1 addition & 1 deletion quest/m0/3534-ietf-publisher-priority.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,4 @@ specifies the field.

## Related

- [IETF error codes](/quest/m0/ietf-error-codes.md) - the sibling sweep of the moq-transport registries
- [IETF error codes](https://github.com/moq-dev/moq/pull/3531) - the sibling sweep of the moq-transport registries
1 change: 0 additions & 1 deletion quest/m0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ regression test per Root Cause First.
- [TRACK_STATUS refusal](/quest/m0/3492-ietf-track-status-refusal.md) - moq-net: TRACK_STATUS gets a NOT_SUPPORTED refusal instead of a silent drop
- [Connect auth race](/quest/m0/3532-connect-auth-race.md) - moq-native: a 403 on the WebSocket arm no longer fails a connect whose QUIC arm is still in flight; moq-ffi can disable the fallback
- [Resume info](/quest/m0/resume-info-newest.md) - moq-net: resume reports segment zero's track info, so a replaced broadcast rescales timestamps on the predecessor's timescale
- [Failure artifacts](/quest/m0/qa-failure-artifacts.md) - retain inspectable traces, logs, and rerun commands when QA fails
- [TS restart stall](/quest/m0/3533-ts-export-restart-stall.md) - moq export ts: a content restart on a continuous timeline no longer fences video and primary audio for good
- [Failure artifacts](/quest/m0/qa-failure-artifacts.md) - a failing harness run keeps its run directory and a Playwright trace, and CI uploads them
- [Harness drive-bys](/quest/m0/harness-drive-bys.md) - decide whether the relay listening kind field that came with #3509 stays
Expand Down
4 changes: 2 additions & 2 deletions quest/m0/resume-info-newest.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ mismatch is reachable from any client.

### Not covered by an existing tracker

[#2991](/quest/m1/2991-net-coalesce-dynamic-tracks-and-preserve-sequences-across.md)
[#2991](/quest/m2/2991-net-coalesce-dynamic-tracks-and-preserve-sequences-across.md)
is about sequence continuity across replacement, not info resolution. #2610's
epoch remedy was removed from the draft by #3225, so there is no wire-level
generation marker to lean on; the fix is local.

## Related

- [#2991](/quest/m1/2991-net-coalesce-dynamic-tracks-and-preserve-sequences-across.md) - sequence continuity across the same replacement
- [#2991](/quest/m2/2991-net-coalesce-dynamic-tracks-and-preserve-sequences-across.md) - sequence continuity across the same replacement

This file was deleted.

55 changes: 28 additions & 27 deletions quest/m1/2152-libmoq-c-abi-catch-up-with-the-moq-ffi-surface.md
Original file line number Diff line number Diff line change
@@ -1,45 +1,46 @@
# [S] libmoq: C ABI catch-up with the moq-ffi surface
# [M] libmoq: dynamic track serving and server-side accept

## Goal

Implement and verify the behavior tracked in [#2152](https://github.com/moq-dev/moq/issues/2152)
within the issue's stated scope and boundaries.
A C embedder serves tracks on demand inside a broadcast it publishes, and
accepts sessions itself through the same two-phase SETUP the FFI exposes.
These are the two `moq-ffi` capabilities `rs/libmoq` still lacks that ride
the request records #3190 reshapes.

## Plan

Rescoped during the 2026-08 grooming: subscription options, track info, abort
codes, and client TLS roots landed in dev's rs/libmoq. Remaining gaps:
fetch_group, dynamic track serving within a broadcast, server-side accept, and
datagrams, tracked against the dev FFI surface. Broadcast serving is not in
this quest: the announce handle that advertises a prefix and yields its
requests reaches C through the bindings quest linked below, so do not add a
separate `requested_broadcast` path here.
Most of the catch-up #2152 lists has landed in dev's `rs/libmoq/src/api.rs`:
subscription options, track info, abort codes, client TLS roots, datagrams
(`moq_datagram` :462-468, `moq_publish_track_datagram` :1948, and
`moq_consume_datagrams` with its read, free, and close :2599-2650), and raw
frame timestamps (:2538-2541). Two gaps remain:

### Issue context
- Dynamic track serving. moq-ffi's `MoqBroadcastProducer::requested_track`
yields a `MoqTrackRequest` whose `accept(info)` returns the producer
(rs/moq-ffi/src/producer.rs:483, :624); api.rs has no `requested` symbol.
Mirror it as a callback-delivered request handle with accept and reject,
on the datagram task's handle and terminal-status contract. Broadcast
requests are not in this quest: `requested_broadcast` reaches C through
#3190's dynamic handle, so do not add a separate path here.
- Server-side accept. moq-ffi's `MoqServer::accept` yields a `MoqRequest`
whose own `accept()` completes SETUP (rs/moq-ffi/src/server.rs:54, :144,
:186, :259); a C embedder cannot accept sessions at all.

The libmoq C ABI (`rs/libmoq/src/api.rs`) has fallen well behind moq-ffi. All of these are additive (new symbols), so none block the dev->main merge, but the backlog is getting long:
Each addition regenerates `moq.h`, touches `cpp/obs/src` only if used, and
updates `doc/lib/c/index.md`. That page's capability list (:39) already
claims dynamic tracks for C; the request handle makes it true.

- **Subscription options**: `moq_consume_track` takes no options; no priority/ordered/stale/group-range equivalent of `MoqSubscription`, and no mid-stream update.
- **Track info on publish**: `moq_publish_track` cannot set `timescale`/`priority`/`ordered`/`cache` (no `MoqTrackInfo` equivalent).
- **Fetch**: no `fetch_group`, and no dynamic group serving (moq-ffi gains these in #2142; mirror the shape).
- **Dynamic track/broadcast serving**: no `requested_track`/`requested_broadcast` path at all.
- **abort with error code**: only clean close/finish exists; no abort(code) for tracks/groups.
- **Server / two-phase accept**: no server-side API (moq-ffi has `MoqServer`/`MoqRequest` with the SETUP path); C embedders cannot accept sessions.
- **Client TLS knobs**: roots/system-roots/fingerprints/disable-verify are env-only; moq-ffi exposes them as options.
- **Datagrams**: tracked with the moq-ffi datagram issue; mirror whatever lands there.
- **Raw-frame timestamps**: raw consume reports `timestamp_us = 0`; tracked with the raw-frame timestamps issue.
Branch from `dev`, after #3190. Fetch and the video format knob are additive,
so they ship on main through the related quest.

Suggest splitting off pieces as they're picked up rather than one mega-PR. Each addition also touches `cpp/obs` consumers only if used, plus `doc/lib/c` per the Cross-Package Sync table.
## Required

Video decode is the widest hole on the C side: `moq-ffi` has a `video`
feature over `moq-video` (NVIDIA and VAAPI on), but `libmoq`'s
`moq_consume_video_raw` is H.264-only with no format or resolution knob.
`moq play` is the worked example of what the shape should be.
- [#3190](/quest/m1/3190-align-origin-broadcast-creation-naming-across-language.md) - the dynamic handle and request records these calls share

## Closes

- [#2152](https://github.com/moq-dev/moq/issues/2152) - close this issue when the quest finishes

## Related

- [#3190](/quest/m1/3190-align-origin-broadcast-creation-naming-across-language.md) - brings the announce handle and broadcast request serving to C
- [libmoq fetch](/quest/m2/libmoq-fetch.md) - fetch_group and the video format knob, on main

This file was deleted.

This file was deleted.

Loading
Loading