Field report
An agent received a standard nametag citation [Antevorta setup](/sessions/36985b00-e7ba-448c-812c-9eb4f611ff6e).
inspect_peer on that id worked (5 messages, plausible transcript).
- A few turns later
ping_peer on the same id failed: Session not found.
- Immediate retry of
inspect_peer on the same id also failed: no session matching prefix.
- Recovery:
list_peers showed Antevorta setup under a different id (0b350082-d60d-4705-b0ab-d0d80a861660).
Root cause (code)
Peer tools (inspect_peer, ping_peer, hapi inspect-peer, hapi ping-peer) resolve targets only via GET /api/sessions list + prefix match (cli/src/modules/pingPeer/pingPeer.ts). They do not:
- follow
metadata.supersededBySessionId (web already does — web/src/routes/sessions/followSupersedingSession.ts; REST contract warns resume/reopen may return a different id — docs/api/client-contract/rest.md), or
- suggest name-based fallback when an id vanishes.
When a session is superseded and the old row is deleted (sessionCache.mergeSessionData with deleteOldSession: true), the cited id disappears entirely from the namespace. A successor with the same display name may exist — silent failure with no hint to try list_peers.
This is not the tiann#1618 soft-nametag trust model; it is citation durability / session identity continuity for Layer 0 peer tools.
Proposed fix (pick phased)
P0 — supersession chain: when resolving by id, if row exists with supersededBySessionId, follow to successor (same as web navigation). Also try direct GET /api/sessions/:id before list-only lookup for exact UUIDs.
P1 — helpful not-found: when prefix/id misses, parse citation title if present ([title](/sessions/id)) and list same-name candidates from list_peers; error text should mention supersession and list_peers, not bare "not found".
P2 — tombstones (product policy): consider keeping superseded rows as non-deletable aliases instead of deleteOldSession: true merges, so old ids keep redirect metadata.
Related
Acceptance
Stale [title](/sessions/old-id) citations either land on the successor session or return an actionable error naming the likely replacement id.
Field report
An agent received a standard nametag citation
[Antevorta setup](/sessions/36985b00-e7ba-448c-812c-9eb4f611ff6e).inspect_peeron that id worked (5 messages, plausible transcript).ping_peeron the same id failed:Session not found.inspect_peeron the same id also failed:no session matching prefix.list_peersshowed Antevorta setup under a different id (0b350082-d60d-4705-b0ab-d0d80a861660).Root cause (code)
Peer tools (
inspect_peer,ping_peer,hapi inspect-peer,hapi ping-peer) resolve targets only viaGET /api/sessionslist + prefix match (cli/src/modules/pingPeer/pingPeer.ts). They do not:metadata.supersededBySessionId(web already does —web/src/routes/sessions/followSupersedingSession.ts; REST contract warns resume/reopen may return a different id —docs/api/client-contract/rest.md), orWhen a session is superseded and the old row is deleted (
sessionCache.mergeSessionDatawithdeleteOldSession: true), the cited id disappears entirely from the namespace. A successor with the same display name may exist — silent failure with no hint to trylist_peers.This is not the tiann#1618 soft-nametag trust model; it is citation durability / session identity continuity for Layer 0 peer tools.
Proposed fix (pick phased)
P0 — supersession chain: when resolving by id, if row exists with
supersededBySessionId, follow to successor (same as web navigation). Also try directGET /api/sessions/:idbefore list-only lookup for exact UUIDs.P1 — helpful not-found: when prefix/id misses, parse citation title if present (
[title](/sessions/id)) and list same-name candidates fromlist_peers; error text should mention supersession andlist_peers, not bare "not found".P2 — tombstones (product policy): consider keeping superseded rows as non-deletable aliases instead of
deleteOldSession: truemerges, so old ids keep redirect metadata.Related
/sessions/1904a934-8dc4-467e-b56c-28a121a0262bAcceptance
Stale
[title](/sessions/old-id)citations either land on the successor session or return an actionable error naming the likely replacement id.