UNI Universal Natural Intelligence

Wiki · Architecture & Decisions

Views

Architecture & Decisions · docs/control-plane/views.md @ b909801f3db4 (hierarchical-aif/motor-stack) — opens the published snapshot 8b4b5935bcba
3 values were removed from this page. Each one is marked in place as [redacted: category] 3 private address. Nothing else was altered. The document is otherwise exactly as it is written in the repository, and the sha256 below is of the original, so what was ingested stays checkable.

How to read this page

Three ways to read this page. Precise is the document itself, exactly as it is written in the repository. Plain and Clear were written for this website to help you meet that document — they are about it. They are not it, and they are not evidence.

This is the design record of the part of the estate whose job is to stop the rest of it claiming more than it has measured. It runs to architecture notes, numbered decision records, phase plans, and the results written after each phase ran.

It is for anyone curious how a decision was actually reached — what was considered, what was refused, and what the refusal cost. The decision records are the most durable part: each names one choice, the alternatives, and the consequence accepted in exchange. The failure-modes page is worth the detour, because it states each refusal as something you could go and test rather than as a promise.

Read the architecture page first. It opens by declaring itself part design and part built, which sets the tone for the whole section. Then the first decision record, then whichever phase interests you — read as a pair, the plan and the results page written afterwards, including the phases where a premise turned out to be wrong and the receipt says so.

What it is not: a description of running software, and not a complete record. Three documents from this area were withheld from publication, because they describe private infrastructure or the operator declined them; they are listed as withheld rather than quietly dropped, so you can see that they exist.

Your browser cannot switch reading levels, so the document itself is shown.

Precise — the source document

This is the document. Rendered from the repository at the commit above, with nothing rewritten for the web. A gate re-renders it on every deploy and fails the build if a single byte differs.

Rendered from the model in workspace.dsl. These Mermaid sources render natively in GitHub, GitLab and most markdown viewers with no build step. Edit the text; the picture follows.

If you change a view here, change workspace.dsl too — the DSL is the model of record and these are its projections.


1. Context — who uses the platform

C4Context
title UNI Platform — system context

Person(michael, "Michael", "Regenerative architect and organic operator. Inside every body. Types go-live personally.")
Person(reviewer, "External reviewer", "Receives evidence packages. Never has write access.")
Person(audience, "Audience", "Public viewers of the science broadcast.")

System(platform, "UNI Platform", "Digital-life research colony plus the broadcast platform that puts it on air.")
System_Ext(streams, "Streaming platforms", "YouTube, Twitch, up to 20 endpoints.")

Rel(michael, platform, "Enters, operates, authors verdicts, stops runs")
Rel(reviewer, platform, "Receives evidence packages")
Rel(platform, streams, "One RTMP stream, fanned out")
Rel(audience, streams, "Watches")

2. Bodies — the container view

Four bodies. None may be collapsed into another. See ADR-0001.

C4Container
title UNI Platform — the four bodies and the stacks they govern

Person(michael, "Michael", "Organic operator")

System_Boundary(platform, "UNI Platform") {
  Container(door, "The Door", "launcher.cjs :8090", "BUILT. Admission, release, keys, journey. LAW: a polled read never spawns anything.")
  Container(cp, "The Control Plane", "SP.ControlPlane, root zero-dep app", "PARTLY BUILT. Ledger, GateRow, Command, Drift landed 2026-07-25. Registry, Verdict, Run, Pair, Room, Scene NOT BUILT. No verdict authored yet. THIS IS THE LAB.")
  Container(lab, "The Lab View", "THREE.js on T1000", "NOT BUILT. The immersive room: floor, rooms, airlocks, portals.")
  Container(gaia, "Gaia", "gaia_server.cjs :8096", "BUILT. Projects signals with provenance. LAW: never scores, ranks or authors a verdict.")
  Container(hud, "The HUD", "WPF + JSON :8100", "BUILT. Sees and carries. LAW: never fabricates; unknown renders SYNCING.")

  Container(colony, "Colony world", "Elixir lib/sp + paper.jar :25565", "BUILT. The subject of the science.")
  Container(look, "Overlooker", "LiveView + world.js", "BUILT. The colony's own god-view and blanket monitor.")
  Container(cc, "Colony control center", "command_center.cjs :8098", "BUILT. Vision mixer for one world.")
  Container(enc, "Encoder", "OBS + MediaMTX :1935", "BUILT. One render, one encode.")

  ContainerDb(gates, "Gate ledger", "gates.ndjson", "Append-only. 191 rows. Never edited.")
  ContainerDb(rcpt, "Receipt store", "files + sha256", "Content-addressed. Reproduces each claim.")
  Container(appr, "Approval queue", "uni-approvald", "One human approve or deny per mutating call.")
}

