deployments

deployments

all docs

One starting point, infinite structures — the deployment shapes

A seed + status document. Written for the next agent (human or model). It captures the

shapes the *one* substrate already takes, and — load-bearing — that each shape is a

posture + profile + which action renders the floor, never engine code. Read

[VISION.md](VISION.md) and [SELF-DELIVERY.md](./SELF-DELIVERY.md) first. Status:

mixed and honest per shape below. The universal floor is built and verified this session;

the others are built mechanisms documented as deployment patterns.

The one idea

Define one starting point — the public floor everyone lands on (including you) — and

from it *step into deeper structures* without the substrate ever changing. The public launch,

your private app behind it, a sealed payment terminal, an offline appliance: not different

products, the same engine wearing a different face, decided by *who is asking* and *what

the device is for*. The arrangement is data; the floor is fixed.

Every shape below answers the same two questions with store content alone:

• Posture — who may reach which action (access / access_public / access_owner,

evaluated live and fail-closed: _core/_gate.action, kernel/access.cpp).

• Profile — what this device *is* (door + installed capabilities + intelligence route:

ARCHITECTURE, "Capability profile").

Shape 1 — Public floor for all, private app behind it (built + verified)

The floor is the launch version EVERYONE lands on at / — including you — no login. From

it you step into your private app (the full current experience): recognised people (you +

the shares you verify) walk straight in; a visitor meets the sign-in door. The public floor

and the private app are two faces of one node — you live on the floor and enter the app

deliberately; outsiders never reach the app.

Mechanism (store only):

• home/content.action — claimed node → _scene_default (the floor), for everyone.

• home/_scene_default.action — the floor: a chat-first starting screen (ChatGPT / Claude /

Gemini style) that surfaces the existing chat app — its composer POSTs q to /chat

(the carry chat already handles). Plus "📁 My things" (opens your current app — the

folder of everything you have) and, for a signed-out visitor, sign-in / invite.

• home/_drawer.action — the floor's OWN menu (Home · Chat · Reels · My things · sign in/out),

so the menu system itself changes between the two arrangements; the private app keeps the full

node menu, and an anonymous visitor gets no drawer (the floor stays clean).

• home/dash.action — the private app: the full dashboard (twin, things, store, node tools),

rendered through the one view pipeline with the full menu.

• home/defaults.data — access_public = index content (the floor is open to all). dash is

neither public nor owner-only, so it falls to the member tier: _recognized (owner +

verified shares) walk in, a visitor hits sign-in. access_owner = mind brain connect keeps

the deep owner actions gated; everything else stays member, fail-closed.

Verified on the live engine (embed-test, web door = anonymous; CLI = owner):

request

who

result

/

owner

the public floor (its own menu + "📁 My things"), not the dashboard

/

any visitor

200 · the same public floor

/home/dash

owner / verified share

the private app (Welcome home, Quick access)

/home/dash

a visitor

401 · sign-in — the app stays private

/chat (member)

a visitor

401 · internal stays internal

/trust/redeemform (invite)

a visitor

200 · public connect path

You live on the floor by default, so there is nothing extra to "preview" — to see the visitor

experience exactly, open / in a logged-out browser, another device, the web door, or via a

share link to someone you have not verified.

The split is the gate doing its job — no engine change. The security rule held: carve out,

never flip the base. Only / (the floor) and the already-public sign-in / invite / verify

flow (trust) are open; the private app and everything else stay member-gated, fail-closed.

Shape 2 — Verified vs. default (lenses)

One entry, different *depth* by identity. The floor is one shell; *which things

are visible or enterable* differs by who is looking. The owner enters their space; a

verified peer sees shared things; a stranger sees the welcome and a way in. This is the

lens model: a scoped projection of a thing, expressed as a thing, carrying access

posture and no data of its own — and it needs no engine primitive because grants are

read live per request and every read is gated fail-closed.

• Mechanism + proof: [lenses.md](./lenses.md) (kernel/access.cpp, kernel/resolve.cpp).

• Chrome already adapts: thing/_tabbar.action shows Home + Chat to everyone, the owner-only

tab only if _has_role owner.

• "Verification only ever unlocks talking to others" — on your own node you are always owner;

the verify graph gates cross-network calls only (trust/AUTH.md).

Status: the substrate is built and proven zero-change; the lens *convention* (a lens

base, a public "guest" support twin so the floor's Chat/I are live for anonymous visitors)

is the next authoring step, not engine work.

Shape 3 — Offline / sealed appliance (built mechanism)

Pack the store with the app and it needs to connect nowhere. The class library — all

behavior — is a plain filesystem tree, so it bakes into the shell and the engine boots with

no network. Ideal for fitted, untampered, locked-down settings.

• Baked store: mobile/android/seed.sh — *"bake the store into the APK so the engine

boots with NO network; on first launch the shell copies assets/store_seed/ into the

node's zero.9.stores."* iOS mirrors it: Resources/store_seed → ZeroApp.seedStore.

• Hydration is missing-only: functions/fs/hydrate.cpp — *"No-op when the dir already

exists or no remote is set."* A fully-present store never touches the network; unset the

remote base and it is offline by construction.

• Sealed = local door + profile. A kiosk/handheld uses a local (owner-trusted) door and

a capability profile that pins exactly what it is. Intelligence can pin local-only, no

egress (ARCHITECTURE, "Intelligence"), so a privacy/payment device never calls out.

Untampered — the honest requirement: "offline" is built; "untampered" additionally wants

integrity on the baked store (a signed/pinned seed so a swapped folder is detectable).

The trust/verification primitives exist (trust.verify, signed edges) and the versioned

runtime stamps lineage; wiring seed-integrity into provisioning is a deployment step, not an

engine change. Native capabilities remain shell-bound (Law 3) — a sealed device can do

anything expressible over the capabilities it was built and provisioned with.

Shape 4 — Single-purpose node (built mechanism)

A screen that only collects payments — no iroh, no model, no mesh. Because the engine is

the *only* floor and everything else is a capability, a node can install one store and

nothing else.

• Mesh/iroh is a capability, not the floor — omit it and the node simply never makes

cross-network calls; trust verification only gates *that*, so a non-networked node needs

no trust graph at all (trust/AUTH.md).

• Intelligence is a provider, not a dependency — oracle can be absent or delegated; an

incapable device installs none of it (VISION, "Intelligence is a provider").

• The profile is the whole difference — door, start, capabilities, native,

oracle.* (ARCHITECTURE, "Capability profile"). A flagship and a payment terminal run the

*same app*; the profile is the only difference.

Status: every ingredient (door model, capability profile, public posture, scene

rendering) is built; "payment terminal" is then a profile + a store + a public floor scene —

authoring, not engineering.

The common spine

Every shape above is the same three store-level dials, never engine code:

who lands here → posture (access / access_public / access_owner, live + fail-closed)

what runs here → profile (door + capabilities + native + oracle route)

what they see → the action that renders the floor (a scene; the viewer draws itself)

That is why the substrate is versatile "for any generation": a new deployment is a new

arrangement of dials over an unchanged floor.

Where to go next

• [SELF-DELIVERY.md](./SELF-DELIVERY.md) — why the substrate delivers all of this using

only itself.

• [lenses.md](./lenses.md) — scoped projections (Shape 2), with the zero-change proof.

• [native-rendering.md](./native-rendering.md) — one scene, every viewer.

• [VISION.md](VISION.md) — the three laws; the capability profile.

• home/content.action, home/_scene_default.action, home/_drawer.action,

home/dash.action, home/defaults.data — Shape 1, as shipped.