miroir/notes/miroir-r3j.1.md
jedarden 3cec14be45 P3.1 TaskStore trait + SQLite backend - Verification complete
Verified that the TaskStore trait and SQLite backend implementation
for tables 1-7 is complete and meets all acceptance criteria:

- All CRUD operations tested (185 tests passed)
- Idempotent migrations with CREATE TABLE IF NOT EXISTS
- WAL mode and busy_timeout for concurrent writes
- JSON for node_tasks, BLOB for body_sha256
- Comprehensive test coverage including concurrent writes

Implementation is production-ready.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 19:03:11 -04:00

3.7 KiB

P3.1 TaskStore trait + SQLite backend (tables 1-7) - Verification Summary

Task

Define the TaskStore trait in miroir-core and implement the SQLite backend for the first 7 tables from plan §4 "Task store schema".

Implementation Status: COMPLETE

The TaskStore trait and SQLite backend were already implemented in the codebase. This session verified the implementation meets all acceptance criteria.

Implementation Location

  • Trait definition: /home/coding/miroir/crates/miroir-core/src/task_store/mod.rs
  • SQLite backend: /home/coding/miroir/crates/miroir-core/src/task_store/sqlite.rs
  • Schema types: /home/coding/miroir/crates/miroir-core/src/task_store/schema.rs
  • Error types: /home/coding/miroir/crates/miroir-core/src/task_store/error.rs

Tables Implemented (1-7)

  1. tasks — Miroir task registry with JSON node_tasks
  2. node_settings_version — Per-node settings version tracking
  3. aliases — Single and multi-target aliases with history
  4. sessions — Read-your-writes session pins
  5. idempotency_cache — Request deduplication with BLOB body_sha256
  6. jobs — Background job queue with claim/heartbeat
  7. leader_lease — Advisory lock for leader election

Acceptance Criteria Verification

1. CRUD Operations Test

cargo test -p miroir-core --features task-store

Result: All 185 tests passed, including:

  • 13 integration tests in tests/task_store.rs
  • 7 SQLite-specific unit tests
  • 3 Redis tests
  • concurrent_writes_no_deadlock test passed

2. Idempotent Migrations

  • Uses CREATE TABLE IF NOT EXISTS for all tables
  • Schema version table tracks applied migrations
  • Opening existing DB skips re-initialization (verified by restart_survival test)
  • Single SELECT for schema version check

3. Concurrent Writes

  • WAL mode enabled: PRAGMA journal_mode=WAL
  • Busy timeout set: PRAGMA busy_timeout=5000
  • concurrent_writes_no_deadlock test verifies 10 concurrent tasks
  • No deadlocks observed

4. Non-Obvious Requirements

  • tasks.node_tasks is JSON (HashMap<String, u64>), stored as TEXT with serde_json
  • idempotency_cache.body_sha256 is BLOB (32 raw bytes), not TEXT
  • jobs.claim_expires_at updated by heartbeat (5-minute lease in dequeue)
  • leader_lease uses row presence as advisory lock

Test Coverage

Unit Tests (sqlite_tests.rs)

  • test_initialize_schema
  • test_tasks_crud
  • test_node_settings_version
  • test_aliases_single_target
  • test_aliases_multi_target
  • test_sessions
  • test_idempotency_cache
  • test_jobs
  • test_leader_lease
  • test_concurrent_writes
  • test_health_check
  • test_persistence
  • test_task_with_error
  • test_task_filter_by_status

Integration Tests (tests/task_store.rs)

  • task_insert_get_roundtrip
  • alias_upsert_roundtrip
  • idempotency_cache_roundtrip
  • leader_lease_acquire_renew
  • restart_survival
  • schema_version_check
  • node_settings_version_roundtrip
  • cdc_cursor_roundtrip
  • tenant_map_roundtrip
  • session_roundtrip
  • job_queue_dequeue_roundtrip
  • health_check
  • concurrent_writes_no_deadlock

Code Quality

  • Clean separation of concerns (trait, schema, error, backend)
  • Proper use of async/await with async-trait
  • Type-safe enums for status fields (TaskStatus, JobState, etc.)
  • Comprehensive error handling with custom error type
  • JSON serialization for complex fields
  • BLOB for binary data (SHA256 hashes)

Additional Tables (8-14)

The implementation also includes tables 8-14 for future features:

  • canaries, canary_runs
  • cdc_cursors
  • tenant_map
  • rollover_policies
  • search_ui_config
  • admin_sessions

Conclusion

The TaskStore trait and SQLite backend implementation is complete, tested, and production-ready. All acceptance criteria are met.