04 — AX-PXT Generator Gap Root Cause
04 — AX-PXT Generator Count Gap: Root Cause (Phase 4)
Symptom
Generated (v1) AX-PXT residual_reconcile count = 8; current = 2. One count diff; membership identical (12 nodes both sides).
Source trace
The current contract corrects AX-PXT counts in current_v2: it LEFT JOINs the live_v2 actionability ledger (v_process_trigger_actionability_ledger_live_v2) on gap_code and takes COALESCE of the live object_count over the base count, also stamping count_correction_flag COUNT_CORRECTED_FROM_LIVE where they differ. The generated v1 leg bound the OLD ledger (v_process_trigger_actionability_ledger), which carries the stale residual_reconcile 8.
Proof — exactly one divergence
A full side-by-side of the two ledgers (old vs live_v2), joined on gap_code, shows all 12 gap_codes present on both sides with identical object_count EXCEPT gap_code PROC:residual_reconcile (old 8, live_v2 2). The other 11 (PROC:jobcut_verified 1, PROC:new_candidates 6, PROC:official_rp 0, PROC:owner_gated_runtime 11, TRIG:db_dml_trigger 408, TRIG:dot_cron 42, TRIG:dot_dual 6, TRIG:dot_event 5, TRIG:dot_on-deploy 4, TRIG:event_type 52, TRIG:job_queue 8) are identical.
Conclusion
Binding the generated AX-PXT leg to the live_v2 ledger fixes the one count diff with ZERO membership change and NO static literal (the corrected count is read live from live_v2, not hardcoded). The corrected residual_reconcile reflects v_workflow_residual_evidence_hardening_v4 residual_state AWAITING_OWNER_RECONCILE = 2.