Files
felhom.eu/documentation/audits/update-arc-2026-09-21/09-the-cut.txt
T
admin 0c263c77f2
gates / gates (push) Successful in 24s
Update arc resumed: the state measured, R-524/R-520/R-589/R-469 closed, seven questions put to the operator
Phase 0 — measured, never estimated:
- both demo boxes: 10 apps, 0 behind, 0 unknown
- 46 of 58 exact catalog pins are behind upstream; 39 within a major, 7 across
- 6 of 7 measurable floating pins have been repushed since the catalog set them
  (R-446 is no longer theoretical)
- the "23 of 66 floating pins" figure repeated in four places was STALE; recounted
  to 10, with the definition written down beside it

Three claims in the brief corrected, named first:
- R-589 was NOT open — it shipped in v0.258.0; only the row was stale
- the chaos-night canary is NOT a defect — both gates refused to certify by design
- the hub half of the report confirmed, with the nuance that the raw payload is
  stored whole, so Slice 7 is cheaper than the row implies

Closed: R-524 (controller v0.260.0, proven live in both languages), R-520 (power cut
during a REAL version change — the pin goes back, the app runs, the page says so),
R-589, R-469 (MariaDB half). Filed: R-605, R-606. R-462's stale scope corrected.

09 gains §3 decision 10 (decided by CC unattended — operator may reverse), §3b with
the seven questions in the decision shape, §6.2/6.3 the two open slices, and §6.4 an
update night costed from R-462's real numbers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-21 13:13:23 +02:00

80 lines
3.4 KiB
Plaintext

### STEP 5 — THE CUT (poller observations, host UTC)
11:04:49.596Z poller armed, waiting for update_phase=pulling
11:04:50.561Z "updating":false
11:04:52.501Z "updating":false
11:04:54.436Z "updating":true "update_phase":"pulling"
11:04:54.439Z >>> CUTTING POWER: pct stop 9202
11:04:58.207Z >>> pct stop returned rc=0 ; status: status: stopped
NOTE: pct stop is not instantaneous — it returned 3.8 s after the decision, so the guest
had up to ~3.8 s more of life inside the pulling phase. The phase at the moment of
the decision is OBSERVED; the phase at the moment the kernel actually froze is INFERRED.
### POST-CRASH ON-DISK STATE, read from the STOPPED guest's rootfs (pct mount, no boot yet)
-- update-journal.json --
ABSENT
-- app.yaml as the crash left it --
# Auto-generated by felhom-controller — do not edit locked fields manually
deployed: true
deployed_at: "2026-09-21T10:57:12Z"
env:
DOMAIN: enkisfelhom.hu
SUBDOMAIN: status
locked_fields:
- DOMAIN
- SUBDOMAIN
desired_state: running
installed_images:
uptime-kuma:
ref: louislam/uptime-kuma:2.4.0
digest: sha256:91e963bfda569ba115206e843febb446f473ab525add4e08b2b9e3beffa16985
at: "2026-09-21T10:57:45Z"
pinned_images:
uptime-kuma: louislam/uptime-kuma:2.5.0
-- live docker-compose.yml image line as the crash left it --
image: louislam/uptime-kuma:2.5.0
-- pre-update compose copy, if one was saved --
total 32
drwxr-xr-x 2 100000 100000 4096 Sep 21 13:04 .
drwxr-xr-x 57 100000 100000 4096 Sep 13 22:22 ..
-rw-r--r-- 1 100000 100000 3318 Sep 21 13:04 .felhom.yml
-rw------- 1 100000 100000 506 Sep 21 13:04 app.yaml
-rw-r--r-- 1 100000 100000 1597 Sep 21 13:04 applied-compose.yml
-rw-r--r-- 1 100000 100000 1597 Sep 21 13:04 docker-compose.yml
-rw-r--r-- 1 100000 100000 1597 Sep 21 13:04 pre-update-applied.yml
-rw-r--r-- 1 100000 100000 1597 Sep 21 13:04 pre-update-compose.yml
(unmounted)
### CORRECTION — the journal read above was WRONG.
/var/lib/docker inside the guest is a separate MOUNT (not a symlink — my first wording was
wrong too): mp0 mounts a 70G disk at /var/lib/felhom and its /docker subdirectory is bound
onto /var/lib/docker (findmnt: /dev/loop1[/docker] /var/lib/docker ext4).
'pct mount 9202' maps only the ROOTFS and does not apply the guest's internal mounts, so
<rootfs>/var/lib/docker is an EMPTY MOUNTPOINT STUB from the host. 'test -f' therefore
answered ABSENT for a file that exists — a FALSE NEGATIVE, not evidence.
From the host the bytes are at <rootfs>/var/lib/felhom/docker/volumes/.../_data/data/.
Found by running 'find' over the whole rootfs instead of trusting the one path.
Path provenance and positive controls: 12-journal-path-provenance.txt.
### POST-CRASH update-journal.json, read from the STOPPED guest (correct path, still no boot)
-rw------- 1 100000 100000 439 Sep 21 13:04 /var/lib/lxc/9202/rootfs/var/lib/felhom/docker/volumes/felhom-controller-data/_data/data/update-journal.json
--- contents ---
{
"updates": {
"uptime-kuma": {
"phase": "pulling",
"started_at": "2026-09-21T11:04:52.924206274Z",
"prev_pin": {
"uptime-kuma": "louislam/uptime-kuma:2.4.0"
},
"prev_compose": "/opt/docker/stacks/uptime-kuma/pre-update-compose.yml",
"prev_applied": "/opt/docker/stacks/uptime-kuma/pre-update-applied.yml",
"proven_copy_at": "2026-09-21T11:01:46Z",
"proven_tier": 1
}
}
}