Skip to content

v0.16.0: inconsistent peer-routing source across dial/whois/send (RFC-006 Part B compliance) #277

@laulpogan

Description

@laulpogan

Summary

On a fresh Windows install of wire 0.16.0 (wire-x86_64-pc-windows-msvc.exe), I observed three different code paths resolving the same peer to three different endpoints — which contradicts RFC-006 Part B ("endpoints[] is the single peer-routing source", #268).

Peer: saffron-burrow (did:wire:saffron-burrow-f1fdd0e9).

Repro

# 1. Onboard
$ wire up @wireup.net
claimed raven-kettle on https://wireup.net

# 2. Try to dial peer (peer had already dialed me)
$ wire dial saffron-burrow@wireup.net
error: wire dial: federation pair to `saffron-burrow@wireup.net` failed:
  pair_drop_ack to saffron-burrow failed across 1 endpoint(s):
  • http://127.0.0.1:18791 (Federation): POST .../v1/events/...

# 3. Whois the same handle
$ wire whois saffron-burrow@wireup.net
error: well_known_agent_card_a2a failed: 404 Not Found:
  {"error":"... \"saffron-burrow\" isn't claimed on this switchboard"}

# 4. Pending shows the inbound pair-intro (received OK)
$ wire pending
[{"peer_handle":"saffron-burrow","peer_relay_url":"http://127.0.0.1:18791",
  "peer_slot_id":"b9ca8820d49000c829f8e9dc735f18c9",
  "peer_endpoints":[{"relay_url":"http://127.0.0.1:18791","scope":"federation",...}], ...}]

# 5. Accept (succeeded — operator consent)
$ wire accept saffron-burrow
{"status":"bilateral_accepted","handle":"saffron-burrow@http://127.0.0.1:18791", ...}

# 6. Send — and it delivers, but to a THIRD slot/relay
$ wire send saffron-burrow "ping"
phyllis: saffron-burrow's line is silent — relay sees no pulls yet.
{"status":"delivered","relay_url":"https://wireup.net",
 "slot_id":"0e5d7616f4e95b08c314a07a95d52efa", ...}

What's inconsistent

Path Endpoint used Result
wire dial pair_drop_ack http://127.0.0.1:18791 (from card endpoints[]) Network error — loopback unreachable from federation peer
wire whois directory lookup wireup.net/.well-known/wire/agent 404 (not claimed in directory)
wire send after accept https://wireup.net slot 0e5d7616... Delivered
Pending-inbound card peer_relay_url: 127.0.0.1:18791, peer_slot_id: b9ca8820...

Three different routes, three different relay/slot pairs for one peer.

If RFC-006 Part B is the format-freeze gate and endpoints[] is the single source, then wire send should be using the same endpoints[] the card carried — not a separate wireup.net slot the card never advertised. Either:

  • (a) wire send is bypassing endpoints[] (RFC-006 Part B regression), or
  • (b) wire dial / wire accept are storing endpoints from a stale/wrong source, or
  • (c) wire whois directory lookup and the actual reachable federation slot have drifted (directory record missing while slot exists).

Risk / impact

  • Operator sees whois 404 → assumes peer doesn't exist → may reject a real pair request.
  • Pending-inbound shows only loopback endpoints → operator can't tell if accepting will result in a working bilateral link.
  • Bilateral pair succeeds with status: bilateral_accepted even though the dial-side pair_drop_ack failed earlier. Status is misleading.
  • Reply path correctness depends on which code path the daemon picks — different verbs taking different routes is a foot-gun for debugging.

Versions / env

  • Host: Windows 10 Pro (DESKTOP-1LK5VSJ), x86_64
  • wire 0.16.0 (Windows MSVC release asset, sha256 eab201377ecfdca4d95e493d7357e279cb85237a5a0fb661aac1794daadfff71)
  • Relay: wireup.net
  • Peer ran wire from another host with wire up (exact relay binding unknown — that's part of the question, since whois says they're not claimed but their slot does receive wire send)

Asks

  1. Confirm which of dial / whois / send is authoritative under RFC-006 Part B.
  2. Whichever is wrong: align it.
  3. Operator-facing: when endpoints[] only contains loopback URLs, surface the warning in pending output ("peer endpoints are loopback-only — bilateral reply path may not work") so the operator knows what they're accepting.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions