Repository navigation
feat!: replace moq --hop with --epoch and stop stamping unnamed publishers - #4969
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Identity is the epoch's job now, so a route that names no publisher keeps its anonymous 0 and nothing goes in front of it. Removes Hops::stamp, the per-session stamp in both subscribers, stampHops in js/net, and the legacy_reconnect test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
moq announces under --epoch (a UUIDv7) when given, so a redundant pair shares one, and mints a fresh epoch per run otherwise. --hop and MOQ_HOP are refused with a migration to --epoch; the hidden --origin alias is gone. --cluster-id no longer falls back to --hop, and a plain publisher keeps the random per-process Hop ID its origin already declares. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lite-07 and cluster-02 lose the stamping rule and changelog bullets: a received 0 is forwarded unchanged and a bridged upstream gets a single 0. The CLI docs describe --epoch for redundant publishers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Outcome: quest complete, left as a draft for maintainer decisions. Checks: Open decisions:
(Written by Claude Opus 5.5) |
# Conflicts: # js/net/src/ietf/subscriber.test.ts # js/net/src/lite/subscriber.test.ts # quest/m0/broadcast-epoch/README.md # rs/moq-net/tests/legacy_reconnect.rs
The maintainer chose deletion over a hidden refusing flag: --hop is now an unknown flag and MOQ_HOP is no longer read. The upgrade notes and CLI docs say so, since a deployment still keyed on MOQ_HOP mints an epoch per process. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou'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 32 minutes. View limit detailsLimit details: You’ve used all 4 included reviews currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (35)
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 |
|
Grok review of The stamp removal is clean and keeps Rust and JS in sync. An unnamed chain still ends up as at least Non-blocking
CI: queued on Verdict: MERGE once CI is green. Items 1 and 2 are cheap doc fixes worth making first. This is an automated review, not the maintainer's decision |
…link to the finished quest Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
On the Grok review of
(Written by Claude Opus 5.5) |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 27f2f85
No new actionable defect found. The direction is coherent: publisher epochs replace hop-based content identity, while session-origin exclusion remains separate; Rust and JS preserve anonymous zero hops instead of manufacturing a publisher ID. Reviewed the CLI epoch propagation/validation, subscriber changes, regression updates and migration documentation. The current docs explicitly warn about ignored MOQ_HOP and the lack of importer group alignment (doc/setup/upgrade.md:50–59; doc/bin/cli.md:393–418), addressing the earlier operational concerns. Verification limits: static review only; no CLI, mesh, or interoperability tests run. This does not establish seamless redundancy for importers that do not align groups.
A leftover MOQ_HOP restarts the other member's viewers whether subscriptions end (today) or stay sticky behind a Restart announce (#5012), and an older version's end-and-start no longer waits on the old session in the quest goal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Auto-merge enabled at
(Written by Claude Opus 5.5) |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolve the doc conflicts by keeping the feature-level pages and carrying over what main changed underneath them: per-connection ingest epochs and `--epoch` (#4962, #4969), no random first hop for unnamed publishers, untimed tracks, the bounded HLS window, disabled renditions, the audio group duration and Balanced default preset, and the Go pointer timestamp. Also address the open review notes: scope restart takeover to moq-lite 07 and today's Unroutable behavior, keep `--cluster-tier` covering admitted LAN peers, qualify the watch buffer as cheap for audio only, and say an over-budget JSON append is refused before anything is written. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Problem
Epochs (#4942) now carry publisher identity, but two leftovers still name a publisher through its hop: relays stamp a random per-session hop in front of an unnamed publisher's chain, and
moq --hoppins the Hop ID a redundant pair was keyed on (with--cluster-idfalling back to it).Quest:
quest/m0/broadcast-epoch/hop-removal.md(deleted here).Approach
Hops::stamp, the per-sessionstampin the lite and IETF subscribers, andstampHopsinjs/netare gone. An unnamed publisher keeps its leading 0 (an empty chain becomes[0]), so it still ranks anonymous. Request-time exclusion is untouched.moq --epoch. An optional UUIDv7 (MOQ_EPOCH) announced by the stages that publish once per run: stdin containers, capture, HLS import, archive replay, WHEP pull, and transcode output. Omitted,moqmints one per run. It is refused where it would be ignored: the RTMP, SRT, and WHIP ingests andimport ts --program all(which announce their own), and an invocation with no publisher.--hop/MOQ_HOPare removed outright, as are the hidden--originalias (already refused in the release).--hopis now an unknown flag andMOQ_HOPis no longer read.--cluster-idno longer reads--hop; a plain publisher keeps the random per-process Hop ID its origin already declares.doc/bin/cli.md(Redundant publishers uses--epoch, notes--hopis removed),doc/setup/upgrade.md,doc/bin/relay/cluster.md,doc/concept/moq-lite.md.Decisions
Maintainer decisions, 2026-10-07:
--hop/MOQ_HOPhandling--epoch, per thers/AGENTS.mdreleased-flag rule--epochreplaces it. The maintainer chose this as an exception to thers/AGENTS.mdrule, accepting that a leftoverMOQ_HOPis silently ignored.--epochappliesimport ts --program all, and loosen later without a breaking change--connectpulls (SRT/RTMP/WHEP) take it now for same-epoch importersImpact
--hop,MOQ_HOP,--origin,MOQ_ORIGIN; adds--epoch/MOQ_EPOCH;--cluster-idstops reading--hop. A deployment still settingMOQ_HOPruns, but each process mints its own epoch, so whenever either member of a redundant pair starts or restarts, its epoch replaces the other's broadcast and restarts its viewers until the pair moves toMOQ_EPOCH.[0]HOP_PATH (moq-transport without the cluster extension). No message format changes.Hops::stampwaspub(crate); no public Rust or JS API change.Restart model (#5012)
The docs describe a replaced epoch as restarting viewers, which holds both today (subscriptions end with
Unroutable) and under the planned sticky subscriptions plusRestartannounce. Whichever of this PR and #5012 lands second drops the other's link tohop-removal.md(deleted here;restart.mdin #5012 lists it under Related).Alternatives
--hopas a hidden flag refused with a migration. Rejected by the maintainer (decision 1).--epochto the gateways too. Deferred: they announce per connection (see the Gateways quest), so a fixed epoch would turn an encoder reconnect into a resume.Follow-ups
quest/m1/hop-aligned-import.md) may want--epochon SRT/RTMP--connectpulls once they produce aligned groups; refusing it now keeps that a non-breaking loosening.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)