All 7 feature-flagged tables (canaries, canary_runs, cdc_cursors, tenant_map, rollover_policies, search_ui_config, admin_sessions) were already implemented with full CRUD operations, migrations, and tests. The canary_runs_auto_prune trigger was added in P3.3 (commit 719d1db). Acceptance criteria verified: - All 38 SQLite tests pass - Every table round-trips insert/get correctly - Auto-prune trigger keeps canary_runs bounded - Empty tables consume < 16 KB overhead each - Tables created via TaskStore::migrate() migration 002 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.4 KiB
2.4 KiB
miroir-r3j.2: SQLite Backend Tables 8-14 — Verification Complete
Task
Extend the SQLite TaskStore with plan §4 tables 8–14:
- Table 8:
canaries(§13.18) - Table 9:
canary_runs(§13.18) with auto-prune trigger - Table 10:
cdc_cursors(§13.13) - Table 11:
tenant_map(§13.15) - Table 12:
rollover_policies(§13.17) - Table 13:
search_ui_config(§13.21) - Table 14:
admin_sessions(§13.19) with expires_at index
Implementation Status
COMPLETE — All tables 8-14 were already implemented in:
crates/miroir-core/src/task_store/sqlite.rs— Full CRUD operationscrates/miroir-core/src/task_store/mod.rs— Trait definitions and row typescrates/miroir-core/src/migrations/002_feature_tables.sql— Schema migrationscrates/miroir-core/src/schema_migrations.rs— Migration registry
The canary_runs_auto_prune trigger was added in commit 719d1db (P3.3).
Verification
All 38 SQLite tests pass:
cargo test --package miroir-core --lib task_store::sqlite::tests
Tests covering tables 8-14:
canary_upsert_get_list_delete— Table 8 CRUDcanary_runs_insert_get_and_auto_prune— Table 9 with auto-prunecdc_cursor_upsert_get_list— Table 10 composite PKtenant_map_insert_get_delete— Table 11 BLOB PKrollover_policy_upsert_get_list_delete— Table 12 CRUDsearch_ui_config_upsert_get_delete— Table 13 upsertadmin_session_insert_get_revoke_expire— Table 14 lifecycleempty_tables_add_minimal_overhead_per_table— Overhead < 16 KB per tableall_tables_survive_store_reopen— All 14 tables persist correctly
Acceptance Criteria Met
- ✅ Every table's typed struct round-trips
insert/get— Unit tests verify - ✅
canary_runstrigger keeps row count ≤run_history_per_canary— Trigger implemented and tested - ✅ Empty tables consume < 16 KB overhead each — Test verifies < 16 KB average
- ✅ Tables created via
TaskStore::migrate()— Migration 002 registered and applied
Key Implementation Details
canary_runstrigger: UsesNOT IN (SELECT ... ORDER BY ran_at DESC LIMIT 100)for auto-pruningtenant_map.api_key_hash: Stored as 32-byte BLOB (raw sha256)cdc_cursorsPK: Composite on(sink_name, index_uid)for update-in-placeadmin_sessions_expiresindex: Enables lazy eviction scan performance