Skip to content

quest: plan addressing groups by timestamp - #6800

Merged
kixelated merged 15 commits into
mainfrom
quest/plan-time-addressing
Oct 26, 2026
Merged

kixelated merged 15 commits into
mainfrom
quest/plan-time-addressing

Conversation

@kixelated

@kixelated kixelated commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

Plans an m1 epic, Address groups by timestamp:

  • [L] Spike (quest/m1/time-addressing/spike.md): a throwaway Rust and JS prototype that drops group sequence numbers from the moq-net API and the lite-07 wire, addressing groups by their start timestamp. It measures what breaks, records the design in implementation quests, and deletes itself. It gates Finalize moq-lite-07.
  • [S] Guide (quest/m1/time-addressing/guide.md): a page on seek by time, group ends, restarts, strictly increasing starts, and legacy IDs. It is blocked on the spike.

It also links Subscribe ranges, which keeps going in parallel, notes that the cut removes the sequence half of the name-reuse fix that landed in #6780, and ranks the epic right after Resume checked against a model.

Was stacked on #6798, which has merged; main is merged in.

Public API: none. Wire: none.

Decisions

Goal

  • Groups addressed by timestamp in the API only
  • ✅ API and wire
  • Goal as written (an API change, with the wire left to later rounds)

Deliverable

  • ✅ Design + prototype
  • Design doc only
  • Implement it

lite-07

  • ✅ Gate the cut
  • Target lite-08
  • Decide after the spike

Compat (multi-select)

  • ✅ Old subscribers
  • ✅ Old publishers
  • ✅ Old JS clients

Restart

  • Wall-clock anchor
  • ✅ Keep new epoch
  • Caller's choice

Untimed tracks

  • ✅ All tracks timed
  • Live-only
  • Spike decides

Gaps

  • ✅ Previous-start link in GROUP
  • Time-range drops
  • Spike decides

Legacy IDs

  • ✅ ID = start ticks in the track's timescale
  • Per-session counter

Subscribe ranges children

  • Block 3 on the spike
  • Block all four
  • ✅ Proceed in parallel

Name reuse PR (#6780)

  • ✅ Let it land
  • Abandon it

Untimed ingest

  • ✅ Group ID as time
  • Arrival time

moq-transport rewind

  • ✅ Refuse loudly
  • Drop the group

Rank

  • ✅ Near the top
  • Above Subscribe ranges
  • Just before lite-07

Prototype

  • Rust moq-net
  • ✅ Rust and JS

Docs

  • Inline only
  • ✅ Add a guide quest

Size

  • ✅ [L]
  • [M]

Ties between group starts

  • ✅ Forbid ties
  • Tie-break index
  • Later supersedes

GROUP_END with an exclusive end timestamp

  • ✅ Yes, in moq-net, replacing hang's empty-frame marker
  • Optional field

Bare FIN

  • ✅ Maintainer's answer: finish(end) sends GROUP_END (whole), close() sends a bare FIN (incomplete, but nothing dropped), and abort(err) resets
  • Incomplete group
  • Protocol error

Discontinuity markers

  • ✅ Remove them
  • Keep as a flag

Legacy end markers

  • Synthesize markers
  • ✅ Drop them

moq-transport object IDs

  • ✅ Maintainer's answer: Object ID stays +1 per frame, and PTS rides in the TIMESTAMP property
  • Index + TIMESTAMP
  • Delta when monotonic
  • Delta from DTS

Which property to drop

  • ✅ Prior Object ID Gap (the previous-start link stays in Prior Group ID Gap)
  • Both prior gaps

The maintainer first proposed Group ID as the base timestamp and Object ID as the delta. That was dropped because B-frames run backwards in decode order. The mapping stays LOC compatible: TIMESTAMP and TIMESCALE are the MOQ Properties shared with draft-ietf-moq-loc.

The maintainer added: moq-transport may use extensions, but it must still work without them, and so must old lite versions.

From review: only draft-14 lets a status object carry properties, so END_OF_GROUP carries the end in TIMESTAMP only on draft-14 and stays bare on draft-15+ (rs/moq-net/src/ietf/object.rs refuses properties there), losing end precision unless an extension carries it.

🤖 Generated with Claude Code

(Written by Claude Opus 5.5)

kixelated and others added 4 commits October 25, 2026 10:11
Seven parallel audits checked every quest against main and open PRs.
Stale plans, broken references, and missing links are corrected, and the
maintainer's answers to the open planning decisions are recorded.

New quests: resume checked against a model, transport frame offsets,
demand is wanted everywhere, and two Nightly fixes. The generated C line
moves to m2; the hand-written moq-c ships at the cut with parity.
rs/moq-net/AGENTS.md drops the partial-groups rule, as the maintainer asked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… transport

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…anning-700add

# Conflicts:
#	quest/m1/README.md
Add an m1 epic for a spike that replaces group sequence numbers with group
start timestamps in the moq-net API and the lite-07 wire, plus a guide.
The spike gates the lite-07 cut.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review 🔄 Running since 2026-10-26T18:09:00.240319Z 90dd451 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: abf0437

No actionable bugs found in this planning change. The direction is coherent: prototype timestamp addressing in both implementations before committing the lite-07 wire, then gate the cut on concrete implementation quests. Explicit group completion and previous-start links address information otherwise lost when sequence numbers disappear.

Verification: static review covered all seven changed documents and relevant timestamp, range, lifecycle, mux-marker, and E2EE contracts. Compatibility with legacy send-time timestamps, sparse IDs, completion signaling, and encryption identities remains for the spike to demonstrate; no prototype, interoperability tests, or builds were run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: 5755e40

P2 — Don't attach TIMESTAMP to an ordinary END_OF_GROUP status object (quest/m1/time-addressing/spike.md:66–67). The new mapping requires the exclusive end timestamp on END_OF_GROUP, but the existing moq-transport contract forbids status-object properties after draft-14: rs/moq-net/src/ietf/object.rs::status_has_properties/check_status rejects them with ProtocolViolation. Implementing this literally would break completion against existing draft-15+ peers instead of merely losing end precision. Specify a negotiated compatible end-time representation; without it, send the ordinary property-free END_OF_GROUP and explicitly degrade end precision.

Keeping sequential object IDs and carrying PTS separately is otherwise the simpler direction for B-frames and open-GOP leading frames.

Verification: static inspection of the new transport-mapping design since abf0437 and existing property codec/draft. No prototype or interoperability tests run.

kixelated and others added 4 commits October 25, 2026 13:16
…anning-700add

# Conflicts:
#	quest/m1/README.md
#	quest/m1/api-audit/README.md
#	quest/m1/c/README.md
#	quest/m1/ietf-request-cancel.md
…anning-700add

# Conflicts:
#	quest/m1/README.md
#	quest/m1/release-audit/README.md
#	quest/m1/unbounded-groups/front-eviction.md
…anning-700add

Align quests with #6703 (feature-shapes done) and #6744 (broadcast::Demand
and net-exports gone); keep moq-net AGENTS.md's partial-groups line removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…anning-700add

