Repository navigation
fix(net): a truncated spliced group fails instead of ending cleanly - #4689
Conversation
A spliced group whose continuation can never arrive (pruned, or the successor skip-declared it) now fails finished() and the read cursor with the dead route's error, or Dropped when pruned, instead of reporting a clean end at the seam. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Decisions confirmed by the maintainer:
This lands before #4491 (resume-latest), which will need to merge (Written by Claude Opus 5.5) |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed 61f8304. No actionable findings.
Direction: making the no-route outcome uniformly fail is simpler and keeps finished(), read_frame(), and next_frame() consistent. The retained unbounded-copy path still provides clean completion; a lost continuation uses the recorded route error or Dropped. The read-path extension is necessary to cover an already-drained bounded copy, and the new regression exercises that case. The existing moq-mux read-error/poll_aborted path handles this outcome as a skipped group.
Verification: inspected the full diff, route resolution/pruning/latching, group cursor contracts, nearby regressions, and moq-mux consumers. I did not run builds or tests; Rust/Nix tooling is unavailable here. The reported local just check pass is not independently verified, CI is still queued/running, and there is no dedicated spliced-group moq-mux regression. Preserve these semantics when resolving the documented overlap with #4491.
|
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 configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (3)
💤 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; 1 remain after this review. Walkthrough
Priority: ➖ Normal Merge Risk: ⚪ Minimal · up to Unavailable continuations now fail instead of appearing complete, with regression tests covering pruned and skipped seams. No merge-blocking issue is established; merge after normal checks pass. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to Truncated groups now fail explicitly rather than appearing complete. The inspected recovery paths remain within the subscribed track, and no new security vulnerability was established. Additional continuation-subscription behavior and incomplete baseline coverage leave limited uncertainty. 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/finished-truncated.md # rs/moq-net/src/model/resume.rs
|
MERGE — reviewed Truncated spliced groups now fail ( BlockingNone. Non-blocking
Notes
This is an automated review, not the maintainer's decision |
|
Merge summary: a spliced group whose continuation can never arrive now fails #4491 landed first, so The automated review on 61f8304 had no findings. Only the merge resolution has changed since then. (Written by Claude Opus 5.5) |
Completes
/quest/m1/finished-truncated.md.A spliced group whose continuation can never arrive (its segment was pruned, or the successor skip-declared the group) used to report a clean end at the seam. Now it fails with the error the dead route recorded, or
Error::Droppedwhen the seam's segment was pruned away and no route is left to blame.Changes
poll_finished's no-route arm returns the loss instead ofOk(cap), and its doc comment now saysfinished()answers for the original group.Ok(cap)fromfinished(), andread_frame()/next_frame()returned a cleanNone. Both went throughgive_up()'sOk(false)arm. No test exercises a real clean end through that arm (the full suite passes without it), because a group only ends cleanly through its unbounded tail copy. Sogive_up()now always returns an error, andpoll_currentreturnsResult<()>instead ofResult<bool>. The no-route arm inpoll_finishedreusesgive_up(), so the warning is logged there too.finished_fails_*and now expectDroppedandNotFound. A new test,finished_fails_for_a_drained_pruned_bounded_group, covers the drained path forfinished,read_frameandnext_frame. It returnedOk(2)/Ok(None)before this fix.moq-mux
container::consumeralready treats a read error as a skip whenpoll_finishederrors (poll_aborted). A truncated group now gets that treatment: it is dropped as aborted. Before, it was either read as a short clean group or, in the min/max timestamp paths, turned into aDecode(Short)error. There is no moq-mux test for a spliced group yet.Public API / wire
group::Consumer::finished(),read_frame()andnext_frame()on a resumed group return an error where a truncated group used to end cleanly. No signatures change.Overlap
#4491 (resume-latest) landed first;
mainis merged in. The no-route arm inpoll_finishednow releases the replacement demand (waiting = None) before failing withgive_up().just checkpasses.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code