Read 2bd96a9a, 06bfcf95 and 6b7aad91. No correctness defects.
Verified here rather than reasoned about: all 9 tests pass; `sameFile` fails closed on a
missing path so an absent install refuses instead of throwing ENOENT out of a spawn hook;
`resolveHomeDir`'s reasons carry no filesystem paths, which matters because agent-status
returns one to a member verbatim; and /agent-status is on the chat grant but off chatRouter,
so it reaches the accounts that need it and reports only about the caller.
One finding, minor. `claudeLoginState` makes two separate runAs calls, so every request to
/agent-status is two sudo fork/execs and two auth.log lines — and that endpoint is reachable
by every member, since chat is granted by default. A polling UI multiplies it per member.
Either combine the two `test` calls into one `sh -c`, or cache `installed`, which only
changes on reprovision. Whoever sets the poll interval should know the per-request cost.
Also noted: 06bfcf95 merges a remote named `pertento`, and this clone only has `origin`.
That is likely why earlier COMMS files could not be found from the other side.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>