Releases: arodd/hdhriptv
Releases · arodd/hdhriptv
v1.1.0
Changelog Highlights
Entries added to CHANGELOG.md since v1.0.6.
Features
- Delivered multi-source playlist support across backend and UI: source CRUD/config parsing, source-scoped sync/reconcile/filtering APIs, per-source virtual tuner pools with live reconfiguration, source-aware auto-prioritize/scheduler behavior, and playlist-source metadata/badges across automation, catalog, channels, and tuners surfaces. (2026-03-04)
- Added runtime version metadata (
app.version,app.commit,app.build_time), surfaced version branding in the admin UI title bar, and added CLI--versionoutput. (2026-03-04) - Decomposed admin HTTP control-plane handlers into focused modules while preserving route and payload compatibility. (2026-03-04)
Bug Fixes
- Hardened multi-source runtime contracts and scale behavior by enforcing strict source uniqueness/validation, startup reconcile + initial-sync gating rules, deterministic source deletion + dependent cleanup, explicit unsupported source-scoped operation errors, resilient virtual-tuner lease transitions, source-key entropy/index/query-plan improvements, and live discovery tuner-count consistency after runtime reload. (2026-03-04)
- Hardened multi-source automation and DVR orchestration with bounded sync concurrency, retry/backoff freshness controls, structured per-source sync summaries, continue-on-error provider fan-out aggregation, and surfaced persisted-vs-runtime eventual-consistency failures in API/UI mutation flows. (2026-03-04)
- Hardened scheduler/control-plane reliability by rejecting invalid automation timezones, unifying manual/scheduled DVR sync overlap locking through the job runner, and canceling stale deferred catch-up callbacks on schedule reload/disable. (2026-03-04)
- Hardened channel and dynamic-query delete paths by explicitly cleaning dependent child rows and applying orphan-prune safeguards when SQLite foreign-key cascades are unavailable. (2026-03-04)
- Enforced strict startup validation to accept source startup only when startup inventory reports
video_audio, and aligned stream fixtures/regressions to MPEG-TS startup probes with both audio and video components. (2026-03-04) - Hardened stream close/runtime stability by bounding startup-probe blocked-read worker growth, adding graceful unsupported write-deadline fallback telemetry, and stabilizing close retry-queue + late-abandon dedupe regression coverage. (2026-03-04)
- Made UI navigation capability-aware so DVR/Automation links render only when those routes are registered. (2026-03-04)
Docs
- Added a ready-to-import Grafana release-health dashboard bundle (
deploy/grafana/hdhriptv-release-health-dashboard.json) with Prometheus/Loki signals and import instructions. (2026-03-04) - Consolidated multi-source architecture/API/configuration/automation/catalog/operations/UI docs and tests, including 1.0.7 playlist-source reorder de-scope, corrected rollback and unsupported-capability contracts, and current source-badge/source-selection guidance. (2026-03-04)
- Updated protocol/streaming/operations docs to reflect current discovery wire details (varlen TLV + little-endian CRC), source-key generation semantics, startup/read-worker and write-deadline telemetry, and removal of stale remediation backlog sections. (2026-03-04)
v1.0.6
Changelog Highlights
Entries added to CHANGELOG.md since v1.0.5.
Features
- Added source-session FFmpeg warning-level stderr observability controls (pass-through toggles, log-level/max-line guardrails, and context-rich sanitized stderr line logging with sequence IDs) plus startup config visibility. (2026-02-27)
- Added configurable traditional channel guide numbering start (
--traditional-guide-start/TRADITIONAL_GUIDE_START) and startup migration so existing channels are renumbered to the configured base. (2026-02-26)
Bug Fixes
- Realigned streaming startup and buffering defaults to production baseline (
STARTUP_TIMEOUT=12s, ffmpeg reconnect/rw-timeout/corrupt-discard enabled,PRODUCER_READRATE_CATCHUP=1.75,PRODUCER_INITIAL_BURST=10,BUFFER_PUBLISH_FLUSH_INTERVAL=20ms,BUFFER_TS_ALIGN_188=true,SUBSCRIBER_JOIN_LAG_BYTES=8388608). (2026-03-02) - Added first-class
traceapplication log-level support for healthy UDP discovery/SSDP response emission (discovery response sent,ssdp response sent) and startup validation warnings whenffmpeg_rw_timeoutis configured greater than or equal tostall_detectin ffmpeg stream modes. (2026-02-27) - Reduced tuner diagnostics log noise by replacing per-request
resolve_ipdebug logs with 30-minute aggregated resolver summary output and aligning periodic resolver/rate-limit stats logging on a shared cadence-tracking utility. (2026-02-25) - Reduced the default debounced DVR lineup reload delay for lineup-changing admin mutations from
60sto20s. (2026-02-25)
Docs
- Updated API, operations, and tuner diagnostics guidance to cover aggregated
resolve_ipsummary telemetry (admin tuner resolve_ip summary,resolve_requestswindow counter) and the shorter default DVR lineup reload debounce (20swith300smax-wait). (2026-02-25)
v1.0.5
Changelog Highlights
Entries added to CHANGELOG.md since v1.0.4.
Bug Fixes
- Hardened admin
resolve_ipDNS caching with bounded cardinality, heap-backed oldest-expiry eviction plus sweep-throttle/cleanup guardrails, short negative-cache TTLs, and expanded TTL/concurrency regressions. (2026-02-24) - Added a shared debounced DVR lineup reload queue across reorder and dynamic sync mutations, introduced a dedicated runtime-configurable reload timeout, treated timeout expiry as failed reload logging, and stabilized queue/timeout regressions. (2026-02-24)
- Improved Windows stream/runtime behavior by embedding tzdata, wiring configurable
ffprobepaths through analyzer/profile probing, and downgrading benignslate_avFontConfig close noise via token-based/casing-safe matching. (2026-02-24)
Docs
- Documented
resolve_ipcache guardrails and telemetry, clarified that cache max-entry/negative-TTL/sweep tuning knobs are compile-time defaults, and corrected FFmpeg buffer memory math (50 * 64 MiB ~= 3.1 GiB). (2026-02-24) - Added DVR lineup reload configuration and troubleshooting coverage (
--dvr-lineup-reload-timeout/DVR_LINEUP_RELOAD_TIMEOUT,debounce + max_wait + dvr_lineup_reload_timeouttiming math, queue semantics/log triage, and/ui/channelscanonical refresh behavior). (2026-02-24) - Consolidated README/operations guidance for local run order and Windows setup, including release-binary-first quick start, Docker default image usage,
--ffprobe-path/FFPROBE_PATHdocs alignment, Windows ffmpeg sources, and recoveryclose_error_typedocumentation. (2026-02-24)
v1.0.4
Changelog Highlights
Entries added to CHANGELOG.md since v1.0.3.
Features
- Added configurable ffmpeg input tuning for
-buffer_sizeand optional-fflags +discardcorrupt, with independent+genptstoggle behavior. (2026-02-23) - Re-enabled Windows release artifact publishing by adding
hdhriptv-windows-amd64.exeto release automation, CI build outputs, and release runbook docs. (2026-02-23) - Added an opt-in
Resolve IPtoggle on the Tuners page that reverse-resolves client addresses for both live Client Streams and Shared Session History subscriber rows. (2026-02-23)
Bug Fixes
- Added handler-level resolve_ip DNS caching plus an 8s total resolve budget to cap tuner status lookup latency under high unique-client churn. (2026-02-23)
- Added a 2-second per-lookup timeout for tuner
resolve_ipreverse DNS resolution to avoid long request-path stalls. (2026-02-23) - Added a 64 MiB validation ceiling for
ffmpeg_input_buffer_sizeto prevent oversized per-stream buffer configuration. (2026-02-23) - Refactored stream FFmpeg startup helpers to pass typed
ffmpegStartupOptionsconfigs instead of growing positional argument chains. (2026-02-23) - Hardened UPnP ContentDirectory update-ID coalescing with bounded retry backoff, retry-cap guardrails, stale-cycle reset, and expanded consecutive-cancellation regression coverage. (2026-02-23)
- Tuned
/ui/tunersActive Sessions table responsiveness to fit wide viewports without forced horizontal scroll while preserving compact-window horizontal overflow behavior. (2026-02-23) - Fixed
/ui/tunerscompact-window Active Sessions table behavior so narrow viewports keep row height stable and use horizontal scrolling instead of per-cell vertical character wrapping. (2026-02-23) - Fixed
/ui/tunerscommand-bar roll-up behavior so compact viewports (small desktop windows and mobile) can reliably collapse diagnostics controls. (2026-02-23) - Added a mobile roll-up toggle for
/ui/tunersDiagnostics Command Bar so detailed filter/search/sort controls can collapse while reviewing stream and tuner diagnostics. (2026-02-23) - Restored Windows cross-compilation by splitting ffmpeg process setup/termination into OS-specific stream helpers (Unix process-group handling and Windows-safe termination). (2026-02-23)
Docs
- Expanded tuner diagnostics and ffmpeg buffer guidance with resolve_ip timeout/cache behavior, local DNS resolver recommendations, and explicit per-stream 64 MiB memory planning notes. (2026-02-23)
- Documented
/api/admin/tuners?resolve_ip=1lookup latency characteristics and ffmpegdiscard_corrupt/ input-buffer guardrail semantics in API and operations docs. (2026-02-23) - Documented UPnP
GetSystemUpdateIDcoalescing retry semantics and telemetry (hdhr_content_directory_update_id_refresh_retries_total) in the operations runbook. (2026-02-23)
v1.0.3
Changelog Highlights
Entries added to CHANGELOG.md since v1.0.2.
Features
- Tuned full-width Active Sessions table sizing so Source gets more horizontal room while compact columns (Subs, Last Push, Actions) use tighter fixed widths. (2026-02-23)
- Simplified the Tuners dashboard by removing the redundant Alerts/Health rail and expanding the Active Sessions panel to full width. (2026-02-23)
- Removed legacy playlist-sync DVR lineup reload fallback wiring and standardized post-sync reload hooks on typed
ReloadLineupForPlaylistSyncOutcome/ReloadOutcomesemantics. (2026-02-23) - Removed the temporary DVR provider compatibility shim (
DVRProviderunion,newProvider, and serviceproviderBuildfallback) and standardized capability-specific factory wiring. (2026-02-23) - Split DVR provider contracts into lineup-reload and mapping capabilities with capability-specific factories, preventing Jellyfin from entering mapping sync/reverse-sync/test paths. (2026-02-23)
- Centralized DVR config normalization across service/provider/store and moved DVR singleton initialization to startup so
GetDVRInstanceis read-only. (2026-02-23) - Refactored DVR forward sync into explicit
buildSyncPlanandapplySyncPlanstages with new unit coverage for planning and dry-run/apply behaviors. (2026-02-23) - Removed legacy tuple-based DVR playlist-sync lineup reload adapters and standardized post-sync reload handling on typed
ReloadOutcomesemantics. (2026-02-23) - Refactored DVR playlist-sync lineup reload reporting to a typed
ReloadOutcomecontract and centralized shared device-channel indexing across DVR sync/test/reverse-sync paths. (2026-02-23) make release-github-sync-tagnow builds and pushes multi-arch container images toarodd/hdhriptv:<RELEASE_TAG>andarodd/hdhriptv:latestduring release publishing. (2026-02-23)make release-github-sync-tagnow auto-generates pretty GitHub release notes fromCHANGELOG.mdentries since the previous release tag (with optional notes preface support). (2026-02-22)- Updated
make release-github-sync-tagto default public mirror squash commits topublic(main): release <tag>(unlessPUBLISH_GITHUB_COMMIT_MESSAGEoverride is set). (2026-02-22)
Bug Fixes
- Hardened
/api/admin/dvrto reject non-channelsprimary providers server-side while keeping Jellyfin available for post-sync reload fan-out configuration. (2026-02-23) - DVR UI now limits primary sync/mapping provider selection to Channels DVR while keeping Jellyfin available in active-provider post-sync reload options. (2026-02-23)
- Ensured DVR
UpdateConfigvalidates through configured lineup/mapping provider factory hooks before persisting config, preserving fail-fast ordering and factory override semantics. (2026-02-23) - Bounded recovery timeline rebase offsets to 12h to avoid pathological near-PCR-wrap
-output_ts_offsetvalues, with focused shared-session clamp regression coverage. (2026-02-23) - Added negative
slate_avfiller PTS-offset clamp regression coverage and simplified redundant recovery filler offset-expression guard logic. (2026-02-23) - Optimized HDHR lineup handling by skipping unused source-codec lookups for
lineup.json/lineup.m3uand short-circuitingshow=demobefore lineup construction. (2026-02-23) - Removed runtime silent
readrate_catchupclamp-to-base behavior so stream arg building stays consistent with strict config validation. (2026-02-23) - Hardened
release-github-sync-tagby requiring a pinnedBINFMT_IMAGEreference and pushing internal/public release tags before container publish. (2026-02-23) - Tightened DVR legacy placeholder cleanup so explicit
channels.lan:8089configs are preserved while untouched default sentinel rows are still normalized away. (2026-02-23) - Unified DVR provider URL-configuration gating by filtering unconfigured Jellyfin from active providers during normalization, with playlist-sync reload skip regression coverage. (2026-02-23)
- Removed a redundant dead assignment in DVR update-payload normalization (
NormalizeInstanceConfig) to simplify config-path coherence. (2026-02-23) - Added mapping-provider validation in DVR
UpdateConfigpreflight and removed redundant double normalization on DVR singleton read-back. (2026-02-23) - Normalized playlist-sync DVR reload status tokens to canonical values and added fallback handling/tests for unknown typed-outcome statuses. (2026-02-23)
- Aligned DVR playlist-sync reload skip-reason URL validation with canonical provider base-URL normalization and added focused regression coverage. (2026-02-23)
- Fixed
/ui/tunersshared-session history row rendering artifacts by using explicit listbox option rows and clipping row overflow. (2026-02-23) - DVR active-provider normalization now excludes
channelsuntil a valid Channels base URL is configured, and post-sync reload reportsno_active_providerswhen nothing is configured. (2026-02-22) - Default DVR config now leaves
channels_base_urlunset and post-playlist-sync reload skips Channels provider work until a valid Channels URL is configured. (2026-02-22) - Added configurable ffmpeg source catch-up pacing (
--producer-readrate-catchup/-readrate_catchup) with startup fallback for ffmpeg builds that do not support-readrate_catchup. (2026-02-22)
Docs
- Revalidated DVR cleanup refactor on the current baseline and closed the prior race-suite environment gap by installing CGO toolchain dependencies before rerunning race/full regression tests. (2026-02-23)
- Clarified recovery timeline PTS-offset test expectations by asserting boundary-PCR advancement semantics before slate keepalive filler startup. (2026-02-23)
- Expanded OPERATIONS FFmpeg readrate tuning guidance with concrete
PRODUCER_READRATE/PRODUCER_READRATE_CATCHUP/PRODUCER_INITIAL_BURSTrecommendations and interaction notes. (2026-02-23) - Added DVR migration notes explaining that Channels active-provider selection is URL-gated and will not persist without a valid
channels_base_url. (2026-02-23) - Expanded the GitHub release runbook with container registry/tag configuration guidance, pinned
BINFMT_IMAGEinput documentation, and updated tag-before-image lifecycle/recovery notes. (2026-02-23) - Clarified duplicate-close suppression test timeout intent and switched in-flight assertions to a helper to avoid direct map/mutex coupling in stream tests. (2026-02-23)
- Stabilized
TestCloseWithTimeoutConcurrentDuplicateCallsCloseOnceby validating duplicate-close behavior via local closer lifecycle signals instead of exact global close-timeout counters. (2026-02-23) - Hardened intermittent
internal/streamtest determinism for full-suite runs by isolating tune-backoff capacity assertions and using local close-timeout dedupe/worker-bounds assertions. (2026-02-23) - Added OPERATIONS tuning guidance for ffmpeg source pacing (
PRODUCER_READRATE/PRODUCER_READRATE_CATCHUP) with practical starting ranges and escalation notes. (2026-02-22)