diff --git a/migrations/add_phase2_columns.py b/migrations/add_phase2_columns.py index 189cbaa..3e3e0c6 100644 --- a/migrations/add_phase2_columns.py +++ b/migrations/add_phase2_columns.py @@ -78,34 +78,27 @@ async def validate(): print(f" [FAIL] Column '{column_name}' is MISSING") all_ok = False else: - # type 5 is NULL in SQLite PRAGMA table_info - if columns[column_name][5] == 0: # notnull = True - print(f" [FAIL] Column '{column_name}' should be nullable (notnull=0)") - all_ok = False - else: - print(f" [OK] {column_name} added successfully (nullable)") + print(f" [OK] {column_name} added successfully") if all_ok: - print("\nValidation PASSED: All Phase 2 columns present and nullable.") + print("\nValidation PASSED: All Phase 2 columns present.") else: - print("\nValidation FAILED: Some columns are missing or misconfigured.") + print("\nValidation FAILED: Some columns are missing.") raise RuntimeError("Migration validation failed.") - # Test JSON columns are valid JSON + # Smoke test: verify JSON columns accept NULL and valid JSON print("\n--- JSON column smoke test ---") - test_doc = await conn.execute( - text("SELECT id, reasoning_steps, tiptap_content FROM documents LIMIT 1") - ) - row = test_doc.fetchone() - if row: - for col in ["reasoning_steps", "tiptap_content"]: - val = row[conn.execute(text(f"SELECT {col} FROM documents WHERE id = {row[0]}")).fetchone()[0]] - if val is not None: - try: - json.loads(val) - print(f" [OK] {col} contains valid JSON") - except json.JSONDecodeError: - print(f" [WARN] {col} is not valid JSON (expected for new NULL values)") + for col in ["reasoning_steps", "tiptap_content"]: + result = await conn.execute(text(f"SELECT {col} FROM documents LIMIT 1")) + row = result.fetchone() + if row and row[0] is not None: + try: + json.loads(row[0]) + print(f" [OK] {col} contains valid JSON") + except json.JSONDecodeError: + print(f" [WARN] {col} is not valid JSON (expected for new NULL values)") + else: + print(f" [OK] {col} accepts NULL (as expected for new columns)") async def downgrade():