UNI Universal Natural Intelligence

Wiki · Architecture & Decisions

Phase 6 — Rooms, airlocks and keys

Architecture & Decisions · docs/control-plane/phases/PHASE-6.md @ b909801f3db4 (hierarchical-aif/motor-stack) — opens the published snapshot 8b4b5935bcba

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.

Status: EXECUTED 2026-07-26 → PHASE-6-RESULTS.md · item 6.6 NOT STARTED (operator-gated, carried to PHASE-7 item 7.7); 6.7 remains a standing known-fail · Written from: PHASE-5-RESULTS.md, not from Phase 5's expectations Bound: SP.ControlPlane.{Room, Key} in the root zero-dep app of UNI.Minecraft. No row is written to evidence/gates.ndjson. No P-level moves. No lab view. Authorises: ADR-0006


0. What Phase 5 changed about this phase

  1. A premise check can itself be incomplete. Item 5.0 found three declaration sites for a Gaia seat; there were four. The fourth refused at construction and the seat threw on first render. So item 6.0 checks premises and states how the check itself could be incomplete.
  2. The two-party rule now has a second instance. Command refuses a self-authorised mutation; node2 refuses the writer's key. An airlock's two keys are the same idea a third time, and should reuse the vocabulary rather than inventing one.
  3. A "not yet placed" state is honest and must survive. drift.control_plane_anchor_offbox reads absent on purpose. Rooms will have the same shape — a condition not yet met is not a failure, and must not render as one.
  4. The anchor is still not placed off-box. It needs one operator co-sign through the approval-gated MCP. Item 6.6.

0.1 Item 6.0 — check the premises, and check the check

premise check how the check itself could be wrong
uni-approvald can carry a human co-sign for a key call it read-only and read its queue shape it may gate only some verbs; enumerate them rather than sampling one
a room transition can be recorded with the existing command vocabulary read Command's @commands and the Ledger entry shape a transition may need a field the entry has no home for — check the DATA-SPEC, not just the code
no existing surface already models rooms grep the platform before building a second one a differently-named equivalent (a "stage", a "mode") would not match a grep for "room"

Recording the check is part of the item, and so is recording its blind spot. Five premises have been wrong on contact, and the sixth was a check that was merely incomplete.

1. Pre-registration — written before execution

# item expected outcome falsifier
6.0 verify the premises above, and name each check's blind spot each confirmed against a live read, with its own limitation stated an item is built on an unchecked premise, or on a check whose gaps were not named
6.1 SP.ControlPlane.Roomgreen → clean → sterile a transition is refused unless its conditions are met, and the refusal names the missing receipt a room advances with a condition unmet, or refuses without saying which
6.2 F19 — sterile entry demands an execution receipt refused, naming the receipt the door opens without it
6.3 F20 — an airlock needs two valid keys refused, naming which key is missing one key admits
6.4 F21 — there is no override no bypass exists to attempt; a source scan finds no force, override or skip path any bypass exists
6.5 F22 — sterile exit demands a contamination check and a manifest recompute refused without it exit succeeds unchecked
6.6 Operator-gated: place the Control Plane anchor on the off-box custodian the anchor exists on node2 via one approval-gated write, and drift.control_plane_anchor_offbox stops reading absent the anchor is placed by a path the writer could have taken alone — which would destroy the property it is meant to prove
6.7 Inherited: mix format --check-formatted still a standing known-fail with its reason, or reformatted in its own commit on its own terms the reformat is buried inside an evidence commit

Standing expectation: pure, offline, deterministic Elixir. No hex dependency. No Phoenix. No ui/ change. No row into evidence/gates.ndjson.

Item 6.6 does not start without the operator, and that is not an obstacle — it is the mechanism. An anchor the writer could place alone would not be a witness.

2. Red tests, named before they are written

test must fail before the code exists, for this reason
test/sp/control_plane/room_transition_conditions_test.exs a room advances with a condition unmet
test/sp/control_plane/sterile_entry_needs_receipt_test.exs the door opens with no execution receipt
test/sp/control_plane/airlock_two_keys_test.exs one key admits, or the refusal does not say which key is missing
test/sp/control_plane/no_override_path_test.exs a bypass exists to attempt
test/sp/control_plane/sterile_exit_contamination_test.exs exit succeeds with no contamination check
test/sp/control_plane/room_not_yet_met_is_not_failure_test.exs an unmet condition renders as a failure rather than as not-yet-met

Each committed red with its output recorded.

Standing procedure, now three phases old:

  • a guard that passes vacuously in red is not counted until a mutation proves it bites;
  • any test that passes in red is named in the receipt with the reason;
  • a canary that fires is replaced by what it was guarding, never deleted;
  • when a guard is weakened, the trade is written down in the test itself.

3. Verification

cd ~/Documents/UNI.Minecraft
mix format --check-formatted        # repo-wide FAILS on lib/sp/brain/language.ex — known, item 6.7
mix compile --warnings-as-errors --force
mix test
mix test test/sp/control_plane
git diff mix.exs                    # MUST be empty
sha256sum evidence/gates.ndjson     # MUST be unchanged
node viewer/gaia/verify_gaia.cjs    # 12 checks PASS, 11 seats
node viewer/gaia/gaia_lint.cjs      # 0 violations
node viewer/gaia/verify_lint_bites.cjs   # INVERSE: the lint must still refuse a summarizing fixture
node viewer/gaia/witness_probe.cjs  # the off-box refusal is RE-MEASURED, never assumed

