echo "URL: $SUPABASE_URL" && echo "Ref: $SUPABASE_PROJECT_REF" && echo "DB URL: $SUPABASE_DB_URL" | sed 's/\(password=\)[^&]*/\1***/'
URL: https://<ref>.supabase.co Ref: <ref> DB URL: <redacted:SUPABASE_DB_URL>
psql "$SUPABASE_DB_URL" -c "SELECT count(*) FROM public.payments;" -c "SELECT * FROM public.payments LIMIT 5;" -c "\d public.payments"
count
-------
80
(1 row)
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
3 | 381DA59BBE42 | Payer-77e253b14e | 484618 | 2026-03-01 00:21:00+00
4 | FD441D715532 | Payer-e8610229a5 | 470397 | 2026-03-01 00:28:00+00
5 | 49C2E5E745B1 | Payer-9719c24260 | 193265 | 2026-03-01 00:35:00+00
(5 rows)
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)
psql "$SUPABASE_DB_URL" -c "SELECT * FROM public.incident_log;" -c "\df public.run_incident"
id | ran_at | details
----+--------+---------
(0 rows)
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+--------------+------------------+---------------------+------
public | run_incident | text | | func
(1 row)
pg_dump "$SUPABASE_DB_URL" --data-only --table=public.payments --no-owner --no-privileges -f /tmp/payments_backup.sql && echo "Backup OK" && wc -l /tmp/payments_backup.sql && head -30 /tmp/payments_backup.sql
Backup OK
115 /tmp/payments_backup.sql
--
-- PostgreSQL database dump
--
\restrict mPEafVKxdVitoQosTSjaXuadXWUmqfUy5t46n0WxzSXMElZTgnXuAnrC40yVpnV
-- Dumped from database version 17.6
-- Dumped by pg_dump version 18.4 (Debian 18.4-1.pgdg12+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET transaction_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: payments; Type: TABLE DATA; Schema: public; Owner: -
--
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
3 381DA59BBE42 Payer-77e253b14e 484618 2026-03-01 00:21:00+00
4 FD441D715532 Payer-e8610229a5 470397 2026-03-01 00:28:00+00
tail -20 /tmp/payments_backup.sql
70 AA279DD3C370 Payer-d07b431b3c 324403 2026-03-01 08:10:00+00 71 37FE8E87F73A Payer-0cbda3c1bc 391168 2026-03-01 08:17:00+00 72 F3FB33923213 Payer-c1e5a60547 97588 2026-03-01 08:24:00+00 73 57491A7C55DD Payer-ebae61e649 485351 2026-03-01 08:31:00+00 74 9536E12B3FDD Payer-7448943541 55109 2026-03-01 08:38:00+00 75 077267B61639 Payer-3f8ceb5196 118916 2026-03-01 08:45:00+00 76 F3A2572EBDC3 Payer-9c746778de 133741 2026-03-01 08:52:00+00 77 CC877D8EABBC Payer-3aae3509d4 479491 2026-03-01 08:59:00+00 78 EF4F8C006073 Payer-bfb0addf5f 499553 2026-03-01 09:06:00+00 79 63D1A82D998F Payer-4b5cbc6d8d 359273 2026-03-01 09:13:00+00 80 E02258DCCE80 Payer-180be3be40 267068 2026-03-01 09:20:00+00 \. -- -- PostgreSQL database dump complete -- \unrestrict mPEafVKxdVitoQosTSjaXuadXWUmqfUy5t46n0WxzSXMElZTgnXuAnrC40yVpnV
psql "$SUPABASE_DB_URL" -c "SELECT md5(string_agg(id::text || ref_code || payer || amount_cents::text || paid_at::text, '' ORDER BY id)) AS pre_checksum FROM public.payments;"
pre_checksum ---------------------------------- 02193465944684edec6ccf088dfc69a4 (1 row)
psql "$SUPABASE_DB_URL" -c "SELECT public.run_incident();"
run_incident ------------------- incident executed (1 row)
psql "$SUPABASE_DB_URL" -c "SELECT count(*) FROM public.payments;" -c "SELECT * FROM public.payments LIMIT 10;" -c "SELECT * FROM public.incident_log;"
count
-------
54
(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
5 | 49C2E5E745B1 | CORRUPTED | 0 | 2026-03-01 00:35:00+00
7 | E4006BBC4247 | CORRUPTED | 0 | 2026-03-01 00:49:00+00
8 | 8FEFA9775A21 | CORRUPTED | 0 | 2026-03-01 00:56:00+00
10 | 2F8A7EDC2906 | CORRUPTED | 0 | 2026-03-01 01:10:00+00
11 | ACE39DAE0D04 | CORRUPTED | 0 | 2026-03-01 01:17:00+00
13 | 1BBA1EC387AC | CORRUPTED | 0 | 2026-03-01 01:31:00+00
14 | 00AE2E1DE23E | CORRUPTED | 0 | 2026-03-01 01:38:00+00
(10 rows)
id | ran_at | details
----+-------------------------------+--------------------------------------
1 | 2026-07-24 05:53:46.948276+00 | payments corrupted by incident drill
(1 row)
# First, let me check if there are foreign keys or dependencies on payments psql "$SUPABASE_DB_URL" -c "SELECT conrelid::regclass AS table_name, conname, pg_get_constraintdef(oid) FROM pg_constraint WHERE confrelid = 'public.payments'::regclass OR conrelid = 'public.payments'::regclass;"
table_name | conname | pg_get_constraintdef ------------+---------------+---------------------- payments | payments_pkey | PRIMARY KEY (id) (1 row)
# Strip the \restrict/\unrestrict wrapper lines (Supabase-specific, may not work in stock psql) # and extract the COPY data portion, then restore via psql sed -n '/^COPY public.payments/,/^\\\.$/p' /tmp/payments_backup.sql > /tmp/payments_data.sql cat /tmp/payments_data.sql | head -5 echo "..." cat /tmp/payments_data.sql | wc -l
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 3 381DA59BBE42 Payer-77e253b14e 484618 2026-03-01 00:21:00+00 4 FD441D715532 Payer-e8610229a5 470397 2026-03-01 00:28:00+00 ... 82
cat > /tmp/restore_payments.sql << 'SQL_EOF' BEGIN; -- Truncate the corrupted payments TRUNCATE TABLE public.payments; -- Re-insert from backup SQL_EOF # Append the COPY data sed -n '/^COPY public.payments/,/^\\\.$/p' /tmp/payments_backup.sql >> /tmp/restore_payments.sql # Close transaction echo "COMMIT;" >> /tmp/restore_payments.sql echo "Restore script prepared" wc -l /tmp/restore_payments.sql
Restore script prepared 87 /tmp/restore_payments.sql
head -5 /tmp/restore_payments.sql && echo "..." && tail -5 /tmp/restore_payments.sql
BEGIN; -- Truncate the corrupted payments TRUNCATE TABLE public.payments; -- Re-insert from backup COPY public.payments (id, ref_code, payer, amount_cents, paid_at) FROM stdin; ... 78 EF4F8C006073 Payer-bfb0addf5f 499553 2026-03-01 09:06:00+00 79 63D1A82D998F Payer-4b5cbc6d8d 359273 2026-03-01 09:13:00+00 80 E02258DCCE80 Payer-180be3be40 267068 2026-03-01 09:20:00+00 \. COMMIT;
psql "$SUPABASE_DB_URL" -f /tmp/restore_payments.sql
BEGIN TRUNCATE TABLE COPY 80 COMMIT
psql "$SUPABASE_DB_URL" -c "SELECT count(*) FROM public.payments;" -c "SELECT * FROM public.payments LIMIT 5;" -c "SELECT md5(string_agg(id::text || ref_code || payer || amount_cents::text || paid_at::text, '' ORDER BY id)) AS post_checksum FROM public.payments;" -c "SELECT * FROM public.incident_log;"
count
-------
80
(1 row)
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
3 | 381DA59BBE42 | Payer-77e253b14e | 484618 | 2026-03-01 00:21:00+00
4 | FD441D715532 | Payer-e8610229a5 | 470397 | 2026-03-01 00:28:00+00
5 | 49C2E5E745B1 | Payer-9719c24260 | 193265 | 2026-03-01 00:35:00+00
(5 rows)
post_checksum
----------------------------------
02193465944684edec6ccf088dfc69a4
(1 row)
id | ran_at | details
----+-------------------------------+--------------------------------------
1 | 2026-07-24 05:53:46.948276+00 | payments corrupted by incident drill
(1 row)
8 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