chahinebrini
efca157969
fix(backend): device-mgmt cleanup + stats rejected fallback + realtime refresh
- devices: cleanupStaleDevices() purges phantoms >14d not bound; called from
GET /api/devices + register limit-check. Deterministic sort
(lastSeenAt, createdAt, id) so iPad+iPhone see identical order.
Merge-cutoff tightened 30d -> 7d.
- stats: rejected aggregates from notifications(type='domain_rejected')
via Math.max — admin reject cascade-deletes submission row.
- blocker.tsx: useDomainSubmissionRealtime triggers blockerStats.refresh()
directly (not stale-check only) so info-sheet shows fresh rejected count.