KB-31F1

T2 RP Audit — 04 AX-TRIGGER Reliability

4 min read Revision 1

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

  1. event_type=52 headline 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).
  2. 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.
  3. trigger_registry(107) is a stale parallel inventory. All 107 rows enabled=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), not trigger_registry (107). Risk only materializes if a UI reads trigger_registry. → STALE_DATA / DUPLICATE_RISK. 107 documented vs 408 live = 301 live triggers undocumented in the registry.
  4. 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.

Back to Knowledge Hub knowledge/dev/reports/architecture/parallel-terminal2-registries-pivot-count-reliability-bug-audit-2026-06-05/04-trigger-axis-reliability.md