Modern cross-platform media server client built with Flutter
This report summarizes scanner evidence for edde746/plezy, a Dart project with 4,033 GitHub stars. SynthScan examined 868,524 lines of code across 2498 source files, recording 1517 pattern matches distributed across 16 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? 1391 finding(s).
Are imports declared and package/API names verified? 45 finding(s).
Are wrappers, guards, and repeated structures necessary? 414 finding(s).
Which changes need focused human review? 1517 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 1517 distinct pattern matches across 16 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 | pubspec.yaml | 61 | dart_discord_presence: ^1.2.1 | COMMENT |
| LOW | macos/Runner/MpvPlayer/DisplayModeManager.swift | 1 | import Cocoa | COMMENT |
| LOW | test/utils/delete_impact_test.dart | 21 | COMMENT | |
| LOW | …video_player/linux_hdr_startup_custom_config_test.dart | 1 | import 'package:flutter_test/flutter_test.dart'; | COMMENT |
| LOW | test/screens/video_player/linux_hdr_startup_test.dart | 1 | import 'package:flutter/services.dart'; | COMMENT |
| LOW | …/video_player/linux_hdr_startup_tone_mapping_test.dart | 1 | import 'package:flutter/services.dart'; | COMMENT |
| LOW | …reens/video_player/linux_hdr_startup_refusal_test.dart | 1 | import 'package:flutter/services.dart'; | COMMENT |
| LOW | test/mpv/player_gapless_test.dart | 481 | COMMENT | |
| LOW | test/test_helpers/hdr_startup.dart | 21 | /// can be observed. | COMMENT |
| LOW | test/test_helpers/hdr_startup.dart | 121 | // And it carried the seeded preference, not a hard-coded arm: with the | COMMENT |
| LOW | test/services/track_manager_test.dart | 21 | COMMENT | |
| LOW | test/services/prefs_store_repair_flow_test.dart | 21 | /// The two halves of the existing coverage never met: file-level tests called | COMMENT |
| LOW | test/widgets/video_controls_fullscreen_icon_test.dart | 21 | COMMENT | |
| LOW | test/widgets/video_controls_two_finger_tap_test.dart | 21 | import '../test_helpers/prefs.dart'; | COMMENT |
| LOW | shared/apple/MpvPlayer/MpvAudioPlayerPlugin.swift | 1 | #if os(iOS) || os(tvOS) | COMMENT |
| LOW | shared/apple/MpvPlayer/MpvPlayerCoreBase.swift | 21 | /// | COMMENT |
| LOW | shared/apple/MpvPlayer/MpvPlayerCoreBase.swift | 541 | let defaultLogLevel = "v" | COMMENT |
| LOW | shared/apple/MpvPlayer/MpvPlayerCoreBase.swift | 601 | /// DTS-HD for mpv-build's spatial output. | COMMENT |
| LOW | shared/apple/MpvPlayer/MpvPlayerCoreBase.swift | 621 | // route's hardware channels, and AirPods report 2 even with Spatial | COMMENT |
| LOW | shared/apple/MpvPlayer/MpvPlayerCoreBase.swift | 1401 | // receive any teardown-valued property change, so the hold is in place | COMMENT |
| LOW | shared/apple/MpvPlayer/MpvPlayerCoreBase.swift | 1441 | COMMENT | |
| LOW | shared/apple/AppIcon/AppIconPlugin.swift | 1 | #if os(iOS) || os(tvOS) | COMMENT |
| LOW | shared/apple/DeepLink/DeepLinkPlugin.swift | 1 | #if os(iOS) || os(tvOS) | COMMENT |
| LOW | shared/cpp/sanitize_utf8.h | 1 | #ifndef SANITIZE_UTF8_H_ | COMMENT |
| LOW | shared/mpv/mpv_player_common.h | 1 | #ifndef PLEZY_SHARED_MPV_PLAYER_COMMON_H_ | COMMENT |
| LOW | shared/mpv/mpv_player_common.h | 301 | // changes, and only then the lines waiting in its separate log buffer | COMMENT |
| LOW | shared/mpv/mpv_player_common.h | 321 | // reach Dart ahead of the previous track's end-file. Only diagnostic text is | COMMENT |
| LOW | ios/Runner/MpvPlayer/MpvPlayerCore.swift | 121 | /// Apply custom viewer zoom by scaling the video layer about its center. | COMMENT |
| LOW | ios/Runner/MpvPlayer/MpvPlayerCore.swift | 741 | } | COMMENT |
| LOW | …Plugins/shared_preferences_foundation/messages.g.swift | 1 | // Copyright 2013 The Flutter Authors | COMMENT |
| LOW | …d_preferences_foundation/SharedPreferencesPlugin.swift | 1 | // Copyright 2013 The Flutter Authors | COMMENT |
| LOW | …ins/in_app_purchase_storekit/InAppPurchasePlugin.swift | 1 | // Copyright 2013 The Flutter Authors | COMMENT |
| LOW | …ins/in_app_purchase_storekit/StoreKit2Messages.g.swift | 1 | // Copyright 2013 The Flutter Authors | COMMENT |
| LOW | …_purchase_storekit/InAppPurchasePlugin+StoreKit2.swift | 1 | // Copyright 2013 The Flutter Authors | COMMENT |
| LOW | tvos/scripts/wire_mpv.rb | 41 | COMMENT | |
| LOW | tvos/scripts/fetch_engine.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | linux/packaging/build-appimage.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | linux/packaging/build-packages.py | 41 | # libmpv itself travels *in* the package rather than being depended on, | COMMENT |
| LOW | linux/packaging/build-packages.py | 241 | # Wayland-enabled one these packages assume. CI sets this explicitly for | COMMENT |
| LOW | linux/packaging/build-packages.py | 261 | # bundle and a broken package when the host-dep guard is opted out of below. | COMMENT |
| LOW | linux/packaging/build-packages.py | 281 | # Nothing above reconciles the hand-maintained depends lists with what the | COMMENT |
| LOW | linux/runner/CMakeLists.txt | 41 | # adds no build dependency on wayland-scanner. The checked-in files came from | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 1 | #ifndef PLEZY_LINUX_MPV_HDR_METADATA_H_ | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 61 | // with no re-render, and is what Kodi does — but its quality is entirely the | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 81 | // decimals of a value that is normally a small fraction of a nit. | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 141 | } | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 161 | HdrLuminancePlan plan; | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 201 | plan.send_max_fall = metadata.max_fall > 0; | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 241 | // rather than the source's original range. | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 261 | } | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 281 | // undimmed maximum: at 80% brightness that is 200 over 161. Headroom that small | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 361 | if (nits > volume_max) nits = volume_max; | COMMENT |
| LOW | linux/runner/mpv/hdr_metadata.h | 381 | // ordinary SDR signal whose maximum is the output's diffuse white, and claiming | COMMENT |
| LOW | linux/runner/mpv/plane_geometry.h | 1 | #ifndef PLEZY_LINUX_MPV_PLANE_GEOMETRY_H_ | COMMENT |
| LOW | linux/runner/mpv/plane_geometry.h | 21 | // cast of an unvalidated channel argument, and anything below 1 is not a scale: | COMMENT |
| LOW | linux/runner/mpv/plane_geometry.h | 41 | // | COMMENT |
| LOW | linux/runner/mpv/plane_geometry.h | 81 | } | COMMENT |
| LOW | linux/runner/mpv/wayland_video_surface.h | 21 | struct wp_color_management_surface_v1; | COMMENT |
| LOW | linux/runner/mpv/wayland_video_surface.h | 41 | // description is complete. | COMMENT |
| LOW | linux/runner/mpv/wayland_video_surface.h | 61 | // Everything here runs on the GTK main thread, with one deliberate exception: | COMMENT |
| 932 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/tests/homepage_store_metadata.test.ts | 36 | async function expectAppleFailureKeepsGoogleMetadata(fetch: HomepageStoreFetch): Promise<void> { | CODE |
| LOW | website/tests/homepage_store_metadata.test.ts | 49 | async function expectGoogleFailureKeepsAppleMetadata( | CODE |
| LOW | website/src/lib/content/software_app_offers.ts | 25 | export function buildSoftwareApplicationOffers({ | CODE |
| LOW | website/src/lib/content/downloads.ts | 45 | export function detectMobileStorePlatform(evidence: PlatformEvidence = {}): MobileStorePlatform { | CODE |
| LOW | website/src/lib/server/homepage_store_metadata.ts | 48 | export async function loadHomepageStoreMetadata({ | CODE |
| LOW | tvos/scripts/test_wire_top_shelf.rb | 99 | def assert_always_out_of_date(target, phase_name) | CODE |
| LOW | tvos/scripts/test_wire_top_shelf.rb | 105 | def assert_generated_configuration(target, name, expected_team, expected_bundle, deployment_target) | CODE |
| LOW | scripts/test_set_native_revision.py | 350 | def test_the_flip_rewrites_every_pin_site_and_derives_the_lock(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 380 | def test_default_source_is_the_sibling_checkout(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 391 | def test_remote_source_serves_the_manifests_by_commit(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 418 | def test_rerun_with_the_same_commit_is_a_reported_noop(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 434 | def test_a_move_within_the_target_repo_only_touches_revisions(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 451 | def test_lock_repo_derives_from_the_local_checkouts_origin_remote(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 472 | def test_refuses_a_malformed_sha(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 481 | def test_refuses_when_a_pin_site_is_missing(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 495 | def test_an_ambiguous_edit_aborts_before_any_write(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 523 | def test_refuses_a_commit_that_predates_the_unified_repo(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 533 | def test_refuses_a_checksumless_prebuilt_asset(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 547 | def test_refuses_an_aar_gradle_would_not_resolve_or_verify(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 567 | def test_refuses_without_the_android_gradle_directory(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 579 | def test_android_without_the_aar_is_omitted_and_verifies_nothing(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 594 | def test_a_group_with_no_published_libraries_is_omitted_with_a_note(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 606 | def test_a_packaged_artifact_beside_a_groups_native_trees_is_omitted_with_a_note(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 629 | def test_published_symbols_are_copied_into_the_lock_beside_their_library(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 666 | def test_a_library_published_without_symbols_is_noted_and_pins_unchanged(self) -> None: | CODE |
| LOW | scripts/test_set_native_revision.py | 685 | def test_refuses_a_symbols_zip_it_could_not_verify(self) -> None: | CODE |
| LOW | scripts/test_fetch_linux_libmpv.py | 69 | def test_checksum_mismatch_leaves_dest_untouched(self) -> None: | CODE |
| LOW | scripts/test_fetch_linux_libmpv.py | 79 | def test_matching_checksum_extracts_prefix(self) -> None: | CODE |
| LOW | scripts/test_fetch_linux_libmpv.py | 91 | def test_unsupported_machine_is_a_clear_error(self) -> None: | CODE |
| LOW | scripts/test_fetch_linux_libmpv.py | 101 | def test_missing_zstd_fails_before_fetching(self) -> None: | CODE |
| LOW | scripts/test_pubspec_version.py | 17 | def test_ignores_duplicate_nested_version_keys(self) -> None: | CODE |
| LOW⚡ | scripts/test_pubspec_version.py | 30 | def test_rejects_malformed_versions(self) -> None: | STRING |
| LOW⚡ | scripts/test_pubspec_version.py | 35 | def test_rejects_missing_top_level_version(self) -> None: | STRING |
| LOW⚡ | scripts/test_pubspec_version.py | 45 | def test_accepts_numeric_build_metadata(self) -> None: | STRING |
| LOW⚡ | scripts/test_pubspec_version.py | 51 | def test_cli_prints_build_number(self) -> None: | STRING |
| LOW | scripts/checks/workflow_yaml.py | 78 | def _decode_quoted_yaml_string(value: str) -> str | None: | CODE |
| LOW | scripts/checks/workflow_yaml.py | 153 | def _has_unsupported_block_mapping_key(line: str) -> bool: | CODE |
| LOW | scripts/checks/check_container_image_pins.py | 52 | def iter_dockerfile_references(path: Path): | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 37 | def test_current_script_passes(self) -> None: | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 43 | def test_missing_commandline_override_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 56 | def test_dialog_override_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 67 | def test_admin_default_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 75 | def test_dropping_the_elevated_relaunch_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 86 | def test_dropping_the_recursion_guard_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 94 | def test_silent_elevation_failure_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 106 | def test_second_template_copy_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_windows_installer.py | 119 | def test_losing_the_winget_marker_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/check_shrinker_rules.py | 118 | def includes_descriptor_classes(self) -> bool: | CODE |
| LOW | scripts/checks/check_shrinker_rules.py | 132 | def _collapse_adjacent_literals(source: str) -> str: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 79 | def test_a_missing_cmake_input_is_named_rather_than_skipped(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 95 | def test_every_module_of_a_multi_module_call_is_checked(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 112 | def test_a_version_constrained_module_spec_still_names_its_module(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 131 | def test_a_comment_containing_a_paren_does_not_hide_the_rest_of_the_call(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 147 | def test_a_generator_expression_still_names_its_target(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 160 | def test_a_quoted_target_still_names_its_target(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 173 | def test_pkg_check_modules_options_may_precede_the_module_name(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 187 | def test_the_dependency_lists_before_the_video_plane_are_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 205 | def test_a_bundled_module_needs_no_declared_dependency(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 220 | def test_one_missing_distro_is_rejected(self) -> None: | CODE |
| LOW | scripts/checks/test_check_linux_package_deps.py | 231 | def test_pacman_shared_wayland_package_counts_for_both_modules(self) -> None: | CODE |
| 273 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/services/track_manager_test.dart | 78 | // ── Recording surface ──────────────────────────────────────────── | COMMENT |
| MEDIUM | linux/packaging/bundle-libs.sh | 23 | # ── Exclusion list ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | linux/packaging/bundle-libs.sh | 27 | # ── Helper: collect ldd deps ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | linux/packaging/bundle-libs.sh | 38 | # ── Explicitly bundle dlopen'd libraries ─────────────────────────────────── | COMMENT |
| MEDIUM | linux/packaging/bundle-libs.sh | 81 | # ── GTK modules (loaded via dlopen, invisible to ldd) ────────────────────── | COMMENT |
| MEDIUM | linux/packaging/bundle-libs.sh | 162 | # ── Resolve transitive deps of modules ──────────────────────────────────── | COMMENT |
| MEDIUM | linux/packaging/bundle-libs.sh | 186 | # ── GSettings schemas ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | linux/packaging/bundle-libs.sh | 197 | # ── Strip debug symbols ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/release/deploy.py | 816 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/release/deploy.py | 818 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 171 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 173 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 291 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 293 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 373 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 375 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 450 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 452 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 561 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 563 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 644 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 646 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 680 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 682 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1002 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1004 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1154 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1156 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1277 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1279 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1481 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1483 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1546 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1548 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1676 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1678 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1695 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1697 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1727 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/release/deploy.py | 1729 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 69 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 71 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 240 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 242 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 279 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 281 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 352 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 354 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 470 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 472 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 521 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 523 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 613 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/codegen/train_chapter_marker_model.py | 615 | # --------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | lib/utils/provider_extensions.dart | 60 | // ── Backend-neutral helpers ────────────────────────────────────── | COMMENT |
| MEDIUM | lib/services/track_manager.dart | 74 | // ── Mutable configuration (updated on episode navigation) ────────── | COMMENT |
| MEDIUM | lib/services/track_manager.dart | 94 | // ── Internal state ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | lib/services/track_manager.dart | 163 | // ── Track selection ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | lib/services/track_manager.dart | 364 | // ── Backend fallback ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | lib/services/track_manager.dart | 378 | // ── Track cycling (remote/keyboard shortcuts) ────────────────────── | COMMENT |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/screens/media_detail_screen_test.dart | 1994 | // scaffold here and unmounted the episode list. | COMMENT |
| MEDIUM | test/screens/discover_screen_test.dart | 714 | // The bottom fade must end in solid scaffold background before the hero | COMMENT |
| MEDIUM | …/screens/settings/custom_theme_editor_screen_test.dart | 36 | /// the app's root shell, whose scaffold resizes for the keyboard. | COMMENT |
| MEDIUM | test/test_helpers/hdr_startup.dart | 15 | /// Shared scaffold for the four Linux HDR startup cases. | COMMENT |
| MEDIUM | lib/main.dart | 2023 | /// Flutter presents a messenger's snackbars on the rootmost registered scaffold, so anything | COMMENT |
| MEDIUM | lib/utils/navigation_transitions.dart | 9 | // below the transparent root scaffold. The reduced tier only drops the | COMMENT |
| MEDIUM | lib/screens/focusable_detail_screen_mixin.dart | 84 | /// Wrap [slivers] in the standard detail-screen scaffold — an overlay-sheet | COMMENT |
| MEDIUM | lib/screens/media_detail_screen.dart | 1167 | /// The hero scrim washes artwork toward the scaffold background, so the | COMMENT |
| MEDIUM | lib/screens/media_detail_screen.dart | 4211 | // The hero scrim washes the backdrop toward the scaffold background, so a | COMMENT |
| MEDIUM | lib/screens/collection_detail_screen.dart | 46 | /// header region and fades into the scaffold background before the grid. | COMMENT |
| MEDIUM | lib/screens/collection_detail_screen.dart | 383 | /// Backdrop art washing the header, scrimmed to the scaffold background | COMMENT |
| MEDIUM | lib/screens/discover_screen.dart | 1352 | // Gradient Overlay - blends into scaffold background | COMMENT |
| MEDIUM | lib/screens/discover_screen.dart | 1510 | // The hero scrim washes artwork toward the scaffold | COMMENT |
| MEDIUM | lib/screens/explore_screen.dart | 48 | /// scaffold with the bottom-pinned browse rail and the on-screen keyboard, | COMMENT |
| MEDIUM | lib/screens/settings/custom_theme_editor_screen.dart | 98 | /// The keyboard inset from the view itself: the app's root scaffold resizes | COMMENT |
| MEDIUM | lib/screens/libraries/tabs/library_browse_tab.dart | 1715 | // already covered by overlayTopPadding and the parent scaffold. | COMMENT |
| MEDIUM | lib/widgets/setting_tile.dart | 34 | /// Shared scaffold for the tiles that render a tappable settings row: same | COMMENT |
| MEDIUM | lib/widgets/tv_spotlight_background.dart | 150 | /// bottom edges feathered into the scaffold background so the info block | COMMENT |
| MEDIUM | lib/widgets/tv_spotlight_background.dart | 236 | // The spotlight scrim washes artwork toward the scaffold background, so | COMMENT |
| MEDIUM | lib/widgets/hero_carousel_backdrop.dart | 78 | // dips toward the scaffold background mid-swipe. | COMMENT |
| MEDIUM | lib/widgets/focused_scroll_scaffold.dart | 7 | /// A scaffold widget that wraps Focus + Scaffold + CustomScrollView | COMMENT |
| MEDIUM | lib/widgets/focused_scroll_scaffold.dart | 49 | /// stays in this scaffold's focus scope, after the content in traversal. | COMMENT |
| MEDIUM | lib/widgets/focused_scroll_scaffold.dart | 113 | // bar shares the scaffold color and never tints, so insetting it | COMMENT |
| MEDIUM | lib/widgets/settings_page.dart | 5 | /// Standard scaffold for settings pages made of ordinary list rows. | COMMENT |
| MEDIUM | lib/widgets/seerr_request_sheet.dart | 31 | /// Why the sheet closed itself; a caller surfaces it on its own scaffold | COMMENT |
| MEDIUM | …gets/video_controls/sheets/sheet_selection_column.dart | 21 | /// Shared scaffold for the selectable columns inside the video control sheets: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | test/services/plex_home_retry_test.dart | 284 | expect(httpClient.requests.last.url.queryParameters.containsKey('identifier'), isFalse); | CODE |
| CRITICAL | test/services/plex_home_retry_test.dart | 306 | expect(httpClient.requests.single.url.queryParameters.containsKey('count'), isFalse); | CODE |
| CRITICAL | test/services/file_info_key_coverage_test.dart | 206 | final subtitle = info.versions.single.parts.single.streamsOfKind(MediaStreamKind.subtitle).single; | CODE |
| CRITICAL | test/services/file_info_key_coverage_test.dart | 571 | expect(info.versions.first.parts.single.streams.map((stream) => stream.codec), ['h264', 'aac']); | CODE |
| CRITICAL | test/services/file_info_key_coverage_test.dart | 579 | final plexSubtitle = plexInfo.versions.single.parts.single.streamsOfKind(MediaStreamKind.subtitle).single; | CODE |
| CRITICAL | test/services/jellyfin_client_emby_dialect_test.dart | 539 | expect(requests.requests.single.url.queryParameters.containsKey('SeriesId'), isFalse); | CODE |
| CRITICAL | …st/kotlin/com/edde746/plezy/mpv/MpvPlayerPluginTest.kt | 2120 | val refreshRate = activity.windowManager.defaultDisplay.mode.refreshRate.toString() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/maestro/maestro_jellyfin_proxy.py | 223 | except KeyboardInterrupt: | CODE |
| HIGH | scripts/maestro/maestro_jellyfin_proxy.py | 185 | except (BrokenPipeError, ConnectionResetError): | CODE |
| HIGH | scripts/maestro/prepare_maestro_media.py | 72 | except (subprocess.CalledProcessError, ValueError): | CODE |
| HIGH | scripts/maestro/run_maestro.py | 678 | except (OSError, subprocess.SubprocessError): | CODE |
| HIGH | scripts/maestro/run_maestro.py | 713 | except (OSError, subprocess.SubprocessError): | CODE |
| HIGH | scripts/maestro/run_maestro.py | 725 | except (OSError, subprocess.SubprocessError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/checks/check_workflow_security.py | 83 | errors.append(f"{path}:{line_number}: command must not suppress failure with || true") | CODE |
| HIGH⚡ | scripts/checks/test_check_workflow_security.py | 104 | "jobs:\n test:\n steps:\n - run: ./check || true\n", | STRING |
| HIGH | scripts/checks/check_user_facing_errors.py | 4 | `MediaServerException.toString()` renders the Dart runtime type, the English | STRING |
| HIGH | scripts/checks/check_user_facing_errors.py | 26 | # `e.toString()`, `$e`, `${e}`, `error.toString()` — an exception-shaped name | COMMENT |
| HIGH | scripts/codegen/generate_relay_protocol.py | 102 | "\treturn version == legacyRelayProtocolVersion || version == relayProtocolVersion", | CODE |
| HIGH | scripts/codegen/generate_relay_protocol.py | 106 | "\tif len(value) == 0 || len(value) > maxLength {", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test_set_native_revision.py | 24 | CODE | |
| LOW | scripts/checks/clean_translations.py | 15 | CODE | |
| LOW | scripts/checks/check_tvos_test_wiring.py | 4 | CODE | |
| LOW | scripts/checks/workflow_yaml.py | 9 | CODE | |
| LOW | scripts/checks/check_hardcoded_strings.py | 18 | CODE | |
| LOW | scripts/checks/check_container_image_pins.py | 4 | CODE | |
| LOW | scripts/checks/verify_runtime_inputs.py | 4 | CODE | |
| LOW | scripts/checks/check_bun_audit.py | 4 | CODE | |
| LOW | scripts/checks/check_shrinker_rules.py | 24 | CODE | |
| LOW | scripts/checks/check_codegen.py | 4 | CODE | |
| LOW | scripts/checks/check_workflow_action_pins.py | 4 | CODE | |
| LOW | scripts/checks/check_apple_spm_locks.py | 4 | CODE | |
| LOW | scripts/checks/test_run_tests.py | 10 | CODE | |
| LOW | scripts/checks/test_fetch_tvos_engine.py | 4 | CODE | |
| LOW | scripts/checks/check_user_facing_errors.py | 17 | CODE | |
| LOW | scripts/maestro/maestro_fixtures.py | 3 | CODE | |
| LOW | scripts/maestro/maestro_jellyfin_proxy.py | 4 | CODE | |
| LOW | scripts/maestro/maestro_real_jellyfin.py | 4 | CODE | |
| LOW | scripts/maestro/run_maestro_ci.py | 4 | CODE | |
| LOW | scripts/maestro/test_run_maestro.py | 3 | CODE | |
| LOW | scripts/maestro/prepare_maestro_media.py | 4 | CODE | |
| LOW | scripts/maestro/run_maestro.py | 4 | CODE | |
| LOW | scripts/release/deploy.py | 78 | CODE | |
| LOW | scripts/codegen/generate_relay_protocol.py | 4 | CODE | |
| LOW | scripts/codegen/generate_app_icons.py | 50 | CODE | |
| LOW | scripts/codegen/generate_hangul_subtitle_font.py | 54 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | linux/packaging/check-bundle-host-deps.py | 132 | CODE | |
| LOW | scripts/checks/workflow_yaml.py | 57 | CODE | |
| LOW | scripts/checks/workflow_yaml.py | 125 | CODE | |
| LOW | scripts/checks/workflow_yaml.py | 153 | CODE | |
| LOW | scripts/checks/workflow_yaml.py | 182 | CODE | |
| LOW | scripts/checks/workflow_yaml.py | 254 | CODE | |
| LOW | scripts/checks/check_hardcoded_strings.py | 105 | CODE | |
| LOW | scripts/checks/check_hardcoded_strings.py | 149 | CODE | |
| LOW | scripts/checks/check_hardcoded_strings.py | 220 | CODE | |
| LOW | scripts/checks/verify_runtime_inputs.py | 118 | CODE | |
| LOW | scripts/checks/check_shrinker_rules.py | 203 | CODE | |
| LOW | scripts/checks/check_workflow_action_pins.py | 35 | CODE | |
| LOW | scripts/checks/check_workflow_security.py | 23 | CODE | |
| LOW | scripts/checks/check_linux_package_deps.py | 97 | CODE | |
| LOW | scripts/checks/check_user_facing_errors.py | 35 | CODE | |
| LOW | scripts/maestro/maestro_real_jellyfin.py | 181 | CODE | |
| LOW | scripts/maestro/maestro_real_jellyfin.py | 659 | CODE | |
| LOW | scripts/maestro/test_run_maestro.py | 217 | CODE | |
| LOW | scripts/maestro/prepare_maestro_media.py | 43 | CODE | |
| LOW | scripts/maestro/run_maestro.py | 613 | CODE | |
| LOW | scripts/codegen/train_chapter_marker_model.py | 383 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/utils/scroll_utils_test.dart | 364 | // controller so the test stays robust against viewport changes. | COMMENT |
| MEDIUM | …tlin/com/edde746/plezy/mpv/SurfaceFrameRateVoteTest.kt | 98 | // itself): a 29.97 vote would let a seamless display settle on a mode that | COMMENT |
| MEDIUM | lib/focus/focusable_action_bar.dart | 298 | // focus; mid-transition the two multiply, which stays visually seamless. | COMMENT |
| MEDIUM | lib/screens/video_player/player_output_format.dart | 133 | /// `PresentedFrameRate` for the seamless surface vote and the Apple core. | COMMENT |
| MEDIUM | lib/mpv/player/player.dart | 293 | /// needed (seamless fallback, invalid fps, no matching mode), in which case | COMMENT |
| MEDIUM | windows/runner/flutter_window.cpp | 248 | // (robust across DPI and restore transitions). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tvos/scripts/fetch_engine.sh | 9 | # Usage: | COMMENT |
| LOW | scripts/refresh_apple_spm.sh | 23 | # Usage: | COMMENT |
| LOW | scripts/set_native_revision.sh | 79 | # Usage: | COMMENT |
| LOW | lib/mixins/watch_state_aware.dart | 11 | /// Example usage: | COMMENT |
| LOW | lib/mixins/deletion_aware.dart | 12 | /// Example usage: | COMMENT |
| LOW | lib/mpv/video.dart | 15 | /// Example usage: | COMMENT |
| LOW | lib/mpv/player/player.dart | 21 | /// Example usage: | COMMENT |
| LOW | lib/widgets/app_bar_back_button.dart | 28 | /// Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | linux/packaging/build-packages.py | 235 | print(f"Error: Build directory not found at {BUILD_DIR}") | CODE |
| MEDIUM | linux/packaging/build-packages.py | 263 | print(f"Error: no libmpv found in {BUILD_DIR / 'lib'}") | CODE |
| MEDIUM | linux/packaging/build-packages.py | 302 | print(f"Error: {guard.name} failed, so no packages were built.") | CODE |
| MEDIUM | scripts/pubspec_version.py | 66 | print(f"Error: {args.pubspec}: {error}", file=sys.stderr) | CODE |
| LOW | scripts/maestro/run_maestro.py | 630 | except Exception as error: # Keep diagnostics from masking the failure. | CODE |
| LOW | scripts/maestro/run_maestro.py | 659 | except Exception as error: # Diagnostics are best effort. | CODE |
| MEDIUM | scripts/release/deploy.py | 1930 | print(f"Error: {error}", file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/saf_util/pubspec.yaml | 23 | # The following section is specific to Flutter packages. | COMMENT |
| MEDIUM | packages/wakelock_plus/pubspec.yaml | 53 | # The following section is specific to Flutter packages. | COMMENT |
| MEDIUM | .github/workflows/build.yml | 341 | # Create a temporary ZIP for notarization submission | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/models/plex_switch_response_test.dart | 11 | 'email': 'user@example.com', | CODE |
| LOW | test/screens/actor_media_screen_test.dart | 25 | actorName: 'Jane Doe', | CODE |
| LOW | test/screens/actor_media_screen_test.dart | 38 | expect(find.text(t.errors.unableToLoad(context: 'Jane Doe')), findsOneWidget); | CODE |
| LOW | test/services/prefs_recovery_test.dart | 24 | 'identifier': 'user@example.com', | CODE |
| LOW | test/services/catalog/plex_catalog_source_test.dart | 55 | 'placeholder': true, | CODE |
| LOW⚡ | scripts/release/test_deploy.py | 37 | {"DELIVER_USERNAME": "user@example.com", "TOKEN": "abc123"}, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/i18n/strings.g.dart | 407 | /// Step 1: | COMMENT |
| LOW | lib/i18n/strings.g.dart | 413 | /// Step 2: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/maestro/maestro_jellyfin_proxy.py | 70 | def set_offline(self, enabled: bool) -> None: | CODE |
| LOW | scripts/maestro/maestro_jellyfin_proxy.py | 188 | def _set_offline(self) -> None: | CODE |