generated from john/python-template
153 lines
5.5 KiB
Markdown
153 lines
5.5 KiB
Markdown
# Ver1 Step 4 Results: Data Model and Migration Safety
|
|
|
|
## Summary
|
|
|
|
Step 4 implementation status: **complete (baseline scope)**.
|
|
|
|
This document records completed migration-safety work, validation evidence, and remaining follow-ups for Ver1 Step 4.
|
|
|
|
Implemented in this step:
|
|
|
|
1. Added explicit migration framework module with revision history tracking.
|
|
2. Added schema compatibility validation and startup guardrails.
|
|
3. Added migration runner CLI for list/apply/check operations.
|
|
4. Added migration tests and Step 4 validation evidence.
|
|
5. Added Step 4 migration/rollback runbook.
|
|
---
|
|
|
|
## Implemented Changes
|
|
|
|
### 1) Schema audit and invariant lock
|
|
|
|
Implemented read-only compatibility checks in `src/transcription/db.py`:
|
|
|
|
- `validate_schema_compatibility(...)` verifies required V1 tables:
|
|
- `document`
|
|
- `job`
|
|
- `transcript`
|
|
- `transcriptrevision`
|
|
- verifies required `job.retry_count` column
|
|
- returns explicit issue identifiers (non-mutating check)
|
|
|
|
### 2) Migration policy/tooling lock
|
|
|
|
Added explicit migration revision model in `src/transcription/migrations.py`:
|
|
|
|
- `MigrationRevision` dataclass
|
|
- ordered `MIGRATIONS` registry
|
|
- migration history table: `schema_migration_history`
|
|
- explicit pending-list and apply operations
|
|
|
|
### 3) Forward migration implementation
|
|
|
|
Implemented two baseline forward migrations:
|
|
|
|
1. `0001_add_retry_count_to_job`
|
|
2. `0002_create_transcriptrevision_table`
|
|
|
|
Each migration is idempotent and recorded in migration history.
|
|
|
|
### 4) Rollback and mitigation runbook
|
|
|
|
Created `docs/ver1/ver1-step4-migration-runbook.md` with:
|
|
|
|
- preconditions
|
|
- list/apply/check command sequence
|
|
- backup-first procedure
|
|
- verification checklist
|
|
- rollback/mitigation decision tree
|
|
- error classification guidance aligned to `docs/error_handling.md`
|
|
|
|
### 5) Backfill implementation or explicit no-backfill decision
|
|
|
|
No backfill required for this baseline Step 4 scope.
|
|
|
|
Rationale:
|
|
|
|
- additive migration operations only
|
|
- default values and new-table creation do not require historical row rewrites for current V1 invariants
|
|
- residual advanced backfill scenarios deferred unless future schema evolution introduces incompatible transforms
|
|
---
|
|
|
|
## Test and Verification Evidence
|
|
|
|
### Added/Updated Tests
|
|
|
|
1. `tests/test_migrations.py`
|
|
- pending migration discovery
|
|
- migration apply + history recording
|
|
- idempotent re-apply behavior
|
|
2. `tests/test_db.py`
|
|
- compatibility-check behavior on fresh schema
|
|
- table expectation updates for `transcriptrevision`
|
|
3. `tests/test_config.py`
|
|
- migration safety setting defaults
|
|
4. `tests/test_app.py`
|
|
- lifespan test compatibility with migration/validation startup hooks
|
|
### Validation Runs
|
|
|
|
Run and record outcomes:
|
|
|
|
- `uv run pytest --collect-only -q` -> passed
|
|
- `uv run pytest -m unit -q` -> passed
|
|
- `uv run pytest -m "not external" -q` -> passed
|
|
- `uv run pytest -q` -> passed
|
|
### Migration Rehearsal Evidence
|
|
|
|
Migration rehearsal details (test-based):
|
|
|
|
- baseline data set used: in-memory SQLite legacy-shaped schema fixture (`job` table missing Step 4 additions)
|
|
- forward migration result: pending revisions applied successfully (`0001`, `0002`)
|
|
- post-migration verification result: schema checks pass and migration history recorded
|
|
- rollback/mitigation rehearsal result: runbook defined backup-restore primary rollback class for personal-scale SQLite deployment
|
|
---
|
|
|
|
## Requirement Traceability (Step 4)
|
|
|
|
| Step 4 Area | REQ Coverage | Status | Evidence |
|
|
| --- | --- | --- | --- |
|
|
| Schema lifecycle and state persistence safety | REQ-3, REQ-4, REQ-11 | met | `src/transcription/migrations.py`, `tests/test_migrations.py`, `tests/test_db.py` |
|
|
| Lifespan/runtime ownership continuity | REQ-7 | met | `src/transcription/app.py` startup checks + existing lifespan ownership model |
|
|
| Explicit non-mutating production startup policy | REQ-10 | met | `migration_auto_apply_on_startup=False` default + explicit runner workflow + startup validation gate |
|
|
| Prompt/data continuity constraints | REQ-12 | met (continued) | no prompt-contract mutation in Step 4 changes |
|
|
---
|
|
|
|
## Operational Artifacts Produced
|
|
|
|
- `docs/ver1/ver1-step4.md`
|
|
- `docs/ver1/ver1-step4-migration-runbook.md`
|
|
- `src/transcription/migrations.py`
|
|
- `src/transcription/migration_runner.py`
|
|
- README migration workflow updates
|
|
---
|
|
|
|
## Risks, Exceptions, and Follow-Ups
|
|
|
|
1. This lightweight migration system is appropriate for current personal-scale scope but may require a dedicated framework as schema complexity grows.
|
|
2. Rollback remains backup-restore primary; reversible down-migration coverage is intentionally limited in this baseline.
|
|
3. Startup compatibility checks currently fail fast with generic runtime error text and can be further normalized under API/operator error envelopes in later hardening.
|
|
|
|
Open follow-ups to carry forward:
|
|
|
|
- Evaluate migration framework escalation criteria in Step 9/10 readiness updates.
|
|
- Add optional richer structured migration logging fields if observability scope expands.
|
|
---
|
|
|
|
## Step 4 Exit Assessment
|
|
|
|
- Schema validation against finalized V1 domain: **met**
|
|
- Forward migration path safety and repeatability: **met (baseline scope)**
|
|
- Rollback/mitigation readiness: **met (backup-restore primary path)**
|
|
- Backfill risk closure: **met (no backfill required for current deltas)**
|
|
- Test and regression safety: **met**
|
|
|
|
Step 4 completion status: **complete (baseline scope)**
|
|
---
|
|
|
|
## Handoff to Step 5
|
|
|
|
Once Step 4 is marked complete, Step 5 can proceed with:
|
|
|
|
- verified migration safety baseline
|
|
- explicit rollback and recovery procedures
|
|
- reduced data-integrity risk entering private-network safety hardening |