feat(conformance): gate min_timestamp as a non-fatal freshness hint (§7.3)#50
Merged
Merged
Conversation
…§7.3) Close the silent-divergence surface flagged by the pre-Wave-5 audit (G4): ezo returns CODE_DEADLINE_EXCEEDED on an unmet min_timestamp while sim/bread return CODE_OK + QUALITY_STALE, and no test covered it — so a shared SDK handler could converge either way undetected. Clarify semantics.md §7.3: min_timestamp constrains *quality*, not *success* — a provider MUST NOT turn an otherwise-readable signal into an error solely because the hint is unmet (the §7.3 SHOULDs are unchanged). Add the core gate test_min_timestamp_hint_is_not_fatal + the hermetic verifier self-test test_selftest_freshness_hint_validator, the checks.assert_freshness_hint_not_fatal helper, and a client read_signals(min_timestamp=...) param. No wire/proto change. Staged on main (no release yet): providers pin the harness, so this is inert in their CI until they bump. Validated locally: self-tests 35/35; against binaries sim PASS, bread SKIP (mock backend -> UNAVAILABLE, contract unobservable), ezo FAIL (CODE_DEADLINE_EXCEEDED) -> ezo's lenient fix + pin-bump lands in anolis-provider-ezo#70 (Phase C). Refs anolis-protocol#47, #49.
|
The latest Buf updates on your PR. Results from workflow CI / lint (pull_request).
|
This was referenced Jun 24, 2026
Wave-5 design freeze: SDK DeviceSpec shape, quality hook, default_signal_ids contract (G3/G5/P5)
#48
Closed
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.
Closes the G4 silent-divergence surface from the pre-Wave-5 audit (#47, part of #49). Decision basis: §7.3 already says "return the best available values and indicate staleness via
quality" — so lenient is the spec-aligned behavior; ezo'sCODE_DEADLINE_EXCEEDEDis the non-conformant outlier. sim/bread are already correct, and nothing tested this, so a shared SDK handler could silently converge either way.What this does
min_timestampconstrains quality, not success — a provider MUST NOT turn an otherwise-readable signal into an error solely because the hint is unmet. The existing §7.3 SHOULDs (best-effort, staleness-via-quality) are unchanged.test_min_timestamp_hint_is_not_fatal(far-futuremin_timestamp→ must not be fatal;UNAVAILABLEexempt, like the §7.2 test).test_selftest_freshness_hint_validatorproves the harness rejectsDEADLINE_EXCEEDEDand acceptsOK/UNAVAILABLE.checks.assert_freshness_hint_not_fatalhelper +client.read_signals(min_timestamp=...).[Unreleased].Sequencing (staged on main, no release — option b)
Providers pin the harness, so this is inert in their CI until they bump. anolis-protocol's own CI runs only the hermetic self-tests. ezo's lenient fix and its pin-bump land together in anolishq/anolis-provider-ezo#70 (Phase C), flipping ezo green; sim/bread already pass and bump when convenient.
Local validation
UNAVAILABLE, contract unobservable; full suite otherwise 36 passed/1 known xfail) · ezo FAIL with the exactCODE_DEADLINE_EXCEEDEDmessage.Do not merge yet if you want to review; it's safe to merge whenever (additive, non-breaking, provider-CI-inert). Refs #47, #49.