KB-48FF
IU Core 2400x — Final report (PASS)
7 min read Revision 1
iu-core2400xdieu44final-reportpassexternally-integrated
06 — 2400x final report
1. Status
IU_CORE_2400X_DIRECTUS_PROMOTION_FULL_QDRANT_REINDEX_PASS
13 acceptance-matrix rows DONE; 1 row carries an operator-gated Nuxt redeploy. 0 BLOCKED. 0 PARTIAL. No unsafe state.
2. What changed
2.1 Code (commit 1c652d2 on main, parent a71d225)
sql/iu-core/022_three_axis_envelope_table_promotion.sql(new): table + 2 fns + 1 view promoting the three-axis envelope.sql/iu-core/rollback/022_three_axis_envelope_table_promotion.rollback.sql(new): drops view -> fns -> table in safe order.sql/iu-core/runtime/320_three_axis_envelope_initial_refresh.sql(new): dry-run + live refresh + fail-closed fidelity check.sql/iu-core/runtime/rollback/320_three_axis_envelope_initial_refresh.rollback.sql(new): empties the cache (next refresh repopulates from view).sql/iu-core/sandbox/210_three_axis_envelope_table_probe.sql(new): 8-probe BEGIN/ROLLBACK validation against live schema.sql/iu-core/runtime/110_iu_core_dot_conformance_scan.sql: SSOT extended for the 4 new objects; D9 VALUES bumped 19->20 / 20->21 / 47->49; total 128 -> 132.tests/test_iu_core_2400x_three_axis_table_promotion.py(new): 21 tests across 5 contract classes.- 8 existing tests get the mechanical DOT count bump.
17 files changed, 859 insertions(+), 37 deletions(-).
2.2 Production durable changes
- Migration 022 applied to live
directusDB on containerpostgres(vmi3080463). All CREATE TABLE / FUNCTION / VIEW / INDEX successful. - Runtime 320 ran:
iu_three_axis_envelopepopulated with 163 rows (every active IU); drift checkin_sync=true. - Directus: legacy
v_ui_iu_three_axis_enveloperegistration retired (DELETE /collections/<view>-> 204);iu_three_axis_envelopecollection registered (Directus auto-discovered the 16 fields when the table appeared); Administrator-policy READ permission granted. - Qdrant
iu_core_iu_chunks: 6 -> 61 points (60 unique IUs, KT-B split into 2 chunks under the boundary rule). - PG
iu_vector_sync_point: 6 indexed -> 61 indexed (the existing 6 were UPSERTed to the 2400x actor; UUIDv5 ids made the overwrite deterministic).
2.3 Production transient
dot_config.iu_core.vector_sync_enabledtoggledfalse -> true -> falseinside the driver'stry/finally. Final state:false(verified post-run).- No other dot_config key changed.
3. Backup
pg_dump -Fc against the live postgres container, taken BEFORE any
mutation:
- File:
/opt/incomex/backups/directus-pre-iucore-2400x-20260523T061016Z.dump - Size: 77 428 884 bytes
- sha256:
4e83efe057e38f2676bf6cee755d8ce52257be5f77e3717cab97461d185218e0 - Recovery:
docker exec postgres pg_restore -U directus -d directus -cagainst the dump.
4. Tests
tests/test_iu_core_2400x_three_axis_table_promotion.py— 21 passed (migration / rollback / runtime / sandbox / DOT SSOT contract classes).- 8 existing tests updated for the DOT-count bump (mechanical, no behaviour change).
- Full suite:
python3 -m pytest tests/ -q --ignore=tests/_orchestrator_o2_harness.py-> 1114 passed in 0.67 s (+21 net over 2000x).
5. Five-layer sync (rolled up from doc 05)
| layer | impact |
|---|---|
| PG | migration 022 (+1 table / +1 view / +2 fns); 163 rows in iu_three_axis_envelope after runtime/320; +55 indexed rows in iu_vector_sync_point (6->61); gate toggled+closed |
| Directus | legacy view-backed collection retired; managed-table collection registered with 16 fields + Administrator READ; REST GET /items/... now serves real rows |
| Nuxt | none — operator-gated env flip + redeploy queued |
| AgentData | +7 KB reports (this directory) |
| Qdrant | iu_core_iu_chunks 6 -> 61 points (60 IUs, KT-B 2 chunks); production_documents untouched (9 213 / green) |
6. Rollback / disable readiness
| layer | rollback |
|---|---|
| Directus permissions | DELETE /permissions/<id> |
| Directus collection | DELETE /collections/iu_three_axis_envelope |
| Cache table | DELETE FROM iu_three_axis_envelope (next refresh repopulates from view) |
| Migration 022 | sql/iu-core/rollback/022_three_axis_envelope_table_promotion.rollback.sql |
| Qdrant points (per-actor) | DELETE FROM iu_vector_sync_point WHERE sync_status='indexed' AND last_actor='iu_core_2400x_full_reindex', then loop the same UUIDv5s through DELETE /collections/iu_core_iu_chunks/points/<uuid> |
| Qdrant collection (atomic) | DELETE /collections/iu_core_iu_chunks then re-run runtime/310 to re-register |
| Vector-sync gate | already false; UPDATE dot_config SET value='false' WHERE key='iu_core.vector_sync_enabled' is a no-op |
| Code | git revert 1c652d2 (warning: drops migration 022 + tests; data must be cleaned first) |
7. DOT / no-hardcode / five-layer status
- DOT 128 -> 132 / 132 PASS (table 19->20 / view 20->21 / function 47->49; trigger/config/event_type/route unchanged).
- No hardcoded literal introduced. Every host/collection/secret/field list discovered from registry/config/env (doc 05 §3).
- Five-layer impact classified above; no layer skipped.
8. KB / AgentData
The 7 reports in this directory have been uploaded to AgentData with
mcp__agent-data__upload_document and verified via list_documents
get_document+search_knowledge. Per-report metadata + content sizes are recorded in doc 07.
9. Decision — IU Core readiness
IU Core is externally integrated for the layer this macro owned end-to-end:
- Migration spine + DOT + tests are coherent at 132 objects / 1114 tests / 0 hardcode.
- Qdrant per-IU embedding covers the full enacted corpus (60 / 60 IUs) with the boundary rule enforced at 3 layers and proven drift-free.
- Directus serves real
GET /items/iu_three_axis_envelopewith three axes via the normal field-management path (the 2000x blocker is closed at the IU Core layer; the only remaining external step is a Nuxt env override + redeploy).
The remaining gap (Nuxt) is operator-gated, not an IU Core code gap.
10. Exact blocker carried forward (single)
Nuxt env override IU_CORE_DIRECTUS_COLLECTION=iu_three_axis_envelope
- container redeploy is on the operator's release schedule. The contract supports the override; no Nuxt code change required.