- calendar.py: replace fragile string-concat datetime filters with proper
datetime.combine(date, time.min/max) for PlannedBlock and ManualEntry overlap
- tasks.py list_tasks: batch-load projects + work items in 2 queries instead
of N individual lookups per task (fixes N+1 performance issue)
- ai_reports.py: use wall-clock union hours + overhead for report totals,
consistent with KPI summary endpoint; import _union_hours from aggregator
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>