revert: restore the settlement-version quote gate (re-apply #23) - #25
revert: restore the settlement-version quote gate (re-apply #23)#25grumbach wants to merge 1 commit into
Conversation
Reverts d56ef1b, which dropped WithAutonomi#23 from the 2026-08-18 train so the settlement-version set could land whole rather than shipping the wire vocabulary ahead of the code that uses it. Nothing landed between the WithAutonomi#23 merge and the revert, so this is a clean re-application: the tree is byte-identical to af6a435. ant-node #204 and ant-client #171 are both still blocked on repinning to a published ant-protocol release, so the protocol side has to be back on main before either can clear its last merge blocker.
|
CI note: The advisory is RUSTSEC-2026-0258 ( Every other check is green: Clippy, Format, Documentation, Publish dry-run, Tests on ubuntu/macOS/no-default-features, plus
|
dirvine
left a comment
There was a problem hiding this comment.
APPROVE — reviewed exact head f2bf6e42547ef06bf6ab46acbc4941a5d3a1014d.
No material blockers found. The V2 request/refusal vocabulary is additive, existing postcard discriminants are pinned by regression tests, and the compatibility directions remain distinct. Local verification: formatting and all 87 library tests passed.
The Security Audit failure is inherited from main (h2, RUSTSEC-2026-0258), not introduced here. Release version bumps are intentionally left to the release owner.
Linear issue
V2-975 — https://linear.app/autonominetwork/issue/V2-975/refuse-to-quote-clients-that-cannot-settle-correctly-instead-of
What this is
Re-applies #23 by reverting
d56ef1b. #23 was pulled from the 2026-08-18 trainin #24 so the settlement-version set could land whole, rather than shipping the
wire vocabulary ahead of the node and client code that uses it. That was the
right call for that train. This puts it back for the next one.
Nothing landed between the #23 merge (
af6a435) and the revert (d56ef1b), sothis is a clean re-application with no rebase: the resulting tree is
byte-identical to
af6a435.Why now
ant-node#204andant-client#171both carry the same single remaining mergeblocker: they pin
ant-protocolthrough a personal fork branch and need torepin to a published registry release. That release cannot exist while the
protocol change is off
main, and the two PRs cannot merge without it, so theset is deadlocked until this lands.
Opened to unblock the release manager: this side is ready whenever the train is.
Risk tier
Same tier and same content as #23. This crate supplies the vocabulary and
enforces nothing, but the vocabulary is the wire contract.
Compatibility
ChunkMessageBodyvariants and oneProtocolErrorvariant are appended; every existing discriminant keeps its value andCHUNK_PROTOCOL_IDstaysautonomi.ant.chunk.v1. A peer built against 2.3.x decodes current traffic unchanged and rejects the new variants as an unknown discriminant rather than misreading a variant it knows. Consequence to plan for: a client sending V2 gets no answer from a node on 2.3.x, so nodes must be upgraded before clients start sending V2.ant-client#171handles the mixed fleet with a per-peer fallback.CURRENT_SETTLEMENT_VERSION,MIN_SUPPORTED_SETTLEMENT_VERSION,settlement_version_is_supported,client_update_required_message,ChunkQuoteRequestV2,MerkleCandidateQuoteRequestV2and the two enum variants. Nothing is renamed, removed or retyped, and both enums were already#[non_exhaustive].Semver impact
No version bump is taken here; the release train owns that.
Test evidence
Run on this branch:
cargo test --lib— 87 passed, 0 failedcargo test --lib chunk— 25 passed, 0 failedcargo clippy --all-targets --all-features -- -D warnings— cleancargo fmt --all— cleancargo doc --no-depswithRUSTDOCFLAGS="--deny=warnings"— cleanaf6a435, the reviewed and approved feat(chunk): declare a settlement version on quote requests #23 mergeThe discriminant regression test from #23 comes back with it:
appending_v2_variants_leaves_existing_discriminants_untouchedpins the wirebyte for every existing variant (
PutRequest0,GetRequest2,QuoteRequest4,
MerkleCandidateQuoteRequest6, new variants 8 and 9), which is what theincremental-rollout design rests on: postcard assigns discriminants by
declaration order, so inserting a variant anywhere but the end would make every
older peer silently misread every message from a newer one.
New dependency
none
ADR
ADR-0010: Settlement version and pre-payment compatibility (Proposed), carried on the ant-node branch:
https://github.com/grumbach/ant-node/blob/settlement-version-quote-gate/docs/adr/ADR-0010-settlement-version-and-pre-payment-compatibility.md
Note:
ant-node#204andant-client#171both cite this ADR at aWithAutonomi/ant-nodeURL, which 404s — the branch only exists on the fork.Worth correcting on those two PRs.
Mitigation / rollback
Revert this PR. It is a pure re-application of a known-good tree, and #24 already
demonstrated that dropping it returns
mainto the exact v2.3.2 tree with nodownstream fallout, because nothing on
mainconsumes the new variants yet.Until a node build ships that answers V2, the added vocabulary is inert.
Note for the reviewer
#23 was approved by @dirvine at head
e979016before it was merged. This branchrestores exactly that tree, so the prior review still applies to the content.