4gray
9f4e11d6de
fix(playback): structure Shaka diagnostics ( #1318 )
...
* docs(playback): design structured Shaka diagnostics
* fix(playback): structure Shaka diagnostics
* docs(playback): document Shaka evidence boundary
* docs(playback): fix Shaka validation commands
* fix(playback): preserve Shaka fallback evidence
* fix(playback): preserve Shaka text error evidence
2026-07-31 21:25:06 +02:00
4gray
9a50e7385b
fix(playback): structure Video.js diagnostics ( #1317 )
2026-07-31 09:15:49 +02:00
4gray
46c7713841
fix(ui): preserve EPG in narrow channel rows ( #1312 )
...
Preserve current-program context and enabled actions in narrow channel rows while aligning loaded rows, skeletons, and virtual-scroll geometry across M3U, Xtream, Stalker, Favorites, and Recent views.
2026-07-31 08:27:36 +02:00
4gray
2ac0de752f
fix(skills): align repository guidance with implementation ( #1315 )
...
* docs(skills): design implementation synchronization
* docs(skills): plan implementation synchronization
* fix(release): filter internal notes from public body
* docs(release): synchronize release workflow guidance
* fix(stalker): normalize catalog series flags
* fix(stalker): preserve progress with scoped episode IDs
* fix(playback): expose strict position persistence
* docs(stalker): record series position compatibility
* test(skills): validate repository skill contracts
* fix(database): keep SQL trace values private
* docs(skills): refresh Nx and SQLite ownership
* docs(skills): align provider and UI guidance
* docs(skills): tighten validated guidance
* docs(release): require exact release pushes
* style(electron): remove trailing blank line
* fix(ci): classify repository skills coverage
2026-07-31 08:00:59 +02:00
4gray
99d167993d
fix(playback): structure HLS diagnostics ( #1316 )
...
* docs(playback): design structured HLS diagnostics
* docs(playback): plan structured HLS diagnostics
* fix(playback): structure HLS diagnostics
* docs(playback): document structured HLS evidence
* fix(playback): keep HLS startup logs private
2026-07-31 07:33:05 +02:00
4gray
bf13849d69
fix(playback): avoid false codec diagnostics ( #1314 )
...
* docs(playback): design accurate native diagnostics
* docs(playback): plan accurate native diagnostics
* fix(playback): classify native source errors from evidence
* fix(playback): preserve Video.js HTTP error context
* fix(playback): show explicit HTTP playback errors
* docs(playback): document native error evidence
2026-07-30 19:55:35 +02:00
4gray
a2fafcfc08
test(performance): add end-to-end Xtream benchmark harness ( #1300 )
...
* docs(performance): plan Xtream benchmark
* feat(xtream-mock-server): add deterministic 100k fixture
* style(xtream-mock-server): apply repository formatting
* fix(xtream-mock-server): harden performance fixture data
* feat(xtream-mock-server): add performance control plane
* docs(performance): correct Xtream capture plan
* fix(xtream-mock-server): harden performance controls
* fix(xtream-mock-server): harden control lifecycle
* feat(performance): add Xtream preload markers
* feat(performance): trace Xtream main phases
* feat(performance): mark Xtream store publications
* feat(performance): trace Xtream database phases
* feat(performance): trace Xtream delete cancellation
* feat(performance): capture Xtream phase attribution
* feat(performance): mark Sources Xtream refresh
* test(performance): define Xtream benchmark evidence contracts
* test(performance): add Xtream benchmark runner
* test(performance): surface failure evidence writes
* test(performance): align database read clock
* test(performance): preserve capture failure contracts
2026-07-28 08:08:07 +02:00
4gray
e55d55b47f
feat(mock-data): add shared screenshot-safe poster catalog ( #1271 )
...
Moves the fictional movie catalog into `libs/shared/marketing-fixtures` so the
Xtream and Stalker mocks describe the same titles, and adds 20 rendered posters
plus the shared fixture types behind them.
Supporting changes made while getting it green:
- `shared-marketing-fixtures` is classified Tier B in the coverage policy. Not
Tier A: it is fictional fixture data, so a statement percentage over it means
nothing, and a Tier A entry would pull it into the merged coverage map and the
ratchet. Tier B still runs its spec in CI. `stalker-mock-server` needs no entry
of its own — it is already Tier C and the Tier B/C runner falls back to
`pnpm nx test <project>`, so its new `marketing-poster-url.spec.ts` runs.
- Two release-capture defects the catalog reorder introduced, both fixed in
`tools/release/capture-app-driver.ts`:
- VOD stream ids are `MARKETING_VOD_STREAM_ID_BASE + index` and the generator
now lists the showcase movies first, so 62000-62002 became Black Harbor, The
Paper Astronaut and Summer Static while the dashboard seeding still mapped
those ids to the previous titles' backdrops.
- the raw `tsx` spawn of the Xtream mock lacked `--tsconfig
tsconfig.base.json`, so the mock could not resolve
`@iptvnator/shared/marketing-fixtures` and the capture never started. Both
mock projects' own serve targets already passed the flag.
2026-07-27 08:10:57 +02:00
4gray
08b868d6c1
test(electron): harden runtime boundary coverage ( #1267 )
...
Adds contract-focused regression coverage for the Electron HTTP server,
remote-control events, settings events, and managed download paths, and makes
Tier A coverage fail closed when instrumentation fails or a runtime-owning
production file disappears from a project or from the merged Istanbul report.
The old `coverage:ci` exited 0 despite a `Failed to collect coverage`
diagnostic: libs/m3u-state/src/lib/effects.ts was simply absent from the merged
map. All 30 Tier A reports are now required, the merged map covers 710 files,
and effects.ts is reported as 0/159 instead of silently disappearing.
Also fixes remote static-file path containment for encoded, malformed, NUL,
POSIX and Win32-style traversal inputs, with behavior-preserving testability
seams.
Statements 69.27% -> 69.54%; http-server.ts 0% -> 90.21%,
remote-control.events.ts 0% -> 96.55%, settings.events.ts 59.25% -> 96.29%.
2026-07-26 22:27:50 +02:00
4gray
d308749e2c
fix(stalker): preserve is_series episode metadata ( #1218 )
2026-07-21 07:51:37 +02:00
4gray
48ff4b9cc5
fix(portal): remove redundant catalog type badges ( #1217 )
...
Remove redundant LIVE, VOD, and SERIES badges from homogeneous Xtream and Stalker catalog grids while preserving mixed-content badges and type-driven grid behavior.
2026-07-20 21:52:00 +02:00
4gray
c266eaa680
fix(packaging): preserve Flatpak Electron ELF for Zypak ( #1205 )
...
Fixes the launcher/Zypak regression reported in #1203 . The additional GPU/video.js behavior remains tracked separately in that issue.
2026-07-18 22:42:45 +02:00
4gray
8fdac824fd
feat(packaging): ship Linux embedded MPV frame-copy runtime ( #1200 )
...
* docs: design Linux frame-copy packaging
* docs: plan Linux frame-copy packaging
* feat(packaging): define Linux frame-copy profiles
* fix(packaging): reject inherited profile names
* feat(embedded-mpv): validate staged Linux runtime
* fix(embedded-mpv): require Linux source packages
* fix(embedded-mpv): harden Linux runtime staging
* feat(embedded-mpv): build LGPL Linux runtime
* fix(embedded-mpv): pin Linux runtime inputs
* feat(embedded-mpv): build relocatable Linux helper
* fix(embedded-mpv): require bundled Linux runtime
* fix(embedded-mpv): make Linux runtime portable
* feat(packaging): ship Linux frame-copy artifacts
* fix(embedded-mpv): verify Linux helper linkage
* fix(packaging): enforce Linux frame-copy isolation
* fix(embedded-mpv): pin Linux display data
* docs(embedded-mpv): document Linux frame-copy packaging
* feat(embedded-mpv): probe Linux frame-copy runtime
* test(embedded-mpv): smoke packaged Linux frame-copy
* docs(embedded-mpv): clarify Linux system runtime baseline
* fix(embedded-mpv): harden Linux runtime capability gate
* ci: verify Linux frame-copy packages
* test(embedded-mpv): harden packaged Linux smoke
* test(embedded-mpv): preserve packaged GL mode
* test(packaging): harden Linux package probes
* fix(embedded-mpv): enable private Snap shared memory
* fix(embedded-mpv): sanitize Linux helper environment
* fix(packaging): enforce private Snap memory semantics
* fix(packaging): reject ambiguous Snap memory metadata
* fix(embedded-mpv): prioritize trusted Snap GL
* fix(packaging): reject advanced Snap YAML semantics
* fix(packaging): reject arbitrary Snap YAML aliases
* feat(packaging): ship Linux runtime license notices
* docs(embedded-mpv): document Linux runtime distribution
* fix(packaging): parse Snap trailing comments safely
* fix(release): gate Snap publish on public source release
* fix(packaging): strip VCS metadata from source bundle
* docs(packaging): clarify Linux source release gate
* test(embedded-mpv): smoke missing bundled libmpv
* style(embedded-mpv): format final validation inputs
* fix(e2e): satisfy fixture index signature typing
* fix(ci): declare fontconfig gperf generator
* fix(embedded-mpv): hash runtime cache identities
* fix(packaging): harden Linux frame-copy delivery
* fix(packaging): tighten runtime delivery gates
* fix(ci): decouple Linux runtime matrix
* fix(packaging): harden Linux frame-copy delivery
* fix(packaging): validate Linux frame-copy runtimes
* fix(packaging): scope Snap Electron library checks
* feat(packaging): ship Linux frame-copy runtimes
* fix(packaging): improve Linux runtime smoke diagnostics
* fix(packaging): expose bounded helper probe details
* test(packaging): trace Snap EGL probe failures
* fix(packaging): prefer core22 ABI in Snap helper
* fix(packaging): bound helper probe capture
* fix(packaging): harden Linux frame-copy releases
* fix(packaging): canonicalize libplacebo submodule identity
* fix(packaging): make source archive inspection portable
* fix(packaging): harden Snap release verification
2026-07-18 17:28:22 +02:00
4gray
c6ed504723
feat(playback): add shared picture-in-picture controls ( #1199 )
...
* docs(playback): design shared web picture-in-picture
* docs(playback): keep picture-in-picture exit available
* docs(playback): plan shared web picture-in-picture
* feat(playback): add picture-in-picture controls contract
* feat(playback): add shared web picture-in-picture
* feat(playback): expose shared picture-in-picture action
* docs(playback): document shared web picture-in-picture
* test(playback): cover shared picture-in-picture flow
* test(playback): wait for PiP video in Electron E2E
* refactor(playback): extract picture-in-picture controller
2026-07-17 22:11:29 +02:00
4gray
beb62db314
feat(settings): add shared web player controls toggle ( #1198 )
...
* docs(playback): design shared controls setting
* docs(playback): plan shared controls setting
* feat(settings): persist shared web controls preference
* test(settings): harden shared controls normalization coverage
* feat(settings): expose shared web controls toggle
* fix(settings): label shared controls toggle
* feat(playback): resolve shared controls from settings
* test(playback): cover shared controls setting
* docs(playback): document shared controls preference
* fix(playback): await settings before host creation
* fix(settings): normalize shared controls updates
2026-07-17 13:38:06 +02:00
4gray and Lars Emig
4e572c60ca
feat(videojs): add feature-flagged shared controls ( #1195 )
...
* feat(videojs): add feature-flagged shared controls
Rebuild the Video.js shared-controls integration on the current player lifecycle with Tech rebinds, source-scoped tracks, reset ordering, volume preservation, diagnostics gating, and default-off compatibility.
Credits and supersedes the stacked implementation proposed in #1153 .
Co-authored-by: Lars Emig <lars.emig@pickware.de >
* fix(videojs): harden MPEG-TS reset lifecycle
---------
Co-authored-by: Lars Emig <lars.emig@pickware.de >
2026-07-16 23:08:18 +02:00
4gray
c49ea2f6a8
feat(html-player): add feature-flagged shared controls ( #1194 )
...
* feat(html-player): bridge engine state to shared controls
* fix(html-player): avoid HLS subtitle event reentry
* fix(html-player): restore delayed HLS default subtitles
* refactor(html-player): split controls bridge collaborators
* feat(html-player): add feature-flagged shared controls
* test(html-player): cover shared-controls source ownership
* feat(html-player): pass shared-controls playback metadata
* docs(player-controls): describe HTML5 shared-controls bridge
* docs(player-controls): clarify HTML5 rollout effect
* fix(html-player): reveal diagnostics from fullscreen
* fix(html-player): defer HLS event resolution
* refactor(html-player): isolate video element session
2026-07-16 21:30:41 +02:00
4gray
f611ea3d7c
feat(embedded-mpv): use shared controls for frame-copy ( #1193 )
...
* docs(embedded-mpv): plan frame-copy shared controls
* feat(embedded-mpv): adapt frame-copy sessions to shared controls
* fix(embedded-mpv): correlate recording control updates
* fix(embedded-mpv): accept recording ack before command resolve
* fix(embedded-mpv): serialize delayed recording commands
* fix(embedded-mpv): latch buffered recording outcomes
* feat(embedded-mpv): use shared controls for frame-copy
* fix(embedded-mpv): isolate recording ticks by engine
* fix(embedded-mpv): reset controls on engine handoff
* docs(embedded-mpv): document frame-copy shared controls
* docs(embedded-mpv): normalize shared-controls plans
* fix(embedded-mpv): isolate legacy feedback on handoff
* fix(player-controls): block toggles while stalled
* refactor(embedded-mpv): isolate controls timing
* fix(player-controls): reset recording feedback on handoff
* fix(embedded-mpv): preserve newer session snapshots
2026-07-16 18:47:32 +02:00