RP Dynamic Drill Grouping — 02 PXT Grouping Rule Closure
02 — PXT Grouping Rule Closure (Track A)
The 10 NEEDS_GROUPING nodes are all AX-PXT aggregation nodes (count>1,
has_children=false) backed by v_process_trigger_actionability_ledger. v1
jumped straight to SHOW_SUBSTRATE (the single ledger summary row) with no
per-object drill. v2 binds each to its real per-object source so the drill
becomes dynamic: count>1 → DRILL_GROUPS → groups → SHOW_SUBSTRATE.
Source binding (verified against the ledger's own view definition)
- TRIG:* counts are live from
v_ax_process_trigger_crosscheck; per-object rows live inv_trigger_universe_census(trigger_class matches exactly). - PROC:* ledger counts are static literals; bound to live sources below.
| Node | grouping_class | children source | group_by | groups | child_total |
|---|---|---|---|---|---|
| TRIG:db_dml_trigger | GROUP_BY_SOURCE_OBJECT | v_trigger_universe_census | on_object | 177 | 408 (LARGE_GROUP) |
| TRIG:event_type | GROUP_BY_SOURCE_OBJECT | v_trigger_universe_census | on_object | 6 | 52 |
| TRIG:dot_cron | GROUP_BY_SOURCE_OBJECT | v_trigger_universe_census | on_object | 22 | 42 |
| TRIG:job_queue | GROUP_BY_TRIGGER_NAME | v_trigger_universe_census | trigger_name | 8 | 8 |
| TRIG:dot_dual | GROUP_BY_SOURCE_OBJECT | v_trigger_universe_census | on_object | 5 | 6 |
| TRIG:dot_event | GROUP_BY_SOURCE_OBJECT | v_trigger_universe_census | on_object | 4 | 5 |
| TRIG:dot_on-deploy | GROUP_BY_SOURCE_OBJECT | v_trigger_universe_census | on_object | 4 | 4 |
| PROC:new_candidates | GROUP_BY_PROCESS_CANDIDATE | wf_process_candidate | candidate_code | 6 | 50 |
| PROC:owner_gated_runtime | GROUP_BY_SOURCE_OBJECT | wf_orphan_remediation_queue | object_key | 11 | 11 |
| PROC:residual_reconcile | GROUP_BY_RESIDUAL_STATE | v_workflow_residual_evidence_hardening_v4 | residual_state_v4 | 7 | 23 |
Trigger child totals sum to 525 = the full trigger universe census. PROC totals match live sources (6 PROCESS_CANDIDATE rows, 11 docker_service_no_candidate, 23 residual rows in 7 states).
Honest drift surfaced (not papered over)
PROC:residual_reconcile ledger literal = 8, but live
v_workflow_residual_evidence_hardening_v4 shows only 2 in
AWAITING_OWNER_RECONCILE (rest RESOLVED_*). Flagged LEDGER_LITERAL_STALE in
the rule. TRIG:db_dml_trigger flagged LARGE_GROUP (177 groups; browsable but
review-only infra).
Result
missing_grouping 10 → 0. None remained NEEDS_GROUPING_BY_DESIGN — every
node has a real grouping rule. Owner blockers preserved as status, not removed.