night 2026-09-23: round 11's second update is romm's engine step (changed before round 1)
gates / gates (push) Successful in 27s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-23 22:05:05 +02:00
parent cf8dec8480
commit 77335625fe
2 changed files with 7 additions and 3 deletions
@@ -98,7 +98,7 @@ seed 20260923, drawn in 3 attempt(s)
| 4 fail_health | adventurelog v0.12.1 → v0.13.0, probe on a port it does not answer | the second PostgreSQL (PostGIS) |
| 9 fail_health | vikunja 2.5.0 → 2.6.0, wrong probe | volume-only, under a controller kill |
| 8 cutoff | navidrome 0.64.0 → 0.64.1, wrong probe, the undo copy's finished-marker removed during `verifying` | volume-only + a drive folder |
| 11 cutoff + two_updates | nextcloud 34.0.1 → 34.0.4 (the file-leg), and adventurelog's Update pressed at +51 s | two updates at once |
| 11 cutoff + two_updates | nextcloud 34.0.1 → 34.0.4 (the file-leg), and romm's database-engine Update (11.4 → 11.8, a tested good step) pressed at +51 s | two updates at once. *Changed before round 1:* the first draft named adventurelog, whose v0.13.0 cannot pass health (Part C) |
Setup: the six at their FROM pins, each seeded through its front door (A); one whole-box backup on 9202
(the restore rounds need a copy); seed B on docmost, romm and vikunja after it.
@@ -46,7 +46,8 @@ SEED_B = {"docmost": (docmost_seed_b, docmost_verify_b), "romm": (romm_seed_b, r
# round -> the app it acts on (and, for two_updates, the second app)
TARGET = {1: "actualbudget", 2: "docmost", 3: "vikunja", 4: "adventurelog", 5: "papra", 6: "romm",
7: "docmost", 8: "navidrome", 9: "vikunja", 10: "actualbudget", 11: "nextcloud", 12: "papra"}
SECOND = {11: "adventurelog"}
SECOND = {11: "romm"} # its database-engine step 11.4 -> 11.8, a tested good step (catalog 431cdec)
EXTRA_PINS = {"romm": ["mariadb:11.4"]}
KILL_LOG = os.path.join(HERE, "chaos-kills.json")
@@ -291,7 +292,7 @@ def setup():
for app, a in SIX.items():
comp = f"{w.DRILL}/templates/{app}/docker-compose.yml"
c = open(comp).read()
for frm in a["from"].split(","):
for frm in a["from"].split(",") + EXTRA_PINS.get(app, []):
c = re.sub(r"image: " + re.escape(frm.rsplit(":", 1)[0]) + r":\S+", "image: " + frm, c, count=1)
open(comp, "w").write(c)
# and the REAL probe, whatever an earlier drill left there
@@ -349,6 +350,9 @@ def run_round(n):
w.say(f"==== ROUND {n}: {sched['action']} on {app} x {sched['accident']} at +{sched['delay_s']}s ({t_iso})")
note = {"round": n, **sched, "app": app, "started": t_iso}
note["before"] = household(app) if w.stack(app).get("deployed") else {"state": "not deployed"}
if n in SECOND: # the second app gets its good step in the drill catalog before the round
note["second_drill_commit"] = w.drill_bump(SECOND[n], "mariadb:11.4", "mariadb:11.8")
note["second_template_rounds"] = drill_wait_ref(SECOND[n], "mariadb:11.8")
t0 = time.time()
timer = threading.Timer(sched["delay_s"], accident, args=(sched["accident"], n, app, note))
timer.start()