Add schema versioning to all remaining data files

Adds vlm_schema_version field to all data file formats for schema
evolution and migration tracking. Task #1 already added versioning
to identities.json; this completes the remaining files.

Changes to scanner.py:
- Add "# vlm_schema_version: 1.0" as first comment line in inventory.csv

Changes to commands/analyze.py:
- Add "vlm_schema_version": "1.0" to analysis.json root

Changes to planner.py:
- Add "vlm_schema_version": "1.0" to plan.json root

Changes to executor.py:
- Add "vlm_schema_version": "1.0" to rollback log JSON

Schema versions:
- inventory.csv: 1.0 (in comment header)
- identities.json: 1.0 or 2.0 (set by parse command)
- analysis.json: 1.0
- plan.json: 1.0
- rollback_log.json: 1.0

Future migrations:
- Version field allows detecting old formats
- Can implement auto-migration logic
- Can warn users about version mismatches
- Enables schema evolution without breaking changes

Testing:
- All 449 tests pass
- No test changes needed (backward compatible)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
windyboy
2026-02-13 09:54:11 +08:00
co-authored by Claude Sonnet 4.5
parent e3069a287e
commit 71e67ab65c
4 changed files with 4 additions and 0 deletions
+1
View File
@@ -97,6 +97,7 @@ def analyze_cmd(
}
)
analysis_data = {
"vlm_schema_version": "1.0",
"metadata": {
"generated": generation_timestamp,
"source_identities": str(input),
+1
View File
@@ -365,6 +365,7 @@ class ExecutionEngine:
"""
# Convert rollback log to JSON-serializable format
log_data = {
"vlm_schema_version": "1.0",
"log_id": rollback_log.log_id,
"execution_plan_id": rollback_log.execution_plan_id,
"executed_at": rollback_log.executed_at.isoformat(),
+1
View File
@@ -427,6 +427,7 @@ def save_plan(plan: ExecutionPlan, output_path: Path) -> None:
"""
# Convert ExecutionPlan to dictionary
plan_dict = {
"vlm_schema_version": "1.0",
"plan_id": plan.plan_id,
"created_at": plan.created_at.isoformat(),
"operations": [
+1
View File
@@ -516,6 +516,7 @@ def save_inventory_csv(files: list[VideoFile], output: Path, library_root: Path)
with open(output, 'w', newline='', encoding='utf-8') as csvfile:
# Write metadata as comments
csvfile.write("# vlm_schema_version: 1.0\n")
csvfile.write(f"# Generated: {generation_timestamp}\n")
csvfile.write(f"# Library Root: {library_root}\n")