Files
felhom.eu/documentation/audits/update-night-2026-09-21/bad-days/B4-concurrent-updates/five.json
T
admin 9c69b3ff07
gates / gates (push) Successful in 27s
Update night: Phases 2-4 evidence — both engines, the unattended HOLD, and five new findings
Evidence off the machine at the end of the phases that produced it (R-320). Teardown follows.

PHASE 2 — the two database engines, through the REAL Update button:
- MariaDB 11.6 -> 12.3 on nextcloud: PROVEN, and pressed through the button for the first time.
  All four SPIKE-r459 observables: the datadir's own record moved 11.6.2 -> 12.3.3; the engine
  itself says "already upgraded ... no need to run mariadb-upgrade again"; the entrypoint says
  "Major version upgrade detected ... Check required!" and then STARTED and FINISHED it (not the
  `skipped due to $MARIADB_AUTO_UPGRADE` line R-459 feared); and the engine took its own
  pre-upgrade backup, 631 905 B. The seeded Nextcloud account read back.
- PostgreSQL 16 -> 17 on docmost: FAILED exactly as R-463 predicted and nobody had measured.
  5.1 s to held; the pin named 17 while nothing ran; the restore brought it back in 29.1 s.
  The engine's REFUSAL LINE was destroyed by failAndHold before any probe could read it, so it
  was REPRODUCED INDEPENDENTLY with a control on every step (R-320).

PHASE 3 — the bad days. B1 produced THE UNATTENDED HOLD, which this project has never had: the
caller pressed once with nobody watching, the app held after 312.9 s, and passes 2 and 3 pressed
nothing. B2 put the pin back on a pull failure in 1.0 s. B3 refused `busy` six times. B4 showed
there is NO single-flight — 5 of 5 updates ran at once and all ended honest. B5 cut the power in
`backing-up` and the box recovered itself and said so. B7 refused under the 2 GB floor. B9 found
R-458's risk narrower than the row states.

PHASE 4 — every badge on the box is TRUE, and the held app answers all four of Q4's questions.

FINDINGS, five new and three corrections to existing rows. The one that matters: R-618 is P1 —
two templates name a health probe the app does not answer, and because the guarded update waits
on that same probe, a SUCCESSFUL update ends by STOPPING a working app. Measured: tandoor served
HTTP 200 on the new version at four samples across five minutes and was then stopped.

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

343 lines
7.0 KiB
JSON

