CREATE TABLE "playbook_review_attestations" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "playbook_version_id" uuid NOT NULL, "reviewed_by" uuid NOT NULL, "attested_digest" text NOT NULL, "schema_and_semantic_validation_passed" boolean NOT NULL, "blocking_lint_finding_count" integer NOT NULL, "limitations_documented" boolean NOT NULL, "unresolved_safety_regression" boolean NOT NULL, "review_json" jsonb DEFAULT '{}'::jsonb NOT NULL, "reviewed_at" timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT "playbook_review_attestations_lint_count_check" CHECK ("playbook_review_attestations"."blocking_lint_finding_count" >= 0), CONSTRAINT "playbook_review_attestations_digest_check" CHECK ("playbook_review_attestations"."attested_digest" ~ '^[0-9a-f]{64}$') ); --> statement-breakpoint ALTER TABLE "evaluation_cases" ADD COLUMN "case_version" text;--> statement-breakpoint ALTER TABLE "evaluation_cases" ADD COLUMN "target_digest" text;--> statement-breakpoint ALTER TABLE "evaluation_cases" ADD COLUMN "fixture_id" text;--> statement-breakpoint ALTER TABLE "evaluation_cases" ADD COLUMN "fixture_digest" text;--> statement-breakpoint ALTER TABLE "evaluation_cases" ADD COLUMN "environment_digest" text;--> statement-breakpoint ALTER TABLE "evaluation_results" ADD COLUMN "target_digest" text;--> statement-breakpoint ALTER TABLE "evaluation_results" ADD COLUMN "fixture_digest" text;--> statement-breakpoint ALTER TABLE "evaluation_results" ADD COLUMN "environment_digest" text;--> statement-breakpoint ALTER TABLE "evaluation_results" ADD COLUMN "result_json" jsonb;--> statement-breakpoint ALTER TABLE "playbook_review_attestations" ADD CONSTRAINT "playbook_review_attestations_version_fk" FOREIGN KEY ("playbook_version_id") REFERENCES "public"."playbook_versions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "playbook_review_attestations" ADD CONSTRAINT "playbook_review_attestations_reviewer_fk" FOREIGN KEY ("reviewed_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint CREATE INDEX "playbook_review_attestations_version_time_idx" ON "playbook_review_attestations" USING btree ("playbook_version_id","reviewed_at" DESC NULLS LAST);--> statement-breakpoint ALTER TABLE "evaluation_cases" ADD CONSTRAINT "evaluation_cases_target_digest_check" CHECK ("evaluation_cases"."target_digest" is null or "evaluation_cases"."target_digest" ~ '^[0-9a-f]{64}$');--> statement-breakpoint ALTER TABLE "evaluation_cases" ADD CONSTRAINT "evaluation_cases_fixture_digest_check" CHECK ("evaluation_cases"."fixture_digest" is null or "evaluation_cases"."fixture_digest" ~ '^[0-9a-f]{64}$');--> statement-breakpoint ALTER TABLE "evaluation_cases" ADD CONSTRAINT "evaluation_cases_environment_digest_check" CHECK ("evaluation_cases"."environment_digest" is null or "evaluation_cases"."environment_digest" ~ '^[0-9a-f]{64}$');--> statement-breakpoint ALTER TABLE "evaluation_results" ADD CONSTRAINT "evaluation_results_target_digest_check" CHECK ("evaluation_results"."target_digest" is null or "evaluation_results"."target_digest" ~ '^[0-9a-f]{64}$');--> statement-breakpoint ALTER TABLE "evaluation_results" ADD CONSTRAINT "evaluation_results_fixture_digest_check" CHECK ("evaluation_results"."fixture_digest" is null or "evaluation_results"."fixture_digest" ~ '^[0-9a-f]{64}$');--> statement-breakpoint ALTER TABLE "evaluation_results" ADD CONSTRAINT "evaluation_results_environment_digest_check" CHECK ("evaluation_results"."environment_digest" is null or "evaluation_results"."environment_digest" ~ '^[0-9a-f]{64}$'); --> statement-breakpoint CREATE TRIGGER playbook_review_attestations_immutable_trg BEFORE UPDATE OR DELETE ON "playbook_review_attestations" FOR EACH ROW EXECUTE FUNCTION devrunbook_reject_append_only_mutation();