:tv: Cross-platform IPTV player application with multiple features, such as support of m3u and m3u8 playlists, favorites, TV guide, TV archive/catchup and more.
This report summarizes scanner evidence for 4gray/iptvnator, a TypeScript project with 7,557 GitHub stars. SynthScan examined 1,030,329 lines of code across 4678 source files, recording 1788 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 2.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 1620 finding(s).
Are imports declared and package/API names verified? 18 finding(s).
Are wrappers, guards, and repeated structures necessary? 1691 finding(s).
Which changes need focused human review? 1788 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1788 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/release/capture-app-driver.ts | 158 | async function assertStalkerMockServerIdentity(): Promise<void> { | CODE |
| LOW | tools/release/capture-app-driver.ts | 235 | export async function installDownloadFolderDialogStub( | CODE |
| LOW | tools/release/capture-navigation-download-actions.ts | 36 | async function ensureCaptureDownloadFolder(page: Page): Promise<void> { | CODE |
| LOW | tools/release/capture-navigation-download-actions.ts | 103 | async function openDownloadsOfflineMovie(page: Page): Promise<void> { | CODE |
| LOW | tools/release/capture-navigation-setup-actions.ts | 224 | async function openRemoteControlSettings(page: Page): Promise<void> { | CODE |
| LOW | tools/release/capture-navigation-setup-actions.ts | 260 | async function openSettingsRemoteControl(page: Page): Promise<void> { | CODE |
| LOW | tools/release/capture-navigation-setup-actions.ts | 287 | async function waitForRemoteControlServer(): Promise<void> { | CODE |
| LOW | …perpowers/plans/2026-08-03-playback-recommendations.md | 274 | export function classifyUnsupportedHlsManifestCodecs( | CODE |
| LOW | …perpowers/plans/2026-08-03-playback-recommendations.md | 285 | export function isBrowserMediaTypeSupported( | CODE |
| LOW⚡ | …perpowers/plans/2026-08-03-playback-recommendations.md | 517 | export function resolvePlaybackSourceKind( | CODE |
| LOW⚡ | …perpowers/plans/2026-08-03-playback-recommendations.md | 521 | export function getInlinePlaybackEngineFamily( | CODE |
| LOW⚡ | …perpowers/plans/2026-08-03-playback-recommendations.md | 526 | export function createPlaybackTargetCapabilities(options: { | CODE |
| LOW | …perpowers/plans/2026-08-03-playback-recommendations.md | 707 | export function recommendPlaybackRecovery( | CODE |
| LOW | …plans/2026-07-17-web-player-shared-controls-setting.md | 595 | function resolveWebPlayerSharedControls(): boolean { | CODE |
| LOW | …s/plans/2026-07-31-download-manager-offline-details.md | 307 | export function encodeDownloadMetadataSnapshot( | CODE |
| LOW | …s/plans/2026-07-31-download-manager-offline-details.md | 318 | export function decodeDownloadMetadataSnapshot( | CODE |
| LOW | …s/plans/2026-07-31-download-manager-offline-details.md | 852 | export function createMovieDownloadSnapshot( | CODE |
| LOW | …s/plans/2026-07-31-download-manager-offline-details.md | 1115 | export function isProviderOnlyDetailState(state: unknown): boolean { | CODE |
| LOW | …s/superpowers/plans/2026-07-30-download-manager-mvp.md | 397 | export function buildDownloadManagerViewModel(options: { | CODE |
| LOW | …ers/plans/2026-07-30-responsive-channel-epg-preview.md | 99 | async function setPortalChannelItemWidth( | CODE |
| LOW | …ers/plans/2026-07-30-responsive-channel-epg-preview.md | 122 | async function expectNarrowRowContentFits( | CODE |
| LOW | …ans/2026-07-30-accurate-native-playback-diagnostics.md | 498 | function formatDiagnosticErrorDetails(issue: PlaybackDiagnostic): string { | CODE |
| LOW | …superpowers/plans/2026-07-18-flatpak-zypak-launcher.md | 68 | function resolveLinuxLauncherLayout(targets, executableName = 'iptvnator') { | CODE |
| LOW | …superpowers/plans/2026-07-18-flatpak-zypak-launcher.md | 531 | function resolveElectronBinaryPath(resourceDir, artifactFormat) { | CODE |
| LOW | …ns/2026-07-25-coverage-integrity-runtime-boundaries.md | 523 | export function createCoverageOutputScanner(maxCharacters = 4096) { | CODE |
| LOW | …owers/plans/2026-07-31-structured-shaka-diagnostics.md | 296 | export function createShakaPlaybackEvidence( | CODE |
| LOW | …/superpowers/plans/2026-08-01-season-download-queue.md | 228 | export function createEpisodeDownloadIdentityKey( | CODE |
| LOW | …/superpowers/plans/2026-08-01-season-download-queue.md | 263 | export function isEpisodeDownloadEligible( | CODE |
| LOW | …/superpowers/plans/2026-08-01-season-download-queue.md | 819 | export function createXtreamSeriesDownloadAdapter( | CODE |
| LOW | …ns/2026-07-29-repository-skills-implementation-sync.md | 805 | function generateLegacyVodEpisodeId( | CODE |
| LOW⚡ | …ns/2026-07-29-repository-skills-implementation-sync.md | 954 | export function reconcileStalkerSeriesPositions(options: { | CODE |
| LOW⚡ | …ns/2026-07-29-repository-skills-implementation-sync.md | 962 | export async function saveStalkerSeriesPosition(options: { | CODE |
| LOW⚡ | …ns/2026-07-29-repository-skills-implementation-sync.md | 972 | export async function clearStalkerSeriesPosition(options: { | CODE |
| LOW | …wers/plans/2026-08-01-structured-mpegts-diagnostics.md | 254 | export function createMpegTsPlaybackEvidence( | CODE |
| LOW | …wers/plans/2026-08-01-structured-mpegts-diagnostics.md | 378 | export function classifyMpegTsPlaybackIssue( | CODE |
| LOW | …plans/2026-07-30-download-manager-file-availability.md | 136 | export function getDownloadFileAvailability( | CODE |
| LOW | docs/superpowers/plans/2026-09-06-epg-guide-m3u.md | 1369 | export function restoreEpgGuidePreferences( | CODE |
| LOW⚡ | docs/superpowers/plans/2026-09-06-epg-guide-m3u.md | 1381 | export function persistEpgGuidePreferences( | CODE |
| LOW⚡ | docs/superpowers/plans/2026-09-06-epg-guide-m3u.md | 1390 | export function restoreEpgGuideDockCollapsed( | CODE |
| LOW⚡ | docs/superpowers/plans/2026-09-06-epg-guide-m3u.md | 1396 | export function persistEpgGuideDockCollapsed( | CODE |
| LOW | docs/superpowers/plans/2026-09-06-epg-guide-m3u.md | 4685 | function xmltvWithCurrentProgramme( | CODE |
| LOW | …trol/src/lib/remote-control/remote-control-language.ts | 48 | export function resolveRemoteControlLanguage( | CODE |
| LOW | …ib/scroll-position/create-scroll-position-preserver.ts | 4 | export function createScrollPositionPreserver(destroyRef: DestroyRef): { | CODE |
| LOW | …nents/src/lib/vod-sources/vod-source-filtering.util.ts | 36 | export function hasActiveVodSourceFilters( | CODE |
| LOW | …s/src/lib/season-container/season-auto-select.state.ts | 73 | export function createSeasonAutoSelectState( | CODE |
| LOW | …s/src/lib/season-container/season-watch-toggle.util.ts | 32 | export function buildWatchedEpisodePosition(options: { | CODE |
| LOW | …s/src/lib/season-container/season-watch-toggle.util.ts | 82 | export function buildSeasonWatchToggleRequest(options: { | CODE |
| LOW | …s/src/lib/season-container/season-watch-toggle.util.ts | 133 | export function buildSeriesWatchToggleRequest(options: { | CODE |
| LOW | …ts/src/lib/season-container/season-auto-select.util.ts | 40 | export function resolveAutoSelectedSeason( | CODE |
| LOW | …ts/src/lib/season-container/season-auto-select.util.ts | 103 | function findMostRecentInProgressSeason( | CODE |
| LOW | …/lib/season-container/episode-info-dialog.component.ts | 25 | export function buildEpisodeInfoDialogData( | CODE |
| LOW⚡ | …c/lib/channel-list-container/channel-list-sort.util.ts | 8 | export function isPlaylistChannelSortMode( | CODE |
| LOW⚡ | …c/lib/channel-list-container/channel-list-sort.util.ts | 14 | export function restorePlaylistChannelSortMode( | CODE |
| LOW⚡ | …c/lib/channel-list-container/channel-list-sort.util.ts | 22 | export function persistPlaylistChannelSortMode( | CODE |
| LOW⚡ | …c/lib/channel-list-container/channel-list-sort.util.ts | 30 | export function getPlaylistChannelSortModeLabelKey( | CODE |
| LOW | …/src/lib/channel-list-container/epg-enrichment.util.ts | 61 | export function buildChannelEpgMetadataMap( | CODE |
| LOW | …c/lib/web-video-support/external-subtitle-cues.util.ts | 29 | export function detectExternalSubtitleFormat( | CODE |
| LOW | …c/lib/web-video-support/external-subtitle-cues.util.ts | 50 | export function decodeExternalSubtitleBytes(buffer: ArrayBuffer): string { | CODE |
| LOW | …c/lib/web-video-support/external-subtitle-cues.util.ts | 83 | function chooseLegacySingleByteDecode(buffer: ArrayBuffer): string { | CODE |
| LOW | …c/lib/web-video-support/external-subtitle-cues.util.ts | 148 | export function parseExternalSubtitleCues( | CODE |
| 1481 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/superpowers/plans/2026-09-06-epg-guide-m3u.md | 4444 | // ─── Guide mode ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 9 | // ─── Hero header ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 62 | // ─── Status pills ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 99 | // ─── Messages ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 116 | // ─── Hero stat cards ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 192 | // ─── Content area ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 203 | // ─── Detail panels ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 240 | // ─── Detail rows ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 295 | // ─── Chip sections ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 352 | // ─── Empty account block ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 373 | // ─── Error state ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 408 | // ─── Skeleton loading ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 457 | // ─── Footer actions ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_account-dialog.scss | 464 | // ─── Responsive breakpoints ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_portal-sidebar.scss | 1 | // ─── Shared sidebar + sidebar-header styles ─────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_nav-list.scss | 1 | // ─── Shared List Navigation Styles ──────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_portal-layout.scss | 1 | // ─── Shared mixin for live-stream portal layouts ────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_portal-layout.scss | 22 | // ─── Sidebar ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_portal-layout.scss | 63 | // ─── Main content column ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_portal-layout.scss | 73 | // ─── Floating restore handle (visible when sidebar is collapsed) ───────── | COMMENT |
| MEDIUM | libs/ui/styles/_portal-layout.scss | 174 | // ─── Fix artplayer sizing when nested inside .video-player ─────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_portal-layout.scss | 185 | // ─── Phone layout ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libs/ui/styles/_detail-view-actions.scss | 312 | // ── Cinematic action row (VOD details hero + dashboard hero) ──────────────── | COMMENT |
| MEDIUM | …ts/src/lib/vod-sources/vod-sources-menu.component.scss | 199 | // ── Filter chips ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ts/src/lib/vod-sources/vod-sources-menu.component.scss | 292 | // ── Copies expansion ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ui/components/src/lib/styles/_channel-list-layout.scss | 14 | // ── "All channels" and the favorites/recent context header ───────────────── | COMMENT |
| MEDIUM | …ui/components/src/lib/styles/_channel-list-layout.scss | 45 | // ── Groups view ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ui/components/src/lib/styles/_channel-list-layout.scss | 89 | // ── Placeholders ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-list-container/channel-list-container.component.scss | 77 | // ─── Header ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-list-container/channel-list-container.component.scss | 93 | // ─── Divider ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 7 | // ─── Hero header ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 58 | // ─── Status pills ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 101 | // ─── Hero stat cards ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 169 | // ─── Content area ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 180 | // ─── URL block ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 215 | // ─── Detail panels ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 251 | // ─── Detail rows ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 300 | // ─── Chip sections (sub-group headers) ────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 318 | // ─── Footer actions ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …l-details-dialog/channel-details-dialog.component.scss | 320 | // ─── Responsive breakpoints ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …oading-state/channel-list-loading-state.component.scss | 56 | // ── All channels and the favorites/recent views ──────────────────────────── | COMMENT |
| MEDIUM | …oading-state/channel-list-loading-state.component.scss | 102 | // ── Groups view ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …-channel-panel/fullscreen-channel-panel.component.scss | 23 | // ─── Closed state ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …-channel-panel/fullscreen-channel-panel.component.scss | 90 | // ─── Open state ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …-channel-panel/fullscreen-channel-panel.component.scss | 146 | // ─── Header: one row, search (or title) + close ────────────────────────────── | COMMENT |
| MEDIUM | …-channel-panel/fullscreen-channel-panel.component.scss | 285 | // ─── Body ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …-channel-panel/fullscreen-channel-panel.component.scss | 306 | // ─── Adaptations ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 2 | // ─── Radio Player — cinematic hero layout ──────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 13 | // ─── Hero container ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 22 | // ─── Blurred backdrop (station logo, blown up) ────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 35 | // ─── Vignette overlay (matches content-hero pattern) ───────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 61 | // ─── Floating content stage ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 76 | // ─── Artwork card ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 125 | // ─── Station name ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 142 | // ─── Live / Paused badge ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 182 | // ─── Transport controls ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 239 | // ─── Volume row ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 268 | // ─── Entrance ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yback/src/lib/audio-player/audio-player.component.scss | 289 | // ─── Responsive ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …-episode-panel/fullscreen-episode-panel.component.scss | 143 | // ─── Row ───────────────────────────────────────────────────────────────────── | COMMENT |
| 90 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spikes/mpv-frame-copy/collect-results.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | spikes/mpv-frame-copy/make-bundle.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | spikes/mpv-frame-copy/common/spike_shm.h | 21 | #pragma once | COMMENT |
| LOW | spikes/mpv-frame-copy/helper/mpv_helper.cpp | 21 | #include <signal.h> | COMMENT |
| LOW | libs/ui/styles/_focus-ring.scss | 1 | // The app's keyboard focus ring. `apps/web/src/styles.scss` draws it on | COMMENT |
| LOW | libs/ui/styles/_app-controls.scss | 1 | // Buttons, menus, the segmented control and floating panels of the | COMMENT |
| LOW | libs/ui/styles/_skeleton-shimmer.scss | 1 | // The one shimmer recipe for loading placeholders: the dashboard hero and | COMMENT |
| LOW | libs/ui/styles/_portal-layout.scss | 1 | // ─── Shared mixin for live-stream portal layouts ────────────────────────────── | COMMENT |
| LOW | …bs/ui/components/src/lib/styles/_skeleton-shimmer.scss | 1 | // The shared shimmer moved to `libs/ui/styles/_skeleton-shimmer.scss` so the | COMMENT |
| LOW | …-mpv-player/embedded-mpv-overlay-visibility.service.ts | 61 | // Plain set, no read-back guard: signals already skip notification | COMMENT |
| LOW | …embedded-mpv-player/embedded-mpv-session-controller.ts | 181 | window.addEventListener('resize', scheduleBoundsSync); | COMMENT |
| LOW | …src/lib/player-controls/player-controls.component.scss | 21 | // Reds, literal like the rest: the theme's error colour changes with the | COMMENT |
| LOW | …/playback/src/lib/player-controls/_player-palette.scss | 1 | // Player colours that surfaces outside the controls host need too. The | COMMENT |
| LOW | …src/lib/epg-timeline/epg-timeline-scroll.controller.ts | 121 | } | COMMENT |
| LOW | …layer/src/lib/video-player/video-player.component.scss | 141 | // Keeps the mixin's player floor rather than releasing it: `height: 50vh` | COMMENT |
| LOW | …alker-portal-import/stalker-portal-import.component.ts | 381 | this.importController = controller; | COMMENT |
| LOW | …b/stalker-series-view/stalker-series-view.component.ts | 421 | // usually BEFORE the async show-level TMDB enrichment has written | COMMENT |
| LOW | …er/data-access/src/lib/stalker-account-info.service.ts | 121 | } | COMMENT |
| LOW | …s/src/lib/stores/utils/stalker-player-request.utils.ts | 61 | } | COMMENT |
| LOW | …ure/src/lib/search-results/search-results.component.ts | 261 | // Created first so a route `q` reaches the store before the search | COMMENT |
| LOW | …portal-channels-list/portal-channels-list.component.ts | 361 | this.epgQueueService.epgResult$.subscribe( | COMMENT |
| LOW | …e/src/lib/vod-details/vod-multi-source-host.service.ts | 481 | } | COMMENT |
| LOW | …a-access/src/lib/collection/stream-resolver.service.ts | 461 | // Skipping `create_link` also skips the only authenticated | COMMENT |
| LOW | …a-access/src/lib/collection/stream-resolver.service.ts | 601 | // just ran adopted a token under the repaired mode, but the mode-aware | COMMENT |
| LOW | …src/lib/workspace-shell/workspace-shell.component.scss | 81 | // a mask layer Blink synthesizes per composited effect: its shader path for | COMMENT |
| LOW | …t-sidebar/workspace-shell-context-sidebar.component.ts | 121 | 'contextPanel' | COMMENT |
| LOW | …sidebar/workspace-shell-context-sidebar.component.scss | 81 | } | COMMENT |
| LOW | …-shell/services/workspace-shell-search-sync.service.ts | 161 | // refresh bump) or the router echoing back our own `q`. Syncing anyway | COMMENT |
| LOW | …rd/feature/src/lib/rails/dashboard-hero.component.scss | 1 | // Cinematic dashboard hero. Bleeds to the edges of the workspace content | COMMENT |
| LOW | …ta-access/src/lib/dashboard-recommendations.service.ts | 181 | } else { | COMMENT |
| LOW | libs/shared/tmdb/src/lib/tmdb-metadata-client.ts | 141 | ) { | COMMENT |
| LOW | …d/interfaces/src/lib/provider-import-detection.util.ts | 101 | // math alphabets; the extra pass folds the squared/negative-circled/ | COMMENT |
| LOW | libs/shared/interfaces/src/lib/ipc-commands.ts | 121 | COMMENT | |
| LOW | .github/actionlint.yaml | 1 | paths: | COMMENT |
| LOW | .github/workflows/cleanup-pr-draft.yml | 121 | # being `open` ("Check PR is still open" in build-and-make.yaml), so | COMMENT |
| LOW | .github/workflows/build-and-make.yaml | 1 | name: Build and Make Electron App | COMMENT |
| LOW | .github/workflows/build-and-make.yaml | 481 | TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }} | COMMENT |
| LOW | .github/codeql/codeql-config.yml | 1 | name: 'IPTVnator CodeQL config' | COMMENT |
| LOW | apps/web-backend/src/app/web-backend-app.ts | 281 | let guardToken: HostRequestToken | null = null; | COMMENT |
| LOW | apps/electron-backend/native/helper/frame_helper_gl.h | 41 | #include <dlfcn.h> | COMMENT |
| LOW | apps/electron-backend/native/helper/frame_helper_gl.h | 61 | #include <cstdio> | COMMENT |
| LOW | apps/electron-backend/native/helper/frame_helper_gl.h | 81 | #include <GL/gl.h> | COMMENT |
| LOW | apps/electron-backend/native/helper/frame_helper_gl.h | 101 | #define GL_COLOR_ATTACHMENT0 0x8CE0 | COMMENT |
| LOW | apps/electron-backend/native/helper/frame_shm.h | 21 | #endif | COMMENT |
| LOW | …s/electron-backend/native/helper/frame_helper_render.h | 21 | #endif | COMMENT |
| LOW | …ps/electron-backend/native/helper/mpv_frame_helper.cpp | 21 | #include <mpv/client.h> | COMMENT |
| LOW | apps/electron-backend/native/src/embedded_mpv.mm | 1 | #include <napi.h> | COMMENT |
| LOW | apps/electron-backend/native/src/embedded_mpv.mm | 21 | #include <cctype> | COMMENT |
| LOW | …/electron-backend/native/src/embedded_mpv_wid_common.h | 1 | #pragma once | COMMENT |
| LOW | …/electron-backend/native/src/embedded_mpv_wid_common.h | 41 | COMMENT | |
| LOW | …/electron-backend/native/src/embedded_mpv_wid_common.h | 61 | #include <cctype> | COMMENT |
| LOW | …/electron-backend/native/src/embedded_mpv_wid_common.h | 2281 | // | COMMENT |
| LOW | apps/electron-backend/src/main.ts | 61 | // Packaged Linux launchers force X11 via the .desktop entry | COMMENT |
| LOW | apps/electron-backend/src/app/app.ts | 421 | // Window state is never re-read at event time: on Windows both | COMMENT |
| LOW | apps/electron-backend/src/app/app.ts | 561 | showMainWindowWhenLoaded(mainWindow, () => { | COMMENT |
| LOW | …rc/app/database/operations/title-sources.operations.ts | 181 | */ | COMMENT |
| LOW | …rc/app/database/operations/title-sources.operations.ts | 341 | )) as TitleSourceRow[]); | COMMENT |
| LOW | …p/database/operations/title-sources.operations.spec.ts | 101 | it('can still find a short non-ASCII title', async () => { | COMMENT |
| LOW | …ackend/src/app/database/operations/title-token-glob.ts | 181 | ) { | COMMENT |
| LOW | …s/electron-backend/src/app/events/epg-query.service.ts | 921 | .from(schema.epgChannelMappings) | COMMENT |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …layback/src/lib/art-player/art-player-video-session.ts | 55 | this.config.player.video.volume.toString() | CODE |
| CRITICAL | …lib/player-controls/player-settings-panel.a11y.spec.ts | 263 | fake.commands.setPlaybackSpeed.mock.calls.map(([speed]) => speed) | CODE |
| CRITICAL | …s/src/lib/server-storage/server-user-data-sync.spec.ts | 131 | expect(server.api.sendJson.mock.calls.map(([, path]) => path)).toEqual([ | CODE |
| CRITICAL | …/src/app/api/main.preload.performance.contract.spec.ts | 129 | const markerSendOrders = harness.ipcRenderer.send.mock.calls.flatMap( | CODE |
| CRITICAL | …/src/app/api/main.preload.performance.contract.spec.ts | 318 | harness.ipcRenderer.send.mock.calls.filter( | CODE |
| CRITICAL | …end/src/app/events/epg-worker.service.progress.spec.ts | 187 | const statuses = win.webContents.send.mock.calls.map( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/development/tv-metadata-validation.md | 48 | | TMDB default-key injection | Disposable fake-key fixture passes; source default remains empty | | CODE |
| LOW | …ponents/src/lib/content-hero/content-hero.component.ts | 157 | const hue = this.calculateHue(this.title() || 'placeholder'); | CODE |
| LOW | …ponents/src/lib/content-hero/content-hero.component.ts | 163 | const hue = this.calculateHue(this.title() || 'placeholder'); | CODE |
| LOW | …ashboard/feature/src/lib/rails/dashboard-hero.utils.ts | 92 | const key = text || 'placeholder'; | CODE |
| LOW | libs/tv/testing/tmdb.test.ts | 53 | apiKey: 'fake-key', | CODE |
| LOW | …src/app/database/operations/operations.test-helpers.ts | 38 | kind: 'placeholder', | CODE |
| LOW | …c/app/database/operations/favorites.operations.spec.ts | 8 | kind: 'placeholder', | CODE |
| LOW | …/src/app/api/main.preload.performance.contract.spec.ts | 243 | ...createPlaylist('placeholder'), | CODE |
| LOW | apps/tv-e2e/src/episode-layout.e2e.ts | 84 | .fill('fake-key'); | CODE |
| LOW | apps/tv-e2e/src/tmdb-series.e2e.ts | 18 | await page.getByLabel('TMDB API key or read access token').fill('fake-key'); | CODE |
| LOW | apps/tv-e2e/src/tmdb-series.e2e.ts | 113 | await page.getByLabel('TMDB API key or read access token').fill('fake-key'); | CODE |
| LOW | apps/tv-e2e/src/tmdb-series.e2e.ts | 284 | await page.getByLabel('TMDB API key or read access token').fill('fake-key'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spikes/mpv-frame-copy/viewer/index.html | 213 | // robust against rAF quantization on high-Hz displays. | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 266 | # Anything can move a journey (application code, the harness, root | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 474 | # Node specs for the benchmark and journey harness (about ten | COMMENT |
| MEDIUM | .github/actions/performance-journeys/action.yml | 101 | "## Performance journeys (\(.harness.platform), \(.harness.measuredIterations) measured iterations)", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/architecture/release-pipeline.md | 110 | ## Blog scaffold shape | COMMENT |
| MEDIUM | …owers/specs/2026-08-01-season-download-queue-design.md | 129 | ### Provider-neutral orchestration | COMMENT |