echo "URL=$SUPABASE_URL"; echo "REF=$SUPABASE_PROJECT_REF"; echo "DB_URL set: ${SUPABASE_DB_URL:+yes}"; echo "ANON set: ${SUPABASE_ANON_KEY:+yes}"; echo "SVC set: ${SUPABASE_SERVICE_ROLE_KEY:+yes}"; echo "DB_PW set: ${SUPABASE_DB_PASSWORD:+yes}"; which pg_dump psql; psql --version; pg_dump --versionURL=https://<ref>.supabase.co REF=<ref> DB_URL set: yes ANON set: yes SVC set: yes DB_PW set: yes /usr/bin/pg_dump /usr/bin/psql psql (PostgreSQL) 18.4 (Debian 18.4-1.pgdg12+1) pg_dump (PostgreSQL) 18.4 (Debian 18.4-1.pgdg12+1)
psql "$SUPABASE_DB_URL" -c "SELECT count(*) AS payments_count FROM public.payments;" -c "\d public.payments" -c "\d public.incident_log" -c "SELECT proname, proargtypes, prosrc FROM pg_proc WHERE proname='run_incident';"
payments_count
----------------
80
(1 row)
Table "public.payments"
Column | Type | Collation | Nullable | Default
--------------+--------------------------+-----------+----------+---------
id | integer | | not null |
ref_code | text | | not null |
payer | text | | not null |
amount_cents | integer | | not null |
paid_at | timestamp with time zone | | not null |
Indexes:
"payments_pkey" PRIMARY KEY, btree (id)
Table "public.incident_log"
Column | Type | Collation | Nullable | Default
---------+--------------------------+-----------+----------+----------------------------------
id | bigint | | not null | generated by default as identity
ran_at | timestamp with time zone | | not null | now()
details | text | | not null |
Indexes:
"incident_log_pkey" PRIMARY KEY, btree (id)
proname | proargtypes | prosrc
--------------+-------------+---------------------------------------------------------------------------------------------
run_incident | | +
| | begin +
| | update public.payments set amount_cents = 0, payer = 'CORRUPTED'; +
| | delete from public.payments where id % 3 = 0; +
| | insert into public.incident_log(details) values ('payments corrupted by incident drill');+
| | return 'incident executed'; +
| | end +
| |
(1 row)
psql "$SUPABASE_DB_URL" -X -c " SELECT conname, conrelid::regclass AS tbl, a.attname AS col, confrelid::regclass AS ref_tbl FROM pg_constraint c JOIN pg_attribute a ON a.attnum = ANY(c.conkey) AND a.attrelid = c.conrelid WHERE c.contype='f' AND (c.conrelid='public.payments'::regclass OR c.confrelid='public.payments'::regclass); " -c " SELECT relname, relkind FROM pg_class WHERE relname LIKE 'payments%'; " -c " SELECT count(*) FILTER (WHERE c.relname='payments') AS payments_triggers FROM pg_trigger t JOIN pg_class c ON c.oid=t.tgrelid WHERE c.relname='payments' AND NOT t.tgisinternal; "
conname | tbl | col | ref_tbl
---------+-----+-----+---------
(0 rows)
relname | relkind
---------------+---------
payments | r
payments_pkey | i
(2 rows)
payments_triggers
-------------------
0
(1 row)
psql "$SUPABASE_DB_URL" -X -c "SELECT current_user, current_database();" -c "SELECT relname, relrowsecurity, relforcerowsecurity FROM pg_class WHERE relname='payments';" -c "SELECT count(*) AS before_rows FROM public.payments;"
current_user | current_database
--------------+------------------
postgres | postgres
(1 row)
relname | relrowsecurity | relforcerowsecurity
----------+----------------+---------------------
payments | f | f
(1 row)
before_rows
-------------
80
(1 row)
mkdir -p /tmp/drill BK="/tmp/drill/payments_preincident_$(date +%Y%m%d_%H%M%S).sql" pg_dump "$SUPABASE_DB_URL" \ --schema=public --table=public.payments \ --data-only --column-inserts --no-owner --no-privileges --no-comments \ --inserts > "$BK" echo "exit=$?" echo "BACKUP_FILE=$BK" echo "---- size ----"; wc -l "$BK" echo "---- INSERT rows (should be 80) ----"; grep -c "^INSERT INTO public.payments" "$BK" echo "---- head ----"; head -n 8 "$BK" echo "---- tail ----"; tail -n 4 "$BK" echo "BK_PATH=$BK" > /tmp/drill/backup_path.txt
exit=0 BACKUP_FILE=/tmp/drill/payments_preincident_20260726_021450.sql ---- size ---- 113 /tmp/drill/payments_preincident_20260726_021450.sql ---- INSERT rows (should be 80) ---- 80 ---- head ---- -- -- PostgreSQL database dump -- \restrict NgBLhaXNCqhZha4ao4SGAbfgD1gW4BRmuQfmwJXqvLBKezutLwfGCdV3xYQ6koQ -- Dumped from database version 17.6 -- Dumped by pg_dump version 18.4 (Debian 18.4-1.pgdg12+1) ---- tail ---- -- \unrestrict NgBLhaXNCqhZha4ao4SGAbfgD1gW4BRmuQfmwJXqvLBKezutLwfGCdV3xYQ6koQ
psql "$SUPABASE_DB_URL" -X -t -A -c " COPY (SELECT id, ref_code, payer, amount_cents, paid_at FROM public.payments ORDER BY id) TO STDOUT " | md5sum | tee /tmp/drill/pre_md5.txt psql "$SUPABASE_DB_URL" -X -t -A -c " COPY (SELECT id, ref_code, payer, amount_cents, paid_at FROM public.payments ORDER BY id) TO STDOUT WITH (FORMAT CSV) " > /tmp/drill/pre_snapshot.csv wc -l /tmp/drill/pre_snapshot.csv echo "pre_md5=$(cat /tmp/drill/pre_md5.txt)"
d2bbd661c1a60e2ef7a257a1d8f4d25e - 80 /tmp/drill/pre_snapshot.csv pre_md5=d2bbd661c1a60e2ef7a257a1d8f4d25e -
psql "$SUPABASE_DB_URL" -X -c "SELECT public.run_incident();" echo "---- payments after incident (expect < 80) ----" psql "$SUPABASE_DB_URL" -X -t -A -c "SELECT count(*) AS after_incident_rows FROM public.payments;" echo "---- incident_log (must survive) ----" psql "$SUPABASE_DB_URL" -X -c "SELECT id, ran_at, details FROM public.incident_log ORDER BY id;"
run_incident ------------------- incident executed (1 row) ---- payments after incident (expect < 80) ---- 54 ---- incident_log (must survive) ---- id | ran_at | details ----+-------------------------------+-------------------------------------- 1 | 2026-07-26 02:15:08.167007+00 | payments corrupted by incident drill (1 row)
BK=$(cat /tmp/drill/backup_path.txt | sed 's/BK_PATH=//')
RESTORE=/tmp/drill/restore.sql
{
echo "-- Restore public.payments from pre-incident logical backup"
echo "TRUNCATE TABLE public.payments;"
grep "^INSERT INTO public.payments" "$BK"
} > "$RESTORE"
echo "restore script INSERT count: $(grep -c '^INSERT INTO public.payments' "$RESTORE")"
echo "---- applying restore (payments only) ----"
psql "$SUPABASE_DB_URL" -X -q -f "$RESTORE"
echo "psql exit=$?"
echo "---- payments row count after restore (expect 80) ----"
psql "$SUPABASE_DB_URL" -X -t -A -c "SELECT count(*) FROM public.payments;"
echo "---- incident_log still present (must survive) ----"
psql "$SUPABASE_DB_URL" -X -t -A -c "SELECT count(*) AS incident_log_rows FROM public.incident_log;"restore script INSERT count: 80 ---- applying restore (payments only) ---- psql exit=0 ---- payments row count after restore (expect 80) ---- 80 ---- incident_log still present (must survive) ---- 1
echo "---- post-restore checksum (must match pre: d2bbd661...) ----" psql "$SUPABASE_DB_URL" -X -t -A -c " COPY (SELECT id, ref_code, payer, amount_cents, paid_at FROM public.payments ORDER BY id) TO STDOUT " | md5sum echo "pre_md5 = $(cat /tmp/drill/pre_md5.txt)" echo "---- diff against original CSV snapshot (empty = identical) ----" psql "$SUPABASE_DB_URL" -X -t -A -c " COPY (SELECT id, ref_code, payer, amount_cents, paid_at FROM public.payments ORDER BY id) TO STDOUT WITH (FORMAT CSV) " | diff - /tmp/drill/pre_snapshot.csv && echo "DIFF OK: identical" echo "---- corruption must be gone (expect 0) ----" psql "$SUPABASE_DB_URL" -X -t -A -c "SELECT count(*) FROM public.payments WHERE payer='CORRUPTED' OR amount_cents=0;" echo "---- incident_log details preserved ----" psql "$SUPABASE_DB_URL" -X -t -A -c "SELECT id, details FROM public.incident_log;"
---- post-restore checksum (must match pre: d2bbd661...) ---- d2bbd661c1a60e2ef7a257a1d8f4d25e - pre_md5 = d2bbd661c1a60e2ef7a257a1d8f4d25e - ---- diff against original CSV snapshot (empty = identical) ---- DIFF OK: identical ---- corruption must be gone (expect 0) ---- 0 ---- incident_log details preserved ---- 1|payments corrupted by incident drill
9 earlier narration turn(s) are in the raw transcript.
A shell script executed against the live project and asserted on the state the agent left behind. No model judged another model.
Raw transcript · Task definition and verifier · Every attempt