1. cadence.enabled === false → "Auto-Pilot is off" + Turn on CTA (the case you hit).
2. Auto-Pilot on, but the content pool has no unused pieces → "Auto-Pilot has nothing left to schedule — create more content" + link to Create Content. (The scheduler already counts these skips as skippedNoContent; the UI just never shows it.)
3. Auto-Pilot on and pool healthy → "All clear — next post goes out Tue 9:00 AM" (show the next scheduled slot even when it's outside the current filter window).
Cancelled posts keep their scheduled time and the calendar query has no status filter — so a cancelled post still renders as a normal upcoming card (and you can even try to drag it, which errors). Your 3 cancelled posts are part of why Month looked "full". Fix: exclude cancelled in listScheduledInRange + a regression test.
Past posts already get a POSTED pill in Month view (that part shipped). The remaining fix: the Month header reads "July — posted + upcoming" so the mixed view is labeled as what it is.
Optional, your call: a collapsed "Posted earlier this week" group in This Week — note this amends the existing "no wall of old rows" rule (K1) that deliberately keeps Week forward-only.