open-standards/joule-code/joule-code-rs/crates/joule-moq/examples
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 34ae495b54 Track switching and probe tracks as library modules of joule-moq, each with a corpus and a second implementation
Two drafts read whole at the revision in the IETF archive on 10 November 2026, with
draft-gurel-moq-track-switching-01 beside the first. Neither module opens a stream or
is on a session's path: each is what a subscriber, a publisher and a relay compute.

- Subscriber-side track switching (draft-ugur-moq-fast-switching-00). joule-moq's
  switching module reads a Switch Set from an MSF catalog's altGroup and
  keyframeSpacing, with its GoP Ladders and its Alignment Unit, and refuses a set in
  which a spacing is not a multiple of that unit. It gives the Frame Number, the
  nearest Switch Point and its Distance, the track chosen under the draft's full
  policy and its simpler one, and the End Group in both of its cases. SWITCH_FROM is
  an unmerged pull request and is not in draft-ietf-moq-transport-23, and neither are
  track-switching-01's altTrackGroup and Switch Track Alias: none is written. A
  SwitchPlan states the switch as the two requests -23 has, a SUBSCRIBE of the target
  with an absolute-start Location Filter at {targetGroup, 0} and a REQUEST_UPDATE
  that ends the current subscription at the End Group, and the module's text says
  what the drafts' parameters would add. The release buffer keys both tracks' objects
  by Frame Number and presents each once, in order. A switch that would start inside
  a Group, and one at a Group the target never publishes, are refused, each with its
  own code.
- Probe tracks (draft-gurel-moq-probing-00). joule-moq's probe module parses Dynamic
  Probe Names by the draft's grammar with every invalid case of its section 7.1 under
  its own reason, resolves a probe as Figure 4 does in exact integer arithmetic, and
  lists its objects: Location, payload size, release time, the lowest publisher
  priority, LOC's Timestamp property and a payload of zeros. It holds the per-probe,
  session and relay-wide limits with Table 5's defaults as a configuration and clamps
  nothing, maps every outcome to its error code in both directions with its Retry
  Interval, writes and reads the probe catalog (which has no member a limit could be
  carried in), reads the session-scoped namespaces and the empty-namespace form, and
  measures a receiver's throughput and the trend of its arrival gaps against the send
  gaps.

Writing the tests found one thing in the first draft: where the spacings of the
current and the target track do not divide one another, the End Group its section 7
computes can end before the Switch Point, so frames between them would never be
sent. The module computes the End Group as the draft writes it and refuses to plan
such a switch.

Corpora: wai/moqt-conformance/switching/ and wai/moqt-conformance/probe/, each one
vectors.json written by the module's corpus generator, with the drafts' own worked
examples in them (Frame Number 28 and Table 1, both End Groups; Tables 4, 5 and 6
and Figure 5). switching_verify.py and probe_verify.py are the second
implementations, standard library only, sharing no code with the crate. Planted
faults, each refused with its own reason by both: 34 for switching, 70 for probes.
Each verifier changes copies of its corpus and requires every change to be caught,
then leaves out each of its own checks in turn and requires the corpus to catch it.

joule-code-conformance.yml runs both verifiers; wai conform --independent lists
them as moq-switching and moq-probe (moqt-mappings.sh).

Co-Authored-By: Claude <[email protected]>
2026-11-10 23:31:32 -05:00
..
adaptation_vectors.rs Track switching and probe tracks as library modules of joule-moq, each with a corpus and a second implementation 2026-11-10 23:31:32 -05:00
loc_vectors.rs LOC carriage: WAI envelopes on LOC objects, a writer and reader in joule-moq, the corpus live-conformance/loc 2026-10-22 10:43:34 -04:00
oneway_vectors.rs Four MoQ drafts mapped onto what WAI has: playout timing, the FEC catalog binding, MoQ files and V3C tracks 2026-11-10 18:34:23 -05:00
quic_xnet.rs MOQT draft-23 in joule-moq, its relay, the interop client, the ingest gateway and the browser 2026-11-10 16:00:27 -05:00