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:
co-authored by
Claude Sonnet 5
parent
030a3e6dc0
commit
89d557c678
+129
-26
@@ -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.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user