Skip to content

v0.41.1

@somethingelseentirely somethingelseentirely tagged this 16 May 23:15
The full address (relay URL + direct sockets) now flows
through to iroh's Endpoint::connect on every peer-dialing
code path, so sandboxed / proxy environments that can't
reach iroh's discovery infrastructure can sync via an
EndpointTicket pasted directly into --peers or
`pile net pull <REMOTE>`.

Public API change (source-compatible for existing callers):
- Peer::{track, pull_branch, list_remote_branches, fetch,
  head_of_remote} and resolve_branch_name now take
  `impl Into<EndpointAddr>` instead of bare EndpointId.
  EndpointId still works via the standard Into impl.

Internal:
- NetCommand::{Track, ListBranches, HeadOfRemote, Fetch}
  carry EndpointAddr.
- connect_authed + fetch_blob + fetch_reachable +
  track_known_head take EndpointAddr, threading addresses
  through to iroh's connect path.

User-facing additions:
- `pile net identity` prints an EndpointTicket alongside
  the bare pubkey (id-only at identity time).
- `pile net sync` prints a rich EndpointTicket at startup
  (after ep.online() — full id + relay + direct addrs).
- `pile net sync --peers <STR>` and `pile net pull <REMOTE>`
  accept EndpointTickets in addition to bare hex pubkeys.

Diagnosed by another Claude instance running in the
Anthropic web sandbox after the v0.41.0 sync attempt: the
sandbox-side iroh-canary probes get 503'd from shared-egress
IPs, so discovery dies, so EndpointId-only --peers couldn't
materialize a working connection. EndpointTicket sidesteps
the whole discovery question by carrying the addresses with
the id.

Tests: 17 lib + 2 + 3 + 1 doctest in triblespace-net + 14
trible integration tests + all proptest suites pass.
Verified the rich-ticket print fires correctly at sync
startup (`endpointadc4...iaf5uhi5dqom5c...mnqw4ylspex...`
form, ~250 chars including encoded relay + direct addrs).

Out of scope (follow-up): seeding iroh's address cache from
ticket addresses for the gossip bootstrap path. Right now
sync's bootstrap still goes through discovery; pull is
fully address-threaded. The gossip seeding would need an
AddressLookup provider plugged into the endpoint builder.

All 8 workspace crates bumped 0.41.0 → 0.41.1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Assets 2
Loading