9000x-onboarding · 08 — Regression matrix + 4 lessons + carry-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 viaincomex-agent-datasibling-container runner pattern.