3 carryover 🟡 items из re-review verdict на a88917f:
1. Coverage % denominator now post-filter (was mixing pre-filter count
с post-filter intersection → artificially low confidence when
user passed exclude/filter list)
2. MAX(snapshot_date) pre-computed via db.scalar() + bind :latest_snap
instead of subquery in WHERE (avoid re-execution per spatial scan)
3. LAYOUT_CONFIDENCE_HIGH_PCT / LAYOUT_CONFIDENCE_MEDIUM_PCT as
module-level constants instead of hardcoded literals
Integration test gap (#4 в re-review) — отдельный follow-up issue,
не в scope этого PR.
Tests: 10/10 best-layouts pass, 43/43 regression OK.