AList proxy server for TvBox, support playlist and search.
This report summarizes scanner evidence for power721/alist-tvbox, a Java project with 3,144 GitHub stars. SynthScan examined 262,783 lines of code across 1315 source files, recording 351 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 8.9 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 77 finding(s).
Are imports declared and package/API names verified? 218 finding(s).
Are wrappers, guards, and repeated structures necessary? 98 finding(s).
Which changes need focused human review? 351 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 351 distinct pattern matches across 12 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 |
|---|---|---|---|---|
| CRITICAL | docs/superpowers/plans/2026-06-14-remote-config-sync.md | 478 | cn.har01d.alist_tvbox.dto.sync.MergeStrategy.valueOf(strategy.toUpperCase()) : null); | CODE |
| CRITICAL | …/superpowers/plans/2026-07-24-link-check-disk-types.md | 191 | org.assertj.core.api.Assertions.assertThat(checkable).extracting(Message::getLink) | CODE |
| CRITICAL | …/superpowers/plans/2026-07-24-link-check-disk-types.md | 209 | org.assertj.core.api.Assertions.assertThat(checkable).extracting(Message::getLink) | CODE |
| CRITICAL⚡ | docs/superpowers/plans/2026-07-28-pansou-grouping.md | 60 | org.assertj.core.api.Assertions.assertThat(result.getList()).hasSize(2); | STRING |
| CRITICAL⚡ | docs/superpowers/plans/2026-07-28-pansou-grouping.md | 61 | org.assertj.core.api.Assertions.assertThat(result.getList()) | STRING |
| CRITICAL⚡ | docs/superpowers/plans/2026-07-28-pansou-grouping.md | 64 | org.assertj.core.api.Assertions.assertThat(result.getList()) | STRING |
| CRITICAL⚡ | docs/superpowers/plans/2026-07-28-pansou-grouping.md | 67 | org.assertj.core.api.Assertions.assertThat(result.getList()) | STRING |
| CRITICAL⚡ | docs/superpowers/plans/2026-07-28-pansou-grouping.md | 76 | org.assertj.core.api.Assertions.assertThat(list.getList()).hasSize(1); | STRING |
| CRITICAL⚡ | docs/superpowers/plans/2026-07-28-pansou-grouping.md | 78 | org.assertj.core.api.Assertions.assertThat(list.getList().get(0).getVod_id()).startsWith("https"); | STRING |
| CRITICAL⚡ | docs/superpowers/plans/2026-07-28-pansou-grouping.md | 79 | org.assertj.core.api.Assertions.assertThat(list.getTotal()).isEqualTo(1); | STRING |
| CRITICAL | …d/alist_tvbox/config/NativeCaffeineFactoryFixTest.java | 42 | var cache = com.github.benmanes.caffeine.cache.Caffeine.newBuilder() | CODE |
| CRITICAL | …1d/alist_tvbox/web/LocalApiAdminPasswordResetTest.java | 59 | new cn.har01d.alist_tvbox.service.backup.RestoreState("/data/does-not-exist-database-json.zip"), | CODE |
| CRITICAL | …java/cn/har01d/alist_tvbox/web/PlayControllerTest.java | 97 | .thenReturn(new cn.har01d.alist_tvbox.service.WatchlistService.Result( | CODE |
| CRITICAL | …java/cn/har01d/alist_tvbox/web/PlayControllerTest.java | 110 | .thenReturn(new cn.har01d.alist_tvbox.service.WatchlistService.Result( | CODE |
| CRITICAL⚡ | …har01d/alist_tvbox/web/MediaLibraryControllerTest.java | 41 | assertEquals("已追 8.2", cn.har01d.alist_tvbox.web.MediaLibraryController.subscribedRemarks("已追 已追 已追 已追 8.2", tru | CODE |
| CRITICAL⚡ | …har01d/alist_tvbox/web/MediaLibraryControllerTest.java | 43 | assertEquals("已追 8.2", cn.har01d.alist_tvbox.web.MediaLibraryController.subscribedRemarks("已追 8.2", true)); | CODE |
| CRITICAL⚡ | …har01d/alist_tvbox/web/MediaLibraryControllerTest.java | 45 | assertEquals("8.2", cn.har01d.alist_tvbox.web.MediaLibraryController.subscribedRemarks("已追 8.2", false)); | CODE |
| CRITICAL⚡ | …har01d/alist_tvbox/web/MediaLibraryControllerTest.java | 46 | assertEquals("", cn.har01d.alist_tvbox.web.MediaLibraryController.subscribedRemarks("已追", false)); | CODE |
| CRITICAL⚡ | …har01d/alist_tvbox/web/MediaLibraryControllerTest.java | 47 | assertEquals("已追", cn.har01d.alist_tvbox.web.MediaLibraryController.subscribedRemarks(null, true)); | CODE |
| CRITICAL⚡ | …har01d/alist_tvbox/web/MediaLibraryControllerTest.java | 48 | assertEquals("已追 豆瓣 8.0", cn.har01d.alist_tvbox.web.MediaLibraryController.subscribedRemarks("豆瓣 8.0", true)); | CODE |
| CRITICAL | …d/alist_tvbox/web/MediaSubscriptionControllerTest.java | 260 | org.junit.jupiter.api.Assertions.assertEquals("https://image.tmdb.org/t/p/w500/abc.jpg", cached.getVod_pic()); | CODE |
| CRITICAL | …d/alist_tvbox/web/MediaSubscriptionControllerTest.java | 289 | org.junit.jupiter.api.Assertions.assertEquals("https://image.tmdb.org/t/p/w500/abc.jpg", cached.getVod_pic()); | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 556 | .thenReturn(new cn.har01d.alist_tvbox.service.PianDanSubscriptionService.Result( | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 560 | cn.har01d.alist_tvbox.telegram.TelegramCallbackData.parse("wantsub:0")); | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 580 | .thenReturn(new cn.har01d.alist_tvbox.service.WatchlistService.Result( | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 584 | cn.har01d.alist_tvbox.telegram.TelegramCallbackData.parse("wantdel:0")); | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 603 | cn.har01d.alist_tvbox.telegram.TelegramCallbackData.parse("wante:0")); | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 623 | .thenReturn(new cn.har01d.alist_tvbox.service.PianDanSubscriptionService.Result( | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 627 | cn.har01d.alist_tvbox.telegram.TelegramCallbackData.parse("wantsub:0:3")); | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 652 | cn.har01d.alist_tvbox.telegram.TelegramCallbackData.parse("wante:0")); | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 674 | cn.har01d.alist_tvbox.telegram.TelegramCallbackData.parse("wante:0")); | CODE |
| CRITICAL | …/alist_tvbox/telegram/TelegramSubscriptionBotTest.java | 687 | cn.har01d.alist_tvbox.telegram.TelegramCallbackData.parse("wantsub:3")); | CODE |
| CRITICAL | …01d/alist_tvbox/telegram/TelegramUpdateRouterTest.java | 98 | org.junit.jupiter.api.Assertions.assertNull(router.resolveUid(999L)); | CODE |
| CRITICAL | …01d/alist_tvbox/telegram/TelegramUpdateRouterTest.java | 102 | org.junit.jupiter.api.Assertions.assertEquals(expected, router.resolveUid(chatId)); | CODE |
| CRITICAL | …a/cn/har01d/alist_tvbox/telegram/TelegramHttpTest.java | 108 | org.junit.jupiter.api.Assertions.assertThrows(IllegalArgumentException.class, | CODE |
| CRITICAL⚡ | …01d/alist_tvbox/live/service/LiveProxyServiceTest.java | 135 | org.springframework.web.context.request.RequestContextHolder.setRequestAttributes( | CODE |
| CRITICAL⚡ | …01d/alist_tvbox/live/service/LiveProxyServiceTest.java | 136 | new org.springframework.web.context.request.ServletRequestAttributes(request)); | CODE |
| CRITICAL⚡ | …01d/alist_tvbox/live/service/LiveProxyServiceTest.java | 141 | org.springframework.web.context.request.RequestContextHolder.resetRequestAttributes(); | CODE |
| CRITICAL | …01d/alist_tvbox/live/service/LiveProxyServiceTest.java | 194 | com.sun.net.httpserver.HttpServer server = com.sun.net.httpserver.HttpServer.create( | CODE |
| CRITICAL | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 23 | com.fasterxml.jackson.databind.json.JsonMapper.builder() | CODE |
| CRITICAL | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 42 | builder.messageConverters(new org.springframework.http.converter.json.MappingJackson2HttpMessage | CODE |
| CRITICAL | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 119 | org.junit.jupiter.api.Assumptions.assumeTrue(!url.isBlank(), "本机出口取流被拒(机房 IP 形态),跳过中继探针"); | CODE |
| CRITICAL⚡ | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 130 | cn.har01d.alist_tvbox.live.util.FlvSpliceSession session = new cn.har01d.alist_tvbox.live.util.FlvSpliceSession( | CODE |
| CRITICAL⚡ | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 131 | new cn.har01d.alist_tvbox.live.util.FlvSpliceSession.Lease(url, System.currentTimeMillis() + 60_000), | CODE |
| CRITICAL⚡ | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 132 | next -> new cn.har01d.alist_tvbox.live.util.HttpFlvTagReader(client, next, headers), | CODE |
| CRITICAL⚡ | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 138 | return new cn.har01d.alist_tvbox.live.util.FlvSpliceSession.Lease(renewed, | CODE |
| CRITICAL⚡ | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 139 | cn.har01d.alist_tvbox.live.util.FlvSpliceSession.refreshAtEpochMs(renewed, System.currentTim | CODE |
| CRITICAL⚡ | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 170 | org.junit.jupiter.api.Assertions.assertTrue(bytes.get() > 100_000, "应有持续流数据: " + bytes.get()); | CODE |
| CRITICAL⚡ | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 171 | org.junit.jupiter.api.Assertions.assertTrue(session.getSwitches() >= 1, "应至少完成一次关键帧换链"); | CODE |
| CRITICAL⚡ | …alist_tvbox/live/service/NewLivePlatformProbeTest.java | 176 | builder.messageConverters(new org.springframework.http.converter.json.MappingJackson2HttpMessageConverte | CODE |
| CRITICAL | …01d/alist_tvbox/db/MediaSubscriptionMigrationTest.java | 116 | org.junit.jupiter.api.Assertions.fail("validity 应已删除"); | CODE |
| CRITICAL | …01d/alist_tvbox/db/MediaSubscriptionMigrationTest.java | 217 | org.junit.jupiter.api.Assertions.fail("重复键应被唯一约束拦截"); | CODE |
| CRITICAL⚡ | …a/cn/har01d/alist_tvbox/db/MsubSchemaContractTest.java | 107 | ps.setString(2, cn.har01d.alist_tvbox.entity.MediaSubscriptionResource.hashOf(prefix + "sig-a")); | CODE |
| CRITICAL⚡ | …a/cn/har01d/alist_tvbox/db/MsubSchemaContractTest.java | 111 | String hashA = cn.har01d.alist_tvbox.entity.MediaSubscriptionResource.hashOf(prefix + "sig-a"); | CODE |
| CRITICAL⚡ | …a/cn/har01d/alist_tvbox/db/MsubSchemaContractTest.java | 119 | ps.setString(2, cn.har01d.alist_tvbox.entity.MediaSubscriptionResource.hashOf(prefix + "sig-b")); | CODE |
| CRITICAL | …a/cn/har01d/alist_tvbox/db/MsubSchemaContractTest.java | 140 | assertEquals(cn.har01d.alist_tvbox.entity.MediaSubscriptionResource.hashOf("https://pan.example/s/abc?pw | CODE |
| CRITICAL | …tvbox/service/MediaSubscriptionMagnetFallbackTest.java | 474 | when(resolver.resolve(anyString())).thenReturn(Optional.of(new cn.har01d.alist_tvbox.service.magnet.MagnetResolv | CODE |
| CRITICAL | …tvbox/service/MediaSubscriptionMagnetFallbackTest.java | 476 | List.of(new cn.har01d.alist_tvbox.service.magnet.MagnetResolver.MagnetFile("Show.S01E03.1080p.mkv", 5L * | CODE |
| CRITICAL | …tvbox/service/MediaSubscriptionMagnetFallbackTest.java | 488 | when(resolver.resolve(anyString())).thenReturn(Optional.of(new cn.har01d.alist_tvbox.service.magnet.MagnetResolv | CODE |
| CRITICAL | …tvbox/service/MediaSubscriptionMagnetFallbackTest.java | 490 | List.of(new cn.har01d.alist_tvbox.service.magnet.MagnetResolver.MagnetFile("Show.S01E03.1080p.mkv", 800L | CODE |
| 152 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/alist-tvbox.sh | 1444 | # ------------------------- | COMMENT |
| MEDIUM | scripts/alist-tvbox.sh | 1446 | # ------------------------- | COMMENT |
| MEDIUM | scripts/alist-tvbox.sh | 2988 | # ========================= | COMMENT |
| MEDIUM | scripts/alist-tvbox.sh | 2990 | # ========================= | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 98 | // ── 删除:LWW ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 122 | // ── 删除:回声限频 ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 188 | // ── 删除:作用域 ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 309 | // ── 拉取:游标 ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 496 | // ── 拉取:分源过滤 ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 597 | // ── 列宽 ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 849 | // ── 令牌 ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 861 | // ── 分区:不同订阅互不同步 ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 891 | // ── 分区:uid 全局墓碑须下达 scoped 客户端 ────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 947 | // ── csp_Media 集数回归保护 ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ar01d/alist_tvbox/service/PlaybackSyncServiceTest.java | 1089 | // ── helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …1d/alist_tvbox/entity/PlaybackTombstoneRepository.java | 29 | // ── 同步分区查询 ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …va/cn/har01d/alist_tvbox/entity/HistoryRepository.java | 37 | // ── 同步分区查询:syncScope 为空 = uid 级(返回全部);非空 = 仅该分区 ────────── | COMMENT |
| MEDIUM | …/cn/har01d/alist_tvbox/web/PlaybackSyncController.java | 38 | // ── PUSH(令牌鉴权) ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/cn/har01d/alist_tvbox/web/PlaybackSyncController.java | 52 | // ── PULL(令牌鉴权) ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/cn/har01d/alist_tvbox/web/PlaybackSyncController.java | 68 | // ── Fish/默影视 webhtv.playback.v1 兼容入口(与同步开关无关) ────────────── | COMMENT |
| MEDIUM | …/cn/har01d/alist_tvbox/web/PlaybackSyncController.java | 132 | // ── 令牌管理(session 鉴权,ADMIN|USER) ─────────────────────────────── | COMMENT |
| MEDIUM | …/cn/har01d/alist_tvbox/web/PlaybackSyncController.java | 150 | // ── helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …cn/har01d/alist_tvbox/service/PlaybackSyncService.java | 97 | // ── 令牌解析(双源:playback_token 表 ∪ session) ────────────────────────── | COMMENT |
| MEDIUM | …cn/har01d/alist_tvbox/service/PlaybackSyncService.java | 130 | // ── PUSH:upsert / delete ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …cn/har01d/alist_tvbox/service/PlaybackSyncService.java | 519 | // ── PULL:游标增量下发 ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …cn/har01d/alist_tvbox/service/PlaybackSyncService.java | 772 | // ── 令牌 CRUD(session 用户调用) ──────────────────────────────────────── | COMMENT |
| MEDIUM | …cn/har01d/alist_tvbox/service/PlaybackSyncService.java | 794 | // ── 墓碑清理 ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …cn/har01d/alist_tvbox/service/PlaybackSyncService.java | 804 | // ── helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …cn/har01d/alist_tvbox/service/PlaybackSyncService.java | 827 | // ── 网盘播放内容的规范标识 ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …cn/har01d/alist_tvbox/service/PlaybackSyncService.java | 1043 | // ── 分区查询封装 ───────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web-ui/src/utils/pluginDragSupport.d.ts | 6 | export function isPluginDragEnabledForUserAgent(userAgent?: string): boolean | CODE |
| LOW | …/plans/2026-06-11-subscription-config-visual-editor.md | 721 | function setOrDelete(config, key, value) { | CODE |
| LOW | …perpowers/plans/2026-07-19-raw-python-backend-parse.md | 142 | def test_raw_source_skips_secspider_decryption(self): | CODE |
| LOW | …perpowers/plans/2026-07-19-raw-python-backend-parse.md | 146 | def test_backend_parse_rewrites_category_and_uses_backend_parse_and_play(self): | CODE |
| LOW | scripts/tg.py | 189 | def should_put_in_active_folder(message_text, title): | STRING |
| LOW⚡ | src/test/python/test_Atvp_preheat.py | 42 | def test_load_source_prefers_preheat_cache(self): | CODE |
| LOW⚡ | src/test/python/test_Atvp_preheat.py | 49 | def test_load_source_falls_back_to_network_on_miss(self): | CODE |
| LOW⚡ | src/test/python/test_Atvp_preheat.py | 57 | def test_blank_cache_entry_is_ignored(self): | CODE |
| LOW⚡ | src/test/python/test_Atvp_preheat.py | 64 | def test_preheat_worker_downloads_manifest_into_cache(self): | CODE |
| LOW | src/test/python/test_Atvp_preheat.py | 78 | def test_preheat_worker_skips_cached_plugins(self): | CODE |
| LOW | src/test/python/test_Atvp_preheat.py | 92 | def test_preheat_daemon_starts_only_once(self): | CODE |
| LOW | src/test/python/test_Atvp_preheat.py | 109 | def test_preheat_daemon_ignores_payload_without_url(self): | CODE |
| LOW | src/test/python/test_Atvp_preheat.py | 120 | def test_cache_file_name_matches_java_contract(self): | CODE |
| LOW | src/test/python/test_Atvp_preheat.py | 127 | def test_cache_dir_unavailable_disables_cache(self): | CODE |
| LOW | src/test/python/test_Atvp_resume_fallback.py | 63 | def test_non_drive_resume_falls_back_to_inner_detail_with_line_reordered(self): | CODE |
| LOW | src/test/python/test_Atvp_resume_fallback.py | 75 | def test_stale_resume_coordinates_fall_back_to_inner_detail(self): | CODE |
| LOW | src/test/python/test_Atvp_resume_fallback.py | 85 | def test_drive_share_target_still_goes_through_parse(self): | CODE |
| LOW | src/test/python/test_Atvp_resume_fallback.py | 98 | def test_missing_detail_still_raises(self): | CODE |
| LOW | src/test/python/test_Atvp_raw_backend_parse.py | 51 | def test_raw_source_skips_secspider_decryption(self): | CODE |
| LOW | src/test/python/test_Atvp_raw_backend_parse.py | 66 | def test_source_without_raw_marker_still_uses_secspider_decryption(self): | CODE |
| LOW | src/test/python/test_Atvp_raw_backend_parse.py | 86 | def test_backend_parse_rewrites_category_and_uses_backend_parse_and_play(self): | CODE |
| LOW | src/test/python/test_Atvp_raw_backend_parse.py | 133 | def test_backend_parse_sends_cached_plugin_title(self): | STRING |
| LOW | src/test/python/test_Atvp_raw_backend_parse.py | 163 | def test_group_media_link_caches_plugin_title_for_backend_parse(self): | STRING |
| LOW | src/test/python/test_Atvp_raw_backend_parse.py | 187 | def test_backend_parse_sends_inherited_search_keyword(self): | STRING |
| LOW | src/test/python/test_Atvp_raw_backend_parse.py | 217 | def test_resume_id_reopens_original_vod_and_selected_drive(self): | STRING |
| LOW | src/test/python/test_Atvp_raw_backend_parse.py | 264 | def test_resume_id_with_direct_share_calls_backend_parse(self): | STRING |
| LOW | src/test/python/test_Atvp_link_check.py | 44 | def test_detail_filters_bad_play_and_group_links(self): | CODE |
| LOW | src/test/python/test_Atvp_link_check.py | 90 | def test_detail_keeps_links_when_check_fails(self): | CODE |
| LOW | src/test/python/test_Atvp_link_check.py | 98 | def test_detail_checks_many_links_in_one_request(self): | CODE |
| LOW | src/test/python/test_Atvp_link_check.py | 112 | def test_search_filters_bad_share_items_before_category_normalization(self): | CODE |
| LOW | src/test/python/test_Atvp_link_check.py | 139 | def test_category_detail_checks_group_links_before_building_folders(self): | CODE |
| LOW | src/main/resources/static/Atvp.py | 359 | def _resolve_preheat_cache_dir(self): | CODE |
| LOW | src/main/resources/static/Atvp.py | 531 | def _decrypt_secspider_source(self, package_text): | CODE |
| LOW | src/main/resources/static/Atvp.py | 971 | def _resolve_deferred_share_url(self, source_id, share_url): | CODE |
| LOW | src/main/resources/static/Atvp.py | 1130 | def _remember_resume_contexts(self, vod): | CODE |
| LOW | src/main/resources/static/Atvp.py | 1257 | def _remember_result_keywords(self, result, keyword): | CODE |
| LOW | src/main/resources/static/Atvp.py | 1403 | def _merge_cached_detail_result(self, share_url, parsed_result): | CODE |
| LOW | src/main/resources/static/Atvp.py | 1432 | def _resolve_local_proxy_base(self): | CODE |
| LOW | src/main/resources/static/Atvp.py | 1495 | def _load_category_detail_vod(self, source_id): | CODE |
| LOW | src/main/resources/static/Atvp.py | 1604 | def _normalize_category_content(self, result): | CODE |
| LOW | src/main/resources/static/Atvp.py | 1741 | def _normalize_player_content(self, result): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/bugfix-v2-migration.md | 24 | ### Step 1: 添加可空列 | COMMENT |
| LOW | docs/bugfix-v2-migration.md | 32 | ### Step 2: 迁移数据 | COMMENT |
| LOW | docs/bugfix-v2-migration.md | 45 | ### Step 3: 添加约束(针对必需字段) | COMMENT |
| LOW⚡ | docs/superpowers/plans/2026-06-11-e2e-test-results.md | 7 | #### Step 1: 启动应用 | COMMENT |
| LOW⚡ | docs/superpowers/plans/2026-06-11-e2e-test-results.md | 12 | #### Step 2: 测试获取全局配置(初始为空) | COMMENT |
| LOW⚡ | docs/superpowers/plans/2026-06-11-e2e-test-results.md | 18 | #### Step 3: 设置全局黑名单 | COMMENT |
| LOW⚡ | docs/superpowers/plans/2026-06-11-e2e-test-results.md | 26 | #### Step 4: 验证全局配置已保存 | COMMENT |
| LOW⚡ | docs/superpowers/plans/2026-06-11-e2e-test-results.md | 32 | #### Step 5: 测试订阅应用全局黑名单 | COMMENT |
| LOW⚡ | docs/superpowers/plans/2026-06-11-e2e-test-results.md | 38 | #### Step 6: 测试订阅白名单覆盖 | COMMENT |
| LOW⚡ | docs/superpowers/plans/2026-06-11-e2e-test-results.md | 45 | #### Step 7: 测试全局白名单优先于黑名单 | COMMENT |
| LOW⚡ | …/migration/current/V2__Normalize_reserved_columns.java | 32 | // Step 1: Add nullable column with default | COMMENT |
| LOW⚡ | …/migration/current/V2__Normalize_reserved_columns.java | 39 | // Step 2: Migrate data from old column if it exists | COMMENT |
| LOW⚡ | …/migration/current/V2__Normalize_reserved_columns.java | 49 | // Step 3: Add NOT NULL constraint after data is populated (if required) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tg.py | 184 | except Exception as e: | STRING |
| LOW | scripts/tg.py | 332 | except Exception as e: | STRING |
| LOW⚡ | scripts/tg.py | 519 | except Exception as e: | STRING |
| LOW⚡ | scripts/tg.py | 527 | except Exception as e: | STRING |
| LOW⚡ | scripts/tg.py | 534 | except Exception as e: | STRING |
| MEDIUM | src/main/resources/static/Atvp.py | 405 | def _preheat_worker(self, manifest): | CODE |
| MEDIUM | src/main/resources/static/Atvp.py | 702 | def _invoke_filter_callable(self, func, *args): | CODE |
| LOW | src/main/resources/static/Atvp.py | 156 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 262 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 296 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 367 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 387 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 433 | except Exception as error: | CODE |
| LOW | src/main/resources/static/Atvp.py | 436 | except Exception as error: | CODE |
| LOW | src/main/resources/static/Atvp.py | 590 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 768 | except Exception as e: | CODE |
| LOW | src/main/resources/static/Atvp.py | 788 | except Exception as e: | CODE |
| LOW | src/main/resources/static/Atvp.py | 806 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 842 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 854 | except Exception as exc: | CODE |
| LOW | src/main/resources/static/Atvp.py | 983 | except Exception as exc: | CODE |
| LOW | src/main/resources/static/Atvp.py | 990 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 1445 | except Exception: | CODE |
| LOW | src/main/resources/static/Atvp.py | 1472 | except Exception as e: | CODE |
| LOW | src/main/resources/static/Atvp.py | 1839 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web-ui/src/views/VodView.vue | 1561 | } else if (event.code === 'ArrowLeft') { | COMMENT |
| LOW | web-ui/src/views/VodView.vue | 1581 | // if (event.ctrlKey || event.metaKey) { | COMMENT |
| LOW | docs/cat-spider-example.js | 1 | // ============================================================================ | COMMENT |
| LOW | docs/cat-spider-example.js | 21 | // 4. App 端刷新配置后生效 | COMMENT |
| LOW | scripts/MIGRATION_FIX.md | 61 | ### 测试1:容器使用旧路径 | COMMENT |
| LOW | scripts/MIGRATION_FIX.md | 81 | # - /etc/xiaoya/ 有数据 | COMMENT |
| LOW | scripts/xs-version-sync.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …/cn/har01d/alist_tvbox/service/FileDownloaderTest.java | 41 | // void setUp() { | COMMENT |
| LOW | …/cn/har01d/alist_tvbox/service/FileDownloaderTest.java | 61 | // void zxVersionFallsBackToDirectGitHubWhenProxyDoesNotReturnVersion() { | COMMENT |
| LOW | src/main/resources/static/tmdb_proxy_worker.js | 41 | COMMENT | |
| LOW | …java/cn/har01d/alist_tvbox/service/AccountService.java | 961 | // log.debug("body: {}", body); | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …/migration/current/V2__Normalize_reserved_columns.java | 32 | // Step 1: Add nullable column with default | COMMENT |
| LOW⚡ | …/migration/current/V2__Normalize_reserved_columns.java | 39 | // Step 2: Migrate data from old column if it exists | COMMENT |
| LOW⚡ | …/migration/current/V2__Normalize_reserved_columns.java | 49 | // Step 3: Add NOT NULL constraint after data is populated (if required) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/plugin_config_schema.md | 18 | {"key": "sites", "label": "站点", "type": "string", "required": true, "aliases": ["site", "host"], "placeholder": "htt | CODE |
| LOW | docs/plugin_config_schema.md | 21 | {"key": "cookie", "label": "Cookie", "type": "secret", "placeholder": "可代替账号密码"} | CODE |
| LOW | …cn/har01d/alist_tvbox/util/ConfigSchemaParserTest.java | 22 | {"key": "cookie", "label": "Cookie", "type": "secret", "placeholder": "可代替账号密码", "defaultValue": ""} | CODE |
| LOW | …/har01d/alist_tvbox/service/sync/RemoteClientTest.java | 147 | String username = "user@example.com"; | CODE |
| LOW | …/service/offline/Pan123OfflineDownloadHandlerTest.java | 65 | account.setUsername("user@example.com"); | CODE |
| LOW | …ava/cn/har01d/alist_tvbox/util/ConfigSchemaParser.java | 111 | field.setPlaceholder(extractJsonString(fieldJson, "placeholder")); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tg.py | 227 | CODE | |
| LOW | scripts/tg.py | 392 | CODE | |
| LOW | src/main/resources/static/Atvp.py | 405 | CODE | |
| LOW | src/main/resources/static/Atvp.py | 858 | CODE | |
| LOW | src/main/resources/static/Atvp.py | 930 | CODE | |
| LOW | src/main/resources/static/Atvp.py | 1078 | CODE | |
| LOW | src/main/resources/static/Atvp.py | 1295 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tg.py | 26 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/main/resources/static/tmdb_proxy_worker.js | 92 | async function handleRequest(request, env, ctx) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/main/resources/static/Atvp.py | 119 | CODE |