KB-108C
IU Core 1500x — DOT 128/128 · no-hardcode · five-layer · acceptance matrix
4 min read Revision 1
iu-core1500xdotacceptanceno-hardcodefive-layer
05 — DOT · no-hardcode · five-layer · acceptance matrix
1. DOT — 123 -> 128
runtime/110 after migration 021: 128/128, every D9 class ok=true, D8 drift 0.
| class | before | after | added (migration 021) |
|---|---|---|---|
| table | 18 | 19 | iu_qdrant_collection_registry |
| view | 18 | 20 | v_iu_qdrant_collection_active, v_ui_iu_directus_registration_envelope |
| function | 45 | 47 | fn_iu_qdrant_collection_register, fn_iu_qdrant_collection_retire |
| trigger | 3 | 3 | — |
| config | 8 | 8 | — |
| event_type | 15 | 15 | — |
| route | 16 | 16 | — |
| total | 123 | 128 | +5 |
Live DOT scan on production post-apply: all 7 classes report ok=true, D8 drift 0.
2. No-hardcode — PASS
- No DSN, password, IP,
:5432. - Qdrant secret reference
QDRANT_LOCAL_API_KEY/ OpenAIOPENAI_API_KEY— names only, never values. - Default IU Core collection name
iu_core_iu_chunkslives in ONE place:runtime/310. Every caller discovers it viav_iu_qdrant_collection_active. - The Directus three-axis collection name is config-shaped (overridable).
- Nuxt assembly contract reads the field list from the registration envelope view; no field name repeated as Python literal.
3. Five-layer sync
- PG: durable additive — 1 table + 2 views + 2 functions + 1 registry row. IU data unchanged.
- Directus: none yet (package built; apply deploy-gated).
- Nuxt: none (data-only assembly contract).
- AgentData: 7 reports uploaded + verified.
- Qdrant: new EMPTY collection
iu_core_iu_chunks;production_documentsuntouched.
4. Acceptance matrix — IU Core
All prior capabilities DONE. New 1500x rows:
- Qdrant collection registry — DONE (durable)
- Qdrant dedicated IU Core collection — DONE (live, empty, reversible)
- Embedder seam (OpenAIEmbedder + NoopEmbedder) — DONE (code + tests; no embed call run)
- Vector sync external Qdrant write — DONE_WITH_EXTERNAL_BLOCKER
- Directus read-only registration package — DONE (built; apply deploy-gated)
- Nuxt assembly contract — DONE (data-only artifact)
5. External integration acceptance matrix
11 rows total: 8 DONE, 2 DONE_WITH_EXTERNAL_BLOCKER (Qdrant external write, Directus apply), 0 PARTIAL, 0 BLOCKED. Each blocker is an operator decision, not a code gap.
6. Acceptance hardening checks
- no-hardcode audit: PASS (0 real violations)
- DOT scan: 128/128, D8 drift 0
- rollback drill: rollback/021 authored
- backup: hashed -Fc, sha256 d798fcc9…
- vector boundary: sandbox/190 8/8, sandbox/200 10/10 PASS
- tests: 1083 pass (+38)
7. Rollback / disable readiness
- Code/DDL: rollback/021 drops 1 table + 2 views + 2 fns; runtime/rollback/310 retires registry row.
- Qdrant: DELETE /collections/iu_core_iu_chunks (atomic).
- Gates unchanged.
8. Completion ruling
IU Core is externally-integration-ready. Remaining external decisions: Qdrant bounded reindex (needs gate flip + operator approval), Directus registration apply (admin action), Nuxt screen wiring (assembly only). None is a core gap.