IU Core 2000x — Next macro package
07 — Next macro package
1. State at handoff
- Code commit
900d4c3onmain(parent8c7d8dc). - 1093 tests (+10 net over 1500x).
- Production
directusDB: migrations 001–021 + runtime through 310 (unchanged from 1500x). information_unit151 active /v_ui_iu_three_axis_envelope163 rows /iu_piece_collection3 /iu_piece_membership8 /dot_iu_command_run18 /iu_tree_change_log56 /iu_route_attempt68 / dead-letter 0.iu_vector_sync_point9 rows total — 3 dryrun grandfather + 6 indexed (this macro). All point keysiu.ICX-CONST/....iu_qdrant_collection_registry1 row (iu_core_iu_chunks, status=active).- Qdrant
iu_core_iu_chunks6 points (was 0). Other collectionproduction_documentsuntouched. - Directus
directus_collectionscarriesv_ui_iu_three_axis_envelope. Fields not registered (external blocker, doc 03). - All write gates closed: composer / delivery / operator_runtime / structure_ops / vector_sync = false; routes_master / route_worker = true.
2. No unsafe state
- Backup
directus-pre-iucore-2000x-20260523T033615Z.dumpsha812803…d2cbdis the rollback anchor. - Vector-sync gate closed.
- Directus collection metadata is removable via
DELETE /collections/...(no row data; just bookkeeping). - Qdrant points are addressable by deterministic UUIDv5; the rollback driver computes the same ids and DELETEs them.
3. Open gaps carried forward
-
Directus field-permission blocker (doc 03 §3).
POST /fieldsreturns 403 onschema=nullview-backed registrations even for the Administrator role. Two operator paths:- Path A (recommended): migration 022 promotes the view to a materialised table + refresh trigger.
- Path B: configure the 16 fields + READ permission via the Directus admin UI.
-
Nuxt screen wiring. The assembly contract is built and ready (doc 04). Until the Directus blocker clears, Nuxt calls return 403. Once cleared, the Nuxt SDK pattern works as-is.
-
Broader Qdrant reindex. 6 of 163 IUs are now indexed. A subsequent macro can scale to the full corpus.
4. Recommended next macro
IU_CORE_2400X_DIRECTUS_TABLE_PROMOTION_AND_FULL_QDRANT_REINDEX —
two parallel slices:
Slice A — Directus table promotion (closes blocker)
- Author migration
022_iu_three_axis_envelope_table.sql:CREATE TABLE iu_three_axis_envelope (...)mirroring the view.fn_iu_three_axis_envelope_refresh()— deterministic upsert fromv_ui_iu_three_axis_envelopekeyed byunit_id.- Trigger / lifecycle hook attaches refresh to the
iu.lifecycle.enactedevent.
- Re-issue the Directus registration package against the table name (Directus's normal field-management path works).
- Confirm the Nuxt SDK call returns real rows.
Slice B — Full Qdrant reindex (scale to 163 IUs)
- Reuse the bounded driver, but pass all 163 canonical addresses in chunks of 20.
- Track progress via
iu_vector_sync_point(sync_status='indexed'count over time). - Drift report — every 30 minutes during reindex.
- Close the gate between batches.
Both slices are independent; either can ship first.
5. Alternative smaller slices
IU_CORE_2100X_DIRECTUS_UI_FIELDS_ONLY— operator adds the 16 fields via the Directus admin UI; macro only verifies.IU_CORE_2200X_QDRANT_DRIFT_AUDIT_ONLY— rundrift_reportagainst the 6 indexed IUs, prove no drift, document the verification workflow.
6. Is IU Core ready to ship?
Yes — externally integrated at the layer this macro owned. What remains is operator decision (which Directus path; when to scale the Qdrant reindex from 6 to 163). Neither is an IU Core code gap.
7. Verification gate before 2400x
2400x should start only after GPT/User has verified, via AgentData
list_documents + search_knowledge, that the 7 reports in this
directory are present and searchable, AND that production reports:
- Qdrant
iu_core_iu_chunkscarries 6 points (unique_unit_ids=5, one IU split into 2 chunks under the boundary rule); - PG
iu_vector_sync_pointcarries 6 rows withsync_status='indexed'andlast_actor='iu_core_2000x_bounded_reindex'; dot_config.iu_core.vector_sync_enabled = false;- Directus
/collections/v_ui_iu_three_axis_envelopereturns HTTP 200; - 1093 tests passing on commit
900d4c3.