{
"leg": "B4-five",
"apps": [
"privatebin",
"bentopdf",
"wishlist",
"uptime-kuma",
"opengist"
],
"presses": {
"wishlist": {
"http": "202",
"at_s": 0.359,
"reason": null,
"error": null
},
"uptime-kuma": {
"http": "202",
"at_s": 0.38,
"reason": null,
"error": null
},
"privatebin": {
"http": "202",
"at_s": 0.399,
"reason": null,
"error": null
},
"opengist": {
"http": "202",
"at_s": 0.446,
"reason": null,
"error": null
},
"bentopdf": {
"http": "202",
"at_s": 0.448,
"reason": null,
"error": null
}
},
"press_spread_s": 0.448,
"max_concurrent_updates": 5,
"samples": [
{
"t": 0.1,
"state": {
"privatebin": [
true,
"safety-dump"
],
"bentopdf": [
true,
"safety-dump"
],
"wishlist": [
true,
"pulling"
],
"uptime-kuma": [
true,
"pulling"
],
"opengist": [
true,
"pinning"
]
}
},
{
"t": 5.3,
"state": {
"privatebin": [
false,
"done"
],
"bentopdf": [
false,
"done"
],
"wishlist": [
true,
"verifying"
],
"uptime-kuma": [
true,
"verifying"
],
"opengist": [
true,
"verifying"
]
}
},
{
"t": 7.5,
"state": {
"privatebin": [
false,
"done"
],
"bentopdf": [
false,
"done"
],
"wishlist": [
true,
"verifying"
],
"uptime-kuma": [
false,
"done"
],
"opengist": [
false,
"done"
]
}
},
{
"t": 9.6,
"state": {
"privatebin": [
false,
"done"
],
"bentopdf": [
false,
"done"
],
"wishlist": [
true,
"verifying"
],
"uptime-kuma": [
false,
"done"
],
"opengist": [
false,
"done"
]
}
},
{
"t": 11.7,
"state": {
"privatebin": [
false,
"done"
],
"bentopdf": [
false,
"done"
],
"wishlist": [
true,
"verifying"
],
"uptime-kuma": [
false,
"done"
],
"opengist": [
false,
"done"
]
}
},
{
"t": 15.8,
"state": {
"privatebin": [
false,
"done"
],
"bentopdf": [
false,
"done"
],
"wishlist": [
true,
"verifying"
],
"uptime-kuma": [
false,
"done"
],
"opengist": [
false,
"done"
]
}
},
{
"t": 17.9,
"state": {
"privatebin": [
false,
"done"
],
"bentopdf": [
false,
"done"
],
"wishlist": [
false,
"done"
],
"uptime-kuma": [
false,
"done"
],
"opengist": [
false,
"done"
]
}
}
],
"memory_samples": [
"Mem: 25898 970 6988 57 17996 24927\n",
"Mem: 25898 1037 6855 57 18062 24860\n"
],
"final": {
"privatebin": {
"state": "running",
"update_phase": "done",
"update_error": null,
"hold_reason": null,
"observables": {
"pinned_images": {
"privatebin": "localhost:5000/drill/paste:2.0.1"
},
"installed_images": {
"privatebin": "localhost:5000/drill/paste:2.0.1"
},
"catalog_images": {
"privatebin": "localhost:5000/drill/paste:2.0.1"
},
"live_compose_image_lines": [
"image: localhost:5000/drill/paste:2.0.1"
],
"docker_inspect": [
"privatebin localhost:5000/drill/paste:2.0.1 running=true restarts=0"
]
}
},
"bentopdf": {
"state": "running",
"update_phase": "done",
"update_error": null,
"hold_reason": null,
"observables": {
"pinned_images": {
"bentopdf": "localhost:5000/drill/pdf:2.0.1"
},
"installed_images": {
"bentopdf": "localhost:5000/drill/pdf:2.0.1"
},
"catalog_images": {
"bentopdf": "localhost:5000/drill/pdf:2.0.1"
},
"live_compose_image_lines": [
"image: localhost:5000/drill/pdf:2.0.1"
],
"docker_inspect": [
"bentopdf localhost:5000/drill/pdf:2.0.1 running=true restarts=0"
]
}
},
"wishlist": {
"state": "running",
"update_phase": "done",
"update_error": null,
"hold_reason": null,
"observables": {
"pinned_images": {
"wishlist": "localhost:5000/drill/wishes:2.0.1"
},
"installed_images": {
"wishlist": "localhost:5000/drill/wishes:2.0.1"
},
"catalog_images": {
"wishlist": "localhost:5000/drill/wishes:2.0.1"
},
"live_compose_image_lines": [
"image: localhost:5000/drill/wishes:2.0.1"
],
"docker_inspect": [
"wishlist localhost:5000/drill/wishes:2.0.1 running=true restarts=0"
]
}
},
"uptime-kuma": {
"state": "running",
"update_phase": "done",
"update_error": null,
"hold_reason": null,
"observables": {
"pinned_images": {
"uptime-kuma": "localhost:5000/drill/status:2.0.1"
},
"installed_images": {
"uptime-kuma": "localhost:5000/drill/status:2.0.1"
},
"catalog_images": {
"uptime-kuma": "localhost:5000/drill/status:2.0.1"
},
"live_compose_image_lines": [
"image: localhost:5000/drill/status:2.0.1"
],
"docker_inspect": [
"uptime-kuma localhost:5000/drill/status:2.0.1 running=true restarts=0"
]
}
},
"opengist": {
"state": "running",
"update_phase": "done",
"update_error": null,
"hold_reason": null,
"observables": {
"pinned_images": {
"opengist": "localhost:5000/drill/gist:2.0.1"
},
"installed_images": {
"opengist": "localhost:5000/drill/gist:2.0.1"
},
"catalog_images": {
"opengist": "localhost:5000/drill/gist:2.0.1"
},
"live_compose_image_lines": [
"image: localhost:5000/drill/gist:2.0.1"
],
"docker_inspect": [
"opengist localhost:5000/drill/gist:2.0.1 running=true restarts=0"
]
}
}
},
"elapsed_s": 28.4
}