"""Block Kit builders for the daily summary post and the 3rd-escalation alert. Two push surfaces, no App Home (see CLAUDE.md "Slack surfaces"): - daily summary: header, vs-yesterday deltas, escalation + action/routine fields, top sites, mismatch callout, and a 📊 Open dashboard link button to Grafana. Long WO lists go in modals, never the channel (<100-block limit). - 3rd-escalation alert: standalone, batched, one @here — suppressed entirely on zero-3rd days (return None). Owned by the slack-blockkit-designer agent; built in Phase 4 (docs/BUILD.md). """ from __future__ import annotations def build_daily_summary(today: dict, yesterday: dict | None) -> list[dict]: """Build the daily summary blocks (with vs-yesterday deltas). (Phase 4)""" raise NotImplementedError def build_escalation_alert(today: dict) -> list[dict] | None: """Build the batched 3rd-escalation alert, or None when count is 0. (Phase 4)""" raise NotImplementedError