Wiki · Evidence & Verdicts
Receipt — per-UNI observation routes (v1a): **PASS** (deployed + verified live)
[redacted: category] — 5 private address, 2 tailscale address, 3 internal hostname. 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.
Eighty-seven dated pages: receipts, pre-registrations, handoffs, validation records and review verdicts. A receipt is written at the moment a piece of work was checked. It names what was claimed, the commit and the seed, what was actually run, and the outcome in one of a small set of controlled words. Then it names what the work did not achieve. That last part is what makes it a receipt rather than an announcement. A pre-registration is the same discipline run in advance: the conditions that would count as a pass and the conditions that would falsify the claim are written down before the run, so neither can be adjusted once the numbers arrive.
That is why so many small dated stubs are an audit trail rather than noise. No one of them is meant to be a good read. The value is in the sequence and in the dates, because you can watch a prediction be registered, then the run happen, then the verdict land — sometimes against the prediction. Pages here record a falsified result, a rejected fix, a retracted overclaim, and a green receipt that turned out not to be reproducible from the commit that carried it. A record that carried only successes would be worth a good deal less than this one.
A gentle way in is to read a pre-registration first, so the shape becomes familiar, then a result page, then one of the corrections. This section sits off the main navigation on purpose: it is the record you check the rest of the site against, not the place to begin.
What it is not: documentation, and not a summary. Nothing here has been tidied in hindsight. Every entry reads as of its date, a later entry may overturn an earlier one, and the presence of a page is not a claim that its result stood.
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.
Seat: science agent · Date: 2026-07-18 (UTC timestamps 2026-07-19) Gate:
producer-per-uni-telemetry· Verdict: PASS · Evidence class: B (observed-with-artifact) Deployed: commit08fa60das imageuni-producer:v1a-08fa60d, live on the chip. Handoff:docs/handoffs/SCIENCE_AGENT_MUSIC_SERVICE_AND_UNI_TELEMETRY_2026-07-18.md§2 Runbook:docs/runbooks/RADIO_AND_TELEMETRY_DEPLOY_2026-07-18.md(Stage v1a)§1–§4 below are the pre-registration, written BEFORE the deploy and left unedited. The verdict and its live evidence are §6.
1. What shipped as code (v1a, commit 08fa60d)
Four read-only routes on the uni-producer Phoenix node, all PURE READS of SP.Runtime.Board
through the reviewed SP.Show.RemoteRows seam:
| Route | Serves |
|---|---|
GET /producer/uni_roster |
every live UNI: username, kin, index, lineage_generation, mode, phase, action, ticks |
GET /producer/uni_state/:name |
that UNI's mind beat (context/stress/emotion/confidence/focus/intent/report) + raw senses + absent note |
GET /producer/uni_history/:name |
available: false + the reason (see §3) |
GET /producer/generations |
kin-group rollup and lineage generations as separate fields (see §2) |
No FE-engine code touched, no genome change, no math change ⇒ no /lab-team-review required for
this commit per docs/LAB_PROTOCOL.md. Contract pinned at
production/schemas/producer_uni_state.v1.json.
Claim fence: one exit point (send_observation/2) stamps every response with a top-level
disclaimer and an x-uni-claim-fence header reading
"substrate observation only; no evidence for awareness/experience — see LAB_PROTOCOL claim fence".
No route computes a score, rank, percentage, or health index.
2. HONESTY CORRECTION — "generations 0–3" was a misread of kin groups
The 2026-07-18 handoff and the on-air framing recorded "6 UNIs alive spanning generations 0–3 (max gen 3), founder UNI-0-1 still active." That is not what those names mean.
Two distinct naming schemes exist in the code:
| Source | Format | Meaning |
|---|---|---|
SP.Brain.Colony — lib/sp/brain/colony.ex:109 |
UNI-<kin>-<idx> |
kin group + monotonic index. Carries NO generation. |
SP.Runtime.Lineage — lib/sp/runtime/lineage.ex:123 |
UNI-<kin>-g<gen> |
kin group + g-prefixed breeding generation |
Measured live from /producer/health on 2026-07-18 (frame 85004→85009, verdict=LIVE,
driver=producer, colony_count=6): the stars in the director's knowledge ring are UNI-3-1
and UNI-1-3 — no g prefix on any of them.
So the honest reading is:
- The first number is the KIN GROUP, not a generation.
UNI-1-3is kin 1, agent #3. - Zero UNIs carry a lineage generation ⇒
lineage_bred_count: 0⇒ no death→breed→respawn turnover is observable on this board. - "Spanning generations 0–3" should read "spanning kin groups 0–3." Kin spread is social visibility grouping, not generational depth. Do not report it as generational depth on air.
/producer/generations returns kin_groups and lineage_generations as separate fields and
carries this correction in its own note, so the conflation cannot propagate downstream to Gaia or
the overlays.
This is a correction to a claim, not a new claim. It removes an overstatement; it adds nothing.
3. What v1a deliberately does NOT carry (stated, not silently missing)
- No per-frame history.
SP.Runtime.Boardis a replace-in-place ETS snapshot (one row per agent, overwritten each publish). No series is retained anywhere in the running system, so none can be served. The route returnsavailable: falsewith the reason. Synthesizing a series would falsify the gate, so it does not. - No
energy/satiety/ homeostat body /eat_count/attack_count/gamma_m. These are live on theSP.Runtime.AgentGenServer state (lib/sp/runtime/agent.ex:157-164) but are not published to the board. Exposing them is v1b — an additiveAgent.publish/1change that only takes effect on auni-colonyredeploy, which destroys the running minds unless the mandatory capture runs first (docs/handoffs/GAIA_CAPTURE_BEFORE_DESTROY_2026-07-14.md). - No EFE decomposition. Epistemic
H(qo) − E[H(o|s)], pragmaticqo·C, and noveltyWare summed insideSP.Brain.Plan.advance/3and returned as one scalar. Separating them is FE-touching ⇒ v2, behind/lab-team-review. Not attempted here.
4. Plane note (measured — matters for whoever wires Gaia)
:4200 answers on the chip's LAN plane ([redacted: internal-hostname] → [redacted: private-address]) but
NOT on the tailscale overlay ([redacted: tailscale-address]:4200 → socket hang up). Only :8687 (music) is
published on the overlay. Any collector must address the name, never an overlay literal.
5. Gate — pre-registration (written before the deploy)
producer-per-uni-telemetry cannot be closed by a code read. It requires the producer restarted on
08fa60d and all four routes returning 200 with the disclaimer present and no synthesized
aggregate. PASS/FALSIFIES conditions and the exact probe commands are in the runbook, Stage v1a
step 3.
NOT VERIFIED as of the pre-registration: that the routes answer on the live producer. Only that
the code compiles (mix compile clean, 2026-07-18) and that the name-decoding logic is correct
against the real live names (UNI-1-3 → {kin 1, index 3, gen nil}, UNI-1-g4 → {kin 1, index nil, gen 4}, Director → {nil, nil, nil}).
6. VERDICT: PASS — deployed and verified live
Cutover executed 2026-07-19 03:23 UTC, with OVERLOOK off program (GLASS_TALK covering) so the
cap_overlook reconnect blip landed on a source nobody was watching. Air never dropped.
6.1 Build provenance
Built from git archive 08fa60d — the pushed ref, never the working tree (CLAUDE.md Method of
work §2) — as a new tag uni-producer:v1a-08fa60d (86eb22f36274), leaving
uni-producer:v1 (340fb888c2d2) on disk as the rollback. Verified inside the image before cutover
via a throwaway container:
- controller source present · router carries 5
ProducerUniControllerrefs - compiled BEAM present:
Elixir.SpUiWeb.ProducerUniController.beam— proof it compiled in, not merely that files copied telemetry_sliceabsent — v1b correctly not in this build
6.2 The fence held (checked on the RUNNING container, not the command typed)
UNI_OBSERVE_ONLY=1
UNI_POPULATE=0
UNI_COLONY_NODE=uni@uni-colony
VIEWER_URL=http://[redacted: internal-hostname]:3020
UNI_OBSERVE_ONLY=1 + UNI_POPULATE=0 are the fence that keeps the producer from spawning or
culling bodies in the world it watches. A producer that can mutate the world would have been a worse
outcome than no telemetry at all.
VIEWER_URL trap avoided. The runbook originally said to copy run-args verbatim from
/run/user/1000/uniprod.txt. That snapshot pins VIEWER_URL=http://[redacted: private-address]:3020 — a hard IP
literal for a DHCP lease that has since moved to .121. The live container had already been
corrected to the DNS name. Following the instruction literally would have re-armed exactly the trap
CLAUDE.md's _lan_dynamic_law exists to prevent, and the failure would have been silent until the
camera died. Runbook and deploy.sh both corrected in b407672.
6.3 Boot-to-answer: ~7 s (measured)
Container StartedAt 03:23:18.055; Phoenix logged Running SpUiWeb.Endpoint at 03:23:11.324
(container clock ~7 s behind the host's inspect stamp). The pre-deploy estimate of "budget ~2
minutes" was over-cautious by an order of magnitude — the real blip is under 10 s. Recorded so
future windows are sized from the measurement, not the guess.
6.4 All four routes — PASS
Every route returned HTTP/1.1 200 OK, the x-uni-claim-fence header, and exactly one verbatim
disclaimer. A grep for "score"|"rank"|"rating"|"percent"|"percentage"|"health_index"|"performance"
returned empty on all four.
| Route | Result |
|---|---|
/producer/uni_roster |
200 · count: 6 · UNI-0-1 at phase 4, 211,202 ticks |
/producer/generations |
200 · kin_group_count: 4 · lineage_bred_count: 0 |
/producer/uni_state/UNI-1-3 |
200 · real senses food:20 health:20 tools:8 prey:2, action turn_left |
/producer/uni_history/UNI-1-3 |
200 · available: false + the reason — no fabricated series |
6.5 The honesty correction is now enforced by live data
"kin_group_count": 4,
"kin_groups": [
{"kin":0,"alive":1,"uni":["UNI-0-1"]},
{"kin":1,"alive":3,"uni":["UNI-1-1","UNI-1-2","UNI-1-3"]},
{"kin":2,"alive":1,"uni":["UNI-2-1"]},
{"kin":3,"alive":1,"uni":["UNI-3-1"]}
],
"lineage_bred_count": 0
Four kin groups, and lineage_bred_count: 0 confirms live that no death→breed→respawn
turnover has occurred. The "four generations coexisting / max gen 3" framing is now structurally
impossible to repeat from this surface. The coordinator independently verified the correction
against colony.ex:109 and lineage.ex:123 and corrected it to the operator.
6.6 Colony untouched · camera survived
/producer/health after cutover: verdict=LIVE driver=producer colony_count=6. frame reset to
4 and advanced — expected for a new process. colony_count holding at 6 is the signal that
mattered: the remote board read survived and uni-colony was never touched.
Camera :3020 returned HTTP 200 in 8.4 ms. uni-viewer-cam-fwd was left alone —
StartedAt 07:34:39, restarts=0 — and followed the producer from [redacted: private-address] → [redacted: private-address]
by name, with zero intervention, exactly as the late-resolution prediction required. That
prediction was itself evidence-backed: the forwarder started 9 m 11 s before the producer it
targets, yet served traffic — impossible under a startup-time resolve.
No rollback was needed. Rollback remains one command (same args, tag uni-producer:v1).
6.7 Honest scope
PASS means: the four routes answer, carry the fence, and project board state verbatim without
synthesizing an aggregate. It says nothing about awareness, experience, or life — every field is a
substrate-level observation, which is precisely what the disclaimer on every response states.
Still absent by design and stated in-response rather than silently missing: energy/satiety/
homeostat body/eat_count/attack_count/gamma_m (v1b, 6ad1e18 — fenced behind mandatory
Gaia capture + off-air + a separate operator GO) and the EFE decomposition (v2, behind
/lab-team-review).
Hand-back: the routes are on the LAN plane — [redacted: internal-hostname] → [redacted: private-address]:4200.
They do not answer on the tailscale overlay ([redacted: tailscale-address]:4200 → socket hang up); only
:8687 is published there. Any Gaia collector must address the name. Wiring the Gaia projector
(viewer/gaia/**) is the studio seat's, not this one's.
sha256 b6dac2736cf48ce3 — of the original file, so what was ingested stays checkable.
Plain — written for this website, not the source document
A pass verdict for four read-only routes, with the conditions, written down before the run, left unedited above the result. The most valuable part is a correction rather than a feature. An earlier claim that the colony spanned several generations was a misreading of names: the first number is a group, not a generation, and no body carries a generation marker at all, so no breeding turnover is visible. The correction is now carried by the data the routes return, so the overstatement cannot be repeated from this surface. Several other quantities stay absent by design, and each response says so rather than leaving them silently missing.
Plain · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is b6dac2736cf48ce3
Clear — written for this website, not the source document
A receipt, the file recording what was run, whose structure is announced at the top: the pre-registration was written before the deployment and left unedited, and the verdict with its live evidence comes after it.
What shipped is four read-only routes over existing state, with no change to the engine and a contract pinned in a schema. Every response passes through one exit point that stamps a disclaimer and a header, and no route computes a score, a rank, a percentage or an index.
Then the honesty correction, which is the heart of the page. An earlier framing had said the colony spanned several generations with the founder still active. Two different naming schemes exist in the code, and only one of them carries a generation, marked by a prefix. Measured live, no name carries that prefix, so the first number is a group rather than a generation, and no breeding turnover is observable. The page says how it should have been read, and instructs that it must not be reported as generational depth on air. One route now returns the two things as separate fields with the correction in its own note, so the conflation cannot travel downstream, and the page adds that this removes an overstatement and adds nothing.
What the version deliberately does not carry is stated rather than silently missing. There is no history, because the underlying store is overwritten in place and nothing retains a series. So the route reports that it is unavailable and gives the reason, with a line saying that synthesising a series would falsify the gate. Several internal quantities exist but are not published, and exposing them would need a redeploy that destroys running state unless the capture procedure runs first. And one number is summed inside the engine, so separating it into its parts touches the sensitive area and is deferred behind a review.
The verdict section records the cutover with the affected source off the programme, so the reconnection blip landed where nobody was watching. The build came from the pushed reference rather than the working tree, tagged separately so the previous image remains as the rollback. Its contents were checked inside the image before cutover, including the compiled artifact rather than only the source files.
Two details deserve reading. The rule that stops the observer from changing the world it watches was checked on the running container rather than on the command that was typed. An observer able to mutate that world, the note says, would have been a worse outcome than no telemetry at all. And a trap in the runbook was avoided. Copying the recorded arguments verbatim would have re-pinned an address that has since moved, and the failure would have been silent until the camera died. Both the runbook and the script were corrected.
The routes are then shown answering, with a search for aggregate words returning nothing, and the correction visible in the live data. The colony was untouched, the camera survived and followed by name with no intervention, and a prediction about late name resolution is backed by evidence rather than asserted. The closing scope says what the pass does and does not mean, names what remains absent by design, and hands the remaining wiring to another seat.
Clear · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is b6dac2736cf48ce3