Topic Promotion Governed Activation — 04 Drift Detectors (2026-06-03)
04 — Objective C: Drift Detectors — PASS
Artifact: sql/C_drift_detectors.sql. Keystone: v_drift_finding (UNION of all 10 detectors; schema: detector_code, severity, object_type, object_ref, axis_code, value_code, detail).
All 10 detectors (5 reused, 5 new) — live findings
1 label_orphan (reconcile) = 0 healthy / warning. 2 topic_without_label = 2 / info. 3 projection_lag (reconcile divergent+no_rule) = 6 / warning+info. 4 low_confidence_assignment (v_axis_assignment_quality) = 1 / warning. 5 stale_candidate (quality + new v_drift_stale_candidate_value) = 1 / info. 6 conflicting_parentage (v_axis_topic_parentage_conflict) = 0 healthy / critical. 7 unregistered_axis (new) = 0 healthy / warning. 8 axis_assignment_missing (v_axis_missing_assignment) = 29 / info. 9 ui_visible_unapproved (new) = 1 / warning. 10 coverage_rule_missing (new) = 1 / info.
New detector definitions
- unregistered_axis: axis_code used by active rows whose axis_registry row is missing/not active (0 currently).
- ui_visible_unapproved: active assignment zone<>'approved' with no active accountable owner → UI-visible but ungoverned (1 = iu_staging_record quarantine).
- coverage_rule_missing: active axis with no active coverage_rule (1 = containment reference axis — honest flag).
- v_drift_stale_candidate_value: candidate axis_value older than 30 days, un-promoted.
Totals (live)
41 findings: 0 critical, 4 warning, 37 info. 7 codes firing; 3 healthy-zero (label_orphan, conflicting_parentage, unregistered_axis). All 10 defined — zero is a clean signal, not an absent detector. v_drift_summary groups by (detector_code, severity).
Verdict
PASS. 10-detector suite committed; healthy and unhealthy signals both represented.