Addressed review:
- `federation_audit_log` indexes now use `created_at DESC NULLS LAST` for reverse-chronological scans (PRD §7.3)
- Reserved M4 columns added (`query_hash`, `outcome`, `bytes_out`) per TASKS.md M2-01 spec
- Migration regenerated in place: `0008_careless_lake.sql` → `0008_smart_lyja.sql` (DESC indexes + new columns)
- Integration test updated: `CREATE TABLE IF NOT EXISTS` now includes reserved columns; 7th test added for peer→grant cascade delete
- All 7 integration tests pass; typecheck, lint, format:check all green
- Force-pushed `feat/federation-m2-schema` (commit `0e0ad9de`)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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 <[email protected]>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)