Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`track::Info::default()`, `create_track(name, None)`, and `accept(None)` now leave `timescale` as `None`, matching `@moq/net`. `Timescale` loses `Default`; the lite encoder and datagram decoder name `Timescale::MILLI` for an untimed track's send times, as does moq-audio's quantum floor. Every publisher that stamps frames declares milliseconds explicitly: the hang catalog, MSF and timeline tracks, TS SI tables, moq-boy status, moq-room chat, moq-stats, moq-bench, moq-c and moq-ffi data tracks, and the examples. Tests that write timestamps use a millisecond track. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Quest outcome: implemented Open decisions:
Issues found along the way: the TS SI tracks ( (Written by Claude Opus 5.5) |
…-default Co-authored-by: Grok 4.7 <noreply@x.ai>
An undeclared timescale is untimed, and a timestamp on that track is TimestampMismatch. These session tests and benches are not untimed-track coverage, so the track declares Timescale::MILLI, which None used to mean. Co-Authored-By: Grok 4.7 <noreply@x.ai>
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.
Problem
moq_net::track::Info::default()(and socreate_track(name, None)andaccept(None)) silently gave a track a millisecond timescale, while@moq/nettreats an omitted timescale as untimed (#4968). The publish-timestamp and lite-07 untimed quests need each track to say whether it is timed before publishers stop inventing timestamps.Approach
moq-net: removedimpl Default for Timescale;Info::default()now hastimescale: None. The lite encoder (TRACK_INFO, frame and datagram send times) and the lite datagram/fetch decoders nameTimescale::MILLIfor an untimed track, as does moq-audio's decode quantum floor.Catalog::default_track_info, also used for MSF now), moq-mux timeline, TS SI tables (ts/si.rs, found by the moq-cli import/export tests), moq-boy status, moq-room chat, moq-stats JSON tracks, moq-bench, moq-cdata_track, moq-ffi json/flate tracks, the moq-tokio and moq-json examples, and the moq-mux doc examples. Media tracks already pin their scale (hang::container::track_info, moq-c/moq-ffi raw tracks at microseconds).Nonenow use a millisecond track (Info::timed()inside moq-net, a localtimed()helper elsewhere), preserving what they tested before. New regression testan_undeclared_timescale_is_untimed;broadcast_moq_lite_05_default_timescalebecamebroadcast_moq_lite_05_untimed_track.doc/setup/upgrade.md(Unreleased),doc/lib/js/net.md, rustdoc onInfo,Info::with_timescale,create_track,hang::container::track_info. Quest file deleted and references updated;publish-timestampandlite-untimedare now unblocked.create_track(name, None)now declareTimescale::MILLI. That includes the io_uring session and WebTransport tests, the relay io_uring runtime tests, and the benches and loom tests that write timestamps. Tracks that never stamp a frame stay untimed. Mergedorigin/main(through the C++ package landing).Decision
CI failed because
lite_session_over_the_workerwritesTimestamp::ZEROon a track whose timescale is now untimed.TimestampMismatchrefusal. These are transport and bench paths, not untimed-track tests, so the track gets an explicit millisecond timescale, whichNoneused to mean.Left for the maintainer, unchanged:
with_timescalecall; no new public API.rs/moq-mux/AGENTS.mdline. Agent files stay untouched unless a maintainer asks.Impact
moq_net::Timescaleno longer implementsDefault.track::Info::default(),broadcast::Producer::create_track(name, None), andtrack::Request::accept(None)create an untimed track; writing a timestamp to it fails withTimestampMismatch. Declare one withInfo::default().with_timescale(Timescale::MILLI).Alternatives
track::Info::timed(scale)or aTimescale-to-Infoconversion, so timed publishers don't writeInfo::default().with_timescale(...). Not added: no consumer needed new API to land this, and it can come with the publish-timestamp quest if wanted.Timestamp::ZEROas a placeholder to write untimed frames instead. Rejected: many depend on timestamps (expiry, retention), and a timed track keeps each test's original meaning.Follow-ups
rs/moq-mux/AGENTS.mdstill saysInfo::default()is milliseconds; left alone since agent files need maintainer prompting.Tested
cargo nextest run --locked -p moq-uring --no-fail-fast --test session --test web -j 1: 13 passed, includinglite_session_over_the_worker.cargo nextest run --locked -p moq-relay --features io-uring --no-fail-fast --test runtime_uring -j 1: 6 passed.quest check: 418 documents ok, after mergingorigin/main.just check: passed on the timestamp fixes (5615 + 458 + 157 + 97 Rust tests, JS, Python). The laterorigin/mainmerge did not touch those writers.(Written by Grok 4.7)