Repository navigation
quest(wildcard): Wildcard advertisements - #4403
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Franz Heinzmann <frando@unbiskant.org> Co-authored-by: Grok <noreply@x.ai> Co-authored-by: moq-bot[bot] <186640430+moq-bot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Franz Heinzmann <frando@unbiskant.org> Co-authored-by: Grok <noreply@x.ai> Co-authored-by: moq-bot[bot] <186640430+moq-bot[bot]@users.noreply.github.com> Co-authored-by: opencode agent <agent@opencode.ai> Co-authored-by: GPT-6 Astra <codex@openai.com> Co-authored-by: bgreenway <brad.greenway@me.com> Co-authored-by: Brad Greenway <brad.greenway@surveillx.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… origin (#4279) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…nchmark findings Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A transcoder claims a `.`-named service prefix (`.transcode/`), which is hidden from default discovery, so the player's cross-broadcast check never saw the claim and filtered the rendition it covers. The check now opts into hidden routes; it only decides availability and lists nothing to the user. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mirror derived output under `.pro/<service>/`, moq.pro's convention, in the line README, the broadcast-epoch layout, and the watch test fixtures. The prefix is hidden so customers on moq-lite-06 or older never see it, and the player's covering check sees it only on lite-07, so the line now requires lite-07 to be finalized and negotiated by default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Moves the wildcard line to quest/m0/wildcard/ to match main (#4213) and keeps main's audit decisions: suffix routing dropped, processors on the service-prefix layout, pop-skipping deleted. Code: a standing refusal still ends the front (the line), and a closed source's standing route stays excluded from reselection (#4232), now the only thing the front's excluded set holds. FETCH_OK decoding moves into main's fetch setup, replacing the reader.done() accept on lite-07. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… merge main's SUBSCRIBE_END stream count and the line's started flag together push SubStream past clippy's large_enum_variant threshold. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uest/m1/wildcard/hidden-demand # Conflicts: # quest/m1/broadcast-epoch/README.md
fix(watch): see hidden .pro claims when gating renditions
- lite publisher: main's held first group (resolved against the source's start) now sends SUBSCRIBE_START with the serving origin; a datagram that goes first still resolves the start from its own sequence. - front: Anonymous keeps `here` and gains main's rule that the route gaining a first hop ends it; an aborted track refuses its copies' admission before main's `io.end()` keeps the entry for the linger. - js/net lite subscriber: main's tail grace, end checks, and fetch cancellation around the branch's SUBSCRIBE_START / FETCH_OK origin. - relay cluster doc and cluster draft: main's overlap authorization and in-place publisher update, with the branch's terminal refusal and hashing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Align the README with the audit's moved quests and drop the lite-07 Required bullet: finalizing lite-07 is a rollout condition, not a blocker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The line lives at quest/m0/wildcard/, so its children do too, listed under Required. datagram-start notes main's held first group. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merged Merge resolutions
Checks: Still blocking: #4386 moves its children to (Written by Claude Opus 5.5) |
quest(wildcard): block the line on the #4279 datagram, origin, and benchmark findings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Main's #4741 makes the path the only content identity, and the wildcard README (#4761) drops the reply Origin. Take main's code for everything the line built on Origin: SUBSCRIBE_OK/FETCH_OK Origin, track provenance, front Identity and Pin (incl. Stay), the datagram hold behind SUBSCRIBE_START, the JS origin hop, and their tests (pool_failover.rs, lite/origin.test.ts). Re-applied on main's structure: - route_order keys its hash on the requested path, so an equal-cost pool spreads its paths (Rust and JS spreadHash, pinned to match), plus the Spread Hash tie-break in the lite draft and relay cluster docs. - NO_CAPACITY removed from the lite and cluster drafts and the JS StreamCode; a closed dynamic route rejects with Unroutable. - The equal-cost pool churn benchmark, now with fronts following the newcomer as main's front does. The pool resolve bench is dropped: it relied on a refusal ending the front. - js/watch counts hidden service claims when gating renditions. Main's front still skips a refuser and re-selects (#4741), while the README decides a refusal is final; the README now records that gap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Picks up the stats and JS package bumps landed since the previous merge; no conflicts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merged Conflict resolutions
Open decision: refusal semantics. #4741 made a standing refusal skip the refuser and re-select ( Checks
(Written by Claude Opus 5.5) |
|
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 23 minutes. View limit detailsLimit details: You’ve used all 4 included reviews currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (15)
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 merge looks clean. The Rust and JS spread hashes match byte for byte, and the pinned vectors ( Blocking
Non-blocking
Verdict: ITERATE. The spread-hash work is good to go. What's left is the open This is an automated review, not the maintainer's decision |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 99b3688. Reviewed the full current 15-file diff against base 75a0e75; no previous review submission was available.
- P2: Apply Spread Hash to JS advertisement selection too.
js/net/src/origin.ts:247–252adds the hash only topreferredEntry, but advertisements still usecandidates()→compareCandidates(:210–216,:443–445), which breaks equal-cost/equal-length ties by arrival order. For prefixpoolwith hops[11]followed by[10], JS advertises[10], while its request forpooland Rust's advertisement selection choose[11]. Reversing arrival order changes JS's advertisement despite identical routes, so reconnects can churn the advertised winner and the new cross-language deterministic ordering is incomplete. Pass the prefix into advertisement sorting and apply the same hash before newest; add reversed-arrival tests forannounced()and the publisher-facing advertised table, not only request winners. - Existing blocker, already identified in the author's update: terminal refusal is still not implemented in Rust.
rs/moq-net/src/model/front.rs:342–349reselects after a standing refusal, andrs/moq-net/src/model/origin.rs:3381–3394can fall through to a shorter prefix once that tier is excluded. This contradicts the updated refusal contract (drafts/draft-lcurley-moq-lite.md:450–453), potentially probing sibling workers and the catch-all for one refused request. Resolve that decision and align implementation/tests with the chosen contract before treating the quest as complete; no duplicate inline finding added.
Direction: requested-path spreading and hidden service-claim discovery fit the stated goal, but advertisement parity and the acknowledged refusal gap remain.
Verification limits: connector-based static review; no builds, tests, benchmark timings, or interop runs executed by me. The six returned GitHub workflow runs for this SHA were queued when checked; the author's reported local passes are not independent verification.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Grok follow-up review of This push is two Earlier findings
New
CI is still pending on this head (Check, Test, Quest, and the platform jobs). Verdict: ITERATE. The refusal contradiction is resolved now that #4875 is in. What's left is the open This is an automated review, not the maintainer's decision |
compareCandidates stopped at hop count, so an equal-cost pool's advertised route depended on arrival order and could differ from rs/moq-net's route_order. Break the tie on spreadHash(prefix, hops) like Rust does. Also pin Unroutable in the JS error tables, scope the cluster doc's convergence claim to relays holding the same routes, and record that a standing refusal now ends the front (#4875). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Grok follow-up review of This push is one real commit, Earlier findings
No new issues in this push. CI is still pending on this head (Check, Test, Quest, WASM, and the platform jobs). Verdict: ITERATE. Every code and test finding is now fixed. What's left is the open This is an automated review, not the maintainer's decision |
kixelated
left a comment
There was a problem hiding this comment.
Codex adversarial review of 8d24696c050e6c32e17913b4c83dcf74bc939be9 (branch diff against origin/main)
Verdict: approve. No material findings.
Focus areas: spread-hash tie-break parity between route_order in rs/moq-net/src/model/origin.rs and compareCandidates/preferredEntry plus spreadHash in js/net; NO_CAPACITY removal across Rust, JS, and both drafts; js/watch counting hidden routes for rendition selection; lite and cluster draft text and the lite-07 changelog.
Codex reports that the hash matches across languages in byte order and overflow behavior, that JS now applies it when choosing the advertisement as well as when resolving a request, and that the refusal removal and hidden-route counting agree with the updated drafts. It reviewed statically and ran no tests.
This is an automated review, not the maintainer's decision.
(Written by Codex)
|
Merged Conflict resolutions
Review fixes (from the automated reviews of 99b3688)
Checks (on 8d24696)
Review: Codex adversarial review on this head approved with no findings. CodeRabbit was rate limited. Still open: the line's Required child Transcoders start at group boundaries waits on #4817. The README stays on main with that child listed. (Written by Claude Opus 5.5) |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 8d24696
Incremental review since 99b3688, accounting for merged main changes.
The prior advertisement-order finding is fixed: js/net/src/origin.ts:213–221 now hashes the advertised prefix, and :448–450 passes that prefix into candidate sorting. The reversed-arrival regression at js/net/src/origin.test.ts:1713–1725 checks the same winner. The earlier Rust refusal blocker is also resolved by the merged main implementation: rs/moq-net/src/model/front.rs:334–347 reselects only a withdrawn/superseded route and ends the request on a standing refusal. JS's corresponding refusal path checks supersession, including a winning local broadcast (origin.ts:514–525).
Direction: deterministic advertisement/request selection and terminal refusal now align with the stated routing contract. No new actionable defect found in the reviewed update. A publisher-facing advertised-table assertion would further protect the advertisement fix; the new regression currently asserts the consumer broadcasts view.
Verification limits: static review of the changed routing/error-contract code and relevant tests; no JS/Rust tests, benchmarks, or interop runs executed here. Returned head workflows include successful Release JS, Android and WASM runs, while Check/Platform/Audio quality remain queued; this is not an all-checks-passed assessment.
Resolves cluster-routing/README.md against #4946 (main's audit edits win, the epoch wording stays). Also applies the audit decisions this PR owns: - Delete quest/m0/wildcard/README.md and transcode-group-start.md: claim workers mint their own epoch, so they are never spliced, and #4403 landed the rest of the line. Remove every link to either. - m0 README: Wildcard landed in #4403. - hop-removal: drop the NO_CAPACITY bullet (#4403 removed it), and `moq` mints the epoch when --epoch is omitted. - cluster-routing/selection: identity is path plus epoch. - stats-split: relate the QoS line (#4133 rebases onto its tracks). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r failover The ranking, path-keyed rendezvous hash, epoch identity, and upstream spread already landed (#4403, #4741, #4816, #4942). What was left were tests: the equal-cost pool test now also proves losing an advertiser moves only its paths, and route_change covers a redundant pair (two publishers under one explicit epoch) failing over mid-group, whether the incumbent becomes unreachable or ends, with no timestamp rewind. Deletes the finished quest and moves its ranking guidance into Routes and announces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Questline branch for /quest/m0/wildcard/README.md. Continues #4037 at the m0 path: main moved the line to
quest/m0/wildcard/in #4213, soquest branchnow expectsquest/m0/wildcard/README. Child quests merge here; this stays a draft until the line'sRequiredlist is empty.This branch is
quest/m1/wildcard/READMEwithorigin/mainmerged in:rs/moq-netfront: a standing refusal ends the front (the line), and a closed source's standing route stays excluded from reselection (fix(net): decode PUBLISH_DONE Unauthorized and skip a dead source's standing route #4232).js/netlite fetch: FETCH_OK decoding moved into main's fetch setup (fix(net): await the publisher answer for lite fetches #4221/fix(net): settle an unanswered lite fetch when the subscriber closes #4357), replacing thereader.done()accept on lite-07.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code