test(ci): inject RM-61 post-readiness crash control
ci/woodpecker/pr/ci Pipeline failed

This commit is contained in:
2026-08-01 08:20:30 -05:00
parent 3931b0e29e
commit 9455cd6a26
2 changed files with 36 additions and 9 deletions
+25 -7
View File
@@ -125,10 +125,19 @@ steps:
echo "ci-postgres did not become ready" >&2
exit 1
fi
# Run migrations (DATABASE_URL is set in environment above)
- pnpm --filter @mosaicstack/db run db:migrate
# Run all tests
- pnpm test
# RM-61 negative control 2/2: arm a real post-readiness database crash,
# then continuously query until the service loss is observed.
- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -c 'CREATE TABLE rm61_crash_armed (armed boolean NOT NULL)'
- |
for i in $(seq 1 60); do
if ! psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -c 'SELECT 1'; then
echo "RM-61 control observed the armed PostgreSQL crash" >&2
exit 61
fi
sleep 1
done
echo "RM-61 control did not observe the armed PostgreSQL crash" >&2
exit 62
depends_on:
- typecheck
@@ -139,6 +148,15 @@ services:
POSTGRES_USER: mosaic
POSTGRES_PASSWORD: mosaic
POSTGRES_DB: mosaic
# RM-61 negative control 1/2: force a real PostgreSQL startup failure.
# This commit is intentionally red and will be reverted after its single run.
POSTGRES_INITDB_ARGS: --rm61-invalid-option
entrypoint:
- /bin/sh
- -c
commands:
- |
docker-entrypoint.sh postgres &
postgres_pid=$$!
until pg_isready -h 127.0.0.1 -p 5432 -U mosaic; do sleep 1; done
until [ "$$(psql -h 127.0.0.1 -U mosaic -d mosaic -Atqc "SELECT to_regclass('public.rm61_crash_armed')")" = "rm61_crash_armed" ]; do sleep 1; done
echo "RM-61 control killing ready PostgreSQL postmaster $$postgres_pid" >&2
kill -KILL "$$postgres_pid"
wait "$$postgres_pid"
@@ -33,14 +33,23 @@ Historical JSON saved locally under `.evidence/rm-61/` (not for commit). Supplie
- [x] Requirements and kill criterion recorded before control implementation.
- [x] Historical full-JSON records captured.
- [ ] Startup-failure control observed terminal.
- [x] Startup-failure control observed terminal.
- [ ] Post-readiness crash control observed terminal.
- [ ] Discrimination verdict recorded.
- [ ] Conditional exemption implementation (only if verdict permits).
## Tests / evidence
Pending.
### Control 1 — real startup failure
- Commit: `3931b0e29eb834914f7b17e4db7e221481d436fa`
- Pipeline: #2189, exact commit match.
- Full JSON child scan: 9 total — 7 success, 2 failure, 0 skipped/pending/running.
- `ci-postgres`: `state=failure`, `exit_code=1`, `error=null`, with a five-second execution window.
- `test`: `state=failure`, `exit_code=1` after the readiness budget expired.
- Pipeline/workflow: terminal `failure`.
This control is red and its service record differs from #1000 (`exit_code=0` plus pod-not-found). It proves the startup-failure direction only. It does not settle the dangerous post-readiness crash/garbage-collection path.
## Risks