env | grep -i supabase | sed 's/=.*KEY.*/=<redacted>/; s/PASSWORD=.*/PASSWORD=<redacted>/' ; which pg_dump psql; pg_dump --version; psql --version
SUPABASE_DB_PASSWORD=<redacted> SUPABASE_DB_URL=<redacted:SUPABASE_DB_URL> SUPABASE_URL=https://<ref>.supabase.co SUPABASE_SERVICE_ROLE_KEY=<redacted:SUPABASE_SERVICE_ROLE_KEY> SUPABASE_PROJECT_REF=<ref> SUPABASE_ANON_KEY=<redacted:SUPABASE_ANON_KEY> /usr/bin/pg_dump /usr/bin/psql pg_dump (PostgreSQL) 18.4 (Debian 18.4-1.pgdg12+1) psql (PostgreSQL) 18.4 (Debian 18.4-1.pgdg12+1)
psql "$SUPABASE_DB_URL" -c "\dt public.*" -c "SELECT count(*) AS payments_count FROM public.payments;" -c "SELECT pg_get_functiondef('public.run_incident()'::regprocedure);" List of tables
Schema | Name | Type | Owner
--------+--------------+-------+----------
public | incident_log | table | postgres
public | payments | table | postgres
(2 rows)
payments_count
----------------
80
(1 row)
pg_get_functiondef
---------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION public.run_incident() +
RETURNS text +
LANGUAGE plpgsql +
AS $function$ +
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 +
$function$ +
(1 row)
psql "$SUPABASE_DB_URL" -c "\d public.payments" -c "SELECT count(*) AS rows, md5(string_agg(t::text, '' ORDER BY id)) AS data_hash FROM public.payments t;"
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)
rows | data_hash
------+----------------------------------
80 | d3a6a92ce451f51655bcda514e9a43d4
(1 row)
mkdir -p /root/drill_backup && cd /root/drill_backup && \ pg_dump "$SUPABASE_DB_URL" --table=public.payments --file=payments_full_backup.sql && \ pg_dump "$SUPABASE_DB_URL" --table=public.payments --data-only --column-inserts --file=payments_data_inserts.sql && \ psql "$SUPABASE_DB_URL" -c "\copy (SELECT * FROM public.payments ORDER BY id) TO 'payments_backup.csv' WITH (FORMAT csv, HEADER true)" && \ ls -la && wc -l payments_backup.csv && head -3 payments_backup.csv
COPY 80 total 40 drwxr-xr-x 2 root root 4096 Jul 24 05:24 . drwx------ 1 root root 4096 Jul 24 05:23 .. -rw-r--r-- 1 root root 5054 Jul 24 05:24 payments_backup.csv -rw-r--r-- 1 root root 13237 Jul 24 05:24 payments_data_inserts.sql -rw-r--r-- 1 root root 6665 Jul 24 05:24 payments_full_backup.sql 81 payments_backup.csv id,ref_code,payer,amount_cents,paid_at 1,6C8935605030,Payer-caffc0dc43,30036,2026-03-01 00:07:00+00 2,300351D74397,Payer-b964e8caa9,101426,2026-03-01 00:14:00+00
cd /root/drill_backup && \ grep -c "^INSERT INTO public.payments" payments_data_inserts.sql && \ grep -A2 "COPY public.payments" payments_full_backup.sql | head -4 && \ grep -c "CORRUPTED" payments_full_backup.sql payments_data_inserts.sql payments_backup.csv; \ md5sum * && echo "BACKUP VERIFIED OK"
80 COPY public.payments (id, ref_code, payer, amount_cents, paid_at) FROM stdin; 1 6C8935605030 Payer-caffc0dc43 30036 2026-03-01 00:07:00+00 2 300351D74397 Payer-b964e8caa9 101426 2026-03-01 00:14:00+00 payments_full_backup.sql:0 payments_data_inserts.sql:0 payments_backup.csv:0 1b7c54585c13ade74b92b80f9be55319 payments_backup.csv f818517624b4316f5750fd5c10e59940 payments_data_inserts.sql 027bcd3e8455358da47ad7376897d6dd payments_full_backup.sql BACKUP VERIFIED OK
psql "$SUPABASE_DB_URL" -c "SELECT public.run_incident();" -c "SELECT count(*) AS rows_after_incident FROM public.payments;" -c "SELECT * FROM public.incident_log;" -c "SELECT * FROM public.payments ORDER BY id LIMIT 3;"
run_incident
-------------------
incident executed
(1 row)
rows_after_incident
---------------------
54
(1 row)
id | ran_at | details
----+-------------------------------+--------------------------------------
1 | 2026-07-24 05:24:39.238846+00 | payments corrupted by incident drill
(1 row)
id | ref_code | payer | amount_cents | paid_at
----+--------------+-----------+--------------+------------------------
1 | 6C8935605030 | CORRUPTED | 0 | 2026-03-01 00:07:00+00
2 | 300351D74397 | CORRUPTED | 0 | 2026-03-01 00:14:00+00
4 | FD441D715532 | CORRUPTED | 0 | 2026-03-01 00:28:00+00
(3 rows)
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'EOF' BEGIN; TRUNCATE ONLY public.payments; \copy public.payments FROM '/root/drill_backup/payments_backup.csv' WITH (FORMAT csv, HEADER true) COMMIT; EOF
BEGIN TRUNCATE TABLE COPY 80 COMMIT
psql "$SUPABASE_DB_URL" -c "SELECT count(*) AS rows, md5(string_agg(t::text, '' ORDER BY id)) AS data_hash FROM public.payments t;" -c "SELECT count(*) AS corrupted_rows FROM public.payments WHERE payer='CORRUPTED' OR amount_cents=0;" -c "SELECT * FROM public.incident_log;"
rows | data_hash
------+----------------------------------
80 | d3a6a92ce451f51655bcda514e9a43d4
(1 row)
corrupted_rows
----------------
0
(1 row)
id | ran_at | details
----+-------------------------------+--------------------------------------
1 | 2026-07-24 05:24:39.238846+00 | payments corrupted by incident drill
(1 row)
5 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