T2 RP Audit — 04 AX-TRIGGER Reliability
04 — AX-TRIGGER Count Reliability
Registration
AX-TRIGGER is NOT in axis_registry (only AX-TOPIC and AX-PROCESS are registered). AX-TRIGGER is a view-level synthetic axis (census-backed), governance-unregistered. → see doc 09 (5 axes presented, 2 registered).
Counts (live, census-backed)
7 UI nodes, all count_status=census_backed, all flagged [CANDIDATE_NODE, TRIGGER_NEEDS_PROCESS_OWNER]:
| node | count |
|---|---|
| db_dml_trigger | 408 |
| event_type | 52 |
| dot_cron | 42 |
| job_queue | 8 |
| dot_dual | 6 |
| dot_event | 5 |
| dot_on-deploy | 4 |
| sum | 525 |
v_trigger_universe_census = 525 → the 7 nodes partition the census exactly. PASS.
Orphan/stale detector is well sub-classified (NOT blindly "all orphan")
v_trigger_orphan_stale_detector returns 525 rows but with discriminating detector_status:
| detector_status | class | n |
|---|---|---|
| DB_TRIGGER_NO_PROCESS | db_dml_trigger | 381 |
| STALE_DISABLED_DB_TRIGGER | db_dml_trigger | 27 |
| EVENT_ACTIVE_CHECK_PROCESS | event_type | 30 |
| EVENT_INACTIVE | event_type | 22 |
| DOT_SCHEDULED_CHECK_OWNER | dot_cron/dual/event/on-deploy | 57 |
| UNCLASSIFIED | job_queue | 8 |
db_dml 408 = 381 active-no-process + 27 genuinely stale-disabled. event 52 = 30 active + 22 inactive. → The detector does distinguish stale/inactive from merely-unowned. Reliable signal.
Reliability concerns
event_type=52headline includes 22 inactive (only 30 active). The node label "event_type (52 triggers)" over-counts live triggers. → COUNT_UNRELIABLE for "active triggers" unless the active/inactive split is shown (it is available via detector_status).- Host triggers are excluded from the 525. The census is DB + dot-origin only. Host crontab (54, of which 49 active) and systemd timers (22) are real triggers but live in
v_trigger_host_unmanaged_census(4 curated) / the adapter layer, NOT in the 525 universe. → ADAPTER_BLIND_SPOT: the trigger universe undercounts by ~76 host triggers. UI must label "DB/dot triggers", not "all triggers".v_rp_trigger_visibility_gap=7. trigger_registry(107) is a stale parallel inventory. All 107 rowsenabled=true, single status — it does NOT reflect the 27 disabled triggers the live census sees. The live surface correctly uses the live pg_catalog census (408), nottrigger_registry(107). Risk only materializes if a UI readstrigger_registry. → STALE_DATA / DUPLICATE_RISK. 107 documented vs 408 live = 301 live triggers undocumented in the registry.job_queue(8) double-lensed: the same 8 job_queue rows are counted as triggers here AND as job:cut process members (count 8) in AX-PROCESS. Legitimate cross-axis reflection, not a double-count within an axis, but the UI must not sum across axes.
Process-relevance / owner
v_trigger_process_relation_candidates=69. All 525 triggers are TRIGGER_NEEDS_PROCESS_OWNER (0 owned). Correct — AX-TRIGGER unofficialized, no process owns any trigger yet (OWNER_BLOCKED, not bug).
Score: 78/100
Exact partition, genuinely discriminating stale/inactive detector. Docked for host-trigger blind spot (universe excludes ~76 host triggers), inactive event types in the headline count, and the stale trigger_registry(107) parallel inventory.