Capture full Tripod/Zuse identity vision (§D), supersede EXPIRE-as-TTL plan

No code changes -- pure design capture, per direct request ("capture
EVERYTHING first then we'll build a plan").

Core correction: a session IS a VM (Zuse is a player in the Stadium
fabric like any other, not a special boolean flag on Hera). This
supersedes an in-progress plan this session to implement EXPIRE as a
Stadium-TTL sweep on the zuse_session boolean -- caught mid-research,
before any code was written. Session end = VM detach, much closer to
the existing COOL/capsule_vm_kill() path than a new TTL mechanism.

Captured the full attach/mint flow: idle-loop thumbdrive watch,
cert-only auth (no password/username, no central user directory),
runtime capsule construction from drive content, ACL-based console/VM
binding (resolves Milestone 5's "reuse ACL-PIN vs. new primitive"
question in favor of reuse), ongoing MINT, and deferred detach/flush-
back. Standing completion criterion: nothing here is done until
hardwired calls are replaced by real Hermes messages.

Sorted the resulting gaps into answered (chain-of-trust mechanism,
ACL-reuse decision, no-central-directory) vs. genuinely deferred
(runtime capsule construction, exact ACL comparison semantics,
message-bus migration scope, polymorphic block-boundary behavior,
SSD-store scope, session state round-tripping, and the underlying
WRITE(10) hard blocker). Also flagged a small unrelated bug: the
prompt should read (Zuse)ok>, not zuse)ok>.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U14ET9CWAtbQMbYqomKgXd
This commit is contained in:
Robert Allan James
2026-08-27 09:38:30 -04:00
co-authored by Claude Sonnet 5
parent 030a3e6dc0
commit 89d557c678
+129 -26
View File
@@ -1144,43 +1144,146 @@ not built on top of or left in place.
--- ---
## D. Tripod final shape — minting, one-time Zuse fuse, messaging-only (vision, not yet scoped) ## D. Tripod final shape — minting, one-time Zuse fuse, messaging-only (vision, substantially expanded 2026-08-27)
Stated directly by Captain Bob, 2026-08-25: "we're going to have to iterate because I know Stated directly by Captain Bob, 2026-08-25: "we're going to have to iterate because I know
what the final shape of the tripod will be." Recorded here as a forward-looking vision, not what the final shape of the tripod will be." Originally captured as a forward-looking vision,
yet broken into implementable items — captured so near-term Stadium/VM work (§B above) is not yet broken into implementable items. **2026-08-27: expanded into a much fuller picture**
made against the right end-state rather than in ignorance of it. Full detail also saved as after Phase 8/Milestone 6 closed and unblocked this design pass — captured here in full before
memory `project_tripod_final_shape_vision.md`. any of it gets scoped into implementable items, per direct request ("capture EVERYTHING first
then we'll build a plan"). Full detail also in memory `project_tripod_final_shape_vision.md`.
### D.1 — Original vision (2026-08-25), still accurate
- **Thumbdrive presentation → legality check → mint.** A newly presented thumbdrive is - **Thumbdrive presentation → legality check → mint.** A newly presented thumbdrive is
checked for legality (against the CA-root-derived identity/certificate scheme already checked for legality (against the CA-root-derived identity/certificate scheme). If not
decided earlier this session, `FABRIC-2.md`). If not legal, it is "minted" — formatted for legal, it is "minted" — formatted for system use — which (1) spins a new user VM and (2)
system use — which (1) spins a new user VM and (2) attaches the console VM to it. attaches the console VM to it.
- **One-time Zuse mint + fuse-blow on first install.** A brand-new system instance - **One-time Zuse mint + fuse-blow on first install.** A brand-new system instance
("Install"/"Try It") mints exactly one Zuse superuser, then irreversibly "blows a fuse": ("Install"/"Try It") mints exactly one Zuse superuser, then irreversibly "blows a fuse":
direct quote, "we mint one and only one Zuse user and blow a fuse. The only way around is a direct quote, "we mint one and only one Zuse user and blow a fuse. The only way around is a
new system." Post-fuse, no further Zuse can ever be minted on that instance — but the new system." Post-fuse, no further Zuse can ever be minted on that instance — but the
system is NOT bricked: the existing Zuse superuser keeps working, and ordinary users can system is NOT bricked: the existing Zuse superuser keeps working, and ordinary users can
still "thumb in" via regular thumbdrives. still "thumb in" via regular thumbdrives. **This half is now actually built** — Phase 8's
entropy→signing→block-fence persistence work (2026-08-26, `project_phase8_milestone6_complete.md`)
implements exactly this, minus the physical thumbdrive itself (see D.4, WRITE(10) gap).
- **Messaging-only once Tripod is fully live.** All inter-VM interaction becomes Hermes - **Messaging-only once Tripod is fully live.** All inter-VM interaction becomes Hermes
messaging, not direct calls/shared state — a stated end-state, not the current messaging, not direct calls/shared state — a stated end-state, not the current
implementation. implementation. **Reaffirmed and sharpened 2026-08-27: hardwired/direct-call
- **Polymorphic block-boundary behavior for user VMs.** Stated in one sentence, not yet implementations are acceptable *during development only* — no piece of this design is
elaborated: a user VM needs to behave polymorphically when crossing block boundaries. considered actually finished until its hardwired calls are replaced with real Hermes
Needs a dedicated follow-up conversation before this is actionable. messages.** This is a standing completion criterion for everything in this section, not a
- **`ClaudeEXPORT/`** (repo root, new as of 2026-08-25) — a prior Claude data export the user separate future milestone.
pointed at for "concepts and thoughts as guidelines" on this vision, explicitly flagged as - **Polymorphic block-boundary behavior for user VMs.** Still just one sentence, still not
possibly containing superseded/conflicting ideas, not authoritative. `conversations.json` is elaborated — genuinely unresolved since 2026-08-25, needs its own follow-up conversation.
~66MB; mine selectively (grep or a subagent) rather than reading wholesale. See memory - **`ClaudeEXPORT/`** — a prior Claude data export, "concepts and thoughts as guidelines,"
`project_claude_export_archive.md`. explicitly flagged as possibly containing superseded/conflicting ideas, not authoritative.
See memory `project_claude_export_archive.md`.
### D.2 — The session model (2026-08-27): a session IS a VM
Direct correction to how this document and the earlier `EXPIRE` framing (§B) had been
thinking about "sessions": **a session is any VM client running in the Stadium fabric — Zuse
is no different from any other VM.** The Stadium/FABRIC metaphor restated by Captain Bob:
the fabric floats inside the Stadium; VMs actually doing work are "players on the field"
(system perturbances); user interaction is "fans in the stands" providing patron-driven noise.
Zuse is a player like any other, not a special boolean flag on Hera.
**This directly invalidates the `EXPIRE`-as-TTL-on-`zuse_session`-boolean plan this session
had started scoping (§B's `EXPIRE` decision, and the implementation research begun
2026-08-27 before this correction landed).** Today's `zuse_session` field on the VM struct is
not what a "session" actually is in this model — a session ending is a **VM detaching**, far
closer to the existing, real, working `COOL`/`capsule_vm_kill()` path than to a new
Stadium-behaviour-tag TTL sweep. **`EXPIRE` as originally scoped is superseded, not merely
deferred** — when Stadium/ACL session-lifetime work is picked up again, it should be framed
as "what happens when a user-VM's owning thumbdrive detaches," reusing `COOL`, not as a
timeout on a flag.
When Hera has no VM attached beyond fleet-servicing strata, she idles, watching services and
maintaining a serviced fleet foundation — her normal steady state, not a special case.
### D.3 — The attach/mint flow, end to end
1. **Idle loop watches for thumbdrive connects** (`sk_repl_idle()`, already the right hook —
confirmed 2026-08-27 during the (superseded) `EXPIRE` research: ~1s cadence, already used
for `xhci_poll_events()`/MSC attach).
2. **Cert-only authentication — no password, no username.** A presented thumbdrive's identity
is *entirely* the cert on it. Verification means checking the cert's fields directly (chain
of trust, most likely signed by *Zuse's own key* — the same `x509_ed25519.c`/
`ed25519_verify()` primitives Milestone 6 already built and proved work end to end, just
verifying against Zuse's pubkey instead of the snakeoil intermediate's). **The system has
no requirement to maintain any single identity itself** — no user directory, no central
registry of who exists. Each thumbdrive is a fully self-contained, portable identity
record.
3. **A dedicated user VM is born** from the identity's own data — "the users/agents/services
metadata can reside in their capsule and [get] encoded directly into their dictionary when
they attach and their init.4th executes." This is a *runtime*-constructed capsule from
drive content, not a build-time-embedded one like `pki:snakeoil-intermediate.der` — a
materially different mechanism from anything `mkcapsule` does today (gap, see D.4).
4. **The console VM attaches to the new user VM** — this is exactly Milestone 5's still-open
"Console/VM key-match binding" item, now with its open question *resolved*: "the bumps on
a thumbdrive have to fit the holes on the VM... (ACL territory)" — **reuse the existing
ACL primitive (`acl_mode`/`acl_allow`/`acl_pinned`) for the key-match check, don't build a
separate mechanism.** Exact comparison semantics still undesigned (see D.4).
5. **The user plays entirely inside their own VM** — all their FORTH activity happens in
their own isolated VM context, never Hera's or anyone else's.
6. **Ongoing minting**: while Zuse is attached/active, a second blank thumb presented can be
minted with a new named identity (worked example given: `S" CaptBob" MINT`-shaped flow)
and ejected — this is the still-open `MINT` word from Phase 8's own punch list, now with a
concrete attach-flow context to design it against.
7. **Detach**: working state is copied back to the user's own thumb and flushed before eject.
**Explicitly deferred — stated directly as "going to be a maintenance operation later,"
not needed now.**
### D.4 — Gaps identified 2026-08-27, sorted by whether they're answered
**Answered (resolved during capture, not deferred):**
- Milestone 5's "reuse `ACL-PIN` vs. build a new key-match primitive" question — reuse ACL.
- `EXPIRE`'s framing — superseded by "session end = VM detach," see D.2.
- Regular-user cert chain-of-trust mechanism — signed by Zuse's own key, verified with
already-built, already-proven Ed25519/X.509 primitives (Milestone 6). No new crypto work
needed, only a new verification *call site* using existing functions.
- Whether the system needs a central user directory — no, by design; each thumbdrive is
self-contained (reinforces D.3 point 2, was implicit, now explicit).
**Real, unanswered gaps — deferred on purpose (per "answer what we can, defer what we
can't"):**
- **How does thumbdrive content actually become a capsule at runtime?** `mkcapsule` only
ever builds capsules at build time, baked into `capsule_generated.c` — nothing today
constructs a capsule from data read off a live-attached device. This is new mechanism, not
a variation on anything that exists.
- **Exact ACL "bumps and holes" comparison semantics.** Which specific ACL fields, compared
how, constitute a console-to-VM match? Direction is settled (reuse ACL), the actual
comparison logic is not designed.
- **Message-bus migration scope.** Which specific interactions (attach detection, cert
verify, console bind) move to Hermes messages, and what do those message shapes look like?
Entirely unscoped, explicitly deferred until after a hardwired version exists to migrate
*from*.
- **Polymorphic block-boundary behavior for user VMs** — still just the one original sentence
from 2026-08-25, never elaborated.
- **SSD identity-store scope** — does the system-resident store (the block-fence built in
Phase 8) ever hold anything about *regular* users, or is it purely Zuse/system bookkeeping
with regular users staying purely thumbdrive-resident? Best read of what was said: the
latter, but not stated explicitly enough to treat as settled.
- **Does a user's VM/session state round-trip across multiple attaches** (unplug, come back
later, resume exactly where you left off), given detach explicitly copies state back to the
drive? Implied yes by the detach description, not confirmed directly.
- **The single biggest hard blocker underneath all of it: SCSI `WRITE(10)` still doesn't
exist** (`blkio_usb.c` is read-only — Milestone 2's biggest open item, unchanged). Minting
a blank thumb, and flushing state back on detach, both need real writes to physical USB
media. None of D.3's flow can run on real hardware until this lands; QEMU testing would need
to proxy through a writable virtio-blk stand-in the same way Phase 8's cert persistence did
for Zuse's own identity.
**Small, unrelated, real bug found along the way:** the prompt shows `zuse)ok>` (a stray
trailing paren, "never corrected typo") — should be `(Zuse)ok>`, both parens around the
identity name, generalizing to any attached identity (e.g. `(CaptBob)ok>`). Independent of
everything else in this section; safe to fix any time.
**Why this affects §B:** VM-`COOL` (and any inter-VM Stadium wiring) sits close to this **Why this affects §B:** VM-`COOL` (and any inter-VM Stadium wiring) sits close to this
still-iterating design. Building it now risks conflicting with or being thrown away by the design — see D.2's `EXPIRE` supersession above, the concrete example of exactly this risk
Zuse/messaging shape once that gets its own pass — hence §B's punch list defers VM-`COOL` materializing.
explicitly rather than resolving it in this pass. Block-patron `MIGRATE` work does not
obviously depend on this vision and is not deferred for this reason.
**Next step:** no implementation here yet. When this gets its own design pass, start by **Next step:** no implementation yet — this section is capture only, per direct request. Next
clarifying "polymorphic block-boundary behavior" and the exact legality-check mechanism session should turn D.3/D.4 into an actual scoped, ordered plan (the user's own framing:
(presumably the CA-root certificate scheme), then scope minting as its own capsule-birth-style "identify gaps, answer what we can, defer what we can't... push the pile out in front of us").
protocol (mirroring the existing capsule birth writeup's rigor) before writing any code.