The deploy now carries the test fleet with it

relay1/2/3 pin `flamenet-relay:prod`, but a container keeps running the
image it STARTED with — so every deploy silently left the fleet a build
behind. It was eleven days stale when that was first noticed, answering
every health check the whole time, while the Android live suite ran
against it and reported green about a build production had already moved
off.

That is the failure worth naming: not an outage, a suite that proves the
wrong thing and says it proved the right one.

It drifted twice more today, both times within an hour of my own deploys,
which is how I know a note in a runbook would not have held.

⚠️ Best-effort on purpose. The fleet is disposable and a production deploy
must not fail because a test relay would not come up — but it must not
quietly stop matching either, so the outcome is printed either way and
`messenger-privacy-check` asserts it independently rather than trusting
this step.

659 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Paul Hitt
2026-09-07 09:13:41 -04:00
co-authored by Claude Opus 5
parent 7e1792f638
commit ced401bfa4
+20
View File
@@ -180,3 +180,23 @@ if [ "$EDGE" != "ok" ]; then
exit 1
fi
echo "DEPLOY OK — prod healthy at the edge; rollback available: docker tag flamenet-relay:previous flamenet-relay:prod && docker compose up -d --no-deps relay"
# 🔴 **Carry the test fleet with production, or the live suites lie.**
#
# relay1/2/3 pin `flamenet-relay:prod`, but a container keeps running the image
# it started with — so every deploy here silently leaves the fleet a build
# behind. It was ELEVEN DAYS stale when that was first noticed, answering every
# health check the whole time, while the Android live suite ran against it and
# reported green about a build production had already moved off.
#
# ⚠️ Best-effort on purpose. The fleet is disposable and a production deploy
# must not fail because a test relay would not come up — but it must also not
# quietly stop matching, so the outcome is printed either way and
# `messenger-privacy-check` asserts it independently.
if [ -d /srv/test/relays ]; then
if (cd /srv/test/relays && docker compose up -d >/dev/null 2>&1); then
echo "FLEET OK — relay1/2/3 recreated on the image production now runs"
else
echo "FLEET WARNING — the test fleet did not update; live suites would test the OLD build"
fi
fi