---
name: v0101-whoami-json-fix
description: "v0.10.1 SHIPPED — perch-id mis-parse fix (doyle report): self_id via `spt whoami --json` .self.id, never human-roster lines"
metadata: 
  node_type: memory
  type: project
  originSessionId: d8460aba-1a48-401d-a0c9-4e89c12d5eec
---

2026-07-01 (perri, same day as [[v0100-digest-fetcher-shipped]]): **v0.10.1 SHIPPED** on doyle's
bug report. hook.rs self_id() took FIRST LINE of `spt whoami` HUMAN output — the modern human view
is a grouped roster ("SUBNET <name>" header first on any subnet-member node; "SELF: <id> …" when
perched), so a /clear|/compact boundary crowned doyle's agent "SUBNET SPT_DEV" and the brief's
don't-run-whoami made it self-reinforce. Fix: `spt whoami --json` → `.self.id`; `self:null` ⇒
no-perch; ANY parse failure ⇒ empty (parse_whoami_self, pure). REQ-DIST-WHOAMI-JSON minted
(impl/unit). Live-validated: disposable perch + real hook on source=clear boundary → banner id =
perch id. NB SessionStart verb routing: only source=clear|compact hit the boundary/self_id path;
startup+no-SPT_ENDPOINT_ID = seed (no self_id in banner decision — ring brief even if session
already bound; separate pre-existing behavior, not touched).

Applied on-node 0.10.0→0.10.1. doyle relays version to operator.

Same arc: from-attribution bug pinned with doyle — see [[owl-replyto-forbidden]] (legacy owl
`send --reply-to` stamps FROM as the REPLY_TO value; plain send + explicit FROM always).
