feat(db): federation schema — grants/peers/audit_log [FED-M2-01] #486
Reference in New Issue
Block a user
Delete Branch "feat/federation-m2-schema"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
federation_peers,federation_grants, andfederation_audit_logtables with full FK constraints and indexespeer_stateandgrant_statusPostgreSQL enums (declared before tables that reference them)0008_careless_lake.sqlviapnpm --filter @mosaicstack/db db:generateFEDERATED_INTEGRATION=1) verifying FK cascades, set-null behavior, enum constraints, and unique constraintsCloses part of #461 (FED-M2-01 task).
New files
packages/db/src/federation.tspackages/db/src/federation.integration.test.tspackages/db/drizzle/0008_careless_lake.sqlpackages/db/drizzle/meta/0008_snapshot.jsonModified files
packages/db/src/schema.tspackages/db/src/index.ts* from './federation.js'packages/db/drizzle/meta/_journal.jsonTables
federation_peers— registered peer gateway (cert CN identity from Step-CA)common_nameandcert_serialcert_serial(CRL lookups) andstate(routing)federation_grants— per-user data access grant to a specific peerusers.idON DELETE CASCADEfederation_peers.idON DELETE CASCADE(subject_user_id, status)and(peer_id, status)federation_audit_log— append-only request log (M4 writes; M2 creates only)(peer_id, created_at),(subject_user_id, created_at),(created_at)Tests
Tests cover:
federation_grantsfederation_audit_log.peer_id = NULLgrant_statusrejected by DBpeer_staterejected by DBcert_serialrejectedQuality gates
🤖 Generated with Claude Code
Adds Drizzle ORM schema and migration for federation v1 milestone 2: - New enums: peer_state ('pending'|'active'|'suspended'|'revoked'), grant_status ('active'|'revoked'|'expired') - New tables: federation_peers, federation_grants, federation_audit_log - FK cascades: user delete cascades grants; peer delete set-nulls audit_log - Migration: 0008_careless_lake.sql - Integration tests (FEDERATED_INTEGRATION=1): 6/6 pass No business logic, no services, no DTOs — schema only. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Addressed review:
federation_audit_logindexes now usecreated_at DESC NULLS LASTfor reverse-chronological scans (PRD §7.3)query_hash,outcome,bytes_out) per TASKS.md M2-01 spec0008_careless_lake.sql→0008_smart_lyja.sql(DESC indexes + new columns)CREATE TABLE IF NOT EXISTSnow includes reserved columns; 7th test added for peer→grant cascade deletefeat/federation-m2-schema(commit0e0ad9de)