Rel(michael, door, "Crosses once")
Rel(michael, lab, "Works inside, authors, stops")
Rel(michael, hud, "Carries")
Rel(michael, appr, "Co-signs")

Rel(door, cp, "Admits and releases")
Rel(cp, lab, "Compact scene per tick")
Rel(lab, cp, "Explicit verbs only")
Rel(cp, gates, "Appends a row")
Rel(cp, rcpt, "Writes a receipt")
Rel(cp, appr, "Requests co-sign")
Rel(cp, colony, "Starts and stops paired runs")

Rel(gaia, gates, "Projects verbatim")
Rel(gaia, rcpt, "Projects with sha256")
Rel(gaia, door, "Projects register and journey")
Rel(gaia, cp, "Projects the ledger, read-only")

Rel(hud, gaia, "Reads signals")
Rel(lab, look, "Looks through, never reimplements")
Rel(colony, look, "Observer frame per tick")
Rel(cc, enc, "Cuts and takes")
Rel(enc, gates, "")

The one-way rule. Every arrow into Gaia is a projection. There is no arrow out of Gaia that actuates anything — that is the G-PA fence, enforced by construction: the HTTP surface has no mutating route and no MCP tool is effectful.


3. Deployment — which body runs where

C4Deployment
title Fleet — deployment of the four bodies

Deployment_Node(chip, "The chip — uni-lab", "[redacted: private-address], rootless. Zero broadcast.") {
  Container(colony, "Colony world", "Minecraft + Phoenix FEP brain", "The colony, always. Never on THINKER.")
  Container(look, "Overlooker", "LiveView + world.js", "")
  Container(appr, "Approval queue", "uni-approvald", "")
  Container(flag, "Flagellum project", "Next.js :8790 :8791", "CPU-only build")
  ContainerDb(gates, "Gate ledger", "gates.ndjson", "")
}

Deployment_Node(thinker, "THINKER", "[redacted: private-address], NVIDIA T1000. Portable. Captures the colony; hosts none of it.") {
  Container(door, "The Door", ":8090", "")
  Container(gaia, "Gaia", ":8096", "")
  Container(hud, "The HUD", ":8100", "")
  Container(cp, "The Control Plane", "PARTLY BUILT", "")
  Container(lab, "The Lab View", "NOT BUILT", "")
  Container(enc, "Encoder", "OBS + MediaMTX", "")
}

Deployment_Node(node2, "node2 — uni-lab-79740c", "Mesh [redacted: private-address]. Fan-out only, no encode, no colony.") {
  Container(relay, "Fan-out relay", "uni-bcast-relay", "")
}

Rel(colony, enc, "Captured over the LAN")
Rel(enc, relay, "One RTMP stream")

4. The evidence spine

Steps 1–6 have no home today. Steps 7–9 already work.

