rehearsal 2026-10-20: B10 ten stuck points; capability map A15 updated (still PARTIAL: R-1192); clock tool for #7/#8/#10
gates / gates (push) Successful in 12m57s

This commit is contained in:
2026-10-20 22:41:46 +02:00
parent c0b70b15ac
commit 938afb7416
5 changed files with 64 additions and 2 deletions
@@ -88,7 +88,7 @@
| <a id="a12"></a>[A12](capability-map-detail/A.md#a12) | A customer's file survives a machine rebuild and comes back — the whole off-site story, end to end | hub v0.94.0, agent v0.125.0, controller v0.197.0 | **PROVEN-LIVE** | the success path; the failure path is not claimed (R-379, R-380) | `audits/DRILL-r201-night-run-2026-08-04.md` (2026-08-04); `audits/DRILL-r356-hot-only-restore-2026-08-22/` (2026-08-22); `audits/DRILL-r356b-driveless-db-restore-2026-08-22/` (2026-08-22) |
| <a id="a13"></a>[A13](capability-map-detail/A.md#a13) | The customer's own UNAIDED recovery journey, end to end | controller v0.206.0, hub v0.98.0, agent v0.127.0 | **PROVEN-LIVE** | fifth walk, scoped — read what it does not claim | `tests/walk5-r201-2026-08-07/journal.md` (2026-08-07); `audits/CAMPAIGN-11-recovery-journey-2026-08-05.md` (2026-08-05) |
| <a id="a14"></a>[A14](capability-map-detail/A.md#a14) | A random night of household actions while random things go wrong — twelve rounds, unattended | controller v0.245.0, agent v0.131.0, hub v0.116.0, golden 0.245.0, ISO 1.28.0 | **PROVEN-LIVE** | nested box, twelve chaos rounds | `audits/DRILL-chaos-night-2026-09-17.md` (2026-09-17) |
| <a id="a15"></a>[A15](capability-map-detail/A.md#a15) | A stranger's FIRST HOUR on a fresh install — download → install → claim → two apps → use → backup → remove → restore, plus a power cut and a mistyped code | controller v0.242.0, agent v0.130.0, hub v0.112.0, golden 0.242.0, installer ISO 1.26.1 | **PARTIAL** | every mechanism passed; the unaided journey failed before the first app | `audits/DRILL-fresh-install-0242-2026-09-14.md` (2026-09-14); `audits/DRILL-new-household-2026-09-30.md` (2026-09-30) |
| <a id="a15"></a>[A15](capability-map-detail/A.md#a15) | A stranger's FIRST HOUR on a fresh install — download → install → claim → two apps → use → backup → remove → restore, plus a power cut and a mistyped code | controller v0.336.0, agent v0.161.0, hub v0.162.0, golden 0.331.0, installer 1.35.0, ISO 1.29.0 | **PARTIAL** | 2026-10-20: download → install → bind → claim → 8 apps → use → backup → remove → every restore path → power cut → mistyped codes all worked; the 8 GB box FROZE twice in the first afternoon and only a plug pull brought it back (R-1192), and the owner passphrase needed the operator | `audits/rehearsal-2026-10-20/journal.md` (2026-10-20); `audits/DRILL-fresh-install-0242-2026-09-14.md` (2026-09-14); `audits/DRILL-new-household-2026-09-30.md` (2026-09-30) |
| <a id="a16"></a>[A16](capability-map-detail/A.md#a16) | Off-site app-data capture covers the paths an app declares MANDATORY — on BOTH drive layouts | controller v0.197.0 | **PROVEN-LIVE** | both drive layouts | `audits/DRILL-r201-offsite-recovery-2026-08-04.md` (2026-08-04) |
| <a id="a17"></a>[A17](capability-map-detail/A.md#a17) | Recurring offsite (PBS) whole-guest backups actually LAND, and RESTORE — local daily + offsite weekly as scheduled work | agent v0.97–0.103, controller v0.174/0.175, hub v0.76.0, host-install 1.20.0 | **PROVEN-LIVE** | demo-hp | `audits/SPIKE-r82-phase0-2026-07-26.md` (2026-07-26) |
| <a id="a18"></a>[A18](capability-map-detail/A.md#a18) | Restore-proof is UNATTENDED — the scheduler covers EVERY tier, follows the BACKUP rather than the clock, and a failure is heard | agent v0.104.0 → v0.121.0, hub v0.77.0 → v0.91.0 | **PROVEN-LIVE** | — | *(evidence not on file — not re-verifiable)*: the row cites per-repo CHANGELOGs and the spec `backlog/SPEC-r85-phase4-5-2026-07-26.md` — a spec, not a run record |
@@ -292,6 +292,18 @@ likewise silent. Evidence: `audits/DRILL-r361-2026-08-22/evidence/06-part3-decis
**Gap / roadmap (as written):** Rows **R-493 … R-500**, R-534 … R-545, R-719 … R-727
**Update 2026-10-20 (rehearsal, Tester4 on demo-hp; controller 0.336.0, agent 0.161.0, hub 0.162.0, golden 0.331.0,
installer 1.35.0, ISO 1.29.0):** still **PARTIAL**. [FACT] Every mechanism of the first hour worked with a pretend
household in a real browser and through the page endpoints: the ISO from felhom.eu/letoltes (sha256 matched), install
(4 min to the pairing code), bind (two wrong passphrases refused, the third right), claim (a typo refused), the recovery
code ceremony (16 s), eight apps installed (Jellyfin refused for memory, with a clear sentence), a family's use, „Mentés
most", remove keeping data and „use my kept data" (47/47 documents back), all seven customer restore paths
(`audits/rehearsal-2026-10-20/B8-restores/README.md`), a power cut in the middle of an install (clean rollback,
`B6-failures/s1-power-cut-mid-install/`). [FACT] The journey still FAILS unaided: on the minimum 8 GB machine the
first afternoon's ordinary uploads froze the box twice (≈1 h and ≈35 min, a relapse after each return) and only pulling
the plug brought it back (R-1192); the owner passphrase reached the household only through the operator (2 h 4 min);
the ten places a household gets stuck are in `audits/rehearsal-2026-10-20/B10-stuck/README.md`. New rows R-1192 … R-1199.
---
<a id="a16"></a>
@@ -50,7 +50,7 @@ the filler goes to a share with Felhőmentés OFF and is deleted before the nigh
#10 three days off (+#15 inside it), #1 power cut mid install, #14 kept data, #11 if an update exists (none expected —
the catalog is frozen). Reason: the clock scenarios move the box's time and would spoil the first night's record.
## Amendment 2026-10-20 20:40 UTC — before any post-night scenario ran
## Amendment 2026-10-20 20:27 UTC — before any post-night scenario ran
- **#1 and #14 ran before the night** (20:00–20:14), not after it: they do not move the clock, so they could not spoil
the night's record, and the morning is short. Their results are in `B6-failures/s1-…` and `s14-…`. The drawn order of
@@ -0,0 +1,21 @@
# B10 — the ten places a household gets stuck (rehearsal 2026-10-20)
Ranked by what it costs a real family: lost data or a dead box first, then lost time, then confusion.
Each point names what the family SAW, what it would do next, and the record (register row or B9 word).
| # | where | what the family saw | what a family would do | cost on the day | record |
|---|---|---|---|---|---|
| 1 | first afternoon, normal use | the dashboard and every app stopped answering, twice, ~1 h and ~35 min; a relapse after each return | wait, then pull the plug (the only thing that brought it back) | ~2 h of a dead box; two hard power cuts | R-1192 (P1) |
| 2 | bind page | a „tulajdonosi jelmondat" (owner passphrase) they do not have; two wrong tries of five used | phone Felhom; wait | 2 h 4 min waiting for the operator (09:57 → 12:01) | intervention 1; W4 |
| 3 | a power cut during a full off-site restore | the app runs again, on the BACKUP's older data, while the page says only „megszakadt — indítsd el újra" | believe the app is fine, or start the restore again over newer data | newer data gone, unnoticed | R-1195 (P2) |
| 4 | drive pulled during uploads | each upload was confirmed; after the drive came back the last files were 0 bytes or missing; nothing said so | find out weeks later | silent loss of the last seconds of uploads | R-1196 (P3) |
| 5 | mail | the family's notification page shows disk-warning, drive-disconnected and backup-failed mails ON; on the day the family received one alarm mail in all; the operator received the rest | not know anything is wrong | every warning of the day missed | R-1199 (P2), R-1193 |
| 6 | family card | „Ödön" and „Írisz" refused: „A név 1–32 karakter: kisbetű, szám, pont…" | guess „odon"; some will give up | minutes; a bad first impression | W12 |
| 7 | new drive (storage init) | a required „Csatlakoztatási név * /mnt/…" field, empty; the button silently did nothing | press again; give up | the 200 GB disk unused until someone helps | W13 |
| 8 | sharing („Megosztás") | „A megosztási szolgáltatás előkészítése folyamatban…" for ever — it waits for a share password the page never asks for | wait; ask for help | no shared folder until found | W21 |
| 9 | errors in English | a failed restore, a failed off-site run, a failed install all show raw technical English („offbox backup immich: exit status 1…", „starting stack rallly: exit code 1…") | cannot tell what broke or what to do | a call to support each time | W22, W25, s1/s6/s5 READMEs |
| 10 | wrong „Első lépések" | Mealie's steps name the wrong address (mealie.… while the app is at recipes.…); Paperless says log in as „admin" while the family chose its own name; Vaultwarden says sign-up is closed while the family opened it | follow the steps, fail, think the app is broken | minutes per app; trust lost | W17–W19 |
Close behind (not in the ten): the download link that does not look like a link (W2); the second disk never offered as
the backup place (R-1198); Jellyfin refused for memory with no help choosing what to remove (W20); the recovery-code
page full of operator words (W10); Actual Budget wholly in English (W23).
@@ -0,0 +1,29 @@
#!/bin/bash
# clockctl.sh — B6 #7/#8/#10: move the rehearsal VM's clock from OUTSIDE (rehearsal 2026-10-20).
# The VM's own clock only; demo-hp's clock is never touched. Runs from DooPlex, acts on demo-hp.
# clockctl.sh ntp-off drop NTP (UDP 123) and NTS-KE (TCP 4460) leaving the VM's tap (positive control: counters)
# clockctl.sh ntp-on remove that table
# clockctl.sh counters show the drop counters
# clockctl.sh boot <UTC-ISO> clean shutdown, set the VM's RTC start date (UTC), start
# clockctl.sh boot-real clean shutdown, remove the start date, start
# clockctl.sh stop clean shutdown only (box „off")
# clockctl.sh boxtime the box's own clock, read from its HTTP Date header (a different channel than the RTC setting)
set -euo pipefail
VM=${VM:-9320}; TAP=tap${VM}i0; TBL=rh1020ntp; IP=${BOX_IP:-192.168.0.133}; HOSTH=${BOX_HOST:-felhom.tester4.test}
down() {
ssh demo-hp "LC_ALL=C qm shutdown $VM --timeout 300 || LC_ALL=C qm stop $VM"
echo "down $(date -u +%T)"
}
case "$1" in
ntp-off)
ssh demo-hp "nft add table bridge $TBL && nft add chain bridge $TBL c1 '{ type filter hook forward priority 0; }' && \
nft add rule bridge $TBL c1 iifname $TAP udp dport 123 counter drop && \
nft add rule bridge $TBL c1 iifname $TAP tcp dport 4460 counter drop && nft list table bridge $TBL"; echo "ntp off $(date -u +%T)";;
ntp-on) ssh demo-hp "nft delete table bridge $TBL"; echo "ntp on $(date -u +%T)";;
counters) ssh demo-hp "nft list table bridge $TBL | grep counter";;
boot) down; ssh demo-hp "LC_ALL=C qm set $VM --startdate $2 && LC_ALL=C qm start $VM"; echo "started with RTC $2 at real $(date -u +%T)";;
boot-real) down; ssh demo-hp "LC_ALL=C qm set $VM --delete startdate && LC_ALL=C qm start $VM"; echo "started with real RTC at $(date -u +%T)";;
stop) down;;
boxtime) echo "real $(date -u +%FT%TZ) box $(curl -sk -m 10 -D - -o /dev/null -H "Host: $HOSTH" https://$IP/api/health | tr -d '\r' | sed -n 's/^[Dd]ate: //p')";;
*) echo "usage: $0 ntp-off|ntp-on|counters|boot <UTC-ISO>|boot-real|stop|boxtime" >&2; exit 1;;
esac