Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 11s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 1m16s
Build ErsatzTV Image / CI image pin matches docker/ci (pull_request) Successful in 5s
Build ErsatzTV Image / Docs update reminder (pull_request) Successful in 5s
Build ErsatzTV Image / decisions.md append-only (pull_request) Successful in 5s
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Successful in 14m16s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 17m48s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 20m16s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Cold adversarial review (no blockers, 3 real Mediums): - Query&size "Order" row ignored the Shuffle toggle (dead ?? fallback showing the static axis order); now reflects shuffleOn, consistent with the subtitle. - Clearing Name/Number to '' flagged the row Edited + armed the unsaved-changes guard, but the payload reverted to the proposal default — the two "edited" derivations disagreed. overrideEdited now ignores an empty (inherited) value. - runPreview did not clear per-channel overrides, so edits (incl. pinned numbers) silently carried into a re-generated batch → collision risk. Fresh preview now resets overrides/detailKey/logo cache. Tests: empty-name-not-Edited + re-preview-clears-overrides. Live-E2E (local instance, seeded TV library): preview → Configure → toggle Shuffle → Create verified end-to-end; the created channel's schedule shows PlaybackOrder=Shuffle (overridden) vs SeasonEpisode (axis default), confirming the per-channel override flows UI → SPA → backend → playout. Refs #386