04 — Mapping Layer Design and Rehearsal
04 — Mapping Layer Design and Rehearsal (Objective C)
Pattern chosen: read-only generated VIEW v_rp_classification_governance_map over pivot_definitions ⋈ entity_species (+ taxonomy FAC-02 literals). Rejected: RP-local mapping table (island/needs writer/Đ26), JSON config (opaque), editing pivot_definitions (Đ26 forbids manual; mutates prod), clone-only (test only).
View computes: rg_kind (governance-domain vs rp-local-pivot-kind) + rg_fac02_target; species_status {clean,ambiguous-meta,missing,orphan}; composition_status {match,mismatch-vs-governed,dirty-noncanonical,rp-local-shape,no-gov-species-ref}.
REHEARSAL executed read-only vs live prod (query_pg directus) → 37 rows, ZERO mutation. species_status: clean=31, missing=4, ambiguous-meta=2, orphan=0. composition_status: match=21, mismatch-vs-governed=9, dirty-noncanonical=3, rp-local-shape=3, no-gov-species-ref=1. rg_kind: rp-local-pivot-kind=22, governance-domain=15. FAC-02 attachment of the 15 domain rows: 9 exact (cấu_trúc→LBL-101×3, công_cụ→LBL-104×4, giám_sát→LBL-105×2), 6 provisional (quy_trình×5, dữ_liệu×1).
No-island/no-mutation proof: pure SELECT + CASE; no INSERT/UPDATE/DELETE; CREATE VIEW only; reads governed truth, copies nothing; touches none of ospa/ownership/gap/axis/topic/event_outbox/system_issues; asserts no ownership/coverage (gap stays 210, never read); adds no axis*/topic* → does not trip governance executor preflight; reversible via DROP VIEW. NOT persisted this session (query_pg read-only). Files: sql/v_rp_classification_governance_map.sql + sql/rollback_and_verify.sql.