303 Commits

Author SHA1 Message Date
09bdaa3ec1 Merge branch 'feature/t39-restore-laya-language-variants' into develop (#39) 2026-10-08 00:14:20 +02:00
a447d0dfe3 fix: restore Laya language analysis and stream variants
Run Local AI language detection during full rebuilds after identity classification and restore variant expansion with a visible playing stream indicator.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-08 00:14:10 +02:00
240b26536e Merge branch 'feature/t38-full-rebuild-source-epg-refresh' into develop (#38) 2026-10-08 00:05:10 +02:00
b3dbb3cfba feat: run full refresh with EPG rematching
Run full live catalog refreshes through live source sync, complete channel analysis, EPG source refresh, and persisted EPG rematching while keeping check-new incremental.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-08 00:05:00 +02:00
b81bc10d49 Merge branch 'feature/t37-split-live-analysis-actions' into develop (#37) 2026-10-07 23:45:51 +02:00
4cca030afa feat: split live analysis actions and page catalog loading
Separate incremental live checks from full catalog rebuilds and page projected channel/variant loading so first live-list display stays bounded.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-07 23:45:42 +02:00
bbb1afb238 Merge branch 'feature/t36-incremental-channel-analysis' into develop (#36) 2026-10-07 23:12:54 +02:00
4319e64e1e feat: persist incremental live channel analysis
Persist live channel language metadata across background projection rebuilds and target Local AI identity analysis to newly detected streams unless a manual full analysis is requested.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-07 23:12:42 +02:00
9967fd7adf Merge branch 'fix/t35-laya-stream-performance' into develop (#35) 2026-10-07 22:44:17 +02:00
ba5b1b37a1 fix: prevent background Laya rebuilds during playback
Ensure automatic live projection rebuilds use the algorithmic path so Laya identity batches are not launched during live list playback or background sync.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-07 22:44:05 +02:00
281a47124e Merge branch 'feature/t34-universal-browser-casting' into develop (#34)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 22:40:34 +02:00
5ee07570e0 feat(cast): add server-managed Google Cast playback (#34)
Add server-side Google Cast discovery and sessions, signed cast media URLs, browser device picker integration, and deployment documentation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 22:40:17 +02:00
e6e481bf0e Merge branch 'feature/t33-pwa-stream-casting' into develop (#33)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 22:08:04 +02:00
fd314f0a59 feat(player): add PWA-compatible stream casting (#33)
Add a browser-native casting service with Live and Watch player controls for Remote Playback and AirPlay-compatible devices.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 22:07:49 +02:00
d1934163ca Merge branch 'feature/t31-build-push-nodecast-and-laya-images' into develop (#31)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 21:18:40 +02:00
d64e5b6518 feat(deploy): publish Nodecast and Laya images together (#31)
Update the Docker build/push helper to build and push both application and Laya images, and document the configurable image targets.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 21:18:24 +02:00
4f8d3de7be Merge branch 'feature/t30-standalone-compose-laya-optional' into develop (#30)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 21:08:04 +02:00
7fd2bea665 feat(deploy): make compose standalone with optional Laya (#30)
Use configurable published images in docker-compose and update deployment docs so Compose works without a full checkout or local Dockerfiles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 21:07:50 +02:00
1791b77a68 Merge branch 'docs/t29-readme-deployment-laya' into develop (#29)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 20:57:03 +02:00
0742ac1a08 docs(deploy): document optional Laya compose profile (#29)
Update deployment guidance for standard and Laya-profile Compose flows, and mark the Laya service as profile-gated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 20:56:49 +02:00
8ff0b162a5 Merge branch 'feature/t28-laya-download-unavailable-runtime' into develop (#28)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 20:31:29 +02:00
f39ee6ebd8 feat(laya): clarify unavailable runtime download flow (#28)
Explain how to start the optional Laya runtime when model download fails because the service is unavailable, while keeping generic failures concise.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 20:31:15 +02:00
aeafdea283 Merge branch 'fix/t27-tighten-bein-search' into develop (#27)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 17:48:44 +02:00
ab554e12a4 fix(live): tighten beIN Sports search matching (#27)
Require numeric query tokens to match numeric channel tokens exactly while preserving singular/plural and compact-name tolerance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 17:48:28 +02:00
0122df9489 Merge branch 'hotfix/t26-live-analysis-blank-crash' into develop (#26)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 15:14:03 +02:00
63a5946e75 fix(live): prevent analysis crash on large catalogs (#26)
Bound synchronous live channel enrichment and tolerate minimal projection payloads so analysis and listings do not blank the UI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 15:13:48 +02:00
de1d3d9a6e Merge branch 'fix/t25-live-search-performance' into develop (#25)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 13:08:30 +02:00
45d1fe29d3 fix(live): keep channel search responsive (#25)
Filter projected live channels locally in the browser and apply server-side search and language filters before costly enrichment work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 13:08:16 +02:00
5baf8d5a33 Merge branch 'feature/t24-epg-source-priority-order' into develop (#24)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 11:59:21 +02:00
803dac3788 feat(ui): add EPG source priority controls (#24)
Render active and inactive EPG priority lists, support move controls, and persist complete EPG source ordering from the settings UI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 11:59:06 +02:00
afe91089e5 feat(epg): order EPG sources by priority (#24)
Add persistent EPG priority ordering, source reorder validation, and priority-aware EPG matching for live channels.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 11:58:50 +02:00
9718155e75 Merge branch 'feature/t23-flexible-channel-search-language-epg' into develop (#23)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 11:42:46 +02:00
638a31d9ef feat(ui): surface live language filters and built-in EPG sources (#23)
Add language filter controls for projected live channels, preserve backend language views in the browser, and separate built-in EPG sources from custom sources.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 11:42:23 +02:00
2a1c745a26 feat(live): add language-aware flexible channel search (#23)
Add backend language detection, flexible live channel search, iptv-org catalog caching, and protected built-in EPG source registration.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-06 11:42:06 +02:00
a6759b116d fix: track Laya language batches and normalize labels (#22)
Report post-projection Laya language detection as a busy analysis phase and normalize Laya language labels before caching and display.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-05 23:42:11 +02:00
45b56d872f fix: show live Laya analysis progress (#21)
Track the Laya identity phase separately from catalog projection progress and expose phase-specific counters through the live status API and Settings presentation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-05 23:30:35 +02:00
1abc56c90e fix: enable Laya language detection and harden live analysis (#18 #19 #20)
Ensure Docker images keep their container-built native dependencies, wait for the Laya sidecar healthcheck, expose accurate Laya readiness, and treat empty AI language batches as fallback failures.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-05 23:10:31 +02:00
9cc86485cb Merge branch 'fix/t18-live-detection-chain' into develop (#18)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-05 22:30:54 +02:00
6bb1914906 fix(live): preserve channels after empty projection rebuild (#18)
Treat successful but empty live projections with existing live input as stale, reject them on the frontend, and keep the previous visible channel state during rebuild failures.

Add DOM coverage for the Settings analysis flow and backend serialization coverage for empty projection state.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-05 22:30:37 +02:00
6dfd2ba093 test: cover functional live detection chain with Laya fallback (#18) 2026-10-05 19:34:42 +02:00
3f44217e42 Merge branch 'fix/t17-projection-rebuild-failure' into develop (#17)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 16:57:33 +02:00
6b16d2527d fix: resolve Live catalog projection failure during Analyze again in Laya mode (#17)
Fix the regression introduced by the weighted Laya signal (#16):
rebuild now merges exact fingerprints in every engine mode after
evaluating hard blockers, compares candidates against all variants
of a group, falls back to deterministic scoring when Laya is
unavailable, and reports transaction errors safely. Non-regression
tests cover the Laya-mode rebuild path; verified against a real
catalog copy (39,341 streams rebuilt successfully).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 16:57:20 +02:00
325b505df9 Merge branch 'feature/t16-laya-weighted-signal' into develop (#16)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 16:42:01 +02:00
925465ba39 feat: use Laya as a weighted signal in live stream grouping (#16)
Introduce a liveGroupingScoring engine that combines existing
membership signals (normalized name, brand, number, metadata tokens,
language, category/source when relevant) with a bounded Laya
contribution: Laya raises or lowers confidence instead of acting as
a final judge, with guard-rails against obvious contradictions.
Sanitize Laya batch identity inputs in layaService and wire the
weighted scoring into the live projection service. Weights are not
exposed in the Nodecast UI. Cover signal combination, bounds and
contradiction guard-rails with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 16:41:47 +02:00
a5ac3788a4 Merge branch 'fix/t15-bein-grouping-ai-error' into develop (#15)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 16:23:09 +02:00
dbd5b7fea3 fix: group beIN Sports 1 variants and clarify Laya language warning (#15)
beIN Sports 1 variants stayed separated after projection because
names with region prefixes (C Car, C Reu, Thai), time-shift suffixes
(2h/4h/8h/12h) and language markers (En, Fr, Thai) produced distinct
fingerprints. Extend normalization in the server projection service
and the frontend grouping fallback to fold these into one logical
channel, with tests on the exact reported names. Clarify the Laya
language detection warning so a language-matching failure is not
mistaken for a grouping failure, and bump script versions for cache
refresh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 16:22:57 +02:00
dcec7648da Merge branch 'feature/t14-live-analysis-button' into develop (#14)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 16:09:30 +02:00
67d9869364 feat: add Settings live stream analysis button and diagnose Laya batch failure (#14)
Add a Settings action to manually rerun Live TV stream analysis:
it triggers an admin-guarded projection rebuild endpoint that
groups streams into logical channels (covering channels present
before the projection existed) and reruns language/Laya detection,
with progress presented via liveAnalysisPresentation. Harden the
Laya batch path that failed with 'Local AI language matching
failed' by surfacing the underlying cause and falling back to
standard matching cleanly. Guard admin-only rebuild through a new
authz helper and cover routes, service and presentation with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 16:09:13 +02:00
9116d90526 Merge branch 'feature/t13-precompute-stream-grouping' into develop (#13)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 15:35:23 +02:00
9f97020996 feat: precompute stream grouping during source sync (#13)
Move variant grouping work out of Live TV rendering into the
catalog pipeline: a liveProjectionService builds the logical channel
projection (schema in liveProjectionSchema) whenever a source is
added, synced or modified (name change, new address), and the
projection is served through a /live route. ChannelList now consumes
the precomputed projection via a liveChannelProjection client
service, recalculating only when the catalog changes. Cover
projection building, incremental recompute and client consumption
with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 15:35:02 +02:00