flowchart LR
  A["1 register the gate<br/>before the run<br/>falsifier named"] --> B["2 paired run<br/>exactly one variable<br/>or the result is VOID"]
  B --> C["3 observe<br/>continuous time-series<br/>RCON is the authority"]
  C --> D["4 adversarial review<br/>three perspectives<br/>two of them hostile"]
  D --> E["5 author the verdict<br/>PASS PARTIAL FAIL WITHHELD<br/>never a percent"]
  E --> F["6 write the receipt<br/>commit, artifact, log"]
  F --> G["7 append the row<br/>gates.ndjson<br/>never edited"]
  G --> H["8 Gaia projects it<br/>verbatim plus sha256<br/>decides nothing"]
  H --> I["9 HUD and lab show it<br/>drift shown as two<br/>objects that do not align"]

  subgraph NOHOME ["Control Plane — steps 1-6 still have no home (Registry and Verdict are Phase 3)"]
    A
    B
    C
    D
    E
    F
  end
  subgraph WORKS ["Already works"]
    G
    H
    I
  end

5. Gate lifecycle

stateDiagram-v2
  [*] --> REGISTERED: register before the run, with falsifier
  REGISTERED --> PENDING: awaiting its run
  PENDING --> ADJUDICATED: run complete, verdict authored
  ADJUDICATED --> [*]: row appended, never edited

  state ADJUDICATED {
    [*] --> PASS
    [*] --> PARTIAL: names exactly which sub-claim holds
    [*] --> FAIL
    [*] --> WITHHELD
  }

  note right of REGISTERED
    A verdict without a pre-registered
    gate is refused. Prospectivity is
    decided by the commit graph, never
    by prose.
  end note

A gate may be lowered on receipts. That is the gate working, not a failure.


6. Run lifecycle

stateDiagram-v2
  [*] --> DESIGNED
  DESIGNED --> READY: protocol frozen, gate registered
  READY --> RUNNING: explicit operator verb
  RUNNING --> COMPLETE: all planned N reached
  RUNNING --> FAILED_RUN: crash or halt
  RUNNING --> VOID: more than one variable differed
  COMPLETE --> [*]
  FAILED_RUN --> [*]: inspectable, never a scientific negative
  VOID --> [*]: unclaimable, re-run cleanly

  note right of COMPLETE
    actual_n = 0            -> NOT_RUN
    0 < actual_n < planned  -> PARTIAL_NOT_ESTABLISHED
    actual_n > planned      -> OVERRUN, flagged, never silent
  end note

7. Rooms and airlocks

stateDiagram-v2
  [*] --> Outside
  Outside --> Green: open, no key
  Green --> Clean: two keys
  Clean --> Sterile: two keys plus a passing scan
  Sterile --> Outside: contamination check and manifest recompute
  Clean --> Green: two keys
  Sterile --> Clean: two keys

  note right of Sterile
    No receipt, no entry.
    The door stays shut and
    names the missing receipt.
    There is no override path.
  end note

8. Authoring a verdict — sequence

sequenceDiagram
  actor M as Michael
  participant L as Lab view
  participant CP as Control Plane
  participant AP as Approval queue
  participant GL as Gate ledger
  participant G as Gaia
  participant H as HUD

  M->>L: enter the room, inspect the run
  L->>CP: GET /api/cp/state (pure read, spawns nothing)
  CP-->>L: scene, each node carrying truth_class and receipt_ref
  M->>L: author verdict (explicit verb)
  L->>CP: POST /api/cp/verdict/author
  CP->>CP: refuse if no pre-registered gate
  CP->>CP: refuse if more than one variable differed
  CP->>AP: request human co-sign
  AP-->>M: approve or deny
  M-->>AP: co-sign (never own change)
  AP-->>CP: granted
  CP->>GL: append row (never edit)
  CP->>CP: write receipt (commit, artifact, log)
  G->>GL: project row verbatim
  G->>H: signal with provenance
  H-->>M: shows the verdict as recorded
  Note over G: Gaia carries the verdict.<br/>It never authored one.

9. Rendering the truth class

The lab view chooses a material from the truth class, not from a style flag. A viewer must read epistemic status from a still screenshot with no text.

