3 Commits
Author SHA1 Message Date
pastilhasandClaude Opus 5 767c743d22 record where the member story actually stands
The platform now has `scope: 'shared'` for a dependency every account must be able to run, and the
check that goes with it — world-executable, and every parent directory traversable.

iris cannot use it yet, for a reason worth writing down rather than rediscovering: it BUILDS its
binary in the sidecar rather than declaring it as a dependency, so there is nothing for the probe to
judge. The remaining half is this sidecar installing into /usr/local/bin.

Also corrected open item 3, which said a member's agent "cannot read it there". On alpha it can —
/home/<owner> is mode 751, so an absolute path traverses. That is an accident, not a design, and 750
would break it silently. Stated that way so nobody concludes it already works.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 00:15:52 +00:00
pastilhasandClaude Opus 5 083e1f1f3b fix what the review found: signals, identity, the profile the wrapper nearly used
Ten findings from a review of the first commit. The ones that bite in normal use:

An unchecked mktemp left EPHEMERAL empty, which becomes `--user-data-dir=` — and Chrome reads that as
"use the default profile", i.e. the browser the user actually signs into. `set -u` does not catch it,
because the variable is set, just empty. Now checked and refused. That branch also never exec'd and
had no way to reach the browser with a signal; it now backgrounds, records the pid, and traps.

Signal handlers registered AFTER a build that takes minutes, so a pm2 restart during a first start
killed this process and left cargo compiling as an orphan — then started a second one on the same
target directory. Handlers now register first and shutdown kills the build.

`which('iris')` treated presence as identity. A truncated binary from an interrupted install is
present, reports ready, and never rebuilds. It now runs `--version` and checks — the same lesson
os-deps.ts already learned as `identify`.

Cookies were copied without Cookies-wal. These are WAL databases, so the newest session may exist
only in the log — copy the .db alone and the capture is signed out for exactly the account that just
signed in. PLUGIN.md had this backwards, citing WAL as the reason it was safe; corrected there too.

Also: --password-store=basic was missing from the branch that actually runs, working only because
chromiumoxide's DEFAULT_ARGS happens to supply it; seeding failures were silent, so the skill's
"sign in again" advice was offered for an unreadable profile it cannot fix; only --user-data-dir=X was
detected and not the space-separated form; installWrapper was unguarded at top level and crash-looped
on an unwritable ~/.local/bin; and it truncated the wrapper in place rather than renaming over it.

The searchPath copy is gone — the platform now exports locateBinary and this asks it. That copy is
what made the manifest probe refuse a rustup-only machine the sidecar could build on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 00:04:34 +00:00
pastilhasandClaude Fable 5 f0c811d387 iris: screenshots for agents — manifest, cargo-building sidecar, session wrapper, affordance and skill
Designed 2026-08-20 in conversation; PLUGIN.md is the decision record. Nothing here has
run yet: no live install, no build, no capture. The wrapper's two launch branches and the
cookie-seeding are written against documented behaviour, not observed behaviour.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-20 20:14:29 +00:00