Routing proof waits out nginx's reload handoff and names who answered #8
Loading…
Reference in a new issue
No description provided.
Delete branch "hands/routing-proof-handoff"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Cut
idunn-deploy-provenance:cut_spec:cut-routing-proof-handoff.r1. Base main7eae1c4. Not merged; PR #7 editssupervise_admitted_routein the same file and this PR does not touch that function, so expect a trivial rebase.Cause
systemctl reloadrunsnginx -s reload, which only signals the master. Old workers keep accepting on the shared stream listen socket until the master has parsed the config, forked new workers and told the old ones to quit. Idunn challenged :8833 within milliseconds, got an answer from the incumbent (a presence that fails activation authentication), failed the Routing attempt, and rolled the fragment back with a second reload. The streampixels web deploy hit this (E1 web attempt 2).My confidence in this explanation is 60%. The cut works either way: part (a) makes every failed proof name the runtime instance and activation signer that answered, so the next failure says whether it was the incumbent (race, rank 1, or nginx never switched, rank 2), the candidate itself (activation signer differs from the transaction record, rank 3) or a stranger.
Change (src/control_plane.rs only)
advance_routingcallsprove_routed_candidate_through_handoffinstead ofprove_stable_route. An answer naming the preflight's incumbent instance (and not the candidate) is not-yet for 10 s, challenged every 250 ms (400 ms / 20 ms under test). One challenge per poll: the loop never installs, rolls back, charges the gate or persists. When the window ends the last error (which names the incumbent) takes the existing rollback arms, which are unchanged.RouteProofAnswercontext on the authentication failure inprove_stable_route_against: ids only, each cut to 96 bytes with control characters stripped, never signature bytes. It reaches the journal line and the abort'slast_errorthrough{error:#}.runtime_instance_idon purpose: it can only delay, never admit. No provider-signature pre-check, no match on cultnet-rs error text.Tests (stub runtime gains IncumbentFirst(n), ForeignActivation, StrangerInstance replies)
Mutation-checked: disabling the window, matching any answerer, removing the id cut, and making the id decode return None each fail the tests that pin them.
What it gives up
supervise_admitted_route(restore then prove) and the committing re-proof keep the reload-then-challenge shape with no wait; they self-heal on the next backoff pass. Foldingconnect_route_socket's refused retry into this loop is idea routing-proof-handoff.collapse-connect-retry, after PR #7.changes_route()guard on the wait has no dedicated test.🤖 Generated with Claude Code