chaos night round 12: the closing control round, and the truth table complete
gates / gates (push) Successful in 22s
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:
@@ -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.
|
||||
Reference in New Issue
Block a user