From 96f243fafce02aa4af2cc077dff6f29a1ec734ec Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Tue, 20 Oct 2026 14:00:58 -0500 Subject: [PATCH] plans: human boundary row brief (P19 333, #1694, Gander, reviewer Duckworth, mos-0989); Gander seat dir; seat READMEs name the credentials row, not row 195 (now 190b) --- agents/README.md | 1 + agents/duckworth/README.md | 2 +- agents/gander/README.md | 8 ++++ agents/honker/README.md | 2 +- agents/launchpad/README.md | 2 +- agents/morgana/README.md | 2 +- agents/webby/README.md | 2 +- docs/plans/2026-10-20_human-boundary.md | 62 +++++++++++++++++++++++++ 8 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 agents/gander/README.md create mode 100644 docs/plans/2026-10-20_human-boundary.md diff --git a/agents/README.md b/agents/README.md index e698bfb0c..08a1b69de 100644 --- a/agents/README.md +++ b/agents/README.md @@ -19,6 +19,7 @@ not fleet seats. Keep changes in `/mnt/storage/src/mosaic-stack`; do not modify | Launchpad | Builder, MVP T1 row 192 (Q175 SSO phase 1) | T3 session (Claude, Opus 5.5), started by Sage under mos-0974/0977 | none, T3 only | | Morgana | Builder, MVP T1 row 193 (human users and RBAC) | T3 session (Claude, Opus 5.5), started by Sage under mos-0974/0977 | none, T3 only | | Honker | Builder, MVP T1 row 194 (agent lifecycle) | T3 session (Claude, Opus 5.5), started by Sage under mos-0974/0977 | none, T3 only | +| Gander | Builder, the human boundary across uids (P19 333, #1694) | T3 session (Codex, gpt-6.1-sol), started by Sage under mos-0977 | none, T3 only | | Webby | Reviewer: Case 2 designs, rows 192 and 194 | T3 session (Claude, Opus 5.5, thread 03086006), started by Mos (mos-0981) | none, T3 only | | Duckworth | Reviewer: federation designs, row 193 | T3 session (Claude, Opus 5.5, thread ffceafec), started by Mos (mos-0977) | none, T3 only | | Sage | Project lead: coordination, review, integration; earlier DYOR strategy records retained | T3 session (Claude Code); Pi launcher `zai/glm-5.3:high` retained | `agents/sage/launch.sh` | diff --git a/agents/duckworth/README.md b/agents/duckworth/README.md index 04b947127..b9c2899e3 100644 --- a/agents/duckworth/README.md +++ b/agents/duckworth/README.md @@ -3,5 +3,5 @@ Reviewer seat, Claude Opus 5.5, started by Mos (mos-0977, thread ffceafec). Reviews federation designs and MVP T1 row 193. No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no -credentials of its own; until row 195 settles per-agent identity, it pushes only its own `duckworth/*` branches +credentials of its own; until the credentials row settles per-agent identity, it pushes only its own `duckworth/*` branches through the repository credential helper (mos-0981), never `refactor`, `main` or another seat's branch. diff --git a/agents/gander/README.md b/agents/gander/README.md new file mode 100644 index 000000000..a8c3fe7a4 --- /dev/null +++ b/agents/gander/README.md @@ -0,0 +1,8 @@ +# Gander + +Builder seat, Codex gpt-6.1-sol, started by Sage under mos-0977 item 5 (more Codex Sol rows) for the human +boundary row (P19 333, #1694, mos-0989). + +No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no +credentials of its own; until the credentials row settles per-agent identity, it pushes only its own `gander/*` +branches through the repository credential helper (mos-0981), never `refactor`, `main` or another seat's branch. diff --git a/agents/honker/README.md b/agents/honker/README.md index 936e95b47..b42abaad1 100644 --- a/agents/honker/README.md +++ b/agents/honker/README.md @@ -3,5 +3,5 @@ Builder seat, Claude Opus 5.5, started by Sage for MVP T1 row 194 (agent lifecycle, #1692) under mos-0974 and mos-0977. No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no -credentials of its own; until row 195 settles per-agent identity, it pushes only its own `honker/*` branches +credentials of its own; until the credentials row settles per-agent identity, it pushes only its own `honker/*` branches through the repository credential helper (mos-0981), never `refactor`, `main` or another seat's branch. diff --git a/agents/launchpad/README.md b/agents/launchpad/README.md index 008806089..e6f101647 100644 --- a/agents/launchpad/README.md +++ b/agents/launchpad/README.md @@ -3,5 +3,5 @@ Builder seat, Claude Opus 5.5, started by Sage for MVP T1 row 192 (Q175 SSO phase 1, #1690) under mos-0974 and mos-0977. No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no -credentials of its own; until row 195 settles per-agent identity, it pushes only its own `launchpad/*` branches +credentials of its own; until the credentials row settles per-agent identity, it pushes only its own `launchpad/*` branches through the repository credential helper (mos-0981), never `refactor`, `main` or another seat's branch. diff --git a/agents/morgana/README.md b/agents/morgana/README.md index 2bad8da25..eb896fa15 100644 --- a/agents/morgana/README.md +++ b/agents/morgana/README.md @@ -3,5 +3,5 @@ Builder seat, Claude Opus 5.5, started by Sage for MVP T1 row 193 (human users and RBAC, #1691) under mos-0974 and mos-0977. No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no -credentials of its own; until row 195 settles per-agent identity, it pushes only its own `morgana/*` branches +credentials of its own; until the credentials row settles per-agent identity, it pushes only its own `morgana/*` branches through the repository credential helper (mos-0981), never `refactor`, `main` or another seat's branch. diff --git a/agents/webby/README.md b/agents/webby/README.md index 6ba6c1765..c2bca8168 100644 --- a/agents/webby/README.md +++ b/agents/webby/README.md @@ -3,5 +3,5 @@ Reviewer seat, Claude Opus 5.5, started by Mos (mos-0981, thread 03086006). Reviews Case 2 designs and MVP T1 rows 192 and 194. No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no -credentials of its own; until row 195 settles per-agent identity, it pushes only its own `webby/*` branches +credentials of its own; until the credentials row settles per-agent identity, it pushes only its own `webby/*` branches through the repository credential helper (mos-0981), never `refactor`, `main` or another seat's branch. diff --git a/docs/plans/2026-10-20_human-boundary.md b/docs/plans/2026-10-20_human-boundary.md new file mode 100644 index 000000000..3bf03db56 --- /dev/null +++ b/docs/plans/2026-10-20_human-boundary.md @@ -0,0 +1,62 @@ +# Brief: the human boundary across uids and humans (P19 333) + +Sage, 2026-10-20, for Mos's order mos-0989 (P19 333, MOSAICSTA-173, is now on the 10-27 path: federation R3 and +row 193 need it). Gitea #1694. Owner Gander (Codex gpt-6.1-sol, a new builder seat under mos-0977 item 5), +reviewer Duckworth, gate owner Sage. Latest-by: DESIGN.md approved by 2026-10-22, landed by 2026-10-24, and in +any case before federation R3 lands. R3 and row 193 may chain on this row's candidate (Q177). Base: refactor at +the brief commit. Design first. The first deliverable is `agents/gander/work/queue-ROW/DESIGN.md`. + +## The problem, as filed and as it now matters + +P19 333 as filed (row 87, mos-0657): the Console listens on a loopback TCP port, and any host process that +reaches it, under any uid, acts as Jason. Jason accepted that as a documented limit for a one-user host +(mos-0787, row 161). Two things change that: + +- Row 190b (#1693, mos-0986) puts Melanie's hub under its own Linux user. Factory processes then sit on another + uid, on the same host, next to the hub's ports and socket. The other-uid reach is now the Case 2 threat. +- Federation r2 (gizmoduck-0004, 60b9b112a) binds a bus user only from a user-cli whose proof passes the human + walk, whose direct parent is the bus's own Console, and which holds a live grant. That rule rests on the + path-bound human proof (#225): today a same-uid process that runs the tree's `human-cli.mjs` acts as the + human, without touching the Console. The Q175 design (section 8) names that limit and leaves it here. + +## What already settles part of it + +- Q175 phase 2 (#412) settles the Console-ingress part on the main port. Under `--sso`, 7332 answers any + non-public Host with 403 except `GET /healthz`, and every other request needs a verified OIDC session. A + process on another uid that reaches the port gets only `/healthz`. Phase 1 (row 192) builds it; it is live + only after the phase 2 window. +- Row 189 (`--no-send`) is interim only. Until phase 2 the Console takes no human writes, so the reach is + read-only. It settles nothing. +- Row 190b separates files and units by uid. Whether the hub's `broker.sock` refuses the factory uid depends on + its directory and socket modes, which this row checks and tests rather than assumes. + +## What the design must settle + +1. Inventory every listener and entry point per instance: the Console port, the tester listener (7333 today), + `broker.sock`, the human CLI wrapper, the Discord connector and anything row 190 adds. For each: who can + reach it today from the same uid and from another uid, with and without `--sso`. +2. The tester listener. It serves reads and the row 175 tester writes to anything that reaches it, on any uid. + Close the other-uid reach (for example a unix socket with 0600 modes, or a peer-uid check on loopback), or + bring Mos a concrete reason it must stay open. bus.tester stays Jason's switch. +3. The bus human boundary. How the bus tells the human's own verified call from a same-uid process that runs + `human-cli.mjs`. State what federation R3's direct-parent rule needs from the bus (peer credentials on + `broker.sock`, the parent check, how it can't be forged by a child of an agent), and what stays possible for + a same-uid process after this row. Say it plainly where a residual limit remains. +4. Fit with row 193 (Morgana, human users and roles; Mos's B1 rule: a principal comes only from something the + bus verifies) and with federation R3. One mechanism, not three. +5. Migration: the live single-user Console and bus keep working until each instance re-pins. +6. Which parts of P19 333 this row closes, which parts Q175 phase 2 closes, and what P19 333 says when it is + closed. + +## Boundaries + +- Who can reach the Console from outside stays Jason's. This row changes what a host process can do once it + reaches a local port or socket. +- No test touches `~/.mosaic-dev`, `~/.config/mosaic-dev`, the live units or a slot file. No test creates a real + second uid; use stand-ins as rows 190 and 190b do, and name any part only a Q173 window can prove. +- No request to the live 127.0.0.1:7332 or 7333, mosaic.woltje.com or auth.diversecanvas.com. + +## Gate + +Duckworth approves DESIGN.md, then the manifest. The bus, webui and cli suites and every `scripts/test-*.sh` +are green on Sage's gate, and the design's mutants are killed.