set -e
command -v psql
for v in SUPABASE_URL SUPABASE_PROJECT_REF SUPABASE_ANON_KEY SUPABASE_SERVICE_ROLE_KEY SUPABASE_DB_URL SUPABASE_DB_PASSWORD; do if [ -n "${!v:-}" ]; then echo "$v=set"; else echo "$v=missing"; fi; done
psql "$SUPABASE_DB_URL" -X -v ON_ERROR_STOP=1 -Atqc "select current_database(), current_user, version();"/usr/bin/psql SUPABASE_URL=set SUPABASE_PROJECT_REF=set SUPABASE_ANON_KEY=set SUPABASE_SERVICE_ROLE_KEY=set SUPABASE_DB_URL=set SUPABASE_DB_PASSWORD=set postgres|postgres|PostgreSQL 17.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 15.2.0, 64-bit
psql "$SUPABASE_DB_URL" -X -v ON_ERROR_STOP=1 -P pager=off -c "SELECT c.relkind, n.nspname, c.relname FROM pg_class c JOIN pg_namespace n ON n.oid=c.relnamespace WHERE n.nspname='public' AND c.relkind IN ('r','p','v','m','f') ORDER BY c.relname;"relkind | nspname | relname ---------+---------+--------- (0 rows)
cat <<'SQL' | psql "$SUPABASE_DB_URL" -X -v ON_ERROR_STOP=1 BEGIN; CREATE TABLE public.authors ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), name text NOT NULL, email text NOT NULL UNIQUE ); CREATE TABLE 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 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 courses_author_id_idx ON public.courses (author_id); CREATE INDEX enrollments_student_email_idx ON public.enrollments (student_email); GRANT SELECT ON TABLE public.authors, public.courses, public.enrollments TO anon; COMMIT; NOTIFY pgrst, 'reload schema'; SQL psql "$SUPABASE_DB_URL" -X -v ON_ERROR_STOP=1 -P pager=off -c " SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE' ORDER BY table_name; "
BEGIN CREATE TABLE CREATE TABLE CREATE TABLE CREATE INDEX CREATE INDEX GRANT COMMIT NOTIFY table_name ------------- authors courses enrollments (3 rows)
set -e
printf '%s\n' '--- schema verification ---'
psql "$SUPABASE_DB_URL" -X -v ON_ERROR_STOP=1 -P pager=off <<'SQL'
SELECT table_name, column_name, data_type, is_nullable, column_default, is_identity
FROM information_schema.columns
WHERE table_schema='public' AND table_name IN ('authors','courses','enrollments')
ORDER BY table_name, ordinal_position;
SELECT conrelid::regclass AS table_name, conname, contype, pg_get_constraintdef(oid) AS definition
FROM pg_constraint
WHERE connamespace='public'::regnamespace
AND conrelid IN ('public.authors'::regclass,'public.courses'::regclass,'public.enrollments'::regclass)
ORDER BY conrelid::regclass::text, contype, conname;
SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname='public' AND tablename IN ('authors','courses','enrollments')
ORDER BY tablename,indexname;
SQL
printf '%s\n' '--- anonymous REST verification ---'
response=$(mktemp)
code=$(curl -sS -o "$response" -w '%{http_code}' \
"$SUPABASE_URL/rest/v1/courses?select=*&limit=1" \
-H "apikey: $SUPABASE_ANON_KEY")
echo "HTTP $code"
cat "$response"; echo
case "$code" in 2*) ;; *) exit 1;; esac
rm -f "$response"--- schema verification --- table_name | column_name | data_type | is_nullable | column_default | is_identity -------------+---------------+--------------------------+-------------+-------------------+------------- authors | id | uuid | NO | gen_random_uuid() | NO authors | name | text | NO | | NO authors | email | text | NO | | NO courses | id | uuid | NO | gen_random_uuid() | NO courses | author_id | uuid | NO | | NO courses | title | text | NO | | NO courses | price_cents | integer | NO | | NO courses | published | boolean | NO | false | NO courses | created_at | timestamp with time zone | NO | now() | NO enrollments | id | bigint | NO | | YES enrollments | course_id | uuid | NO | | NO enrollments | student_email | text | NO | | NO enrollments | enrolled_at | timestamp with time zone | NO | now() | NO (13 rows) table_name | conname | contype | definition -------------+-----------------------------------------+---------+------------------------------------------------------------------ authors | authors_pkey | p | PRIMARY KEY (id) authors | authors_email_key | u | UNIQUE (email) courses | courses_price_cents_check | c | CHECK ((price_cents >= 0)) courses | courses_author_id_fkey | f | FOREIGN KEY (author_id) REFERENCES authors(id) courses | courses_pkey | p | PRIMARY KEY (id) enrollments | enrollments_course_id_fkey | f | FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE enrollments | enrollments_pkey | p | PRIMARY KEY (id) enrollments | enrollments_course_id_student_email_key | u | UNIQUE (course_id, student_email) (8 rows) tablename | indexname | indexdef -------------+-----------------------------------------+-------------------------------------------------------------------------------------------------------------------------- authors | authors_email_key | CREATE UNIQUE INDEX authors_email_key ON public.authors USING btree (email) authors | authors_pkey | CREATE UNIQUE INDEX authors_pkey ON public.authors USING btree (id) courses | courses_author_id_idx | CREATE INDEX courses_author_id_idx ON public.courses USING btree (author_id) courses | courses_pkey | CREATE UNIQUE INDEX courses_pkey ON public.courses USING btree (id) enrollments | enrollments_course_id_student_email_key | CREATE UNIQUE INDEX enrollments_course_id_student_email_key ON public.enrollments USING btree (course_id, student_email) enrollments | enrollments_pkey | CREATE UNIQUE INDEX enrollments_pkey ON public.enrollments USING btree (id) enrollments | enrollments_student_email_idx | CREATE INDEX enrollments_student_email_idx ON public.enrollments USING btree (student_email) (7 rows) --- anonymous REST verification --- HTTP 200 []
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