Skip to content

quest: record the time-addressing spike as implementation quests - #6872

Merged
kixelated merged 10 commits into
mainfrom
quest/m1/time-addressing/spike
Oct 26, 2026
Merged

kixelated merged 10 commits into
mainfrom
quest/m1/time-addressing/spike

Conversation

@kixelated

@kixelated kixelated commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Claims the time-addressing spike, stacked on #6800: prototype group addressing by start timestamp, measure what breaks, and record the cut as implementation quests.

Approach

Instead of rewriting moq-net's group identity, the prototype publishes groups whose ID is the start PTS in ticks (2 s GOPs at 1 kHz: 0, 2000, 4000, 6000) through today's code. Each scenario runs over lite-03, lite-06, lite-07-wip, moq-transport-14, and moq-transport-18, direct and through a relay, against a contiguous baseline. That isolates every place that assumes sequence + 1 is the next group. The prototype tests are in moq-dev/moq@ebdfd55 and removed again by the next commit, so nothing but quests merges.

Rerun on current main (after the stack, moq-dev/moq#6724, and moq-dev/moq#6715 landed):

Scenario Contiguous Sparse (start ticks)
Live, recv_group and ordered(), all versions, Rust and JS OK OK
History, Range::oldest and absolute ranges OK OK, also at 90 kHz
Max-age expiry OK OK
Fetch of a never-published ID n/a prompt NotFound
Warm relay hole fill, lite-06/07 1 FETCH 4 FETCH, also at 90 kHz
History and fills over moq-transport-18 2 FETCH 2 FETCH, also at 90 kHz
Relative(1).. on lite-07, direct or relayed [2, 3] [6000], then parks

On the spike's original base, before #6724 and #6715, a relay opened one FETCH per ID (540,000 for one 90 kHz hole), and Relative(1).. through a lite-07 relay returned the oldest groups even with contiguous IDs. Released relays still fill per ID.

Also confirmed in code:

  • A group's end is its newest frame's PTS, not its highest, in Rust (group.rs) and JS (group.ts).
  • Equal starts are accepted today (Neighbors::admit).
  • Published @moq/net decodes group IDs with u53, so starts must stay under 2^53. Microsecond epoch time fits until 2255.

So on main, the only sparse-ID breakage is Relative(n) doing ID arithmetic; the cut makes it count groups. The model quest still follows Subscribe ranges, whose Absolute(group) ends and drops it reworks onto times.

Decisions

  1. How should the cut be split into implementation quests?
    • ✅ Seven quests: Rust model, API, and legacy IDs [XL]; lite-07 wire [M]; moq-transport mapping [M]; @moq/net parity [L]; consumers [L]; bindings [M]; E2EE nonce [S]
    • Four larger quests (Rust, JS, consumers and bindings, E2EE)
    • One quest per crate
  2. Released relays fill a hole with one FETCH per integer ID. What about old relays?
    • ✅ Accept it (maintainer: "This was a lingering problem. The entire point of (multiple) ranges is to avoid this issue.")
    • Backport a fill fix to release
    • Revisit legacy IDs (contiguous via a per-track table)
  3. Should a finished group's own end set its reach?
    • ✅ Yes: its own end once finished, else its successor's start
    • No, successor only
  4. Which present-day bugs become quests? (multi-select)

Quests

  • quest/m1/time-addressing/spike.md deleted; its design moves into model.md, lite07.md, ietf.md, js.md, consumers.md, bindings.md, and e2ee.md.
  • model.md requires Subscribe ranges and lite-05/06 timestamp pass-through. Finalize lite-07 now requires the lite-07 wire and JS quests. The guide now requires the lite-07 wire quest and warns that mixed-version relays pay per-ID fills.
  • New quest/m1/group-end-pts.md.
  • ietf.md keeps END_OF_GROUP property-free after draft-14 (only draft-14 status objects may carry TIMESTAMP), per the review on quest: plan addressing groups by timestamp #6800.

Impact

  • No public API or wire change. Planning only; the recorded cut is a breaking API change and a lite-07-wip wire change.

Follow-ups

The seven implementation quests, plus the group-end bug quest, which can land now.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 6 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>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Codex <noreply@openai.com>
kixelated and others added 2 commits October 26, 2026 09:59
…for merge)

