Repository navigation
Conversation
Quest-Claim: 1dc886e941f195de
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…certification Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Announcements now report availability. When this side lets go of a route, readers get a distinct offline event instead of the origin's END. This covers Rust,
js/net, and every binding. Implementsquest/m2/cluster-routing/routes/availability.md, building on the Listing API.Draft, waiting on one maintainer decision (below). Unit and integration tests pass and
just checkpasses, but everyfinish X -> Ylane ofjust test interop --allfails: a cleanly finished broadcast reaches readers through a relay asOffline, notAbsent.Waiting
Maintainer: choose how a token-scoped lite-07 session certifies withdrawals, so a clean finish ENDs across a relay. The quest file keeps this item in its own
## Waitingsection.Scoped lite-07 sessions never certify, so no END crosses a relay
The router reports END only for a claim a floor certifies. Anything else is let go and goes offline. That rule predates this PR. Before this PR, every unserve was reported as END anyway, so the gap never showed.
A token-scoped publisher answers the relay's request for
""with a floor that certifies nothing, because its grant (finish-…/**) does not cover""(Answer::certified). The relay answering a scoped reader hits the same thing: the reader's limit doesn't cover"", and the relay only knows the origin beneathfinish-…/. Every token-scoped publisher and reader has this shape, so on moq.pro every clean finish would read as offline.What I tried and reverted: certify "the requested prefix as the grant shows it", with the router passing per-region floors to the answer. That fixed interop, but it's unsound. A receiver doesn't necessarily mirror the presenter's grant: a relay with no limit has scope
None. A grant shrink then removes a claim without bumping the revision, so the receiver keeps the stale claim.auth::lite_07::tokens_union_and_withdrawing_one_shrinks_itcaught it.Options:
Public API impact (breaking, no wire change)
RouteEvent::Offline;announce::Event::{Unavailable, Available, Offline}besidePresent/Absent;RouteInfo::available().unavailable | available | offline, route kindoffline,RouteInfo.available.MoqAnnounceEvent::{Unavailable, Available, Offline},MoqRouteInfo.available. C ABI:MOQ_ANNOUNCE_KIND_{OFFLINE,UNAVAILABLE,AVAILABLE},moq_route_info.available. Go, Python, Kotlin, Swift and Dart aliases and docs are mirrored.Impact / migration
An exhaustive match on
announce::EventorRouteEventneeds the new arms. To keep the old behavior, treatOfflinelikeAbsent/Endand ignoreAvailable/Unavailable.Choices made without asking
Absentand did not rename it toEnded.Update/RouteInfo; the listing turns flips intoAvailable/Unavailable.RouteEvent::Offlineinto its route kind.Suggested follow-ups
Checks
just check: pass. Rust and JS unit and integration tests: pass.just test interop --all: fails in the finish lanes only, cause above.Caused by
None: this is a feature.
Models
Size: M
Implementer: Claude Code, Opus 5.5, unknown effort
(Written by Opus 5.5)
🤖 Generated with Claude Code