docs: scope C15's freshness claim to the answering node, and file C33 - #373
Merged
Conversation
ARCHITECTURE said current policy governs a version read, which is true of the tiers but silent on which node's "current" it means. The doc-ACL tuples ride the room's log, so a follower that has not replicated a revoke redacts by the grants it still holds — and `VersionFetch`, unlike `Subscribe`, has no read routing gate at all, so nothing steers the request to a node that is caught up. C33 files that: the fetch names no sequence, so unlike a subscribe it cannot be refused for being behind one. Distinct from C29, where the gate fails open for want of a creator rather than working on stale inputs.
vieiralucas
added a commit
that referenced
this pull request
Jul 29, 2026
…vidence actually converges to Cold review pass 8. `dial_establishes_identity` decides what enters `verifiers`, and `verifiers` is what the ring is derived from, so it has to be the same answer everywhere. It read `advertises_tls`, a roster lookup, which answers `false` for a member not yet learned — so the frame that *introduces* a sender was judged differently from every later one, and the claims it carried were kept by nodes that already knew it and dropped by nodes meeting it. One delivery, two states. A node id is an advertise address, so the transport is a property of the id and needs no state to read. The module docs claimed the evidence "converges however gossip interleaves". It does not. Liveness is relayed and anti-entropies; a verification claim is first-hand and is never passed on, deliberately, because with no signature on the wire "A and B verified X" is free for any node to write and relaying it would hand a compromised member a mint rather than a split. The consequence is that a compromised adopted member is a swing vote for any candidate exactly one other trust unit has reached: it sets the flag toward some peers and clears it toward others, and the groups place rooms differently — measured at 721/1000 rooms, 149 of them with two nodes each believing itself primary, surviving 30 further anti-entropy sweeps. The docs now state what holds, and the residual is pinned as a passing test and filed as C39. Board: C15 (#368/#373) filed its own C27-C33 first, so this branch's units are renumbered C34-C38 and the stale duplicate C26 line is dropped.
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.
Doc-only follow-up to C15 (#368), from its final review pass.
VersionFetchhas no read-routing gate at all —Subscriberunsread_redirect_response(a follower serves only when caught up to the client's floor) and the version mutations redirect to the leader outright, but a fetch answers from local state unconditionally. Not a regression, and the live fan-out on the same follower is equally stale; the version seam is where the staleness is unbounded by the client, since a fetch names no sequence and so cannot be refused for being behind one. Distinct from C29, where the gate fails open for want of a creator rather than working on stale inputs.Summary by cubic
Clarifies that version reads use the policy current on the node answering, not the version’s captured ACLs, so a lagging follower may redact using stale grants. Files C33 to track that
VersionFetchlacks a read-routing gate and should route likeSubscribeto avoid stale reads.Written for commit cd4c327. Summary will update on new commits.