Skip to content

Commit 0e3187b

Browse files
laulpoganclaude
andauthored
release: cut v0.17.0 (observability + identity self-heal) (#363)
wire dash / retire, the Nostr transport stack (RFC-007 D3), same-machine attestation (#182), sandbox hardening (#357), and the two-names identity self-heal (#351) — everything on main since v0.16.0. Claude-Session: https://claude.ai/code/session_01VxnZEjrcrYR3SAq8Crv8hg Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 7c96485 commit 0e3187b

4 files changed

Lines changed: 6 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ the PR description linked in each section.
1010

1111
## [Unreleased]
1212

13+
## [v0.17.0] — 2026-07-10
14+
1315
### Fixed
1416

1517
- **The "two names" identity split — self-healed at its source + made self-reporting** (#351): a Claude session's statusline showed one wire identity while the session *operated* on wire as another (confirmed live: a session whose `CLAUDE_CODE_SESSION_ID` derived `daydream-gorge` was sending/pairing as `merry-spindle`, a key matching no live session; box-wide, 115 of 434 running `wire` procs served an identity no live session used). Root cause: the long-lived `wire mcp` server resolves + **freezes** its identity at launch, but the statusline re-resolves live each render — and when the MCP boots before Claude writes its session PID-file, `resolve_session_key()` misses and the server **mints** a throwaway `mcp-proc-*` key, pins it into `WIRE_SESSION_ID`, and serves it for life. Fixes: (1) before minting, **retry the PID-file** (walk the ancestor chain once, cached — no per-hop `ps` re-fork; the #353 Windows trap avoided) so the live session is recovered instead of frozen; (2) the mint **no longer pins `WIRE_SESSION_ID`** (that slot is the operator-override/live channel — a minted value there beat the live session on re-resolve); (3) `detect_identity_split` rewritten to compare the **served** identity vs the **live** PID-file identity, so the frozen MCP itself detects the drift the old env-vs-pidfile check structurally couldn't — surfaced as an `identity_split` field on `wire_status`/`wire_whoami` so an agent self-detects at the session-start health check and recommends `/mcp reconnect`; the RFC-008 deliberate fleet-share (`WIRE_HOME` pin) is exempt. Also fixed a latent bug the redesign exposed: `handle_for_key` hashed the *sanitized* (32-char-truncated) key while homes are created from the *raw* key hash, so a 36-char session-id uuid resolved to the wrong home. (4) `wire setup` now bakes `env:{WIRE_SESSION_ID:"${CLAUDE_CODE_SESSION_ID}"}` into the MCP entry it writes, so the forward survives `--apply` (inert on non-Claude hosts). Existing frozen MCPs heal on the next `/mcp reconnect`; the self-report makes that one-command recovery visible.

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "slancha-wire"
3-
version = "0.16.0"
3+
version = "0.17.0"
44
edition = "2024"
55
rust-version = "1.88"
66
description = "Magic-wormhole for AI agents — bilateral signed-message bus over a mailbox relay"

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,9 @@ Knowing a handle (`alice@wireup.net`) and being able to resolve it to a signed a
9494

9595
## Recent releases
9696

97-
Currently shipping **v0.16.0**. Highlights:
97+
Currently shipping **v0.17.0**. Highlights:
9898

99+
- **v0.17.0** (2026-07-10) — **observability + identity self-heal**: `wire dash` (a read-only pane over every identity on the box) + reversible `wire retire`/revive for idle identities, the Nostr transport stack (RFC-007 D3 — bidirectional pair/send/pull over `wss://` with NIP-44 DMs), same-machine signed attestation for auto-pairing your own sessions (#182), sandbox hardening (Docker/OpenShell), and a self-healing fix for the "two names" split — the `wire mcp` server no longer freezes a minted identity while the live session drifts; it retries the session PID-file before minting, and `wire_status`/`wire_whoami` now self-report an `identity_split` so an agent catches a stale MCP and reconnects (#351)
99100
- **v0.16.0** (2026-06-14) — **the 1.0 format-freeze pass**: RFC-006 collapses the dual representations that fork-stormed (one by-key session store; `endpoints[]` the single peer-routing source), the identity layer grows on the additive v3.2 card (DNS-TXT org binding, op/org key rotation, project fan-out, per-peer block-list, DID bound to key + one-name enforced server-side), and a launch-hardening sweep lands `wire demo` (two agents talking in one command), a cleaner `wire --help`, MCP first-run fixes, and the daemon-survival fix behind the hello-world round-trip harness
100101
- **v0.15.0** (2026-06-07) — **the de-deprecation (BREAKING)**: removed all backwards compatibility — deprecated MCP/CLI aliases, the entire SAS code-phrase pairing flow (`wire dial` is now the sole pairing path), and dead legacy on-disk formats. New `wire nuke` clean-slate command. Agents only ever see canonical verbs
101102
- **v0.14.2** (2026-06-05) — multi-session supervisor + queue collapse (synchronous send/pull verdicts), dual-roots TLS, then a launch-hardening pass: `--all-sessions` fork-storm fix, hermetic tests, REUSE-compliant license, install-smoke CI

0 commit comments

Comments
 (0)