Repository navigation
Conversation
Quest-Claim: ce48bd54dedffcad
This was referenced Oct 28, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Finishes quest/m1/lite-timestamps-through.md (deleted here, with its links).
Problem
moq-dev/moq#6150 made receivers drop every timestamp read over moq-lite-05/06, because an untimed origin stamps send times there. As a result, a lite-06 reader of a timed feed (such as a stats feed) saw untimed frames. moq-dev/moq#6300 also served moq-transport tracks to moq-lite untimed unless the
ietfextension was negotiated. Maintainer decision (2026-10-25): pass the timestamps through instead.Approach
track::Infogets back a crate-privateuncheckedflag. The lite subscriber sets it on a lite-05/06 copy.TrackState::neighborsskips the moq-dev/moq#5803 rewind check for unchecked or moq-transport-provenance tracks. Frame, fetch, and datagram ingest keep the timestamps they read.Info::lite_timescaleandgroup::Consumer::lite_timescaleare gone. Every lite hop serves the track's own timescale and timestamps, including to TRACKS_ADD, lite-07 without the extension, and lite-05/06. An untimed track on lite-05/06 still carries its send time in milliseconds, as published.@moq/netmirrors this. The@internaltrack.Info.ietfbecomesunchecked. lite-05/06 TRACK_INFO maps to a timed copy withunchecked.frameDecoder/readFrameslose theirtimedflag, andliteTimescaleis gone.draft-lcurley-moq-lite(receiver text and changelog),draft-lcurley-moq-ietf(timestamps without the extension),doc/concept/moq-lite.md, anddoc/setup/upgrade.md.received_rewind.rsnow covers:.healthframe is untimed. A lite-06 browser publisher's untimed health track now reaches every reader with send times.Choices made without asking
track::Infoequality (RustPartialEq, JS resumecompatible) ignoresunchecked. It records how a copy arrived, not what it holds, so same-epoch copies over lite-06 and lite-07 still splice. Before this change they mismatched on timescale.Info.ietffield (@internal, unreleased) is renamed tounchecked. JS used it for nothing else.has_media_timestays as the version predicate. It now means "setunchecked", andresolves_anchorskeeps requiring it.Impact
uncheckedis crate-private). In JS, the@internaltrack.Info.ietfbecomes@internalunchecked.ietfextension) may be refused downstream. This cost was accepted in the quest.Alternatives
Infoequality derived. Simpler, but it would refuse a same-epoch lite-06 copy beside a lite-07 one.Checks
just cipasses.just test interop --allpasses: the full matrix ran, and the finish matrix was rerun after the health-assertion fix.Follow-ups
None found.
🤖 Generated with Claude Code
(Written by Claude Opus 5.5)