Repository navigation
fix(mux): include timestamp rewind boundary details - #4725
Conversation
Co-Authored-By: GPT-6 <noreply@openai.com>
|
Completed the timestamp rewind diagnostics quest. The FLAC cut-per-frame regression reproduced the missing timestamp values before the fix; Nix Public API: breaking Rust change, so this draft targets Recommended next action: review this draft PR, then run (Written by GPT-6) |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 08a1151
No actionable introduced bugs found. The producer (rs/moq-mux/src/container/producer.rs:411–422) and both consumer paths (consumer.rs:238–241,495–498) preserve their previous comparisons and attach the exact timestamp and bound used for rejection. Reporting the previous group’s start is appropriate for dev’s overlapping-group semantics. The typed fields retain the original timestamps, while Display consistently converts both to microseconds; the existing FFI error conversion preserves that message.
Direction is sound and focused: enrich the error at its source without changing grouping or wire behavior. The public struct change correctly targets dev. The FLAC cut-per-frame regression exercises a one-microsecond rewind at a large timestamp, and the strengthened consumer tests check both fields and messages. Keeping #4635 open is correct because this improves diagnosis without reproducing its original failure.
Verification: static review of the complete diff, producer/consumer state, regression coverage, error conversions, and the original issue. Exact-head Check and Platform CI were still running when inspected. I did not run local checks or reproduce #4635; the reported local test results are author-provided.
(Written by review (OpenAI))
|
CI investigation: the failed export assertion is an unrelated baseline timing race.
This diagnostics PR remains blocked by CI; no flaky rerun was requested. Recommended separate fix: measure from before closing publisher stdin, which triggers the broadcast finish, so publisher shutdown cannot consume the asserted linger interval. Keep the current linger and assertion duration. No change to this PR's diagnostics scope. (Written by GPT-6) |
Code review (head
|
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (7)
💤 Files with no reviewable changes (2)
Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 0 remain after this review. Walkthrough
Priority: ➖ Normal Merge Risk: ⚪ Minimal · up to The rewind errors now provide the refused timestamp and comparison floor. No actionable issue identified here prevents merging. Security Architecture ReviewSecurity architecture risk: ⚪ Minimal · up to The reviewed change improves diagnostics without changing timestamp rejection rules or introducing new access or authority. The Rust API change is intentional; callers constructing or matching the former unit struct must update. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
# Conflicts: # quest/m1/README.md # quest/m1/timestamp-rewind-detail.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Maintainer decision (recorded during Q: Field naming for the bound
Context confirmed: MoQ does not support rewinds; this error refuses them, and the detail exists so reports like #4635 diagnose themselves. Applied in 48b2cad. (Written by Claude Opus 5.5) |
Code review (head
|
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 48b2cad
No actionable introduced bugs found in the update since 08a1151. After separating inherited main changes, the substantive API delta is TimestampRewind::edge becoming floor (rs/moq-mux/src/container/mod.rs:126-138). Display, producer construction, both consumer paths, tests, and documentation use the new field consistently; the rejected timestamps, comparisons, and error text remain unchanged.
Direction remains sound: floor matches the bound's role without adding complexity. The breaking struct change belongs on the current main trunk; wire behavior is unchanged. This independently agrees with the existing Grok confirmation, and #4635's underlying sequence remains unverified.
Verification: static comparison of the previous reviewed patch, current PR diff, and rename commit. Exact-head Android CI succeeded; Check and Platform were still running when inspected. No local tests were run.
(Written by review (OpenAI))
Merge summary
Public API: breaking, (Written by Claude Opus 5.5) |
The T-STD questline (#4640) landed on main, so this branch now targets main. - Harness files merged against the questline head the branch started from. - Quests: delay.md and byte-schedule.md are done and deleted here; references repointed, and the T-STD README records t0ms's CNN grading. - #4577's per-stream export stats ported onto the slot schedule: a unit counts once the slot carrying its first packet is returned. Export::stats returns ts::stats::Export (rows plus the release clock's dropped, drift and out_of_tolerance), with From<stats::Export> for ts::Stats for stats::Log; ts::export is private again. moq export ts logs the release counters. - #4652 skips a stalled group once the next group's start falls the budget behind, so the export's sources skip at half the delay: with the whole delay the group after a skip arrived at its deadline. - The jitter buffer waits only for audio, video and PES tracks, not sparse sections. - At end of stream a past-due unit ignores its decoder buffer, so an oversized last unit cannot hold the stream open. - Tests: a timeline restarting at zero fails the export (#4725); main's new export tests moved to with_delay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Problem
A refused timestamp rewind names neither the frame timestamp nor the bound it crossed, leaving reports such as #4635 without enough detail to diagnose. MoQ does not support rewinds; this error refuses them, so the message should explain itself.
Approach
Carry the refused timestamp and the floor (the previous group's start, the lowest allowed timestamp) in every producer and consumer
TimestampRewind. Display both in microseconds without changing the group-start monotonicity rule. Cover a FLACimport::Trackcut per frame with a one-microsecond backward step and both consumer error paths; remove the completed quest.Impact
main:container::TimestampRewindchanges from a unit struct to a struct with publictimestampandfloorfields, bothmoq_net::Timestamp. The namefloormatches the producer's and consumer's existing internal bound.Alternatives
edgeorgroup_start:floornames its role and matches existing code.Validation
The new FLAC regression failed with the old diagnostic, then passed with the fix. Nix
just checkpasses.Follow-ups
moq-cli::export a_clean_finish_exits_zero_once_the_linger_expiresis a pre-existing timing flake (measures the linger after publisher exit); unrelated to this PR.🤖 Generated with Claude Code
(Written by GPT-6, updated by Claude Opus 5.5)