Acceptance: all six red tests recorded red then green · every vacuous guard mutation-tested · mix.exs unchanged · evidence/gates.ndjson byte-identical · Gaia still 12/12 · the witness still refuses the writer's key.

Rollback: additive under lib/sp/control_plane/. Item 6.6, if taken, is a write to another host and is undone by the same approval-gated path — not by this agent alone.

Stop conditions: STOP_TEST_REGRESSION · STOP_PROTOCOL_CHANGE_REQUIRED · STOP_DESTRUCTIVE_ACTION_REQUIRED before any write to the real gate ledger or to any host — item 6.6 begins in this state and does not leave it without a human.

4. Explicitly not in this phase

The lab view. Any Phoenix code. Any ui/ change. Any write to evidence/gates.ndjson. Moving a P-level. Authoring a verdict about any real scientific claim.

5. The corrections this programme carries

  1. prior may be null at any seq — a creation event has no prior state. (P3)
  2. Eleven corrective rows, not twelve — a count from memory is not a count. (P3)
  3. language.ex is unformatted, not merely CRLF-terminated. (P3)
  4. A run's identity is not its record — two executions differ, and must. (P4)
  5. A local anchor cannot outrank a local writer. (P4)
  6. Capability is not practice. (P4, and again in P5)
  7. A premise check can itself be incomplete — three declaration sites, not four. (P5)
  8. A signature the writer can produce is not a witness. (P5)

6. Exit condition — the phase ends by starting the next

Phase 6 is complete only when PHASE-7.md exists, is committed, and is pre-registered in this same form.

PHASE-7.md must carry:

  1. Every Phase 6 disposition, including each falsifier that fired.
  2. Whether item 6.6 happened, and if so the one approval that carried it.
  3. Whether any room condition can be met without a receipt — and the evidence.
  4. The Phase 7 build items — the lab view, Scene, and the rendering refusals F24–F27 — each with a red test named before it is written, including the one that matters most: a fixture with absent evidence must render as fog, and a simulated fixture must be distinguishable from an observed one in a screenshot with no text read.
  5. Its own §6 requiring PHASE-8.md.

A phase that closes without its successor has stopped, and stopping is legitimate only under a declared STOP condition.

sha256 8b862a66a6e3f6af — 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 sixth phase was planned from what the fifth observed. Its results are recorded separately, and the status line already says one item was never started because it needs the operator.

The phase builds rooms with graded cleanliness, the keys that open them, and the refusals that go with them. No entry to the strictest room without an execution receipt — the file recording what was run. No airlock without two valid keys held by two distinct parties. No override path at all. And no exit without a contamination check.

The opening item is the interesting one, and it has grown a step. Earlier phases learned to check premises before building on them. This one checks the premises and then asks how each check itself could be wrong — because in the previous phase a check found three of something when there were four. Recording the check is part of the item, and so is recording its blind spot.

One item is deliberately blocked on a human, and the plan says that is not an obstacle but the mechanism: an anchor the writer could place alone would not be a witness.

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

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)

Pre-registered before execution, the sixth-phase plan was written down in advance from the previous phase's observed results. Its status line already records that one item was never started because it is gated on the operator, and that an inherited failure stands.

The opening section lists what the previous phase changed. A premise check can itself be incomplete — one had found three declaration sites where there were four — so this phase checks premises and says how each check could be wrong. The two-party rule now has a second instance, so an airlock's two keys should reuse that vocabulary rather than invent one. A state meaning not yet met is honest and must survive: a condition not yet met is not a failure and must not render as one. And the anchor is still not placed on the outside custodian, because that needs a single approval only a human can give.

The premise-checking item lists three assumptions, the read-only check for each, and — new here — how each check could be wrong. The approvals system might gate only some actions. A room transition might need a field the entry in the results record has no home for, so the data specification should be read, not only the code. And an existing surface might already model rooms under a different name, which a search for the word would miss.

The table then covers the build items with what would show each wrong. A room transition must be refused unless its conditions are met, and the refusal must name what is missing; what would show that wrong is a room advancing with a condition unmet, or refusing without saying which. Entry to the strictest room demands a record of the run that produced it. An airlock demands two valid keys and must name which one is missing. There must be no override — not a refused one, but no bypass to attempt at all, checked by a source scan. Exit demands a contamination check and a recomputed manifest. And the operator-gated item must place the anchor through an approval-gated write. What would show that wrong reads oddly until you see it: the item fails if the anchor is placed by a path the writer could have taken alone, because that would destroy the property it is meant to show.

A table names each test before it is written. The standing procedure, now three phases old, is restated in four parts. A guard that passes vacuously is not counted until a mutation proves it bites. Any test that passes early is named in the record with the reason. A canary that fires is replaced by what it was guarding rather than deleted. And when a guard is weakened the trade is written into the test itself.

Verification, acceptance, rollback and stop conditions follow, including that the off-box refusal is re-measured, not assumed, and that the operator-gated item begins in a stop state and stays there without a human.

A numbered section carries every correction the programme has accumulated, so none is made twice. That a run's identity is not its record. That a local anchor cannot outrank a local writer. That capability is not practice. And that a signature the writer can produce is not a witness.

The exit condition requires the next plan to exist and carry named questions. The one that matters most for what follows: a fixture with absent evidence must render as fog, and a simulated fixture must be distinguishable from an observed one in a screenshot with no text read.

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