v4.10 revision to remove "legacy compatibility" code
Quality Gate / gate (push) Failing after 11s

This commit is contained in:
Jim Lancaster
2026-08-22 11:21:18 -05:00
parent cf49c3c127
commit 63c21d4a14
25 changed files with 840 additions and 301 deletions
+52
View File
@@ -0,0 +1,52 @@
# Database Rebuild Migration Workflow
This project uses an explicit **export/import rebuild workflow** for schema migration.
Policy:
- Do not add runtime legacy-compatibility write paths.
- Rebuild a fresh target database from current models.
- Export current data/media, then import into the fresh target.
## Commands
### 1) Export current DB + uploads into a bundle
```bash
uv run python tools/export_import_migration.py export --bundle-dir .migration-bundle
```
Optional source overrides:
- `--source-db <path-or-sqlalchemy-url>`
- `--source-upload-dir <path>`
### 2) Import bundle into a fresh DB + uploads root
```bash
uv run python tools/export_import_migration.py import --bundle-dir .migration-bundle --target-db .\data\transcription-new.db --target-upload-dir .\data-new
```
### 3) One-shot export+import
```bash
uv run python tools/export_import_migration.py migrate --bundle-dir .migration-bundle --target-db .\data\transcription-new.db --target-upload-dir .\data-new
```
## What gets migrated
- Tables (in dependency order): `document_type`, `person_role`, `document`, `person`, `document_person`, `job`, `source`, `job_source`, `execution_attempt`.
- Media tree under `UPLOAD_DIR`.
The bundle contains:
- `database.json` (row export)
- `uploads/` (copied media files)
Path normalization during export/import:
- `source.file_path` is normalized to `documents/...` (upload-root-relative POSIX).
- `person.portrait_path` is normalized to `persons/...` (upload-root-relative POSIX).
## Cutover
After importing to a fresh target:
1. Stop the app.
2. Point `DATABASE__*` and `UPLOAD_DIR` to the new targets.
3. Start the app and run smoke checks (`/healthz`, create/upload/process one job).