Skip to content

v0.43.0

@somethingelseentirely somethingelseentirely tagged this 18 May 15:28
Two correctness fixes plus a CLI simplification.

fetch_reachable Phase 2 aborts on first fetch failure instead of
skip-and-continue. The skip path silently violated the bottom-up
invariant "stored blob ⇒ closure stored" — by writing parents whose
children weren't fetched. Phase 1's have_local short-circuit then
trusted that invariant on every subsequent sync, so the chain gap
became permanent: pile diagnose check would report a break that no
gossip rebroadcast could heal.

merge_commit propagates ancestry walk errors instead of silently
treating "couldn't read commit blob" as "not an ancestor" and then
falling through to write a divergent-merge commit referencing the
missing handle. The append-only pile keeps such dangling parent
refs forever and Phase 1 short-circuits on them, hiding the
corruption from future repair attempts. New
MergeError::AncestryWalkFailed variant lets callers retry once
the closure is repaired.

Both bugs surfaced as a chain break on local-messages during a
multi-peer session; the missing commit was present on the other
peer but our side's Phase 2 had silently skipped it and our
merge_commit had then layered a phantom merge commit on top.

EndpointTicket form removed from --peers; only bare hex pubkeys are
accepted now. The id-only ticket form was equivalent to a bare
pubkey anyway, and the address-bundled form encoded ephemeral
relay/direct addrs that were a source of bugs (the 0.41.4 trailing-
dot relay leak was one). iroh's standard discovery (pkarr + DNS via
presets::N0) handles all address lookup. pile net identity drops
the ticket: line; dot_stripped_endpoint_addr and StaticAddressLookup
deleted; iroh-tickets dep dropped.
Assets 2
Loading