KB-4740

RP Classification Cleanup — 07 Next RP Implementation Plan

4 min read Revision 1
registries-pivotimplementation-plannext-macroanti-driftschema-split2026-06-03

07 — Next RP Implementation Plan

What can be committed / used NOW (no gate)

  • The view is live — RP UI/API consume v_rp_classification_governance_map read-only today (doc 06). RP can show governed badges, the cleanup dashboard, and the L2-gate banner immediately.
  • Read-only verification suite (doc 05) can run on any schedule (cron/DOT-114 health) to detect new drift.

What must be DOT-mediated (owner-go, no L2 needed)

  1. Action A — 3 composition fixes via dot-pivot-declare (PIV-001→atom, PIV-016→meta, PIV-021→molecule).
  2. Action D — 2 retires (PIV-020 deprecate; MTX-TEST via dot-matrix-retire).
  3. Action B — 12 domain assignments after the council ratifies FAC-02 targets (doc 04 table). May require adding a governed label (e.g. "Quy trình") via classification.label DOTs.

All of the above are L1 classification operations and do NOT require L2 rollout.

What genuinely waits for L2 rollout (ospa≥1)

  • Nothing in RP classification. Ownership/axis/topic governance (L2) is independent. RP classification operation is complete at L1. The L2 blocker (human L2/L4 ratification, ospa≥1) gates only the separate governance-rollout macro ONE_ROOF_PRODUCTION_ROLLOUT_EXECUTE_ON_RATIFICATION.

Anti-drift — stop returning to free-text (next macro design)

The view fixes interpretation without a schema change. To stop drift at the source, the next macro should design (via dot-schema-* DOTs, not manual DDL):

  1. Split registry_group into two governed columns:
    • domain_facet → FK/CHECK to FAC-02 governed labels (the what-role axis).
    • pivot_kind → RP-local enum {default, cross_table, l2_drill, matrix, test} (the pivot-shape axis).
  2. De-overload composition_level: add drill_level for RP-local drill pivots; restrict composition_level to the governed entity-composition ladder, derived from species where applicable.
  3. species integrity: CHECK/FK so species only accepts entity_species.species_code (the view already proves 0 orphans — make it enforced).
  4. Declare-time validation: dot-pivot-declare validates domain_facet ∈ FAC-02, species ∈ entity_species, composition_level consistent with species (or explicit drill override). This makes the governed mapping the only way to write.

Until that schema split lands, the view is the contract and the DOT packet is the cleanup mechanism.

Roadmap

[DONE] view apply (this macro)
  → REGISTRIES_PIVOT_CLASSIFICATION_DOT_CLEANUP_AND_ANTIDRIFT   (next; owner-go)
      ├─ council ratifies Action-B FAC-02 targets
      ├─ run DOT packet (Actions A, B, D) via dot-pivot-declare / dot-matrix-retire
      ├─ re-run V1–V10 → target: mismatch=0, inactive=0, orphan=0
      └─ design domain_facet / pivot_kind / drill_level schema split (dot-schema-*)
  ∥ (independent) ONE_ROOF_PRODUCTION_ROLLOUT_EXECUTE_ON_RATIFICATION  (L2, gated ospa≥1)

Guardrails carried forward

  • G1 never claim coverage while gap>0. G2 never treat clone as prod. G3 no island. G4 preflight-gated. G5 map, don't fork. G6 (new): never manual-UPDATE pivots — DOT only (Đ26 §II-QUINQUIES).
Back to Knowledge Hub knowledge/dev/reports/architecture/registries-pivot-classification-cleanup-and-view-apply-2026-06-03/07-next-rp-implementation-plan.md