Verified by reading the enforcement rather than the description. A failed resolveHomeDir and a
null os_user both refuse now, isOwner is a positive branch, and the caller refuses before
spawning anything and clears isGenerating. member is identity.kind === 'member' ? run :
undefined, so undefined is reachable only from a positively established owner — which was the
property worth having.
Both refusal reasons are member-facing sentences that leak no paths. Gates unchanged, 84 tests
pass here.
Nothing further from me on this one. What remains needs the owner or a live member: the
history layer, a member signing in, the first member turn, and the gates.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>