Wiki · Evidence & Verdicts
Deployed and validated end to end — ~9h into the 25h run
[redacted: category] — 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
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.
A Plain and a Clear version of this page have not been written yet. What follows is the document itself.
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.
Date: 2026-08-02, ~21:36–21:43 UTC · Track: studio · Box: THINKER · Stream: live throughout, never interrupted
All four services carrying the fixes from cd66f3c..0438aa7 (the radio bed, the double-bed slider
window, the real fallback, the duck ratchet, the world tile) were restarted, one at a time, operator
directed. This is the deployment record — the fixes were correct in the tree before this; this is what
proves they are running.
Order and method
| service | old PID | new PID | supervisor | down time |
|---|---|---|---|---|
music_director.cjs |
52188 | 3220 | none — manual relaunch | ~2s |
voice_server.cjs |
28628 | 29500 | none — manual relaunch | ~2s + reconnect |
command_center.cjs |
1448 | 20524 | systray_watchdog.ps1 — auto |
~22s |
launcher.cjs |
28576 | 28136 | door_watchdog.ps1 — auto |
~6s |
music_director and voice_server have no supervisor and were stopped and relaunched directly.
command_center and launcher were stopped and left to their own supervisors — deliberately, both to
avoid a double-start race and to prove the supervision itself works, which it did: both came back on
their own, unprompted, within the documented poll cadence.
Sequenced, not parallel, each verified against live OBS state before moving to the next. No two services were down at once.
The stream, before the first restart and after the last
outputSkippedFrames 441 -> 441 (zero new skips across all four restarts)
outputCongestion 0 -> 0
outputReconnecting false -> false
program scene DUAL_AB -> DUAL_AB (unchanged)
ShowRadio unmuted, -12.6dB, PLAYING throughout every single check
ShowMusic muted throughout every single check
Per-service notes
music_director — clean stdout banner, no stderr. Ledger shows a connected event and no
radio_dead_fallback/radio_recovered noise (the radio never went down, so the new hysteresis had
nothing to arbitrate — expected).
voice_server — a genuine 85-second utterance fired from the show during the restart wait window,
on the old (unpatched) code, and restored cleanly to -12.6 dB. That's independent corroboration of
the diagnosis: the ratchet needs back-to-back speech to bite, and a single isolated utterance was
always fine. After restart, ovl_voice's browser source reconnected its WebSocket within ~10s via its
own exponential-backoff retry (800ms → ×2 → cap 10s) with no manual intervention. The ratchet guard
itself was not force-tested — that would mean deliberately sending back-to-back speech on air purely
to prove a code path.
command_center — restarted entirely by systray_watchdog.ps1's own dead-process detection (5s
poll, 10s down-grace). Its onConnected() OBS-reconnect routine was confirmed harmless beforehand
(idempotent SetStudioModeEnabled/transition calls, and a role-resync that only writes when OBS's
current state differs from the saved file — a no-op here since OBS's own state never changed). Verified
after: role scenes, bed mute/volume, and program scene all unchanged; the freshly booted music poller
had already picked up a live session (Run Command, sessionOpen: true).
launcher — restarted by door_watchdog.ps1 in ~6s, the fastest of the four (5s poll, no grace
period). First post-restart poll of /api/status reported the world tile up: false — cold DNS
resolution against [redacted: internal-hostname] right after process boot, not a defect (httpJson's
timeout is 2000ms and Node performs no DNS caching of its own). Self-corrected on the very next poll, 5s
later. Six subsequent polls all clean. The Door's own /api/door/state world entry was checked
separately and confirmed reading the same fixed probe.
A false alarm I caught before reporting it
A post-restart audio meter check showed both ShowRadio and ShowMusic producing non-silent meter
frames (117/117 each) — for a moment this read as double audio. It was not: GetInputMute confirmed
ShowMusic: muted: true throughout. OBS's InputVolumeMeters event reports a source's own decoded
level regardless of its mute state — muting gates what reaches the program output, not what the meter
displays. A meter reading alone is not proof of program-output audibility; mute state is the authoritative
signal, and this receipt's earlier audibility claims (immediately after the initial radio_everywhere.cjs
apply) were always paired with an explicit mute check, so they stand. This one wasn't, initially, and it's
recorded because it could have been reported as a false defect if the mute check hadn't been run before
speaking.
Noted, not chased
Across a short burst of /producer/health polls, one sample reported tps: 199.8 sandwiched between
clean tps: 20.0 reads, not reproduced in six immediate follow-up samples. Quoted here because the world
tile now surfaces this field verbatim and an odd number in it deserves a line, not silence. A Paper server
does not normally exceed 20 TPS; this reads as a momentary artifact in the producer's own measurement, not
a sustained state. Diagnosing it further is the science/colony track's territory, not the studio's —
this receipt only records that it was seen and was not persistent.
Still open
C4 (continuity across a program cut) remains NOT_MEASURED. No cut has occurred since the gate ran.
The operator was asked again; nothing is blocked on it.
sha256 b0e255a801061f95 — of the original file, so what was ingested stays checkable.