Repository navigation
Conversation
Collaborator
Author
|
Outcome of
(Written by Claude Opus 5.5) |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lite-07 SUBSCRIBE and SUBSCRIBE_UPDATE carry a Live flag beside an optional floor. The model mirrors it: Subscription { live, floor } in Rust and @moq/net, merged as OR and min. Older wires fold live into the floor at the codec, and a relay filters locally.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A resolved draft-20 start is a floor, including Relative(1) at frame 0 of the current group. It is not live: live with the serving budget asks a relay for the retained window. Unfiltered stays a floor at {0, 0}.
The origin's query subscription was a snapshot of demand at splice time, so a later narrowing left live set on the source. It now follows the readers' aggregate.
kixelated
force-pushed
the
quest/m1/lite-live
branch
from
October 9, 2026 20:54
bae3042 to
19b1a96
Compare
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
A floor and "no floor" were one field. lite-06
Group Start0 meant no floor, and the model kept a separateNonemeaning "the latest group". Merging an explicit floor withNoneeither dropped the late group the floor asked for (main) or starved the floorless subscriber until the floor's group existed (#5000), which on a quiet catalog track is never.Completes
quest/m1/lite-live.md(deleted here). #5000 (quest/m1/lite-late-lower-group) rebases onto this and drops its own floor-combining change.Approach
track::Subscriptionhaslive: bool(defaulttrue) andfloor: Option<Position>. Merging takes the OR ofliveand the minimum floor, whereNoneis neutral.livelowers the floor to frame 0 of the oldest unexpired group, or to the latest group on an untimed track. With neither field set, the subscription asks for nothing, the same as an empty range.with_groups(2..)sets a floor only, andwith_groups(..)setsliveonly.Live (8)andFloor (8).[Group Start (i)]and[Frame Start (i)]follow only whenFlooris 1. With neither set, the message is a protocol violation.(0, 0)isliveand any other pair is a floor. Before lite-06, an absentGroup Startislive. A merged{live, floor}is sent as an explicit group 0 (lite-03 to 06), or as an Absolute start at {0, 0} on moq-transport, and the relay filters locally. Pre-06 now encodes an explicit group 0 as 1 instead of folding it to absent.live, the cursor drops back to the live edge. The "start past largest" SUBSCRIBE_OK answer applies only to a floor withoutlive. A floor'sFrame Startapplies only while the floor is where delivery starts.Relative(1)floors at frame 0 of the current group (Largest.Group). Unfiltered stays a floor at {0, 0}. A relative filter before any group exists has no start, so it stays the live edge. The objects this publisher sends forRelative(1)are still the current group. Thesubscribe_joinFILL ofRelative(1)is unchanged.Relative(1), reaches the source instead of leaving the query-time snapshot in the aggregate.model/resume.rs) ask only for what follows the newest group they handed out. They keeplivewhen the reader's own floor sits above that group.Tests with mocked time:
rs/moq-net/tests/live_floor.rscovers the starvation case, a bufferedlivebeside a floor, frame floors, older lite encodings, and moq-transport{live, floor}.relative_one_floors_demand_at_the_current_groupand the JSrelative 1 floors demand at the current grouptest assertlive: falseand a floor at the current group. The unfiltered tests assert a floor at group 0.Impact
This round
Subscription.liveandfloorkeep the shapes in the whole-PR list below.Relative(1)setslivefalse and a floor at frame 0 of the current group, so a relay's upstream demand is that floor. Unfiltered stays a floor at {0, 0} withlivefalse. lite-07Live/Floorand the older-draft codecs are unchanged from the rest of this PR.Whole PR
Subscription::startis renamedfloor, andwith_startis renamedwith_floor.Subscription::livefield andwith_live.with_groupsnow setslivetoo..with_live(false). Every in-repo caller is updated.Subscription.live?: boolean, which defaults totruewithoutgroups.startand tofalsewith one, so existing floors keep their meaning.group_startis a floor alone, and an absent one islive.Live (8)andFloor (8).Group StartandFrame Startbecome optional and move ahead ofGroup End.Relative(1)SUBSCRIBE is a floor at frame 0 of the current group. Encoding of both filters is unchanged. Earlier drafts are unchanged.LiveandFloor, how SUBSCRIBE_UPDATE clears either, and the lite-07 changelog entry. It also fixes the stale "Group Startis offset by 1" note.doc/concept/moq-lite.mdcoversliveand a floor, and drops the retiredOrderknob.Alternatives
Liveare separate and that "neither" is refused, and two bytes matchHidden (8).startas the field name.livecan start delivery below the floor, sofloornames the role. The quest usedfloortoo.Settled decisions
live.Relative(1). The quest sentence that called itliveis overridden.livewith the serving budget is the retained window.Relative(1)tolive.Follow-ups
{live, floor}fold is an absolute joining FETCH from group 0. The publisher refuses it (one group per FETCH), so only the live edge arrives. The floor's backlog is lost. That is outside this PR.livethrough moq-ffi, moq-c, and the bindings, or leave it to subscribe ranges.Subscriptionhas no frame floor (groups.startis group-level), unlike Rust.just checkagainstorigin/mainpasses on this head.(Written by Grok 4.7)