KB-27F6

9000x-onboarding · 08 — Regression matrix + 4 lessons + carry-forward

5 min read Revision 1
iu-corev0.69000xregressionmatrixlessons-learnedcarry-forward

9000x — Regression matrix + lessons + carry-forward

Regression matrix

Surface Result Notes
Mac local tests 1212 → 1232 PASS (+20) 9000x driver tests
Targeted: test_iu_core_9000x_qdrant_onboarding_driver.py 20/20 PASS
Targeted: test_iu_core_5000x_healthcheck.py 10/10 PASS fixture-based
Healthcheck 7 surfaces 7/7 GREEN post vector_boundary SQL fix
Mac cron */10 * * * * exit=0 runs the corrected SQL
DIEU axis_a_doc_code distribution 27 + 23 + 36 = 86 unchanged
information_unit.lifecycle_status enacted=146, draft=5, deprecated=12 +86 enacted vs 8000x
iu_three_axis_envelope rows 163 cache_healthy=true, in_sync=true
iu_vector_sync_point rows 64 → 152 +88 (one per 9000x chunk)
iu_vector_sync_point unique unit_id 60 → 141 +81 non-empty DIEU IUs
Qdrant iu_core_iu_chunks 61 → 149 pts +88, identical to PG delta
Qdrant production_documents 9379 pts untouched
KT-B (60 IUs / 61 pts) byte-identical untouched
All 6 IU Core write gates inert vector_sync opened+closed during apply only
Retention gate false unchanged (eligible 2026-06-22+)
PR #669 OPEN MERGEABLE not merged by us
pg_dump backup 79.3 MB, sha 9651...d7ba persisted /root/backups/

Lessons

L1 — Channel + secret discovery first; runner second

The 8000x EXACT_GAP labelled the Qdrant onboarding "blocked on three physical channels". A clean discovery pass found a sibling container (incomex-agent-data) that already held BOTH credentials AND network reach. The lesson: when an artifact gap and a credential gap appear together, treat them as a routing problem first — there is often an existing process that already has what you need.

L2 — psql text format breaks on multi-line bodies

psql -At -F is line-per-row. Any column containing a literal \n collapses into multiple parsed rows with the wrong arity. Defense: encode arbitrary-text columns in SQL (encode(convert_to(body,'UTF8'), 'base64') with newlines stripped). Detection: dry-run row count mismatch caught the bug BEFORE any apply. See [[feedback-psql-text-format-multiline-collision]].

L3 — Rollback by payload-filter requires the field in the payload

The first rollback design called POST /points/delete with filter.must.actor=<actor> — but the existing VectorPoint.payload() does NOT include an actor key. A live rollback would have silently returned 200 / points_deleted=0 and left the points in place. Fixed by point-id deletion derived from iu_vector_sync_point.point_key + vector_sync.point_id_for. Detection: live payload-shape smoke after apply — never trust a filter design without inspecting one real point. See [[feedback-qdrant-rollback-needs-payload-field-or-id-list]].

L4 — Healthcheck SQL must match the DB CHECK, not approximate it

The pre-9000x vector_boundary SQL used row arithmetic (count(*) - count(DISTINCT unit_id) <= 1) that worked only while the corpus had at most one multi-chunk IU. Live onboarding produced 8 multi-chunk IUs and the check flipped to false-positive breach. The DB iu_vector_sync_point_boundary_chk already forbids duplicate (unit_id, chunk_index) — the healthcheck SQL now surfaces the same predicate via GROUP BY HAVING. See [[feedback-healthcheck-sql-must-match-db-check]].

Carry-forward to next macro

# Item Owner
C1 dot_iu_supersede_piece registry entry (no new SQL) macro author
C2 fn_iu_piece_split + mig 027 + DOT command after governance macro author
C3 fn_iu_piece_merge + mig 028 + iu_merge_set + DOT cmd macro author
C4 Piece Event Runtime — mig 029/030 + handler + healthcheck 8th surface macro author
C5 (Optional) add actor to VectorPoint.payload() + re-onboard macro author
C6 Linux-host healthcheck cron on VPS (parallel to Mac pilot) operator
C7 Retention dot_iu_command_run paired-enable (earliest 2026-06-22) operator
C8 PR #669 merge frontend/DevOps
C9 Update healthcheck qdrant_collection surface to also count chunks (not just indexed rows) macro author
C10 Update memory feedback-harness-write-boundary to add: Qdrant write channel now AVAILABLE via incomex-agent-data sibling container claude

Memory updates

  • New: feedback-psql-text-format-multiline-collision.
  • New: feedback-qdrant-rollback-needs-payload-field-or-id-list.
  • New: feedback-healthcheck-sql-must-match-db-check.
  • Update: feedback-harness-write-boundary — Qdrant write channel AVAILABLE via incomex-agent-data sibling-container runner pattern.
Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.6-iu-core-9000x-qdrant-onboarding-piece-platform-open-goal/08-regression-matrix-and-lessons.md