Merge _configs/ into config/ for single configuration directory. Update all path references. Changes: - Move _configs/* to config/ - Update .gitignore for new patterns - No code references to _configs/ found Impact: -1 root directory (layout_conventions.md compliance)
12 KiB
12 KiB
SurrealDB Implementation Checklist
Complete checklist for implementing SurrealDB support with configuration-based selection and migration tool.
✅ Phase 1: Design & Planning (Week 1)
Architecture
- Design Database trait with all required methods
- Plan SQLite adapter implementation
- Plan SurrealDB adapter implementation
- Plan configuration schema (TOML structure)
- Design migration tool architecture
Configuration System
- Define DatabaseConfig struct with engine selection
- Create config examples (sqlite.toml, surrealdb.toml)
- Plan environment variable overrides
- Design config validation logic
Testing Strategy
- Plan mock Database implementation
- Plan unit tests for each backend
- Plan integration tests
- Plan E2E tests
- Plan performance benchmarks
✅ Phase 2: Trait Layer & SQLite Refactoring (Weeks 1-2)
Core Trait Definition (syntaxis-core/src/persistence/mod.rs)
- Define
#[async_trait] pub trait Database - Extract all 50+ method signatures
- Document trait with rustdoc
- Add error handling trait bounds
- Create tests for trait interface
Configuration Loading
- Create DatabaseConfig struct (serde)
- Implement config loading from TOML
- Add environment variable override support
- Add config validation
- Create example configs
SQLite Adapter
- Move current persistence.rs code to sqlite_impl.rs
- Implement Database trait for SqliteDatabase
- Test all existing functionality
- Verify backward compatibility
File Structure
- Create syntaxis-core/src/persistence/
- mod.rs (trait definition)
- sqlite_impl.rs (SQLite implementation)
- error.rs (unified error handling)
- config.rs (configuration management)
✅ Phase 3: SurrealDB Implementation (Weeks 2-3)
SurrealDB Adapter (syntaxis-core/src/persistence/surrealdb_impl.rs)
- Create SurrealDatabase struct
- Initialize SurrealDB connection
- Implement schema initialization
- Implement Database trait for SurrealDatabase
- Project operations (CRUD)
- Checklist operations
- Phase transition operations
- Security assessment operations
- Tool configuration operations
- Activity logging operations
- Backup history operations
Schema Definition
- Create SurrealQL schema definitions
- Define collections (projects, checklist_items, etc.)
- Define relationships (RELATE for phase transitions)
- Create indices for performance
- Document schema structure
Query Optimization
- Test graph queries (phase transitions)
- Test document queries (tool configs)
- Test filtering and sorting
- Optimize query performance
- Create performance benchmarks
✅ Phase 4: Migration Tool (Week 3)
Data Migration Strategy
- Design migration architecture
- Create SQLite → SurrealDB migration tool
- Read all data from SQLite
- Transform to SurrealDB format
- Validate data integrity
- Handle relationships (foreign keys → RELATE)
CLI for Migration
- Create
workspace migratecommand - Add
--from sqlite --to surrealdbflags - Add
--dry-runoption - Add
--backupoption (backup before migration) - Add validation and error reporting
Rollback Support
- Design rollback strategy
- Implement backup mechanism
- Create
workspace migrate --rollbackcommand - Document recovery procedures
Testing
- Create test data
- Test migration with various data sizes
- Test rollback functionality
- Verify data integrity post-migration
✅ Phase 5: Runtime Selection (Weeks 3-4)
Backend Selection Enum
- Create DatabaseBackend enum
- DatabaseBackend::Sqlite(SqliteDatabase)
- DatabaseBackend::SurrealDB(SurrealDatabase)
- Implement Database trait for enum
- Add runtime selection logic
Configuration-Driven Initialization
- Load config file
- Parse engine selection
- Create appropriate backend
- Handle initialization errors gracefully
- Log selected backend
Documentation
- Create user guide for config selection
- Document each configuration option
- Provide example configurations
- Document environment variables
- Document migration procedures
✅ Phase 6: Integration & Testing (Week 4)
Binary Updates
- syntaxis-cli - Accept database config
- syntaxis-tui - Handle database initialization
- syntaxis-api - Use DatabaseBackend
- syntaxis-dashboard - Connect to backend
Unit Tests
- SQLite adapter tests (170+ tests)
- SurrealDB adapter tests (170+ tests)
- Configuration loading tests
- Migration tool tests
- Backend selection tests
Integration Tests
- Create project → store → retrieve (SQLite)
- Create project → store → retrieve (SurrealDB)
- Phase transitions (graph queries)
- Complex filtering
- Concurrent operations
E2E Tests
- CLI workflow (SQLite)
- CLI workflow (SurrealDB)
- TUI operations (SQLite)
- TUI operations (SurrealDB)
- API endpoints (SQLite)
- API endpoints (SurrealDB)
Performance Benchmarks
- Read performance (SQLite vs SurrealDB)
- Write performance (SQLite vs SurrealDB)
- Complex query performance
- Memory usage
- Connection pooling
✅ Phase 7: Documentation & Deployment (Week 5)
User Documentation
- Configuration guide (how to choose backend)
- Migration guide (SQLite → SurrealDB)
- Troubleshooting guide
- Performance tuning guide
- Backup/restore procedures
Developer Documentation
- Architecture documentation
- Database trait reference
- SQLite implementation guide
- SurrealDB implementation guide
- Adding new backends (extension guide)
Deployment Documentation
- Docker setup (SurrealDB server)
- Production deployment guide
- Kubernetes deployment guide
- Monitoring and observability
- Disaster recovery procedures
Release Artifacts
- Update CHANGELOG.md
- Create migration guide
- Create release notes
- Update README with backend options
- Create compatibility matrix
Configuration Examples
SQLite (Current/Default)
# configs/database-sqlite.toml
[database]
engine = "sqlite"
sqlite_path = "~/.local/share/core/workspace.db"
max_connections = 5
timeout_secs = 30
SurrealDB (Cloud-Ready)
# configs/database-surrealdb.toml
[database]
engine = "surrealdb"
[database.surrealdb]
url = "ws://surrealdb-server:8000"
namespace = "syntaxis"
database = "projects"
username = "${SURREALDB_USER}" # From env var
password = "${SURREALDB_PASSWORD}"
max_connections = 10
timeout_secs = 30
PostgreSQL (Future)
# configs/database-postgres.toml (for future implementation)
[database]
engine = "postgres"
[database.postgres]
host = "${POSTGRES_HOST}"
port = 5432
username = "${POSTGRES_USER}"
password = "${POSTGRES_PASSWORD}"
database = "syntaxis"
max_connections = 20
timeout_secs = 30
Migration Tool CLI
Commands
# Show current database
workspace database status
# List available backends
workspace database list-backends
# Migrate from SQLite to SurrealDB
workspace database migrate \
--from sqlite \
--to surrealdb \
--target-url ws://surrealdb-server:8000 \
--backup
# Dry run (show what would happen)
workspace database migrate \
--from sqlite \
--to surrealdb \
--dry-run
# Rollback migration
workspace database migrate --rollback
# Validate data integrity
workspace database validate
Testing Checklist
Unit Tests (Minimum Coverage: 80%)
- Database trait contract tests
- SQLite implementation tests (all 50+ methods)
- SurrealDB implementation tests (all 50+ methods)
- Configuration loading tests
- Error handling tests
- Backend selection tests
Integration Tests
- Full syntaxis (SQLite)
- Full syntaxis (SurrealDB)
- Data consistency across backends
- Transaction handling
- Concurrent operations
- Error recovery
Migration Tests
- SQLite → SurrealDB migration (small dataset)
- SQLite → SurrealDB migration (large dataset)
- Data integrity post-migration
- Rollback functionality
- Performance during migration
- Concurrent operations during migration
Performance Tests
- Read throughput (1000 operations)
- Write throughput (1000 operations)
- Complex queries (10 scenarios)
- Memory usage over time
- Connection pool efficiency
Documentation Deliverables
User-Facing
- Configuration Quick Start Guide
- How to Choose Your Backend (decision matrix)
- SQLite Configuration Guide
- SurrealDB Configuration Guide
- Migration Guide (SQLite → SurrealDB)
- Troubleshooting Guide
- Performance Tuning Guide
- Backup & Restore Guide
Developer-Facing
- Architecture Overview
- Database Trait Reference
- SQLite Implementation Details
- SurrealDB Implementation Details
- Adding New Backends (extension guide)
- Testing Strategy
- Performance Benchmarks
Operations-Facing
- Production Deployment Guide
- Docker Compose Setup
- Kubernetes Deployment
- Monitoring & Observability
- Disaster Recovery
- Capacity Planning
Code Quality Checklist
Before release:
Formatting & Linting
cargo fmt --all✅cargo clippy --all-targets✅- No warnings
- Documentation complete
Testing
- All unit tests pass (>80% coverage)
- All integration tests pass
- All E2E tests pass
- Performance benchmarks documented
- No flaky tests
Security
- No
unsafecode - No
unwrap()in production - SQL injection protected (parameterized queries)
- Authentication validated
- No hardcoded credentials
- Secrets from environment variables
Performance
- Benchmarks < 10ms per query (simple)
- Benchmarks < 100ms per query (complex)
- Memory usage reasonable
- Connection pooling working
- No N+1 queries
Success Criteria
✅ Phase Complete When:
-
Configuration System
- Both backends configurable via TOML
- Environment variables supported
- Runtime selection working
-
Both Backends Working
- SQLite implementation passes all tests
- SurrealDB implementation passes all tests
- Data integrity verified across both
-
Migration Tool
- SQLite → SurrealDB migration working
- Data integrity verified post-migration
- Rollback working
- Backup/restore working
-
Documentation
- User guide complete
- Developer guide complete
- API documentation complete
- Configuration examples provided
-
Quality
- All tests passing (632+ tests)
- >80% code coverage
- Performance benchmarks documented
- Zero breaking changes (backward compatible)
Sign-off
- Development Team - Implementation complete
- QA Team - Testing complete, issues resolved
- Security Team - Security review passed
- Operations Team - Deployment ready
- Product Team - Feature approved for release
Timeline Estimate
| Phase | Duration | Start | End |
|---|---|---|---|
| 1 | 1 week | Week 1 | Week 1 |
| 2 | 2 weeks | Week 1 | Week 2 |
| 3 | 2 weeks | Week 2 | Week 3 |
| 4 | 1 week | Week 3 | Week 3 |
| 5 | 1 week | Week 3 | Week 4 |
| 6 | 1 week | Week 4 | Week 4 |
| 7 | 1 week | Week 5 | Week 5 |
| Total | 5-6 weeks |
With 1 full-time developer + 0.5 QA + 0.5 DevOps
Notes
- All phases can overlap (agile approach)
- Testing should be continuous, not end-phase
- Documentation should be written as you code
- Regular demos to stakeholders every Friday
- Regular sync-ups (3x per week recommended)