原生、纯净、可扩展 —— 重新定义你的 B 站体验
This report summarizes scanner evidence for jay3-yy/BiliPai, a Kotlin project with 5,052 GitHub stars. SynthScan examined 852,234 lines of code across 4617 source files, recording 3253 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 36.9 (High 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? 66 finding(s).
Are imports declared and package/API names verified? 3150 finding(s).
Are wrappers, guards, and repeated structures necessary? 65 finding(s).
Which changes need focused human review? 3253 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 3253 distinct pattern matches across 14 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 | …libili/core/ui/MiuixContentTabWidthUiRegressionTest.kt | 53 | val colors = top.yukonga.miuix.kmp.theme.lightColorScheme().copy( | CODE |
| CRITICAL | …id/purebilibili/core/theme/ThemeColorTransitionTest.kt | 134 | val overrides = com.android.purebilibili.core.store.WallpaperPaletteOverrides(edited, edited) | CODE |
| CRITICAL | …id/purebilibili/core/theme/ThemeColorTransitionTest.kt | 153 | val accent = com.android.purebilibili.core.ui.AppContentColors.accent() | CODE |
| CRITICAL | …om/Android/purebilibili/feature/home/HomeScreenTest.kt | 32 | com.android.purebilibili.feature.home.components.CategoryTabRow( | CODE |
| CRITICAL | …om/Android/purebilibili/feature/home/HomeScreenTest.kt | 51 | com.android.purebilibili.feature.home.components.CategoryTabRow( | CODE |
| CRITICAL | …om/Android/purebilibili/feature/home/HomeScreenTest.kt | 72 | com.android.purebilibili.feature.home.components.CategoryTabRow( | CODE |
| CRITICAL | …om/Android/purebilibili/feature/home/HomeScreenTest.kt | 100 | com.android.purebilibili.feature.home.components.FrostedBottomBar( | CODE |
| CRITICAL | …bili/feature/video/BottomControlBarUiRegressionTest.kt | 42 | val shot = com.android.purebilibili.data.model.response.VideoshotData( | CODE |
| CRITICAL | …re/video/VideoDetailWholeCardReturnUiRegressionTest.kt | 234 | val weight = com.android.purebilibili.feature.video.screen.resolveVideoDetailWholeCardReturnAlpha( | CODE |
| CRITICAL | …/feature/video/PlayerViewportResizeUiRegressionTest.kt | 227 | androidx.test.platform.app.InstrumentationRegistry.getInstrumentation().targetContext, | CODE |
| CRITICAL | …ibili/feature/video/DanmakuComposerUiRegressionTest.kt | 152 | com.android.purebilibili.feature.video.ui.components.glass.LandscapeDanmakuComposer( | CODE |
| CRITICAL | …ebilibili/navigation3/BiliPaiReturnSessionStateTest.kt | 59 | val recordedRoute = com.android.purebilibili.feature.video.ui.components.resolveRelatedVideoCardHostRoute( | CODE |
| CRITICAL | …ebilibili/navigation3/BiliPaiReturnSessionStateTest.kt | 103 | com.android.purebilibili.core.util.VideoCardPixelOwner(sourceKey, it) | CODE |
| CRITICAL | …ion3/predictiveback/MiuixVideoCardNavTransitionTest.kt | 53 | val body = com.android.purebilibili.core.ui.transition.resolveVideoCardSecondaryContentVisualFrame( | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 18 | val owner = com.android.purebilibili.core.util.VideoCardPixelOwner("home:BV1", 1L) | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 19 | val unrelated = com.android.purebilibili.core.util.VideoCardPixelOwner("home:BV1", 1L) | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 31 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 35 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 59 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 64 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 81 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 101 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 142 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 145 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 174 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 194 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 215 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 220 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …ore/ui/transition/VideoCardDeferredPixelCaptureTest.kt | 251 | androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications() | CODE |
| CRITICAL | …/core/ui/transition/VideoSharedTransitionPolicyTest.kt | 1117 | playerSource.contains("com.android.purebilibili.core.ui.motion.AppMotionTokens.spatialSpec()"), | CODE |
| CRITICAL | …ilibili/core/ui/popup/AppGlassPopupInterruptionTest.kt | 212 | val press = com.android.purebilibili.core.ui.components.AppSingleChoicePopupPress() | CODE |
| CRITICAL | …ilibili/core/ui/popup/AppGlassPopupInterruptionTest.kt | 229 | val press = com.android.purebilibili.core.ui.components.AppSingleChoicePopupPress() | CODE |
| CRITICAL | …ore/ui/skeleton/ContentLoadingSkeletonStructureTest.kt | 56 | assertFalse(space.contains("SpaceUiState.Loading -> {\n com.android.purebilibili.core.ui. | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 79 | val expected = if (dark) top.yukonga.miuix.kmp.theme.darkColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 80 | else top.yukonga.miuix.kmp.theme.lightColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 106 | val expected = if (dark) top.yukonga.miuix.kmp.theme.darkColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 107 | else top.yukonga.miuix.kmp.theme.lightColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 123 | val expected = if (dark) top.yukonga.miuix.kmp.theme.darkColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 124 | else top.yukonga.miuix.kmp.theme.lightColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 161 | val upstream = top.yukonga.miuix.kmp.theme.darkColorScheme() | CODE |
| CRITICAL | …libili/core/store/AppThemeSettingsMappingPolicyTest.kt | 44 | assertEquals(com.android.purebilibili.feature.settings.DarkThemeSchedule(true, 1335, 405), settings.darkThemeSch | CODE |
| CRITICAL | …bilibili/navigation/MessageLinkNavigationPolicyTest.kt | 238 | val link = com.android.purebilibili.feature.message.feed.buildMessageFeedCommentNavigationLink( | CODE |
| CRITICAL | …bilibili/navigation/MessageLinkNavigationPolicyTest.kt | 327 | val link = com.android.purebilibili.feature.message.feed.buildMessageFeedCommentNavigationLink( | CODE |
| CRITICAL | …bilibili/navigation/MessageLinkNavigationPolicyTest.kt | 346 | val link = com.android.purebilibili.feature.message.feed.buildMessageFeedCommentNavigationLink( | CODE |
| CRITICAL | …ebilibili/feature/settings/SettingsSearchPolicyTest.kt | 19 | com.android.purebilibili.navigation3.BiliPaiNavKey.SettingsCategory(SettingsRootCategory.HOME_RECOMMENDA | CODE |
| CRITICAL | …bili/feature/settings/AppSegmentedControlPolicyTest.kt | 18 | val normal = com.android.purebilibili.core.ui.components.resolveAppSegmentedLabelFontSize(base, 5, 4) | CODE |
| CRITICAL | …bili/feature/settings/AppSegmentedControlPolicyTest.kt | 19 | val enlarged = com.android.purebilibili.core.ui.components.resolveAppSegmentedLabelFontSize(base * 1.3f, 5, 4) | CODE |
| CRITICAL⚡ | …ebilibili/feature/home/HomeFeedGridPolicyTabletTest.kt | 92 | assertEquals(2, com.android.purebilibili.core.ui.adaptive.resolveHingeSafeFeedColumns(5, 440f)) | CODE |
| CRITICAL⚡ | …ebilibili/feature/home/HomeFeedGridPolicyTabletTest.kt | 93 | assertEquals(1, com.android.purebilibili.core.ui.adaptive.resolveHingeSafeFeedColumns(3, 170f)) | CODE |
| CRITICAL⚡ | …ebilibili/feature/home/HomeFeedGridPolicyTabletTest.kt | 94 | assertEquals(1, com.android.purebilibili.core.ui.adaptive.resolveHingeSafeFeedColumns(1, 640f)) | CODE |
| CRITICAL⚡ | …ebilibili/feature/home/HomeFeedGridPolicyTabletTest.kt | 95 | assertEquals(1, com.android.purebilibili.core.ui.adaptive.resolveHingeSafeFeedColumns(2, 440f, minCardWidthDp = | CODE |
| CRITICAL | …ature/home/components/FloatingBottomBarGeometryTest.kt | 663 | val geometry = com.android.purebilibili.core.ui.resolveMatchedLiquidIndicatorGeometry( | CODE |
| CRITICAL | …ature/home/components/FloatingBottomBarGeometryTest.kt | 680 | val geometry = com.android.purebilibili.core.ui.resolveMatchedLiquidIndicatorGeometry( | CODE |
| CRITICAL | …/home/components/cards/VideoCardLongPressPolicyTest.kt | 32 | assertFalse(com.android.purebilibili.core.store.HomeSettings().videoCardLongPressActionEnabled) | CODE |
| CRITICAL⚡ | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1010 | info = com.android.purebilibili.data.model.response.ViewInfo( | CODE |
| CRITICAL⚡ | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1019 | com.android.purebilibili.feature.video.subtitle.SubtitleTrackMeta( | CODE |
| CRITICAL⚡ | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1026 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL⚡ | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1033 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1055 | info = com.android.purebilibili.data.model.response.ViewInfo( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1060 | videoshotData = com.android.purebilibili.data.model.response.VideoshotData( | CODE |
| 3082 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ilibili/feature/plugin/dlna/DlnaCastRoutePolicyTest.kt | 10 | // ── toDlnaCastRoute ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ilibili/feature/plugin/dlna/DlnaCastRoutePolicyTest.kt | 32 | // ── resolveDlnaRouteSelection ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ilibili/feature/plugin/dlna/DlnaCastRoutePolicyTest.kt | 60 | // ── buildDlnaRouteSnapshot ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/com/android/purebilibili/core/util/WindowSizeUtils.kt | 482 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/com/android/purebilibili/core/util/WindowSizeUtils.kt | 484 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 15 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 17 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 84 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 86 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 127 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 129 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 140 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 142 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 153 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 155 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 166 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 168 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 187 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 189 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 212 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 214 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 237 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 239 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 255 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 257 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …d/purebilibili/feature/settings/ui/SettingsSections.kt | 86 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …d/purebilibili/feature/settings/ui/SettingsSections.kt | 88 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …d/purebilibili/feature/settings/ui/SettingsSections.kt | 103 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …d/purebilibili/feature/settings/ui/SettingsSections.kt | 105 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …ili/core/ui/components/AdaptivePreferenceComponents.kt | 99 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …ili/core/ui/components/AdaptivePreferenceComponents.kt | 101 | // ═══════════════════════════════════════════════════ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | artwork/brand-motion/lottie.min.js | 1 | "undefined"!=typeof navigator&&function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"fu | CODE |
| LOW | plugins/tools/bilibili_skin_to_bpskin.py | 115 | def build_manifest_and_asset_sources( | CODE |
| LOW | plugins/tools/bilibili_skin_to_bpskin.py | 225 | def first_existing_package_asset(package_names: set[str], candidates: list[str]) -> str | None: | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 24 | def test_refresh_and_percentiles(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 34 | def test_workload_budget_not_assumed_refresh_period(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 38 | def test_missing_data_is_not_a_pass(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 43 | def test_label_never_invents_phase_attribution(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 49 | def test_counter_deltas_and_frame_phase_intervals(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 63 | def test_unterminated_phase_and_counter_reset_not_invented(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 70 | def test_old_header_can_use_explicit_refresh(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 76 | def test_invalid_rows_are_excluded(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 93 | def test_checkpoint_retains_transition_and_uses_final_window_counters(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 103 | def test_overwritten_phase_cannot_pass_on_idle_frames(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 111 | def test_partial_phase_is_reported_as_incomplete(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 117 | def test_slow_first_frame_is_not_mistaken_for_overwritten_buffer(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 124 | def test_disjoint_checkpoints_do_not_claim_coverage_across_a_gap(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 130 | def test_modern_and_legacy_platform_counters_are_kept_separate(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 137 | def test_duplicate_window_uses_latest_completion(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 142 | def test_failures_still_write_json_and_markdown(self): | CODE |
| LOW | scripts/test_video_card_transition_tools.py | 156 | def test_sampler_rejects_debug_and_smooth_without_adb(self): | CODE |
| LOW | scripts/test_video_card_transition_tools.py | 165 | def test_sampler_start_stop_end_to_end_with_mock_adb(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 228 | def test_current_kotlin_tokens_all_presets(self): | STRING |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 234 | def test_critical_spring_release_has_exact_position_and_velocity(self): | STRING |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 243 | def test_fixed_refresh_samples_use_actual_frame_interval(self): | STRING |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 249 | def test_probe_rejects_effects_overshoot(self): | STRING |
| LOW | …om/bytedance/danmaku/render/engine/data/DataManager.kt | 32 | class DataManager( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …rebilibili/feature/home/HomePullRefreshUiPolicyTest.kt | 50 | // Overlay chrome height via indicatorTopInset (not scaffold default 0). | COMMENT |
| MEDIUM | …rebilibili/feature/settings/ui/SettingsPageScaffold.kt | 179 | // Keep this backdrop in the scaffold chrome. The scroll content is its source, | COMMENT |
| MEDIUM | …va/com/android/purebilibili/feature/home/HomeScreen.kt | 2097 | // 顶部渐进模糊和玻璃控件沿用 feed 背景;避免 scaffold 再录制相同内容。 | COMMENT |
| MEDIUM | …bili/feature/home/subscription/SubscriptionFeedPage.kt | 1240 | // The scaffold records its content for both progressive blur and Haze. | COMMENT |
| MEDIUM | …oid/purebilibili/feature/message/MessageAppScaffold.kt | 16 | // The scaffold's content source replays the root-owned static wallpaper. Dynamic | COMMENT |
| MEDIUM | …com/android/purebilibili/feature/message/ChatScreen.kt | 365 | // Capture wallpaper and messages together, excluding the scaffold's top bar. | COMMENT |
| MEDIUM | …com/android/purebilibili/feature/message/ChatScreen.kt | 646 | // scaffold body so the external chrome source includes message content as well. | COMMENT |
| MEDIUM | …om/android/purebilibili/feature/search/SearchScreen.kt | 1062 | // zero here leaves only Search's opaque scaffold background for the remainder of the | COMMENT |
| MEDIUM | …om/android/purebilibili/feature/search/SearchScreen.kt | 1110 | // Keep the top chrome on the same semantic plane as the Miuix list scaffold. | COMMENT |
| MEDIUM | …om/android/purebilibili/feature/search/SearchScreen.kt | 1308 | // One BasicTextField moves between the results scaffold and the landing overlay. | COMMENT |
| MEDIUM | …om/android/purebilibili/feature/search/SearchScreen.kt | 2792 | // Landing keeps an overlay search bar; results pin it in the scaffold chrome | COMMENT |
| MEDIUM | …ava/com/android/purebilibili/core/ui/AdaptiveChrome.kt | 231 | // 默认仍由 scaffold 录制,关闭玻璃时不改变 MD3 / Miuix 的原生路径。 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/purebilibili/core/cooldown/PlaybackCooldownManager.kt | 101 | if (consecutiveFailures > 0) { | COMMENT |
| LOW | …oid/purebilibili/feature/settings/SettingsViewModel.kt | 1121 | SettingsManager.setSmartVisualGuardEnabled(context, value) | COMMENT |
| LOW | …ebilibili/feature/home/components/FloatingBottomBar.kt | 1 | // Floating bottom bar structure and interactions. Liquid effects use project-local | COMMENT |
| LOW | …i/feature/audio/lyrics/halcyon/AppleMusicLyricsView.kt | 341 | val averageItemExtent = visibleItems.sumOf { it.size }.toFloat() / visibleItems.size + | COMMENT |
| LOW | …droid/purebilibili/feature/profile/ProfileViewModel.kt | 961 | // 构造搜索参数 | COMMENT |
| LOW | …/android/purebilibili/feature/profile/ProfileScreen.kt | 4121 | // [Modified] Background logic moved to ProfileBackground() | COMMENT |
| LOW | plugins/tools/create-plugin.js | 61 | // BiliPai.http.get(url, headers) / BiliPai.http.post(url, body, headers) | COMMENT |
| LOW | scripts/generate_rovniced_skin_catalog.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 381 | // its exit animation, and is pruned only when it has finished leaving (see the unload effect | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 461 | // Wire the platform predictive back gesture to the single driver. Enabled only when there is | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 681 | onCancel = {}, | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 741 | // Local non-null guard, NOT a non-local `return@key`: Compose Hot Reload turns the | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 761 | if (effects.dimAmount > 0f && entryIndex == topMostVisibleIndex && entryIndex > 0) { | COMMENT |
| LOW | …a/top/yukonga/miuix/kmp/nav/gesture/NavSwipeDismiss.kt | 341 | val releaseAnchor = if (anchor.isNaN()) topIndex - animatedTop.value else anchor | COMMENT |
| LOW | …a/top/yukonga/miuix/kmp/nav/gesture/NavSwipeDismiss.kt | 361 | if (settleSink != null) { | COMMENT |
| LOW | …a/top/yukonga/miuix/kmp/nav/gesture/NavSwipeDismiss.kt | 381 | animatedTop.settleTo( | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ebilibili/feature/video/ui/section/VideoInfoSection.kt | 0 | ((https?|ftp|file)://[-a-za-z0-9+&@#/%?=~_|!:,.;]*[-a-za-z0-9+&@#/%=~_|]) | STRING |
| HIGH | …ilibili/feature/video/ui/components/ReplyComponents.kt | 0 | ((https?|ftp|file)://[-a-za-z0-9+&@#/%?=~_|!:,.;]*[-a-za-z0-9+&@#/%=~_|]) | STRING |
| HIGH | …li/feature/dynamic/components/DynamicRichTextPolicy.kt | 0 | ((https?|ftp|file)://[-a-za-z0-9+&@#/%?=~_|!:,.;]*[-a-za-z0-9+&@#/%=~_|]) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | artwork/brand-motion/generate.py | 309 | CODE | |
| LOW | artwork/brand-motion/render-cleaning-frames.py | 24 | CODE | |
| LOW | artwork/brand-motion/render-cleaning-frames.py | 54 | CODE | |
| LOW | scripts/augment_skin_catalog_effects.py | 29 | CODE | |
| LOW | scripts/augment_skin_catalog_effects.py | 40 | CODE | |
| LOW | scripts/video_card_transition_curve_probe.py | 68 | CODE | |
| LOW | scripts/video_card_transition_curve_probe.py | 107 | CODE | |
| LOW | scripts/update_settings_description_index.py | 7 | CODE | |
| LOW | scripts/video_card_transition_report.py | 115 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | artwork/brand-motion/validate.py | 2 | CODE | |
| LOW | plugins/tools/bilibili_skin_to_bpskin.py | 9 | CODE | |
| LOW | scripts/augment_skin_catalog_effects.py | 4 | CODE | |
| LOW | scripts/video_card_transition_curve_probe.py | 7 | CODE | |
| LOW | scripts/port_halcyon_lyrics.py | 3 | CODE | |
| LOW | scripts/video_card_transition_report.py | 6 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/video_card_transition_report.py | 225 | "Missing phase data is null, never a zero-jank measurement."]} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/video_card_transition_report.py | 154 | except (KeyError, ValueError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | artwork/brand-motion/generate.py | 41 | CODE | |
| LOW | scripts/video_card_transition_report.py | 197 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tv_smoke.py | 131 | except Exception as error: | CODE |
| LOW | scripts/update_settings_description_index.py | 20 | except Exception:return '' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …i/feature/video/screen/VideoDetailScreenStateHolder.kt | 814 | // 🔄 [Seamless Playback] Internal BVID state to support seamless switching in portrait mode | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …d/purebilibili/feature/login/LoginAppAuthPolicyTest.kt | 106 | username = "user@example.com", | CODE |