RP Final Acceptance 03 — Registry Pin Design + Apply (LIVE)
03 — Registry Pin (Workstream B) — LIVE
Pinning is live (table + honest contract + ordering view), proven end-to-end, empty (owner inserts).
Before: no pin registry. pin_state was a hardcoded 'PIN_REGISTRY_MISSING' literal for every node.
Built (committed, additive, reversible)
Table registry_pin: pin_id (bigserial PK), node_code (text NOT NULL), scope (node|layer|pivot_row|substrate|warning, CHECK), pinned_by, pin_reason, priority (int default 100, lower sorts first), created_at, active (bool default true). Partial-unique registry_pin_active_uq(node_code,scope) WHERE active.
Honest pin_state: v_registries_pivot_node_contract.pin_state now reads registry → PINNED if an active pin exists else UNPINNED (all UNPINNED today). Other 25 cols byte-identical.
Companion v_registries_pivot_surface: base + pin_active, pin_priority, pin_reason, pin_scope, pin_sort_rank (active priority, NULLs last) + grouping. UI orders pinned-first: ORDER BY pin_sort_rank, display_order.