Wiki · Evidence & Verdicts
"Not ready yet" sweep — everything fully, no defer (2026-07-16)
[redacted: category] — 2 private address, 1 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.
verdict: PASS evidence_class: A gates:
- publisher-pin-claim-retracted
- cc-writestate-honest-freshness
- cc-status-honest-fields
- cc-per-endpoint-fanout-rows
- cc-broadcast-metadata-surface
- cc-glass-badge-honest-rename
- music-service-integration-first-class
- cam-mic-hardened-defaults
"Not ready yet" sweep — everything fully, no defer (2026-07-16)
Why
Operator, after the broadcast-test rehearsal succeeded:
not ready yet are we. the local camera and mic are not working. the remote feeds are untested in 24hrs and thousands of changes. the command center is not honest has never been true and is missing nearly all the required meta data. the music telemetry needs to be fully integrated and allow layouts that use the full capabilities.
And on scope: "address all fully all work do not reduce do not defer."
The sweep
A 35-agent adversarial sweep (5 audit dimensions × per-finding verify → synthesis; 2.6M tokens, 390 tool calls) over: local cam+mic, remote-cam pipeline, command-center honesty + missing metadata, and music-service integration design. 27 confirmed, 2 refuted, 0 hard blockers, 7 can't-do-without.
The operator's two policy answers set the whole plan:
| Question | Answer | Consequence |
|---|---|---|
| Publisher PIN | Retract the claim | Don't ship a security claim no code enforces. Ban PIN language in CLAUDE.md + WORKING_LOGIC.md; banner pub.html; bind MediaMTX loopback for posture. |
| DMCA policy | Full on-air (owned/licensed) | musicOnAir default true; music scenes freely usable on program; operator attests library ownership. |
What shipped (five phases, five commits)
Phase 1 — foundations (1fa6baf)
- CLAUDE.md + docs/WORKING_LOGIC.md — PIN claim retracted with a plain-English explanation.
- viewer/pub.html — red
⚠ UNAUTHENTICATEDbanner at the top. - viewer/mediamtx_local.yml —
webrtcAddress: 127.0.0.1:8889(was:8889). Closes the direct WHIP bypass so only the local publisher proxy can reach it. - viewer/infra_registry.json — new
musicservice entry:lan:"dynamic",ips:[], probe/healthzwithtimeout: 3000. Same Gaia-envelope discipline applied: never probe/api/tracks(200KB) or/radio(endless MP3). - viewer/studio_stage.cjs — comprehensive:
STANDBYdropsShowMusic— the slate is truly silent (matches its own DESC).- Every cam +
MicHostboots muted (talent-hot policy per operator). - Output-capture hard-mute enumerates by kind (
wasapi_output_capture/desktop_audio/monitor) instead of literal name "Desktop Audio". RED gate line if any remain hot. RemoteCam3..10reconnect_delay_sec 2 → 30 (killed the ~2.9MB/h log storm without breaking cold-attach for the primaries).- CamHost auto-bind at end of
main()— readsruntime/camhost.json(persisted by/api/camhost/bind), falls back to first enumerated DirectShow device, never fabricates. ShowRadio(ffmpeg_source on the music service/radiostream, URL resolved viahost_resolve.urlFor("music",...)at bring-up — same discipline ascap_web).ovl_nowplaying/ovl_musicbug/ovl_music_hero/ovl_lyricsbrowser sources.- New scenes:
MUSIC_HOUR(cover full frame),MUSIC_CARD(talk + card),COLONY_SIDE_MUSIC(colony + card),STANDBY_OFFLINE(fallback slate with file bed). MUSIC group added to the console template picker.
Phase 2 — command_center.cjs (e8aa501 + 539cda2 fix)
- LAN_IP dehardcode — derived from the
thinkerbox ininfra_registry.jsonwith a live NIC check: if one of the machine's current IPv4 addresses matches a declared thinker.ips[i], that wins. Provenance exposed in/api/state.lanIpProvenance. Live-verifiedregistry+live-nic. - writeState heartbeat honesty split — added
updatedUtcSelf(any write, incl. the 3s heartbeat) andupdatedUtcExternal(only real content changes withsource !== "cc-heartbeat"). Overlays-freshness gate now reads External. A CC heartbeat cannot lie for it. Verified live: after a POST /api/meta, External advanced 13ms after Self — a real write did what it was supposed to and the heartbeat is honest. - Glass badge row rename — "Glass badge pusher / pushing (badge live)" → "Glass badge WRITE stream / writing to lab (remote receipt NOT confirmed by this side)". No behavior change, just the honest name.
- camsInfo ALL 10 —
.remotesis a full 10-slot table (codec/registered/label/ageMs);.summarysaysN/10 liveat a glance. - Music service poller —
host_resolve.urlFor("music","/")→ the chip's:8687; every 5s GET/api/nowplaying?session=obs-studio-thinker+/api/telemetry; mirrored into spool.nowPlaying. - Colony metadata poller — every 5s GET
colony:4200/producer/health; mirrored into spool.colony. Verified live:LIVE driver=producer count=6 tps=20 frame=18972. - First-class /api/state fields:
pcBound,mic,nowPlaying,colony,musicOnAir,meta,bug,sightVerdict,lanIpProvenance. All defaults null → renders UNKNOWN, never fabricated. - New routes:
POST /api/camhost/bind,POST /api/music/on-air,POST /api/meta,POST /api/bug./api/musicextended to control ShowMusic AND ShowRadio together. - Per-endpoint fan-out rows — each armed pusher gets its own health row with respawn count + rate. A rate > 0.1/s reads as FLAPPING (rejected key). Platform inferred from URL.
Phase 3 — command_center.html (f000b50)
Every new field Phase 2 exposed gets an operator affordance:
- PC cam device picker + Bind — persists across rebuilds via
runtime/camhost.json. - MIC pill — LIVE/MUTED/unknown; colored. Operator can never be blind to mic mute state.
- COLONY panel — read-only display, STALE detection via
updatedUtcExternal. - MUSIC panel — cover art thumb + title/artist/album + progress bar (interpolates
positionSeclocally between polls so it's smooth) + up-next + listener count + MUSIC ON AIR toggle (DMCA gate). - BROADCAST METADATA form — showTitle, segment, segmentId, airDateUtc, presenter[], guest[], dateline, kicker, rundown[]. All optional. Auto-fills from server only when the field is currently blank in the DOM (never clobbers what the operator is typing).
- STATION BUG — text/corner/color/opacity/on.
- SIGHT: GO / HOLD / BLOCK aggregate pill above the health board.
- All 10 slots summary chip under the roles table.
Phase 4 — overlays (fe7846d)
Four new CSS/JS overlays served by overlay_server.cjs :8099 from production/overlays/,
consuming spool via /state.json:
- nowplaying.html — glass-morph lower-third with cover art thumb + progress. Interpolates positionSec locally between spool polls.
- musicbug.html — pulsing corner chip + user-configurable station bug.
- musichero.html — full-frame music card for MUSIC_HOUR / MUSIC_CARD. Cover hero + big metadata + progress + times + up-next + store URLs.
- lyrics.html — right-side lyrics panel from
lyricsDocUrl(music service CORS:*lets it through).
QR codes deferred — a proper QR encoder would add ~30KB vendored; the URL text row is honest and readable at broadcast distance. Filed for a follow-up pass.
Live receipts
- cc HTTP 200 on /api/state with every new field:
lanIp=[redacted: private-address], provenance=registry+live-nicpcBound={deviceId:null,deviceName:null}(correct — nothing bound yet)mic={muted:true}(correct — talent-hot boot)camsInfo.summary="0/10 live", 10 remote slot entriescolony={verdict:'LIVE', driver:'producer', count:6, tps:20, frame:18972}sightVerdict='BLOCK'(correct — no cam bound and health board has cam1/cam2 not publishing)musicOnAir=true(DMCA default per operator)
- POST /api/meta and POST /api/bug land in spool.
updatedUtcExternaladvances 13ms afterupdatedUtcSelf— the honesty split works. - All 4 overlays HTTP 200 from
:8099. state.jsonpassthrough carriesbug,meta,colonyto overlays.- All 4 overlay JS blocks parse cleanly (
new Function(body)).
Known-honest residuals
- Music poller idle until DNS lands.
[redacted: internal-hostname]doesn't resolve from THINKER today. Another agent is landing a Cloudflare-manageduni-lab.solwright.comzone via a NOMENCLATOR organ. Until that lands,spool.nowPlayingstays absent and my overlays render "unbound" — honest failure, not silent black. The service itself is UP and correct athttp://[redacted: private-address]:8687/api/nowplaying(verified live). - PIN enforcement not implemented (retracted, per operator). Filed for a later pass; the claim doesn't return until the code does.
- QR codes not shipped — text URL fallback for the store row. Filed.
- Stage rebuild not run — the new ShowRadio input and music scenes land on the next planned
studio_up.ps1rebuild. I deliberately did not run bring-up here — the working COLONY/OVERLOOK WGC sources are precious and re-rolling that dice mid-flight for a code-verified change would be wrong. - CamHost auto-bind live-verify pending the same bring-up.
- Per-endpoint fan-out rows live-verify pending real stream keys (G-PA).
Fence
viewer/** + docs/** + production/overlays/*.html + evidence/gates.ndjson. No lib/sp/**.
No science gate. No CONFIRM typed. No stream key handled. No bring-up run.
sha256 bf34c92f8593818f — of the original file, so what was ingested stays checkable.
Plain — written for this website, not the source document
A record of a large piece of work done after the operator said plainly that things were not ready, and listed what was wrong. Two of his policy answers set the whole plan: a security claim that no code enforced was retracted rather than quietly kept, and music was allowed on air. The rest is a sweep across cameras, microphone, the honesty of the console, and music integration, shipped in phases. The residuals are listed as known-honest, including one thing deliberately not run because re-rolling a working setup mid-flight would have been wrong.
Plain · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is bf34c92f8593818f
Clear — written for this website, not the source document
A sweep receipt, the file recording what was run, that opens with the operator's own words, unedited, listing what was not working, together with his instruction on scope: address everything fully, do not reduce, do not defer.
The two policy answers get their own table, because they set the plan. A claim about a protection that no code enforced is retracted rather than kept, the language banned from the documents that carried it, a warning banner added to the page it applied to, and a service bound locally for posture. And a policy question about music is answered permissively, with the operator attesting that the library is owned, which makes music usable on the programme.
The work then ships in phases, each with its own commit. The foundations phase makes a slate genuinely silent, and boots every camera and the microphone muted by policy. It hard-mutes output capture by kind rather than by a literal name, so a renamed source cannot slip through, and slows reconnection on the sources that were generating a log storm. It binds the local camera from a persisted choice, with a fallback that never fabricates a device, and adds a set of music scenes and overlays.
The console phase is mostly about honesty. A hard-coded address becomes a value derived from the registry and cross-checked against the machine's own live addresses, with the provenance of that decision exposed in the response. A freshness timestamp is split in two, so that a routine heartbeat write can no longer stand in for a real content change, and the gate reads the one a heartbeat cannot move. A status row is renamed to say only what it can tell, which is that it is writing rather than that the far end received anything. Camera information becomes a full table with a summary line. Pollers are added for music and for colony metadata, with the discipline noted of never probing the expensive endpoints. New fields default to nothing, so they render as unknown rather than fabricating a value. And each armed destination gets its own health row, where a high respawn rate reads as a rejected key.
The interface phase gives every new field something the operator can act on. There is a device picker, a mute indicator so nobody can be blind to that state, and panels for colony and music. There is a metadata form that auto-fills only into blank fields, so it never clobbers what is being typed, and an aggregate readiness pill above the health board.
The overlays phase adds four pages fed from the same shared state, with one deliberate omission recorded rather than hidden. A proper encoder for a code image would add a vendored dependency, so a readable text row was kept and the improvement filed for later.
Live receipts are then quoted field by field, including several that are correctly negative because nothing is bound yet, which is the point of them. The known-honest residuals include a poller sitting idle until a naming change lands elsewhere, rendering an honest unbound state rather than silent black, and a retracted claim that does not return until the code does. Most notably, a rebuild was deliberately not run, because re-rolling a working but fragile setup mid-flight, for a change already checked in code, would have been the wrong trade.
Clear · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is bf34c92f8593818f