feat: add configurable liveness timing with safe deadlines - #1
Merged
Conversation
NicolasDP
added a commit
that referenced
this pull request
Aug 31, 2026
Rulings 282-284's implementation went through a high-effort adversarial review after merge; ten findings survived verification. Two rulings discharge them, both taken by the maintainer on 2026/08/31. Ruling 285 — the unreachable-deadline residue at the three arm-once timer sites (contested verdict, CloseLinger, guard exemptions) is priced and accepted: no behavior change, the consequence documented at each site, and sync_liveness_timer's "quiet, not immortal" claim scoped to representable anchors with the horizon window stated. Ruling 286 — the round's record corrected: - the false rule-6 independence attestations (three sites) now state the true provenance; an isolated no-repo agent re-derived ruling 283's construction boundaries from the ruling text alone and confirmed the implementation on every checkable point; - that re-derivation found ruling 283's named 1 s/3 s profile pinned nowhere (167 ms of margin) — both short application profiles are now pinned; - the default profile must pass its own try_new (V1 was never routed through validation, so a constants edit could ship a rejected default with every gate green); - SPEC.md's amendment-table row 282 gains the sixteen unlisted sections of its blast radius, including §6.8's now profile-dependent restart-resolution bound, with the correction recorded as row 286; - shell::Connection::new is total again (the driver passes the profile read off the live core it already holds; clone_handle delegates, un-duplicating the handle accounting); - RttEstimator's arithmetic_reachable latch deleted — provably untrippable (x*3/4 + y/4 and x*7/8 + y/8 are bounded by max(x, y) under floor rounding), its named test's Nones come from loss_delay/pto_interval's own checked arithmetic; - ConnSeed's bare-[u8; 32] conversion is #[cfg(test)]: production birth paths go through mint_conn_seed, and an untyped third path minting v1 defaults on a configured endpoint contradicts §5.7. Open, deliberately: try_new's error precedence when both the floor and the relation are violated is ratified nowhere (flagged in ruling 286), and the review's six confirmed-but-cut cleanups are unaddressed. All nine release gates green on this tree, including MSRV 1.96 and cargo deny. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017sunYH6Lwd3RaezngpD8TR
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.
Summary
TimingProfilefor established-sessionpassive keepalive and dead-peer timing
10skeepalive /25sdead timeout) andstamp the profile onto both outbound and inbound connection birth paths
(
D_eff > 2 * K_eff + K_INITIAL_RTT + 2 * SHELL_LATENESS_BOUND) and makepersistent-keepalive validation use the connection's effective dead timeout
connection, recovery, close, ACK, guard/introduction, and
test-utiltimersbut unannounced, so they cannot panic, wrap, clamp, saturate, or fire early;
later state transitions recompute them
regression coverage
Compatibility
explicitly install a custom profile
liveness verdicts at different times
Verification
cargo fmt --all -- --checkcargo check --all-targets --all-featurescargo build --all-features --all-targetscargo clippy --all-targets --all-features -- -D warningsRUSTDOCFLAGS="-D warnings" cargo doc --no-depsRUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-featurescargo testcargo test --all-featurescargo test --release --all-featurescargo +1.96.0 check --all-features --all-targetscargo deny checkgit diff --checkAll gates pass.
cargo denyreports only the pre-existing non-failingduplicate-
synand unmatched license-allowance warnings.