KB-6D41

RP DOT Cleanup — 03 DOT Rehearsal Results

4 min read Revision 1
registries-pivotrehearsalread-onlyretire-recreate-nonviable2026-06-03

03 — DOT Rehearsal Results

All rehearsal was read-only. No clone was needed: the cleanup operates on the live mapping view + governed truth, and the decisive blocker (no update-DOT) is a tooling fact, not a data-state question. A BEGIN..ROLLBACK rehearsal of UPDATEs was deliberately not run — it would model the Đ26-forbidden manual path and fire the pivot triggers inside the transaction. SQL: sql/03_rehearsal_readonly.sql.

R1 — Target-state preview (9 actionable rows)

pivot_code species current_comp target_comp comp_status current_group lane is_active
MTX-TEST matrix (null) no_ref test inactive_retire false
PIV-020 atom (null) no_ref default inactive_retire false
PIV-001 catalog molecule atom mismatch cấu_trúc gov_home true
PIV-016 species atom meta mismatch default rp_local true
PIV-021 checkpoint_support atom molecule mismatch default rp_local true
PIV-015 governance_infra atom atom match default rp_local true
PIV-017 governance_infra atom atom match default rp_local true
PIV-018 governance_infra atom atom match default rp_local true
PIV-019 governance_infra atom atom match default rp_local true
  • Action A = the 3 mismatch rows; target_comp is the governed value.
  • Action D = the 2 inactive_retire rows — both already is_active=false.
  • Action B default-bucketed candidates = PIV-015/017/018/019 (+ PIV-016/021).

R2 — Retire candidates are already inactive ⇒ DOT-314 is a no-op

code is_active superseded_by is_matrix
PIV-020 false NULL false
MTX-TEST false deprecated true

dot-matrix-retire early-exits ("already retired") on is_active='f'. So it writes nothing for either. Note PIV-020's superseded_by is NULL and cannot be set via DOT-314 (the early-exit precedes the UPDATE) — a cosmetic gap, not a classification issue. Action D: already satisfied; nothing to execute.

R3 — Governed-truth anchor for Action A (entity_species)

species_code display_name composition_level
catalog Danh mục hệ thống atom
checkpoint_support Hỗ trợ Checkpoint molecule
species Loại meta

Confirms the 3 target compositions exactly: PIV-001→atom, PIV-021→molecule, PIV-016→meta.

R4 — Retire+recreate workaround is NON-VIABLE

Could Action A be done by dot-matrix-retire (retire the wrong row) + dot-pivot-declare (recreate with correct --level)? No:

source_object default-filter pivots codes
meta_catalog 1 PIV-001
entity_species 2 PIV-016, PIV-103
task_comments 1 PIV-021

dot-pivot-declare's duplicate-guard matches on (source_object, filter_spec) without an is_active filter. After retiring PIV-001 it still EXISTS (soft delete), so re-declaring --source meta_catalog --filter '{"filters":[]}' finds PIV-001 → Already exists → creates nothing. Same for entity_species (PIV-103 also blocks) and task_comments. And even if it created, it would mint a new PIV code, breaking identity. ⇒ Retire+recreate is rejected as unbounded, identity-destroying, and self-blocking.

Rehearsal verdict

  • ✅ Target state computed and anchored to governed truth.
  • ✅ Action A/B confirmed unbindable (no update-DOT) — see doc 02.
  • ✅ Action D confirmed already-done / no-op.
  • ✅ Retire+recreate confirmed non-viable.
  • ✅ Side effects characterized (future UPDATE fires only the refresh trigger).
  • ✅ No event/system_issues/UI side effects possible from a read-only rehearsal.

Conclusion: there is no safe, lawful, bounded, reversible DOT mutation to execute in this macro. Proceed to HOLD (doc 04).

Back to Knowledge Hub knowledge/dev/reports/architecture/registries-pivot-dot-cleanup-antidrift-ui-api-handoff-2026-06-03/03-dot-rehearsal-results.md