flowchart TD
  N["scene node"] --> Q{"has truth_class<br/>and receipt_ref?"}
  Q -->|no| FOG["FOG<br/>walkable, not actionable"]
  Q -->|yes| T{"truth_class"}
  T -->|OBSERVED| O["lit, solid, full shadow<br/>nothing else may look like this"]
  T -->|STRUCTURAL_RECONSTRUCTION| S["solid but visibly rebuilt<br/>seams shown, not smoothed"]
  T -->|REDUCED_MODEL / DERIVED| D["translucent<br/>you see through a calculation"]
  T -->|SIMULATED| R["visibly staged<br/>green-room light follows it"]
  T -->|UNKNOWN / UNVERIFIED| FOG

Two rules that stop the room from lying:

  1. No frame rate, glow, motion or particle may imply liveness. Liveness renders only from a real probe result — a frozen colony looks frozen while every process reports up.
  2. Passing a gate renders the named behaviour and nothing more. No material, light or room in this lab can depict awareness, experience or life.

10. Component view — inside the Control Plane

Rendered from the model: generated/structurizr-ControlPlaneComponents.svg.

flowchart TB
  subgraph CP["The Control Plane — phases 2 through 6 are BUILT; only the scene is not"]
    REG["Registry · phase 3 · BUILT<br/>registration is the FIRST entry naming the gate"]
    VER["Verdict · phase 3 · BUILT<br/>PASS PARTIAL FAIL WITHHELD PENDING"]
    ANC["Anchor · phase 3 · BUILT<br/>the head a chain cannot hold about itself"]
    STO[("Store · phase 4 · BUILT<br/>append-only, the only module that writes")]
    RUN["Run · phase 4 · BUILT<br/>identity is not the record"]
    PAIR["Pair · phase 4 · BUILT<br/>one differing variable, or VOID"]
    WIT["Witness · phase 5 · BUILT<br/>node2 refuses the writer's key"]
    ROOM["Room + Key · phase 6 · BUILT<br/>two parties, receipts on disk, no override"]
    SCENE["Scene · phase 7<br/>every node carries truth_class"]
    DRIFT["Drift · phase 2 · BUILT<br/>refuses cross-type AT CONSTRUCTION"]
    CMD["Command · phase 2 · BUILT<br/>THE ONLY WRITER"]
    LED[("Ledger · phase 2 · BUILT<br/>append-only, hash-chained")]
    ROW["GateRow · phase 2 · BUILT<br/>validates against the schema"]
  end
  classDef built fill:#e8f4ef,stroke:#0f6e56,stroke-width:2px;
  class DRIFT,CMD,LED,ROW,REG,VER,ANC,STO,RUN,PAIR,WIT,ROOM built;
  REG --> CMD
  VER --> CMD
  RUN --> PAIR
  RUN --> CMD
  ROOM --> CMD
  CMD --> LED
  CMD --> ROW
  DRIFT --> LED
  SCENE --> LED
  ANC --> LED
  STO --> LED
  RUN --> PAIR
  WIT --> STO

Everything funnels through Command. If a write reaches the ledger without passing it, ADR-0001 has been violated.

The twelve green components landed across five phases — Phase 2 at 75e2fc4, Phase 3 at 8ff5591, Phase 4 at e6a0529, Phase 5 at 915bfbb, Phase 6 at d524ad1 — 286 tests in total. Command is fenced by a runtime writ type-gate and a static scan proving no other module in lib/ reaches the writer — both mutation-tested, because a static scan cannot fail before its subject exists.


11. Sequence — a claim becomes evidence

The spine, end to end. Steps 7–9 already work. Of steps 1–6, registration, the ledger append, the row build and verdict authorship now exist; running paired, observing and adversarial review do not. This is what building the rest means.

