06 — Trigger Registry Truth Control
Supertrack F — Trigger Registry Truth Control
Live recomputation
408 public DB triggers; trigger_registry matches 107; 301 unregistered (matched on trigger_name + table_name). This reconciles with the prior "≈410 live / 107 matched / ≈303 unregistered."
Classification of the gap (by risk tier)
| risk_tier | n | enabled | registered | meaning |
|---|---|---|---|---|
| P3_MANAGED | 107 | 86 | 107 | already in registry |
| P2_GOVERNED_BY_BIRTH_POLICY | 197 | 196 | 0 | birth triggers — governed by birth policy/gateway, not the registry |
| P1_UNMANAGED_MUTATING | 83 | 83 | 0 | the real hidden mutating surface — identify + register |
| P3_MAINTENANCE | 14 | 14 | 0 | timestamp/maintenance — benign |
| P2_AUDIT | 2 | 2 | 0 | audit/history |
| P2_UNMANAGED_DISABLED | 5 | 0 | 0 | disabled |
The 197 "unregistered" birth triggers are not unmanaged — they are governed by the birth-policy coverage system (collection_registry.coverage_status + gateway). The genuine attention item is the 83 enabled, unregistered, app/unknown mutating triggers.
Packet (candidate only — no auto-register)
v_trigger_registry_registration_packet emits all 301 unregistered triggers in registry-shaped rows with status='candidate' and a per-tier recommended action. Nothing was registered. No-go guard (v_trigger_registry_no_go_guard) 4/4 PASS, including the teeth assertion no_registry_rows_added_this_session and registration_packet_is_candidate_only, plus birth_trigger_surface_still_policy_governed.
Auto-registration of official triggers is deliberately withheld because registering a birth/governance trigger can itself create birth/governance side-effects — owner/operator owns trigger DDL.
Views built: v_trigger_registry_gap_inventory, v_trigger_registry_registration_packet, v_trigger_registry_no_go_guard.