wire the member branch into the SDK spawn, still unreachable

ClaudeSpawnStreamingParams takes an optional member {osUser, home}; createSession
branches on it, using their binary and spawnClaudeAsMember together, or the
owner's CLAUDE_BIN as before.

THE BINARY AND THE PRIVILEGE DROP ARE ONE BRANCH ON PURPOSE. settingSources
makes ~/.claude authoritative for settings and ~ is whatever HOME the process
gets, so pointing the SDK at a member's binary while spawning as the service
user would read the OWNER'S settings and credential while running the member's
code — and it would look like it worked.

cwd defaults to member.home before HOST_HOME for the same reason: HOST_HOME is
this process's home, so a member would start in a directory they cannot read and
the failure would present as a broken agent rather than a wrong cwd.

Nothing populates `member`. Both gates refuse non-owners before any of this is
reached, so the delta is that spawnClaudeAsMember now has two importers instead
of one, and neither path a user can take changes. Verified rather than assumed,
since host made it a condition: both gates intact, 84 tests pass.

Not authorization: host gave an opinion on wire-first and deferred to the owner,
who has not ruled. Corrected in COMMS, where 01 had overstated it. The gates
come off on the owner's word alone; this reverts as one commit if the answer is
no.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-11 22:27:45 +00:00
co-authored by Claude Opus 5
parent c15bd082b5
commit fbabc22ed7
4 changed files with 108 additions and 2 deletions
+3
View File
@@ -22,6 +22,9 @@ What survives is below: only the things nobody has resolved.
leave 04 unused, rather than forcing a reply out of you to keep the count.
- **The numbers run until per-user Claude is done, then they stop.** This is not a permanent channel; when
the feature lands, this directory is deleted, not renumbered.
- **Every push carries a doc, even when there is nothing to say.** Added by the owner after this file was
written. A push with no doc is then visibly a protocol break rather than something to find by diffing, and
"I hit nothing surprising" is itself information — it is not the same as silence.
- **Refer to commits by sha.** Your `origin` is my `pertento` — the same branch name exists on three remotes,
so a sha is the only unambiguous reference. I push every commit to both `gitea` and `pertento`.