sequenceDiagram
  actor M as Michael
  participant REG as Registry
  participant RUN as Run
  participant PAIR as Pair
  participant VER as Verdict
  participant CMD as Command
  participant LED as Ledger
  participant AP as Approval queue
  participant G as Gaia

  M->>REG: register gate (pass_condition, falsifies_condition)
  REG->>CMD: record registration
  CMD->>LED: append (never edit)
  Note over REG,LED: A verdict with no registered gate is REFUSED.<br/>Prospectivity is decided by the commit graph, not prose.

  M->>RUN: start paired run
  RUN->>PAIR: how many variables differ?
  alt exactly one
    PAIR-->>RUN: ok
  else two or more
    PAIR-->>RUN: VOID — unclaimable, re-run cleanly
  end
  RUN->>CMD: record run identity (code, env, seeds, unix_ns)

  M->>VER: author PASS / PARTIAL / FAIL / WITHHELD
  VER->>VER: refuse a percent score
  VER->>VER: refuse a PARTIAL that does not name its holding sub-claim
  VER->>AP: request the human co-sign
  AP-->>M: approve or deny
  M-->>AP: co-sign (never one's own change)
  VER->>CMD: author
  CMD->>LED: append row + receipt
  G->>LED: project the row VERBATIM
  Note over G: Gaia carries the verdict.<br/>It never authored one.

12. Sequence — the Door admits and releases

sequenceDiagram
  actor M as Michael
  participant D as /door page
  participant L as launcher.cjs :8090
  participant DL as door_lifecycle.cjs
  participant S as the studio

  M->>D: click (a deliberate act)
  D->>L: POST /api/door/open {door:all}
  L->>DL: verb(all, open)
  DL->>DL: append ledger entry (actor, method, prediction)
  DL->>S: bring up, guarded by an OS mutex
  Note over D,S: LAW — a polled READ never spawns anything.<br/>Three independent breakers; any one alone stops a storm.

  D->>L: GET /api/door/journey (pure read, every 3s)
  L-->>D: studio_ready → feature_test → go_live → run_of_show → off_air
  Note over L: The journey OBSERVES. It never actuates.<br/>go_live is typed by hand — no agent can ever do it.

13. Sequence — an airlock, two keys

sequenceDiagram
  actor M as Michael
  participant R as Room
  participant K as Key
  participant CMD as Command
  participant LED as Ledger

  M->>R: request entry to sterile
  R->>K: two keys present, in scope, unexpired?
  alt keys satisfied
    R->>R: execution receipt present?
    alt receipt present
      R->>CMD: record the transition
      CMD->>LED: append
      R-->>M: opened
    else no receipt
      R-->>M: REFUSED — names the missing receipt
    end
  else keys missing
    R-->>M: REFUSED — names which key
  end
  Note over R: There is no override path.<br/>The refusal IS the feature.

14. Sequence — emergency stop, mid-run

sequenceDiagram
  actor M as Michael
  participant L as Lab view
  participant CMD as Command
  participant RUN as Run
  participant LED as Ledger

  M->>L: STOP (reachable from anywhere on the floor)
  L->>CMD: stop {run_id, reason}
  CMD->>RUN: halt
  RUN->>LED: append FAILED_RUN with the reason
  Note over RUN,LED: FAILED_RUN is INSPECTABLE and is NEVER<br/>a scientific negative. Partial output is kept, labelled.
  CMD-->>M: stopped
  Note over M,CMD: Stop is never blocked and never queued behind an approval.

15. Sequence — a drift is surfaced, and who resolves it

sequenceDiagram
  participant G as Gaia
  participant A as side A (live)
  participant B as side B (capture)
  participant M as Michael / Control Plane

  G->>A: read
  G->>B: read
  G->>G: equal = (a.raw === b.raw)   %% a pure byte compare
  G-->>M: drift signal {a, b, relation, equal} — both byte-sets verbatim
  Note over G: Gaia adds NO severity, NO diff-percent, NO judgment.<br/>It reports the disagreement and never resolves it.
  M->>M: decide — is A wrong, or B?
  M->>M: fix the SOURCE, never the comparison
  Note over M: If a drift will not clear, the source is wrong.<br/>Four of the original five CANNOT clear: they compare<br/>unlike kinds. Never edit the collector to force convergence.

sha256 7d47f0a2b09565ec — of the original file, so what was ingested stays checkable.

Plain — written for this website, not the source document

Written for this website — not the document. This is a plain-language retelling, written to help you meet the document. It is not the source, and it is not evidence. It has not yet been checked by a person. (or choose Precise in the reading-level control above)

The platform drawn as diagrams — written as text, so they render anywhere with no build step and so a change to a relationship shows up as a readable line rather than as moved coordinates. They are projections of a model kept elsewhere, and the page says that if you change a view here you must change the model too, because the model is what counts.

The diagrams walk from the outside in. Who uses the platform. The four bodies and the stacks they govern. Where each body runs. The path a claim takes to become evidence. And the life cycles of a gate, a run and a room. Then sequences: authoring a verdict, admission and release, an airlock with two keys, an emergency stop mid-run, and a disagreement being surfaced and by whom it is resolved.

Read the labels rather than the shapes. Several boxes are marked as not built, and one diagram states plainly that most steps of the evidence path had no home when it was drawn.

Plain · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is 7d47f0a2b09565ec

Clear — written for this website, not the source document

Written for this website — not the document. This is a clearer retelling, written to help you meet the document. It is not the source, and it is not evidence. It has not yet been checked by a person. (or choose Precise in the reading-level control above)

This page holds the platform's diagrams, written as text that renders in ordinary viewers with no build step. They are projections of a model kept elsewhere, and the page opens by saying that changing a view here means changing the model too: the model is the record.

The sequence runs from the outside in. A context diagram shows who uses the platform: an operator who enters, operates, authors verdicts and stops runs; an external reviewer who receives evidence and never has write access; and an audience who watches. A container diagram shows the four bodies and the stacks they govern, each label carrying its own law. One whose polled read never spawns anything. One which is the lab, marked partly built, with parts not built and no verdict authored yet. One which projects signals and never scores, ranks or authors. And one which shows and carries and never fabricates. Beneath it the one-way rule: every arrow into the projecting body is a projection, and no arrow out of it actuates anything.

A deployment diagram says which body runs where, with the constraints in the labels. The colony always on one machine, never another. One machine captures the colony but hosts none of it. A third does fan-out only.

The evidence spine is drawn as a flow: registering a gate before the run, a paired run with exactly one differing variable, observation, adversarial review, and authoring a verdict in words rather than a percentage. Then writing a receipt — the record of the run — appending a row that is never edited, and projecting it verbatim. When it was drawn, the first six steps had no home, and the diagram groups them under a heading saying so.

Three state diagrams follow. A gate goes from registered, through pending, to adjudicated. The note beside it says a verdict without a gate registered before the run is refused, and that being first is decided by the commit graph rather than by prose. A line underneath adds that a gate may be lowered on receipts, and that this is the gate working, not a failure. A run may complete, fail, or become void. Rooms progress through grades of cleanliness, needing two keys and, for the strictest, a passing scan; a note says there is no override path.

One diagram is about appearance, and is the most quietly important. It shows the renderer choosing a material from the truth class, never from a style flag, and sending anything without a truth class or receipt reference to fog. Each class gets its own look: solid and lit for the observed, visibly rebuilt for a reconstruction, translucent for a calculation, visibly staged for something simulated. Two rules are written beneath it. No frame rate, glow, motion or particle may imply liveness, which comes only from a real probe, so a frozen world looks frozen even while every process reports up. And passing a gate renders the named behaviour and nothing more: no material, light or room here may depict awareness, experience or life.

A component diagram shows the inside of the body that runs the science, each part labelled by the phase that built it, everything funnelling through a single writer. The closing sequences cover authoring a verdict, admission and release, an airlock with two keys, an emergency stop that is never queued behind an approval, and a disagreement surfaced with both sides carried. The standing instruction: fix the source, not the comparison.

Clear · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is 7d47f0a2b09565ec