published_at is separate from created_at
A single timestamp would make the front page order by when a draft was started, which is wrong for anything written in advance. Keeping both means the newsroom can order by publication while retaining the real authoring date, and a null published_at is an unambiguous not-yet-live state that no status string can contradict.