Summary
- Adds sqlx 0.8 (runtime-tokio + sqlite) to workspace; relay crate opts in
- Implements crates/relay/src/db/ module: open_pool(url) with WAL mode, forward-only run_migrations with schema_migrations tracking table, V001__init.sql creating server_metadata
- Wires pool init into main.rs startup; adds db: SqlitePool to AppState for handler access via Axum State extractor
- 12 relay unit tests (6 db + 6 app), all passing; zero clippy/fmt issues
Test Plan
- cargo test --workspace — 32 tests pass
- cargo clippy --workspace -- -D warnings — clean
- cargo fmt --all --check — clean
- Start relay with valid relay.toml → relay.db created, .tables shows schema_migrations + server_metadata
- Start relay a second time → SELECT COUNT(*) FROM schema_migrations returns 1
- Full manual verification: docs/test-plans/2026-03-11-MM-72.md