env | grep -i supabase | sed 's/=.*/=<set>/'; echo "---"; which psql; which curl; which jq
SUPABASE_DB_PASSWORD=<set> SUPABASE_DB_URL=<set> SUPABASE_URL=<set> SUPABASE_SERVICE_ROLE_KEY=<set> SUPABASE_PROJECT_REF=<set> SUPABASE_ANON_KEY=<set> --- /usr/bin/psql /usr/bin/curl /usr/bin/jq
psql "$SUPABASE_DB_URL" -c "select version();" 2>&1 | head
version ------------------------------------------------------------------------------ PostgreSQL 17.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 15.2.0, 64-bit (1 row)
cat > /tmp/schema.sql <<'SQL' create extension if not exists pgcrypto; create table if not exists public.authors ( id uuid primary key default gen_random_uuid(), name text not null, email text not null unique ); create table if not exists public.courses ( id uuid primary key default gen_random_uuid(), author_id uuid not null references public.authors(id), title text not null, price_cents integer not null check (price_cents >= 0), published boolean not null default false, created_at timestamptz not null default now() ); create table if not exists public.enrollments ( id bigint generated by default as identity primary key, course_id uuid not null references public.courses(id) on delete cascade, student_email text not null, enrolled_at timestamptz not null default now(), unique (course_id, student_email) ); create index if not exists idx_courses_author_id on public.courses(author_id); create index if not exists idx_enrollments_student_email on public.enrollments(student_email); SQL psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -f /tmp/schema.sql 2>&1
psql:/tmp/schema.sql:1: NOTICE: extension "pgcrypto" already exists, skipping CREATE EXTENSION CREATE TABLE CREATE TABLE CREATE TABLE CREATE INDEX CREATE INDEX
psql "$SUPABASE_DB_URL" -c "\d public.authors" -c "\d public.courses" -c "\d public.enrollments" 2>&1
Table "public.authors"
Column | Type | Collation | Nullable | Default
--------+------+-----------+----------+-------------------
id | uuid | | not null | gen_random_uuid()
name | text | | not null |
email | text | | not null |
Indexes:
"authors_pkey" PRIMARY KEY, btree (id)
"authors_email_key" UNIQUE CONSTRAINT, btree (email)
Referenced by:
TABLE "courses" CONSTRAINT "courses_author_id_fkey" FOREIGN KEY (author_id) REFERENCES authors(id)
Table "public.courses"
Column | Type | Collation | Nullable | Default
-------------+--------------------------+-----------+----------+-------------------
id | uuid | | not null | gen_random_uuid()
author_id | uuid | | not null |
title | text | | not null |
price_cents | integer | | not null |
published | boolean | | not null | false
created_at | timestamp with time zone | | not null | now()
Indexes:
"courses_pkey" PRIMARY KEY, btree (id)
"idx_courses_author_id" btree (author_id)
Check constraints:
"courses_price_cents_check" CHECK (price_cents >= 0)
Foreign-key constraints:
"courses_author_id_fkey" FOREIGN KEY (author_id) REFERENCES authors(id)
Referenced by:
TABLE "enrollments" CONSTRAINT "enrollments_course_id_fkey" FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
Table "public.enrollments"
Column | Type | Collation | Nullable | Default
---------------+--------------------------+-----------+----------+----------------------------------
id | bigint | | not null | generated by default as identity
course_id | uuid | | not null |
student_email | text | | not null |
enrolled_at | timestamp with time zone | | not null | now()
Indexes:
"enrollments_pkey" PRIMARY KEY, btree (id)
"enrollments_course_id_student_email_key" UNIQUE CONSTRAINT, btree (course_id, student_email)
"idx_enrollments_student_email" btree (student_email)
Foreign-key constraints:
"enrollments_course_id_fkey" FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
psql "$SUPABASE_DB_URL" -c "NOTIFY pgrst, 'reload schema';" 2>&1
sleep 3
echo "--- REST test (anon key) ---"
curl -s -o /tmp/resp.txt -w "HTTP %{http_code}\n" \
"$SUPABASE_URL/rest/v1/courses?select=*" \
-H "apikey: $SUPABASE_ANON_KEY" \
-H "Authorization: Bearer $SUPABASE_ANON_KEY"
echo "Body:"; cat /tmp/resp.txt; echoNOTIFY --- REST test (anon key) --- HTTP 200 Body: []
for t in authors courses enrollments; do
code=$(curl -s -o /dev/null -w "%{http_code}" "$SUPABASE_URL/rest/v1/$t?select=*&limit=1" \
-H "apikey: $SUPABASE_ANON_KEY" -H "Authorization: Bearer $SUPABASE_ANON_KEY")
echo "/rest/v1/$t -> HTTP $code"
done/rest/v1/authors -> HTTP 200 /rest/v1/courses -> HTTP 200 /rest/v1/enrollments -> HTTP 200
6 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