集找番、追番、看番的一站式弹幕追番平台,云收藏同步 (Bangumi),离线缓存,BitTorrent,弹幕云过滤。100% Kotlin/Compose Multiplatform
This report summarizes scanner evidence for open-ani/animeko, a Kotlin project with 21,362 GitHub stars. SynthScan examined 670,781 lines of code across 3268 source files, recording 290 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.2 (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? 189 finding(s).
Are imports declared and package/API names verified? 72 finding(s).
Are wrappers, guards, and repeated structures necessary? 57 finding(s).
Which changes need focused human review? 290 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 290 distinct pattern matches across 13 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 | …ain/kotlin/data/persistent/database/ProtoConverters.kt | 130 | return me.him188.ani.danmaku.api.DanmakuServiceId(value) | CODE |
| CRITICAL | …onMain/kotlin/data/network/AniEpisodeCommentService.kt | 230 | private fun me.him188.ani.client.models.AniEpisodeCommentReaction.toEpisodeCommentReaction(): EpisodeCommentReaction { | CODE |
| CRITICAL | …onMain/kotlin/data/network/danmaku/AniDanmakuSender.kt | 55 | me.him188.ani.client.models.AniDanmakuPostRequest( | CODE |
| CRITICAL | …n/kotlin/domain/episode/EpisodeFetchSelectPlayState.kt | 214 | _episodeSessionFlow.value.sessionScope.coroutineContext.job.cancelAndJoin() | CODE |
| CRITICAL | …Main/kotlin/domain/mediasource/test/rss/RssItemInfo.kt | 65 | isMatch = me.him188.ani.app.domain.mediasource.MediaListFilters.ContainsAnyEpisodeInfo.apply | CODE |
| CRITICAL | …Main/kotlin/domain/mediasource/test/rss/RssItemInfo.kt | 80 | isMatch = me.him188.ani.app.domain.mediasource.MediaListFilters.ContainsSubjectName.applyOn( | CODE |
| CRITICAL | …n/kotlin/domain/media/selector/MediaSelectorContext.kt | 92 | val flow = me.him188.ani.utils.coroutines.flows.combine( | CODE |
| CRITICAL | …onTest/kotlin/domain/episode/EpisodePlayerTestSuite.kt | 51 | val mediaSelectorTestBuilder = me.him188.ani.app.domain.media.selector.legacy.MediaSelectorTestBuilder(testScope) | CODE |
| CRITICAL | …in/media/selector/MediaSelectorProductionWiringTest.kt | 131 | val builder = me.him188.ani.app.domain.media.selector.legacy.MediaSelectorTestBuilder(this) | CODE |
| CRITICAL | …main/media/fetch/MediaSourceManagerFetchSessionTest.kt | 123 | episodeSort = me.him188.ani.datasources.api.EpisodeSort(1), | CODE |
| CRITICAL | …i/settings/account/ProfileGroupExternalAccountsTest.kt | 54 | private fun me.him188.ani.app.ui.framework.AniComposeUiTest.render(state: AccountSettingsState, callbacks: Callbacks | CODE |
| CRITICAL | …in/ui/settings/tabs/media/MediaSelectorWorkflowDemo.kt | 86 | resolveBudgetSeconds = viewModel.config.resolve.budget.inWholeSeconds.toInt() | CODE |
| CRITICAL | …opTest/kotlin/ui/comment/CommentItemInteractionTest.kt | 34 | private fun androidx.compose.ui.test.ComposeUiTest.setItem( | CODE |
| CRITICAL | …/ui/foundation/layout/CarouselAutoAdvanceEffectTest.kt | 50 | // at androidx.compose.ui.test.RobolectricIdlingStrategy_androidKt.getHasRobolectricFingerprint(RobolectricIdlingStr | COMMENT |
| CRITICAL | …/ui/foundation/layout/CarouselAutoAdvanceEffectTest.kt | 55 | // at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34) | COMMENT |
| CRITICAL | …kotlin/ui/foundation/imageviewer/ImageViewerContent.kt | 307 | private fun com.github.panpf.zoomimage.compose.ZoomState.currentScalePercent(): Int { | CODE |
| CRITICAL | …/kotlin/ui/mediaselect/summary/MediaSelectorSummary.kt | 309 | me.him188.ani.app.ui.mediaselect.common.SourceIcon( | CODE |
| CRITICAL | …n/ui/mediaselect/summary/MediaSelectorSummaryBanner.kt | 168 | me.him188.ani.app.ui.mediaselect.common.SourceIcon( | CODE |
| CRITICAL | …st/kotlin/ui/subject/person/PersonCommentsSheetTest.kt | 70 | private fun androidx.compose.ui.test.ComposeUiTest.setSheet(comments: List<UIComment>): () -> PeopleCommentsState { | CODE |
| CRITICAL | …tion/src/commonMain/kotlin/platform/AppStartupTasks.kt | 25 | me.him188.ani.app.platform.initializeSentry(userId = userId) | CODE |
| CRITICAL | …mmonMain/kotlin/ui/subject/episode/EpisodeViewModel.kt | 1104 | return me.him188.ani.utils.coroutines.flows.combine( | CODE |
| CRITICAL | …ktopMain/kotlin/tools/update/DesktopUpdateInstaller.kt | 55 | return when (me.him188.ani.utils.platform.currentPlatformDesktop()) { | CODE |
| CRITICAL | …p/shared/src/desktopMain/kotlin/desktop/ScreenUtils.kt | 26 | return when (me.him188.ani.utils.platform.currentPlatformDesktop()) { | CODE |
| CRITICAL | …/desktop-ui-verify/scripts/input-agent/InputAgent.java | 253 | return java.awt.datatransfer.DataFlavor.javaFileListFlavor.equals(flavor); | CODE |
| CRITICAL⚡ | …/desktop-ui-verify/scripts/input-agent/InputAgent.java | 286 | Module awt = java.awt.dnd.DropTargetContext.class.getModule(); | CODE |
| CRITICAL⚡ | …/desktop-ui-verify/scripts/input-agent/InputAgent.java | 291 | java.lang.reflect.Field peerField = java.awt.dnd.DropTargetContext.class.getDeclaredField("dropTargetContextPeer | CODE |
| CRITICAL⚡ | …/desktop-ui-verify/scripts/input-agent/InputAgent.java | 294 | java.lang.reflect.Field cache = java.awt.dnd.DropTargetContext.class.getDeclaredField("transferable"); | CODE |
| CRITICAL | utils/jsonpath/src/commonMain/kotlin/JsonPath.kt | 37 | fun com.nfeld.jsonpathkt.JsonPath.Companion.compileOrNull( | CODE |
| CRITICAL⚡ | …src/desktopMain/kotlin/ScreenshotAssertions.desktop.kt | 15 | at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:38) | CODE |
| CRITICAL⚡ | …src/desktopMain/kotlin/ScreenshotAssertions.desktop.kt | 16 | at org.junit.jupiter.api.Assertions.fail(Assertions.java:138) | CODE |
| CRITICAL⚡ | …src/desktopMain/kotlin/ScreenshotAssertions.desktop.kt | 20 | at me.him188.ani.app.ui.ScreenshotAssertionsKt.assertScreenshot(ScreenshotAssertions.kt:40) | CODE |
| CRITICAL⚡ | …src/desktopMain/kotlin/ScreenshotAssertions.desktop.kt | 23 | at androidx.compose.ui.test.SkikoComposeUiTest.withScene(ComposeUiTest.skikoMain.kt:196) | CODE |
| CRITICAL⚡ | …src/desktopMain/kotlin/ScreenshotAssertions.desktop.kt | 26 | at androidx.compose.ui.test.ComposeRootRegistry.withRegistry(ComposeRootRegistry.skiko.kt:83) | CODE |
| CRITICAL⚡ | …src/desktopMain/kotlin/ScreenshotAssertions.desktop.kt | 27 | at androidx.compose.ui.test.SkikoComposeUiTest.runTest(ComposeUiTest.skikoMain.kt:186) | CODE |
| CRITICAL | …en/me/him188/ani/client/infrastructure/HttpResponse.kt | 48 | inline fun <reified T : Any> io.ktor.client.statement.HttpResponse.wrap(): HttpResponse<T> = | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 1 | ///* | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 21 | //import kotlinx.serialization.json.Json | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 41 | // var tags: List<String> = listOf(), | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 61 | // val session = client.startSearchSession( | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 81 | // frameRate = frameRate, | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 101 | //} | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 121 | // val name: String, | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 141 | // val index = input.indexOf(it.toString()) | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 161 | // add(Classification(c, Kind.Begin(name))) | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 181 | // buffer.clear() | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 201 | // Kind.Zero -> { | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 221 | //// var state: State = State.None | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 241 | //// Kind.Zero -> { | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 261 | //// append(classification.char) | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 281 | //// state = State.MergingWord(classification.kind.name) | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 301 | //// } | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 321 | //// | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 341 | // } | COMMENT |
| LOW | datasource/bt/dmhy/dataset-tools/src/DumpDataset.kt | 361 | // File("output").walk().toList().reversed().forEach { file -> | COMMENT |
| LOW | …onMain/kotlin/topic/titles/LabelFirstRawTitleParser.kt | 301 | // return@let | COMMENT |
| LOW | …onMain/kotlin/topic/titles/LabelFirstRawTitleParser.kt | 321 | // | COMMENT |
| LOW | …onMain/kotlin/topic/titles/LabelFirstRawTitleParser.kt | 421 | // 性能没问题, 测了一般就 100 steps | COMMENT |
| LOW | …Main/kotlin/topic/titles/PatternBasedRawTitleParser.kt | 161 | // [喵萌奶茶屋&LoliHouse] 继母的拖油瓶是我的前女友 / Mamahaha no Tsurego ga Motokano datta - 04 [WebRip 1080p HEVC-10bit AAC][简繁内 | COMMENT |
| LOW | …Main/kotlin/topic/titles/PatternBasedRawTitleParser.kt | 181 | // A 类动画 `-` 分割 | COMMENT |
| LOW | …Main/kotlin/topic/titles/PatternBasedRawTitleParser.kt | 201 | COMMENT | |
| LOW | …Main/kotlin/topic/titles/PatternBasedRawTitleParser.kt | 221 | // 肥猫压制 [肥猫压制][FatCatRAW][影星侠][21-28][1080P][HDTVRIP] | COMMENT |
| LOW | …Main/kotlin/topic/titles/PatternBasedRawTitleParser.kt | 241 | // 冷番补完字幕组 [冷番补完字幕组][魔幻美少女 / 奇迹女孩][Miracle Girls][1993][HDTV][01-51 Fin][1080p][x265][内封简繁中字] 約2條評論 | COMMENT |
| LOW | …Main/kotlin/topic/titles/PatternBasedRawTitleParser.kt | 261 | // 星空字幕组 [星空字幕組][異世界藥局 / Isekai Yakkyoku][04][繁日雙語][1080P][WEBrip][MP4](急招校對、後期) | COMMENT |
| LOW | …Main/kotlin/topic/titles/PatternBasedRawTitleParser.kt | 281 | // 极影字幕社 【极影字幕社】 ★4月新番 【间谍过家家】【SPY×FAMILY】【10】GB MP4_720P | COMMENT |
| LOW | tools/ani-update/src/main.rs | 1 | // Copyright (C) 2024-2026 OpenAni and contributors. | COMMENT |
| LOW | app/desktop/src/main/kotlin/AniDesktop.kt | 361 | // AniBuildConfigDesktop.fireabseApplicationId | COMMENT |
| LOW | app/desktop/src/main/kotlin/SingleInstanceChcker.kt | 101 | user32.SetForegroundWindow(hWnd) | COMMENT |
| LOW | app/desktop/src/main/kotlin/SingleInstanceChcker.kt | 121 | // } | COMMENT |
| LOW | app/desktop/src/main/kotlin/SingleInstanceChcker.kt | 141 | // logger.error(e) { "Failed to check single instance, ignoring and continuing" } | COMMENT |
| LOW | app/desktop/test-scripts/windows-auto-update.sh | 1 | # | COMMENT |
| LOW | …app-data/src/iosMain/kotlin/tools/ServiceLoader.ios.kt | 21 | // return RegistryServiceLoader().apply { | COMMENT |
| LOW | …app-data/src/iosMain/kotlin/tools/ServiceLoader.ios.kt | 41 | // } | COMMENT |
| LOW | …app-data/src/iosMain/kotlin/tools/ServiceLoader.ios.kt | 61 | // .filter { it.kClass == service } | COMMENT |
| LOW | …a/repository/subject/SubjectSearchHistoryRepository.kt | 41 | return Pager( | COMMENT |
| LOW | …a/repository/subject/SubjectSearchHistoryRepository.kt | 61 | // searchTag.increaseCountByName(content) | COMMENT |
| LOW | …n/data/persistent/database/dao/EpisodeCollectionDao.kt | 261 | // entity = SubjectEntity::class, | COMMENT |
| LOW | …onMain/kotlin/data/models/subject/SubjectAiringInfo.kt | 61 | firstSort = null, | COMMENT |
| LOW | …onMain/kotlin/data/models/subject/SubjectAiringInfo.kt | 81 | // check(firstEpisode != null && lastEpisode != null) { | COMMENT |
| LOW | …/src/commonMain/kotlin/domain/episode/PlayerSession.kt | 301 | // private val bundleFlow: Flow<SubjectEpisodeInfoBundle>, | COMMENT |
| LOW | …/src/commonMain/kotlin/domain/episode/PlayerSession.kt | 321 | // } // the above won't throw. | COMMENT |
| LOW | …/src/commonMain/kotlin/domain/episode/PlayerSession.kt | 341 | // | COMMENT |
| LOW | …/src/commonMain/kotlin/domain/episode/PlayerSession.kt | 361 | // private val flowContext: CoroutineContext = Dispatchers.Default, | COMMENT |
| LOW | …/src/commonMain/kotlin/domain/episode/PlayerSession.kt | 381 | // override suspend fun switchEpisode( | COMMENT |
| LOW | …/commonMain/kotlin/domain/danmaku/DanmakuRepository.kt | 261 | private companion object { | COMMENT |
| LOW | …/commonMain/kotlin/domain/danmaku/DanmakuRepository.kt | 281 | // withContext(defaultDispatcher) { | COMMENT |
| LOW | …/commonMain/kotlin/domain/danmaku/DanmakuRepository.kt | 301 | // _episodeState.value = EpisodeState.Fetching | COMMENT |
| LOW | …/commonMain/kotlin/domain/danmaku/DanmakuRepository.kt | 321 | // data class Fetching( | COMMENT |
| LOW | …/commonMain/kotlin/domain/danmaku/DanmakuRepository.kt | 341 | // ) : EpisodeState() | COMMENT |
| LOW | …/commonMain/kotlin/domain/danmaku/DanmakuRepository.kt | 361 | //class InteractiveDanmakuMatchSessionPresenter( | COMMENT |
| LOW | …/commonMain/kotlin/domain/danmaku/DanmakuRepository.kt | 381 | // val episodes = (episodeState as? InteractiveDanmakuMatchSession.EpisodeState.Success)?.episodes ?: emptyList() | COMMENT |
| LOW | …mmonMain/kotlin/domain/mediasource/MediaListFilters.kt | 41 | fun fuzzyMatches() = StringMatcher.calculateMatchRate(originalTitle, subjectName) >= 80 | COMMENT |
| LOW | …domain/mediasource/web/format/SelectorChannelFormat.kt | 201 | // 注释掉的是 flatten 实现, 名字包含 channel (但没有测试过) | COMMENT |
| LOW | …domain/mediasource/web/format/SelectorChannelFormat.kt | 221 | // val href = a.attr("title").takeIf { it.isNotBlank() } ?: a.attr("href") | COMMENT |
| LOW | …/kotlin/domain/media/selector/MediaSelectionDecider.kt | 81 | // For rules discussion, see #174 | COMMENT |
| LOW | …otlin/domain/media/fetch/MediaSourceResultsFilterer.kt | 41 | // | COMMENT |
| 85 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ta/repository/subject/DefaultBangumiMergeRepository.kt | 105 | // ─── 服务端实体 → 客户端模型 ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …epository/subject/DefaultBangumiMergeRepositoryTest.kt | 69 | // ─── 测试基础设施 ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …epository/subject/DefaultBangumiMergeRepositoryTest.kt | 220 | // ─── summary ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …epository/subject/DefaultBangumiMergeRepositoryTest.kt | 257 | // ─── getMergeState 映射 ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …epository/subject/DefaultBangumiMergeRepositoryTest.kt | 520 | // ─── resolve ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/src/commonMain/kotlin/ui/update/UpdateNotifierHost.kt | 224 | // ───────────────────────── Desktop implementation ──────────────────────────── | COMMENT |
| MEDIUM | …/src/commonMain/kotlin/ui/update/UpdateNotifierHost.kt | 247 | // ───────────────────────── Mobile implementation ───────────────────────────── | COMMENT |
| MEDIUM | …/kotlin/ui/bangumi/merge/BangumiMergeScreenshotTest.kt | 146 | // ─── 其他状态 (412dp) ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/kotlin/ui/bangumi/merge/BangumiMergeScreenshotTest.kt | 229 | // ─── 深色主题 ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/kotlin/ui/bangumi/merge/BangumiMergeScreenshotTest.kt | 251 | // ─── 桌面 1280dp: 表格封顶 1080dp 居中 ─────────────────────────────── | COMMENT |
| MEDIUM | …/kotlin/ui/bangumi/merge/BangumiMergeScreenshotTest.kt | 256 | // ─── 主界面的冲突提示条 ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/install-android-sdk.sh | 9 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-android-sdk.sh | 14 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-android-sdk.sh | 22 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-android-sdk.sh | 32 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 88 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 372 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 375 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 437 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 439 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 590 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 592 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 897 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 904 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 1231 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/codex-agent.yml | 1237 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …mmonMain/kotlin/ui/notification/AnnouncementsScreen.kt | 310 | is LoadState.Loading -> item(key = "append-loading", contentType = "placeholder") { | CODE |
| LOW | …mmonMain/kotlin/ui/notification/AnnouncementsScreen.kt | 319 | items(6, key = { "placeholder-$it" }, contentType = { "placeholder" }) { | CODE |
| LOW | …ain/kotlin/ui/notification/NotificationCenterScreen.kt | 756 | is LoadState.Loading -> item(key = "append-loading", contentType = "placeholder") { | CODE |
| LOW | …ain/kotlin/ui/notification/NotificationCenterScreen.kt | 765 | items(6, key = { "placeholder-$it" }, contentType = { "placeholder" }) { | CODE |
| LOW | …tlin/ui/settings/framework/components/TextFieldItem.kt | 266 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" + | CODE |
| LOW | …tlin/ui/settings/framework/components/TextFieldItem.kt | 266 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" + | CODE |
| LOW | …nt/src/commonMain/kotlin/ui/comment/CommentTestData.kt | 54 | "${(0..1000).random()}Lorem ipsum dolor sit amet, consectetur adipiscing elit. " + | CODE |
| LOW | …nt/src/commonMain/kotlin/ui/comment/CommentTestData.kt | 54 | "${(0..1000).random()}Lorem ipsum dolor sit amet, consectetur adipiscing elit. " + | CODE |
| LOW | …tion/src/commonMain/kotlin/ui/foundation/AsyncImage.kt | 188 | val placeholderStateImage = rememberStateImage(placeholder, "placeholder") | CODE |
| LOW | …/kotlin/ui/mediaselect/summary/MediaSelectorSummary.kt | 588 | get() = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industr | CODE |
| LOW | …party/placeholder/src/commonMain/kotlin/Placeholder.kt | 113 | name = "placeholder" | CODE |
| LOW | …ommonMain/kotlin/ui/exploration/search/SearchFilter.kt | 154 | "placeholder", | CODE |
| LOW⚡ | …nMain/kotlin/ui/subject/episode/EpisodePresentation.kt | 59 | title = "placeholder", | CODE |
| LOW⚡ | …nMain/kotlin/ui/subject/episode/EpisodePresentation.kt | 60 | ep = "placeholder", | CODE |
| LOW⚡ | …nMain/kotlin/ui/subject/episode/EpisodePresentation.kt | 61 | sort = "placeholder", | CODE |
| LOW | …nMain/kotlin/ui/subject/episode/SubjectPresentation.kt | 28 | title = "placeholder", | CODE |
| LOW⚡ | …ct/episode/video/sidesheet/EpisodeSelectorSideSheet.kt | 213 | title = "placeholder", | CODE |
| LOW⚡ | …ct/episode/video/sidesheet/EpisodeSelectorSideSheet.kt | 214 | ep = "placeholder", | CODE |
| LOW⚡ | …ct/episode/video/sidesheet/EpisodeSelectorSideSheet.kt | 222 | title = "placeholder", | CODE |
| LOW⚡ | …ct/episode/video/sidesheet/EpisodeSelectorSideSheet.kt | 223 | ep = "placeholder", | CODE |
| LOW⚡ | …ct/episode/video/sidesheet/EpisodeSelectorSideSheet.kt | 231 | title = "placeholder", | CODE |
| LOW⚡ | …ct/episode/video/sidesheet/EpisodeSelectorSideSheet.kt | 232 | ep = "placeholder", | CODE |
| LOW | …88/ani/torrent/pikpak/PikPakSessionStoreAdapterTest.kt | 28 | val account = "user@example.com" | CODE |
| LOW | …88/ani/torrent/pikpak/PikPakSessionStoreAdapterTest.kt | 61 | store.save("user@example.com", Session("access", "refresh", "subject", 9999)) | CODE |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 38 | "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's stan | CODE |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 55 | assertEquals("Lorem Ipsum.", this) | CODE |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 70 | assertEquals("Lorem Ipsum.", this.decodeToString()) | CODE |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 87 | // assertEquals("Lorem Ipsum.", this.decodeToString()) | COMMENT |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 137 | assertEquals("Lorem Ipsum is s", this.decodeToString()) | CODE |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 152 | // assertEquals("Lorem Ipsum is s", this.decodeToString()) | COMMENT |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 244 | assertEquals("Lorem Ipsum is simply dummy text", this.decodeToString()) | CODE |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 341 | assertEquals("Lorem Ipsum is simpl", input.readExactBytes(20).decodeToString()) | CODE |
| LOW | …rrent/api/src/commonTest/kotlin/io/TorrentInputTest.kt | 362 | assertEquals("Lorem Ipsum is simpl", input.readExactBytes(20).decodeToString()) | CODE |
| LOW | …api/src/commonTest/kotlin/io/OffsetTorrentInputTest.kt | 156 | assertEquals("Lorem Ipsum is simply du", this.decodeToString()) | CODE |
| LOW | …api/src/commonTest/kotlin/io/OffsetTorrentInputTest.kt | 271 | assertEquals("Lorem Ipsum is simpl", input.readExactBytes(20).decodeToString()) | CODE |
| LOW | …api/src/commonTest/kotlin/io/OffsetTorrentInputTest.kt | 292 | assertEquals("Lorem Ipsum is simpl", input.readExactBytes(20).decodeToString()) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …8/ani/tools/datasourcetestmcp/mcp/McpRequestHandler.kt | 46 | class McpRequestHandler( | CODE |
| LOW | …in/domain/mediasource/web/captcha/CefCaptchaBrowser.kt | 208 | private class CaptchaResourceRequestHandler( | CODE |
| LOW | …-platform/src/desktopMain/kotlin/platform/AniCefApp.kt | 96 | private class AniCefRequestHandler( | CODE |
| LOW | .github/workflows/download_jbr.py | 18 | def download_with_no_cert_check(url: str, destination: str): | CODE |
| LOW | .github/workflows/test_qa_review.py | 126 | def test_review_request_is_wired_to_an_authorized_qa_job(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 142 | def test_prompt_carries_the_marker_and_review_command(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 152 | def test_prompt_verdict_does_not_block_approval_on_untestable_scenarios(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 161 | def test_prompt_for_write_author_uses_latest_head(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 168 | def test_prompt_without_test_account_says_login_is_impossible(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 176 | def test_prompt_carries_the_production_database_hint_but_not_the_secret(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 186 | def test_prompt_carries_the_test_account(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 195 | def test_half_configured_test_account_counts_as_none(self): | CODE |
| LOW | .github/workflows/test_qa_review.py | 228 | def test_other_agent_jobs_carry_the_test_account(self): | CODE |
| LOW | .github/workflows/test_qa_review.py | 247 | def test_other_agent_jobs_receive_the_test_account_env(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 261 | def test_submitted_review_with_marker_passes_without_comment(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 265 | def test_bot_login_matches_case_insensitively(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 269 | def test_marker_on_a_later_page_is_found(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 273 | def test_missing_review_posts_failure_comment_and_fails(self): | CODE |
| LOW⚡ | .github/workflows/test_qa_review.py | 283 | def test_reviews_that_do_not_prove_this_run_do_not_count(self): | CODE |
| LOW | .github/workflows/test_issue_classification.py | 154 | def test_taxonomy_and_schema_exclude_legacy_labels(self): | CODE |
| LOW | .github/workflows/test_issue_classification.py | 163 | def test_each_priority_uses_discovered_field_id_and_preserves_other_fields(self): | CODE |
| LOW | .github/workflows/test_issue_classification.py | 176 | def test_priority_set_during_classification_is_preserved(self): | CODE |
| LOW | .github/workflows/test_issue_classification.py | 188 | def test_rerun_preserves_priority(self): | CODE |
| LOW | .github/workflows/test_issue_classification.py | 195 | def test_invalid_priority_causes_no_writes(self): | CODE |
| LOW⚡ | .github/workflows/test_issue_classification.py | 206 | def test_forbidden_labels_cause_no_writes_even_if_in_allowlist(self): | CODE |
| LOW⚡ | .github/workflows/test_issue_classification.py | 214 | def test_missing_or_invalid_field_fails_before_classification(self): | CODE |
| LOW⚡ | .github/workflows/test_issue_classification.py | 223 | def test_field_permission_failure_is_not_silently_ignored(self): | CODE |
| LOW⚡ | .github/workflows/test_issue_classification.py | 229 | def test_failed_or_unconfirmed_write_fails_the_step(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …-data/src/commonMain/kotlin/data/models/subject/Tag.kt | 46 | // Generated by GPT-4o | COMMENT |
| HIGH | …ls/platform/src/commonMain/kotlin/collections/Tuple.kt | 24 | // Below are generated by AI. | COMMENT |
| HIGH | …anplay/src/commonMain/kotlin/data/DandanplayBangumi.kt | 6 | * Generated by ChatGPT from https://api.dandanplay.net/swagger/ui/index#!/Bangumi/Bangumi_GetBangumiDetails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .github/workflows/download_jbr.py | 97 | except OSError: | CODE |
| HIGH | .github/workflows/download_jbr.py | 90 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …gs/src/commonMain/kotlin/ui/settings/SettingsScreen.kt | 626 | // 顶栏覆盖在内容上, 这里代替 scaffold 消耗顶栏的 insets. | COMMENT |
| MEDIUM | …monMain/kotlin/ui/download/DownloadManagementScreen.kt | 403 | // 单栏 (手机) 下 scaffold 会以前进导航方式全屏展示详情栏, 并支持返回. | COMMENT |
| MEDIUM | …monMain/kotlin/ui/download/DownloadManagementScreen.kt | 455 | // 注意: 必须在 AniListDetailPaneScaffold 之后注册, 才能优先于 scaffold 的返回 (详情->列表) 处理. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/commonMain/kotlin/ui/foundation/HasBackgroundScope.kt | 59 | * ## Creating a background scope | COMMENT |
| MEDIUM | .github/workflows/download_jbr.py | 22 | # Create an unverified SSL context | COMMENT |
| MEDIUM | ci-helper/verify/run-ani-test-macos-aarch64.sh | 54 | # Create a folder to unzip into | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …mTest/kotlin/tools/update/DefaultFileDownloaderTest.kt | 277 | // In this implementation, if no fallback is found, it ends in "Failed" and returns false. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/tv-remote/tv-remote.py | 327 | CODE | |
| LOW | tools/tv-remote/tv-remote.py | 199 | CODE | |
| LOW | …c/desktopTest/resources/media-selector-traces/clean.py | 16 | CODE | |
| LOW | …c/desktopTest/resources/media-selector-traces/clean.py | 97 | CODE | |
| LOW | .github/workflows/test_issue_classification.py | 30 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/skills/desktop-ui-verify/scripts/find_window_id.swift | 3 | // swift find_window_id.swift --pid <pid> (matches kCGWindowOwnerPID; most robust) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/tv-remote/tv-remote.py | 20 | CODE |