Build ErsatzTV Image / Docs update reminder (pull_request) Successful in 6s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 8m15s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 8m15s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Two findings from the PR #242 adversarial review (Codex + Claude fork): 1. ChannelsEmptyState swallowed mutationError: on the fresh-install path #212 targets, a bare-create can 4xx (e.g. no default ffmpeg profile), but the empty branch never rendered the error alert the non-empty screen shows — the user saw only a spinner re-enable. The empty state now renders the same ctv-channels-error alert. Regression: App.test.tsx asserts the error surfaces + no navigation on an empty lineup. 2. SchedulesScreen Edit button was not gated on `saving` (Codex): during an items save PUT the draft is still dirty, so a discard-to-open → shuffle-flip could let the in-flight PUT resolve AFTER the shuffle reload and clobber the normalized draft with the pre-shuffle body. Edit is now disabled while saving (consistent with the schedule Select). Regression: a deferred PUT proves Edit is disabled in-flight and re-enables once the save settles. Deferred as nits (both reviews rate low): vetoed navigateToPath leaves two stray history entries (cosmetic, rare — fixing means refactoring central nav); rapid double-Back is best-effort (inherent popstate non-cancellability). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>