rollback-drill result: rollback-drill.yaml #17
Labels
No labels
ci-failure:ci.yaml-gates
ci-failure:deploy.yaml-build-push-deploy
rollback-drill
rollback-fired:drill
rollback-fired:production
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
vendel.xi2ix.com/xi2ix.com-website#17
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Workflow: rollback-drill.yaml
Job: rollback-drill
Run: https://forgejo.lab.xi2ix.de/vendel.xi2ix.com/xi2ix.com-website/actions/runs/265
Commit:
571b976463Branch/ref: main
Triggered by: forgejo-actions
This is a scheduled/manual rollback-drill result, NOT a production incident report.
What happened
All 3 real SSE-lifecycle assertions genuinely passed, but the rollback mechanism itself did NOT fire at the threshold -- the counter-to-rollback mechanism is broken.
Cycle outcomes: 1=success, 2=success, 3=success. Rollback fired: false.
Captured output (tail, per failing-eligible step)
/tmp/gsd-failhook-rollback-drill-rollback-drill-cycle1-test.log
/tmp/gsd-failhook-rollback-drill-rollback-drill-cycle2-test.log
/tmp/gsd-failhook-rollback-drill-rollback-drill-cycle3-test.log
Corrected: the mechanism was never broken. This report's own verdict was the defect.
Resolved by quick task
260727-nvm(commits4c5edad,1a3a28f,5d771bf,b6475e5,8378509).What this issue claimed
That verdict was wrong. The mechanism fired correctly. The verification reported the opposite.
What actually happened on 2026-07-26
The shared streak counter (ConfigMap
xi2ix-prod-smoke-streak) stood at 2 when the drillstarted, from two earlier REAL prod-smoke failures on 2026-07-21 (this repo's Issue #12
comments 543 and 558 record
streak=1thenstreak=2, runs #262/#264). No deploy ran inbetween to reset it. So the drill's three simulated failures ran:
helm rollbackFIRED, counter reset to 0rollback_fired=falserollback_fired=falseThe
Verify the rollback actually firedstep read onlysteps.drill-3-streak.outputs.rollback_fired,saw
false, and concluded the mechanism was broken.Independently confirmed by infra from the live cluster: revision 66, description
literally
Rollback to 64, created 74 seconds after this drill started. Production thenserved the content of revision 64 for 30 hours 45 minutes, until revision 67 landed on
2026-07-27T10:31:37Z. Nobody noticed — not us, not infra. This report said the rollback had
not fired, while it had.
What was fixed
progression no longer depends on production's prior state. This is the actual root-cause fix.
new
rollback_okflag, plus an independenthelm historycross-check (revisionincreased, description
^Rollback to, statusdeployed) that never consults the script'sown self-report. Previously a failed
helm rollbackwould also have been reported green,since the script printed
rollback_fired=trueregardless of exit code.from the live release's own values, so the real rollback lands on identical content. A
fail-closed preflight aborts before touching production if byte-equality cannot be proven,
or if the live release status is not exactly
deployed.this run was undiagnosable from this report alone.
both callers (drill and real deploy), naming the before/after revisions and the
Rollback to Ntarget, marked DRILL or PRODUCTION. The 30h45m silence above is the reason.Live-fire proof
Two real dispatches, runs #270 and #271 (2026-07-28), both green, both independently verified
by infra against the cluster rather than against our own report:
A real
helm rollbackfired and production served byte-identical content throughout.One correction found by the verification itself
infra's watch-stream recording found no
count=3event in the ConfigMap. Confirmed fromsource and it is by construction:
rollback-streak.shcomputesn=3in memory, fires therollback, then unconditionally writes
0. The persisted sequence is0,1,2,0; the sequencereported on stdout is
1,2,3. Our assertions read stdout and were always correct — but ourdocumentation said "the recorded progression is always 0->1->2->3", which reads as the
ConfigMap and is false of it. Fixed in
8378509.That mattered: had the recording been less careful, "no
count=3observed" would have read as"the threshold branch did not run" — the same true-but-misleading signal shape as this very
issue, reproduced inside the verification of its own fix.
Residual, deliberately left open
Production's live revision is now described
Rollback to 70. Content-identical and thereforeharmless, but a human reading
helm historyduring a future incident could reasonably concludea real rollback happened and was never resolved. Logged as a follow-up; the likely fix is a
marker in the rollback's own description rather than another document.
Closing this issue. The weekly Sunday 03:45 UTC drill continues unchanged.