Publishes groups whose ID is the start PTS in ticks and reports delivery,
simulated time, and upstream FETCH counts against today's contiguous IDs.
Run with SPIKE_STRIDE=1 for the baseline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The spike published sparse group IDs (start ticks) through moq-net and
@moq/net. Live, ordered, history, and expiry work unchanged; hole fills cost
one FETCH per ID and Relative(n) does ID arithmetic, so the cut waits on
subscribe ranges and counts groups. Seven implementation quests replace the
spike, plus two present-day bugs it found.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title quest: prototype timestamp group addressing quest: record the time-addressing spike as implementation quests Oct 26, 2026
@kixelated
kixelated marked this pull request as ready for review October 26, 2026 17:14
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 26, 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 ✅ Completed 2026-10-26T18:27:26.712948Z f4cb186 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 9da6964807d40695b19ca9c64d18371fb1307191 against base 5755e4022a5975a9a2c34d053cab92b69185f1dc.

No actionable bugs found in this planning-only diff. The split follows model, wire, consumer, binding, and encryption boundaries; requiring range-based fills before sparse IDs is justified, and retaining no prototype code keeps this PR focused. The B-frame-tail and relative-relay bugs are recorded as outstanding implementation work, not claimed fixed here.

Verification: static review of the quest changes, linked prototype, and relevant Rust/JS timestamp handling. I did not run the spike, tests, or draft/quest validation.

(Written by OpenAI)

A status object may not carry properties on draft-15 and later, so the
group's end time needs a negotiated extension to cross moq-transport.

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 e1d0c9f64132103ca993d5da8ec0017a2a465d74, the two-file delta since my previous review; base remains 5755e4022a5975a9a2c34d053cab92b69185f1dc.

No actionable bugs found. Keeping END_OF_GROUP property-free matches status_has_properties/check_status in rs/moq-net/src/ietf/object.rs: nonempty status properties after draft-14 would terminate the session. Making exact end-time transport conditional on a negotiated extension avoids that failure without adding an unnecessary compatibility mechanism now. The earlier review had no findings; the separately recorded implementation bugs remain outstanding.

Verification: static review of the changed plans and current status-property validation only. No tests or draft/quest validation run.

(Written by OpenAI)

Base automatically changed from quest/plan-time-addressing to main October 26, 2026 18:18
@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 3 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: e0d42396-561d-4fd5-8f7c-4577be870260
Commits

Reviewing files that changed from the base of the PR and between 6b29067 and f4cb186.

Files selected for processing: 14
  • quest/m1/README.md
  • quest/m1/group-end-pts.md
  • quest/m1/lite07-finalize.md
  • quest/m1/subscribe-ranges/README.md
  • quest/m1/time-addressing/README.md
  • quest/m1/time-addressing/bindings.md
  • quest/m1/time-addressing/consumers.md
  • quest/m1/time-addressing/e2ee.md
  • quest/m1/time-addressing/guide.md
  • quest/m1/time-addressing/ietf.md
  • quest/m1/time-addressing/js.md
  • quest/m1/time-addressing/lite07.md
  • quest/m1/time-addressing/model.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.

main landed the stack beneath this PR, per-run fills (#6724), lite-07
ranges (#6715), and name reuse (#6780). Rerunning the prototype on main,
sparse fills now cost a constant handful of FETCHes and Relative(n)
through a relay is fixed, so the relative-relay quest is dropped and the
model's evidence is updated.

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 f4cb186424e51028de904f9817d99bbb93e96f2b against current base 6b290670931cc4e73deea3e417b33386a453baae, isolating the planning delta from merged upstream changes.

No actionable bugs found. Dropping the superseded fill/relative-relay quests is justified by merged #6724/#6715; the remaining sparse Relative(n) arithmetic is still visible in subscription/window.rs and stays assigned to the model quest. The draft-14-only TIMESTAMP exception matches current status-property validation. This narrows follow-up work rather than adding duplicate mechanisms. My earlier reviews had no findings; the B-frame-end work remains outstanding.

Verification: static review of the changed plans, merged PRs, and relevant current fill/range/status paths. I did not rerun the spike, tests, or draft/quest validation.

(Written by OpenAI)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Landing f4cb186. Since the last summary: merged main after the stack landed, reran the prototype on it (#6724 and #6715 already fixed sparse fills and the relayed Relative(n) bug, so that quest is dropped), and kept END_OF_GROUP property-free after draft-14. Decisions are in the description; the maintainer kept the full cut ahead of lite-07.

(Written by Claude Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit 5516a40 Oct 26, 2026
12 checks passed
@kixelated
kixelated deleted the quest/m1/time-addressing/spike branch October 26, 2026 22:42
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