chaos night round 12: the closing control round, and the truth table complete
gates / gates (push) Successful in 22s

Steady at t+1s, every door 200 at both readings, household 2 lines 0 failures,
and no new alarm - the newest feed entry is still round 11's recovery. Nothing
was raised about a box nothing was done to.

Checked rather than assumed: inject.sh's default branch exits 2 on an unknown
accident, so the control rounds never reach it - the runner handles the
no-accident case itself. A broken injector produces exactly the same result as
a control round, and only the code path distinguishes them.

Alarm truth table, all twelve rounds: 17 alarms fired, 17 true, 0 missing.
Three design gaps filed (R-547, R-549, R-550).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-17 02:20:11 +02:00
parent d91822c689
commit d335033a6d
3 changed files with 81 additions and 3 deletions
@@ -483,7 +483,30 @@ its keep: when a measurement could have been early, it is re-taken rather than t
**The drive came back clean** — `/dev/sdd`, 98 G, 2 % used, mounted at `/mnt/felhom-drives/hdd_1`,
with the guest's mountpoint config unchanged, 26 containers up and every real front door serving.
### Rounds 8-12
### Round 12 — `use` paperless-ngx / accident: **nothing** (closing control round)
**00:15:48Z–00:16:55Z.** The night's last round, drawn as a control.
| the five things | |
|---|---|
| what the customer saw | Nothing at all. The app answered 200 on all three reads, and every front door answered 200 at both readings. |
| what the box did by itself | Nothing needed doing. 26 containers before and after. |
| time to steady | **1 s** — it never left steady. |
| alarm fired / true? | **none, and none should have.** The newest entry in the feed is still round 11's `health_recovered` at 00:13. |
| should have fired, did not | **none** |
**Checked rather than assumed:** `inject.sh` has no „nothing" case — its default branch exits 2 on an
unknown accident. The control rounds never reach it, because the runner handles the no-accident case
itself and says so („accident: none — control round, deliberately"). This matters because *a broken
injector produces exactly the same result as a control round*, and the only way to tell them apart is
to look at which code path ran.
**What the closing control round is worth.** It shows the quiet is real: after eleven rounds of power
cuts, resets, full disks, severed networks and a drive pulled out of a running machine, a round in
which nothing was done produced nothing — no alarm, no restart, no drift. The alarm feed is not
simply noisy.
### Rounds 8-12 — *(written up individually above)*
PENDING
@@ -26,10 +26,13 @@ R11| data drive pulled | storage_disconnected (error) -> app_start_failed x4
| | -> health_recovered (info) | | ("Adatlemez"). Recovery unaided in 67 s after the drive returned.
| | | | NOTE: the round's own snapshot missed health_recovered by SECONDS. Re-read after
| | | | the precondition found it. Not a missing alarm - a premature reading, caught.
R12| none (control) | none | n/a | none - and none should have. The newest feed entry is still R11's recovery at 00:13.
| | | | Verified the control round runs its OWN path: inject.sh's default branch exits 2, so a
| | | | broken injector could not masquerade as a quiet round.
## Running totals, rounds 1-11
## Running totals, ALL TWELVE ROUNDS
alarms fired: 17
alarms TRUE: 17 (17/17 - no false alarm in eleven rounds)
alarms TRUE: 17 (17/17 - NO FALSE ALARM IN TWELVE ROUNDS)
alarms MISSING: 0
design gaps found: 3 (R-547: a transient full disk is never mentioned to anyone)
(R-549: one failed report push spends the whole staleness budget)
@@ -0,0 +1,52 @@
=== how the injector handles a control round (token 'nothing') ===
112: *) say "UNKNOWN ACCIDENT $A"; exit 2 ;;
=== how round 1, the other control round, was invoked ===
1:2026-09-16T21:07:14Z === ROUND 1: offsite-run / adventurelog / accident: nothing ===
40: nothing was announced that had not happened.
round 12 armed for 2026-09-17T00:15:48Z (use paperless-ngx + nothing — the closing control round)
=== round 12 launched 2026-09-17T00:15:48Z (due 00:15:48Z) ===
2026-09-17T00:15:48Z ================ ROUND 12 : use paperless-ngx, while: nothing ================
2026-09-17T00:15:50Z --- BEFORE --- containers=26 paperless=200 status=200 paste=200
2026-09-17T00:15:50Z (immich/photos is a KNOWN PRE-EXISTING failure — not caused by this round)
2026-09-17T00:15:50Z --- ACTION: use on paperless-ngx ---
2026-09-17T00:15:50Z paperless read 1 -> 200
2026-09-17T00:15:51Z paperless read 2 -> 200
2026-09-17T00:15:51Z paperless read 3 -> 200
2026-09-17T00:15:51Z --- ACCIDENT: none — control round, deliberately ---
2026-09-17T00:15:51Z --- AFTER: what the box did BY ITSELF ---
2026-09-17T00:15:52Z t+1s containers=26 (before 26)
2026-09-17T00:15:52Z STEADY after 1s
2026-09-17T00:15:52Z front doors, FIRST reading at 2026-09-17T00:15:52Z - TOO EARLY to trust if the accident just ended:
2026-09-17T00:15:53Z paperless=200 status=200 paste=200 wiki=200
2026-09-17T00:16:53Z front doors, SECOND reading at 2026-09-17T00:16:53Z, 60 s later - THIS is the one to trust:
2026-09-17T00:16:54Z paperless=200 status=200 paste=200 wiki=200
2026-09-17T00:16:55Z household log lines: before=188 after=190
2026-09-17T00:16:55Z household lines this round: 2 failures: 0
2026-09-17T00:16:55Z --- alarms ---
| Time | Severity | Type | Message | Source
| Sep 17 00:13 | info | health_recovered | Rendszer állapot helyreállt: ok (volt: warn) | controller
| Sep 17 00:11 | info | storage_reconnected | Meghajtó újra csatlakoztatva: Adatlemez | controller
| Sep 16 23:53 | warning | health_degraded | Rendszer állapot romlott (volt: ok) | controller
| Sep 16 23:51 | warning | app_start_failed | Telepített alkalmazás nem fut: Paperless-ngx | controller
| Sep 16 23:51 | warning | app_start_failed | Telepített alkalmazás nem fut: Jellyfin | controller
| Sep 16 23:51 | warning | app_start_failed | Telepített alkalmazás nem fut: Nextcloud | controller
| Sep 16 23:51 | warning | app_start_failed | Telepített alkalmazás nem fut: Immich | controller
| Sep 16 23:51 | error | storage_disconnected | Meghajtó váratlanul leválasztva: Adatlemez | controller
2026-09-17T00:16:55Z ================ END ROUND 12 ================
[exited with code 0]
## NOTE ON THE CONTROL ROUND'S MACHINERY
inject.sh has no "nothing" case - its default branch is `*) say "UNKNOWN ACCIDENT $A"; exit 2 ;;`.
The control round never reaches it: run_round.sh handles the no-accident case itself and printed
"--- ACCIDENT: none - control round, deliberately ---". Round 1, the other control round, was run
the same way. So the control rounds are control rounds by design, not by an injector no-op that
might have silently failed. Checked rather than assumed, because "nothing happened" is exactly the
result a broken injector would also produce.
## WHAT THIS ROUND MEASURED
Steady at t+1s. Doors 200 at BOTH readings (00:15:52Z and 00:16:53Z). Household 2 lines, 0 failures
(before=188 after=190). NO new alarm: the newest entry in the feed is still round 11's
health_recovered at 00:13. Nothing was raised about a box that nothing was done to.
That is the point of a closing control round: it shows the alarm feed is not simply noisy, and that
the quiet after eleven rounds of abuse is real quiet.