Record the 2026-10-25 answers in the quests #6707 and #6790 landed:
datagram size, description-less AAC, catalog parity, MKV/FLV codecs,
partial groups, drop finality, and resume. decode-start stays under the
hand-written m1/c line, and api-audit/requests renames moq-c too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated and others added 2 commits October 25, 2026 16:49
…anning-700add

Drop the finished shallow-base quest (#6708) from the nightly list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…anning-700add

Carry #6793's GLib C naming into the moved m2/c line, keep the hand-written
m1/c plan, drop links to the finished name-reuse quest (#6780), and note
that the JS publication mirror (#6795) merged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated and others added 3 commits October 26, 2026 09:46
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…anning-700add

# Conflicts:
#	quest/m0/nightly/README.md
#	quest/m1/README.md
#	quest/m1/unbounded-groups/front-eviction.md
#	quest/m2/release/README.md
…dd' into quest/plan-time-addressing

# Conflicts:
#	quest/m1/name-reuse.md
@kixelated

Copy link
Copy Markdown
Collaborator Author

The P2 on END_OF_GROUP is right: check_status refuses properties on a status object after draft-14. #6872, which replaces spike.md, now maps GROUP_END to a property-free END_OF_GROUP in quest/m1/time-addressing/ietf.md. The end time needs a negotiated extension to cross moq-transport, or it is lost.

(Written by Claude Opus 5.5)

Base automatically changed from claude/quest-audit-planning-700add to main October 26, 2026 18:06
@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 20 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 4b0190b4-ba31-4b21-ac9b-a79b3ecb8855
Commits

Reviewing files that changed from the base of the PR and between 9c10618 and 90dd451.

Files selected for processing: 6
  • quest/m1/README.md
  • quest/m1/lite07-finalize.md
  • quest/m1/subscribe-ranges/README.md
  • quest/m1/time-addressing/README.md
  • quest/m1/time-addressing/guide.md
  • quest/m1/time-addressing/spike.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…ssing

# Conflicts:
#	quest/m1/README.md
#	quest/m1/api-audit/README.md
#	quest/m1/cut-audit/catalog-parity.md
#	quest/m1/resume-model-test.md
#	quest/m2/moqsrc-opus-surround.md
#	quest/m2/release/c-retire.md

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: 90dd451

The previous P2 is fixed in this plan: spike.md now keeps END_OF_GROUP property-free after draft-14 and explicitly loses end precision without an extension, matching ietf/object.rs::check_status. No new actionable findings.

The direction remains sound: prove timestamp addressing in Rust and JS before fixing the lite-07 wire. Keeping sequential object IDs with separate PTS is simpler and handles B-frame reordering without inventing a second addressing scheme.

Verification: static review of the six-file PR diff against current main, comparison with the last-reviewed plan at 5755e40, and the current status-property codec. No prototype, builds, or interoperability tests run; legacy playback compatibility remains for the spike to demonstrate.

(Written by OpenAI)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Landing summary for 90dd451:

No decisions are left open.

(Written by Claude Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 26, 2026
@kixelated
kixelated removed this pull request from the merge queue due to a manual request Oct 26, 2026
@kixelated
kixelated added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit 6b29067 Oct 26, 2026
11 checks passed
@kixelated
kixelated deleted the quest/plan-time-addressing branch October 26, 2026 18:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant