timothy and Claude Opus 4.8
0f34c86afa
feat(403): make unsupported PlaybackOrder loud at build time + tripwire
...
Build ErsatzTV Image / CI image pin matches docker/ci (pull_request) Successful in 9s
Build ErsatzTV Image / Docs update reminder (pull_request) Successful in 5s
Build ErsatzTV Image / decisions.md append-only (pull_request) Successful in 6s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 17s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 7m21s
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Successful in 14m14s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 18m31s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 37m32s
Adding a new PlaybackOrder was unsafe by construction: three build-time
dispatch sites turned an unknown value into an enumerator silently.
Classic substituted RandomizedMediaCollectionEnumerator (the // TODO
default arm), PlaylistEnumerator had no default arm so the item was
dropped, and BlockPlayoutBuilder's allow-list continue skipped it.
(#70 already made YAML/Scripted log a warning and MultiCollectionGroup
throws.)
- each silent site now logs a Warning naming the order + engine + the
fallback taken; the fallback itself is preserved so a live channel
never goes dark on one misconfigured item and scheduler goldens do
not move.
- PlaylistEnumerator.Create gained an optional Option<ILogger> (it was
static with no logger -- why the drop was unreportable); loggered
callers pass it.
- BlockPlayoutBuilder gained an explicit Random arm (it previously
reached an enumerator only via the coincidental _ => fallback) and a
loud defensive fallback.
- new PlaybackOrderSupport matrix (per SchedulingEngineKind) + tripwire
PlaybackOrderSupportTests: Supported ∪ Unsupported must partition the
enum for every engine, so a new order fails the test until classified.
BlockPlayoutBuilder consumes the matrix for its allow-list.
- write-path rejection left unchanged (#70 closed the persistence hole;
the perimeter has been wrong three times per decisions.md); reverse
_ => None mappings reviewed and deferred (different axis; making them
loud would warn on legit enumerator types).
docs/decisions.md updated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-18 18:23:21 +02:00
Jason Dove and GitHub
2ad6547349
scheduler context improvements ( #2819 )
...
* improve classic scheduling context display
* add basic block scheduling context
* add scheduling context to classic filler
* improve parsing
2026-02-09 20:19:52 -06:00
Jason Dove and GitHub
4fa11b6943
add scheduling context to playout details table ( #2817 )
...
* add scheduling context to playout details table
* fix missing context copies
2026-02-05 13:45:05 -06:00
Jason Dove and GitHub
effb96a2c2
alternate schedule and template consistency ( #2757 )
...
* refactor classic and block schedules to use same alternate schedule selector
* handle start year and end year
* add migrations for classic and block schedules
* allow editing block template start and end year
* add tests that include years
* add date range editing to classic (alternate) schedules
* fix running tests locally
* restore media files load; needed for local folder scanners
* update changelog
* feedback
2026-01-06 12:51:07 -06:00
Jason Dove and GitHub
21f4439aa4
block ui improvements ( #2646 )
...
* template editor improvements
* more keyboard navigation
* replace template tree view with template table
2025-11-13 19:25:44 -06:00
Jason Dove and GitHub
6603500132
fix content_total_duration in graphics engine ( #2643 )
2025-11-12 20:07:54 -06:00
Jason Dove and GitHub
48b1aa3e64
fix block playout build bug ( #2642 )
2025-11-12 16:53:06 -06:00
Jason Dove and GitHub
629b3d7d9f
fix effective block tests ( #2600 )
...
* fix effective block tests running on github
* update dependencies
* pass tz again
* use tzconvert for time zones in tests
* temporary logging
* maybe fix
* test cleanup
2025-11-05 06:48:49 -06:00
Jason Dove and GitHub
4822ba5486
fix block start time calculation ( #2587 )
2025-11-01 20:16:04 -05:00
Jason Dove and GitHub
727a978689
fix block history and smart_collection search bugs ( #2579 )
...
* fix block history when using mirror offset
* fix smart_collection search crashes
2025-10-29 14:01:14 -05:00
Jason Dove and GitHub
1f8834c280
block playout fixes; hls direct fixes ( #2566 )
...
* fix block playout builder with empty collection
* fix hls direct when selecting audio
* allow embedded subtitles with hls direct
2025-10-25 06:35:56 -05:00
Jason Dove and GitHub
144b3fe80b
fix remote stream durations in playouts ( #2515 )
2025-10-11 08:30:24 -05:00
Jason Dove and GitHub
3e8ac9914c
refactor playout build errors ( #2480 )
...
* refactor classic playout builds
* refactor sequential playout builds
* refactor block playout building
* don't fail building an empty block schedule
* fix scripted playout build errors
2025-10-02 13:36:39 -05:00
Jason Dove and GitHub
788a1ecdc4
add deco break content ( #2446 )
...
* add initial models
* migrations
* edit break content mode
* add and remove break content from ui
* use autocompletes in deco editor
* save break content to db
* allow break content playlists
* refactor default filler build
* fix slow startup
* start to implement adding break content
* use clone; try to fix block breaks
* fix updating history
* use consistent removebefore values
* cleanup logging
* only allow playlist break content
* update changelog
2025-09-19 18:48:51 +00:00
Jason Dove and GitHub
f26e48c063
block schedules: skip items and collections that will never fit ( #2433 )
...
* add first block playout builder test
* block schedules: skip items and collections that will never fit
2025-09-17 13:53:50 +00:00
Jason Dove and GitHub
9aa7c44388
add watermarks and graphics elements to block items ( #2424 )
2025-09-16 02:39:25 +00:00
Jason Dove and GitHub
245165c9d9
add rerun collection type ( #2421 )
...
* rename collection type
* split collections into separate pages
* add rerun collection types, migration, editor
* add rerun to classic schedule items
* rerun plumbing in classic playout builder
* start to implement rerun enumerator
* add scheduledAt to enumerator movenext
* maintain rerun history in db
* fix shuffle
* fix rerun allowed playback orders
* fix updating rerun collections
* update changelog; fix editing
* update changelog
2025-09-15 18:27:55 +00:00
Jason Dove and GitHub
1c07df5bc3
use cancellation tokens in many places ( #2350 )
...
* use cancellation tokens everywhere
* more cancellation tokens
2025-08-27 03:20:35 +00:00
Jason Dove and GitHub
51ec84c94a
fix block playout history regression ( #2343 )
...
* minor tweaks
* fix block change detection bug
* history cleanup cleanup
2025-08-25 16:09:20 +00:00
Jason Dove and GitHub
53f281ce32
add xmltv block behavior setting ( #2336 )
...
* replace playout externaljsonfile and templatefile with schedulefile
* add scripted schedule-based playout
* wip - not functional yet
* temp disable scripted playout creation
* allow fast-forwarding block playouts
* add xmltv block behavior setting
2025-08-23 20:16:12 +00:00
Jason Dove and GitHub
5d081ceeff
fix editorconfig and run code cleanup ( #2324 )
...
* fix formatting rules
* reformat ersatztv
* reformat ersatztv.application
* reformat ersatztv.core
* refactor ersatztv.core.tests
* reformat ersatztv.ffmpeg
* reformat ersatztv.ffmpeg.tests
* reformat ersatztv.infrastructure
* cleanup infra mysql
* cleanup infra sqlite
* cleanup infra tests
* cleanup ersatztv.scanner
* cleanup ersatztv.scanner.tests
* sln cleanup
* update dependencies
2025-08-16 14:44:48 +00:00
Jason Dove and GitHub
ac75a67709
block history fixes ( #2307 )
...
* fix deco to only have one collection id for filler/fallback
* fix duplicate playout history for deco filler
2025-08-13 01:02:41 +00:00
Jason Dove and GitHub
771bfba01c
fix overlapping block playout items ( #2302 )
...
* check for overlapping playout items
* tweak block filler builder
* fix overlapping block playout items
* update changelog
* minor cleanup
2025-08-12 11:14:24 +00:00
Jason Dove and GitHub
bd09f3dfdc
fix block filler progression ( #2278 )
2025-08-07 21:18:45 +00:00
Jason Dove and GitHub
0c22eefad2
fix block playout progression ( #2277 )
2025-08-07 21:11:49 +00:00
Jason Dove and GitHub
c7fcaf8886
refactor playout building ( #2273 )
...
* refactor playout building
* remove playout items
2025-08-07 15:20:26 +00:00
Jason Dove and GitHub
451c534062
allow block items to disable watermarks ( #2139 )
...
* allow block items to disable watermarks
* fix test
2025-07-12 03:55:18 +00:00
Jason Dove and GitHub
7e30444857
dependencies and code cleanup ( #2117 )
...
* fix validation in new form layout
* pin mediatr to last oss version
* update dependencies
* cleanup code in core
* cleanup code in ffmpeg
* cleanup code in infra
* cleanup code in scanner
* cleanup code in application
* cleanup main code
* cleanup test code
* solution-wide code cleanup
2025-07-06 15:56:17 +00:00
Jason Dove and GitHub
e7817b1460
fix deco default filler hardware acceleration ( #1916 )
...
* fix hw accel for deco default filler
* use custom filler kind for deco default filler
2024-10-11 14:33:30 -05:00
f40eaef898
[scheduling] Add a new mode RandomRotation that randomly picks an item from a randomly choosen group (show/artist) for block schedule ( #1885 )
...
* init
* minor naming change
* address to comments round 1
* update dependencies
* formatting
* make sure it rotates
* update changelog
---------
Co-authored-by: Jason Dove <1695733+jasongdove@users.noreply.github.com >
2024-09-10 13:36:20 -05:00
Jason Dove and GitHub
9e2f7b7815
fix deco selection for watermark and filler ( #1847 )
2024-07-30 21:57:21 -05:00
Jason Dove and GitHub
101d46e283
dont remove block items that are filler ( #1846 )
2024-07-30 20:38:13 -05:00
Jason Dove and GitHub
961fe8bbf2
improve shuffling behavior; add custom_title ( #1838 )
...
* improve yaml shuffling behavior
* add custom_title to playout instructions
2024-07-29 19:53:06 -05:00
Jason Dove and GitHub
7d83e66ba6
add yaml playout history; allow yaml playouts to be extended ( #1832 )
...
* add multi_part; refactor skipping items
* save and apply history for yaml playouts
* do not remove history on yaml playout reset
2024-07-29 13:09:14 -05:00
Jason Dove and GitHub
b1b2c2a1e0
add deco default filler trim to fit setting ( #1800 )
...
* add deco default filler trim to fit setting
* implement trim to fit
* update changelog
2024-07-22 14:14:02 -05:00
Jason Dove and GitHub
d842cd57f6
fix building block playouts without default filler ( #1799 )
2024-07-22 09:05:31 -05:00
Jason Dove and GitHub
46f7289db8
add deco default filler ( #1797 )
...
* first pass at default filler for block scheduling
* configure default filler in ui
* update changelog
2024-07-19 13:29:42 -05:00
Jason Dove and GitHub
a87ec2d75d
cleanup ( #1708 )
...
* fix blazor naming
* code cleanup
* update dependencies
2024-05-06 17:00:52 -05:00
Jason Dove and GitHub
33a8b29a27
fix block playout random seeds ( #1703 )
2024-05-04 09:09:04 -05:00
Jason Dove and GitHub
e19b639527
add playlist item play all option ( #1694 )
2024-04-28 13:00:22 -05:00
Jason Dove and GitHub
c46b3787d8
set guide mode filler as appropriate on playlist items ( #1691 )
2024-04-27 20:31:03 -05:00
Jason Dove and GitHub
087901d177
adjust block unique constraint ( #1634 )
...
* upgrade dependencies
* allow blocks with same name in different groups
* code cleanup
2024-03-05 10:39:06 -06:00
Jason Dove and GitHub
707292c50f
add configurable image duration ( #1617 )
2024-02-16 13:05:28 -06:00
Jason Dove and GitHub
f8c4f44216
add basic image library support ( #1608 )
...
* add basic image library support
* add image page
* update changelog
2024-02-11 11:24:19 -06:00
Jason Dove and GitHub
d55ba235bf
evenly divide epg time for schedule blocks ( #1607 )
...
* add checkbox to include block items in program guide
* evenly divide epg time for schedule blocks
2024-02-10 20:59:29 -06:00
Jason Dove and GitHub
46c26b5ea7
include all block playout items in xmltv ( #1580 )
...
* include all block playout items in xmltv
* double check whether channel preview will work
2024-01-30 06:44:19 -06:00
Jason Dove and GitHub
60b3bc92f4
use super shuffle in block playouts ( #1572 )
2024-01-24 15:29:19 -06:00
Jason Dove and GitHub
12234c3e21
allow shuffling block items ( #1571 )
...
* allow shuffling block items
* fix drop down search results
2024-01-23 22:42:28 -06:00
Jason Dove and GitHub
b88deaafe5
add tests, replace playout items when collections are updated ( #1566 )
2024-01-22 10:10:22 -06:00
Jason Dove and GitHub
88fac0de04
add option to stop scheduling before or after block duration end ( #1563 )
2024-01-16 12:53:56 -06:00