Skip to content

fix(qmux): run the WebSocket keep-alive on moq-clock and retire the controlled-time epic - #6637

Merged
kixelated merged 2 commits into
mainfrom
quest/m1/time/README
Oct 24, 2026
Merged

kixelated merged 2 commits into
mainfrom
quest/m1/time/README

Conversation

@kixelated

@kixelated kixelated commented Oct 24, 2026 •

Copy link
Copy Markdown
Collaborator

Finishes quest/m1/time/README.md, the Controlled time epic.

What remained

The epic listed only "move the decisions the m2 quests still cite, then retire". An audit of main (a3c633df73) against its Goal ("every MoQ crate reads time and arms timers only through moq-clock") found one production gap: qmux moved in tree in #6231 after the crate-wide migration in #6135, so its WebSocket keep-alive still armed tokio::time timers directly, and it had no clock lint. Every other crate has the clippy.toml ratchet, and the biome override covers every JS package. kio reads no time (and moq-clock depends on it); test-env is a harness.

Changes

  • qmux::ws keep-alive (PingState, DeadlineState) runs on moq_clock::interval_at, Sleep, and now(). The first ping is still one interval out; the deadline no longer needs a Pin<Box<_>> since moq_clock::Sleep is Unpin.
  • rs/qmux/clippy.toml adds the same ratchet as moq-tokio. qmux's tests and interop examples move onto moq_clock::{sleep, timeout, now} (all on paused tokio, which moq-clock reads), so the crate needs no test opt-out.
  • Quest tree: the epic is deleted with every link to it. Decisions the m2 quests still lean on moved into them: the test rules, ratchet, and third-party std clock decision into time-test-sweep; the Rust/JS clock agreement into rs2ts; the Wall/Instant versus media timestamp distinction into binding-timestamps. runtime-trait and time-test-sweep are now unblocked.

Public API: none (qmux internals and tests only). Wire: none.

Choices made without asking

  • Migrated qmux here instead of leaving it to the m2 sweep, since the keep-alive is production code the m1 Goal covers. Converted qmux's tests too rather than adding expect(clippy::disallowed_methods) opt-outs, which was smaller than suppressing them.

Checks

  • cargo clippy -p qmux@0.7.0 --all-targets --all-features -- -D warnings: pass.
  • cargo test -p qmux@0.7.0 --all-features: pass (58 tests, keep-alive tests included).
  • just check: rs lint (all qmux dependents), quest, and drill pass. The flake module failed locally only because the sandbox forbids unshare for the runner VM image build; CI runs it.
  • quest check --base origin/main: pass.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 2 commits October 24, 2026 07:39
Quest-Claim: c8984026bdce8862
…ontrolled-time epic

qmux moved in tree after the crate-wide moq-clock migration, so its WebSocket
keep-alive still armed tokio timers directly and it had no clock lint. Move the
keep-alive, its tests, and the interop examples onto moq-clock, and add the
per-crate clippy.toml ratchet.

With that, every child of the controlled-time epic has landed. Move the
decisions the m2 quests still cite into them and delete the epic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title Controlled time fix(qmux): run the WebSocket keep-alive on moq-clock and retire the controlled-time epic Oct 24, 2026
@kixelated
kixelated marked this pull request as ready for review October 24, 2026 14:48
@coderabbitai

coderabbitai Bot commented Oct 24, 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 4 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: 910f7efe-b2a9-4813-ac3d-36ba4cbba64f
Commits

Reviewing files that changed from the base of the PR and between a3c633d and 5e327ac.

Files selected for processing: 15
  • quest/m1/README.md
  • quest/m1/binding-timestamps.md
  • quest/m1/test-flakes-2/README.md
  • quest/m1/time/README.md
  • quest/m2/rs2ts/README.md
  • quest/m2/runtime-trait.md
  • quest/m2/sim-seed.md
  • quest/m2/time-test-sweep.md
  • rs/qmux/clippy.toml
  • rs/qmux/examples/common/mod.rs
  • rs/qmux/examples/interop-client.rs
  • rs/qmux/examples/interop-server.rs
  • rs/qmux/src/session/tests.rs
  • rs/qmux/src/transport.rs
  • rs/qmux/src/ws.rs
  • 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.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 24, 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-24T14:49:10.875191Z 5e327ac Draft marked ready
ℹ️ 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

Copy link
Copy Markdown
Collaborator Author

Merge summary: Codex reviewed head 5e327ac4ba5de0a1ac2728591f5c211099a6a89e with no findings. The PR-level checks pass, and quest check --base origin/main --branch quest/m1/time/README passes on this head. The Check job (flake included) runs only in the merge queue, so the queue gates it. No changes were made during merge. The PR moves the qmux WebSocket keep-alive and tests onto moq-clock, adds the qmux clippy clock ratchet, and retires the Controlled time epic, with its remaining decisions moved into the m2 quests.

(Written by Claude Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 24, 2026
Merged via the queue into main with commit a51125f Oct 24, 2026
11 checks passed
@kixelated
kixelated deleted the quest/m1/time/README branch October 24, 2026 16:05
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