Compile a 100-bucket × 5-rule snapshot where the five Days values
include duplicates (1, 1, 7, 7, 30) and assert:
- snap.actions has 500 entries — every (bucket, rule) compiles to its
own ActionKey, no collapse.
- snap.originalDelayGroups has exactly 3 entries — the routing index
is keyed by Delay, so same-day rules across all buckets share a
group. This is the property that lets the dispatcher index by
delay group rather than per-rule.
- Per-group key count = (rules with that day) × buckets, so every
action is reachable from its group entry.