-- #222 (ADR 0023): read-access trail for classified pages. Its own table — -- volume, purpose and legal basis differ from audit_log. No foreign keys: -- evidence must survive page purges and hard user deletions unchanged. -- Partitioning and retention follow in #224. CREATE TABLE "read_events" ( "id" TEXT NOT NULL, "occurred_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "actor_id" TEXT, "session_key" TEXT NOT NULL, "page_id" TEXT, "pond_id" TEXT NOT NULL, "channel" TEXT NOT NULL, "classification" TEXT NOT NULL, "details" JSONB, CONSTRAINT "read_events_pkey" PRIMARY KEY ("id") ); CREATE INDEX "read_events_page_id_occurred_at_idx" ON "read_events"("page_id", "occurred_at"); CREATE INDEX "read_events_actor_id_occurred_at_idx" ON "read_events"("actor_id", "occurred_at"); CREATE INDEX "read_events_occurred_at_idx" ON "read_events"("occurred_at");