This report summarizes scanner evidence for finamp-app/finamp. SynthScan examined 101,796 lines of code across 487 source files, recording 56 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 0.8 (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? 48 finding(s).
Are imports declared and package/API names verified? 3 finding(s).
Are wrappers, guards, and repeated structures necessary? 6 finding(s).
Which changes need focused human review? 56 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 56 distinct pattern matches across 9 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 | 1 | name: finamp | COMMENT |
| LOW | pubspec.yaml | 261 | # in this "flutter" section. Each entry in this list should have a | COMMENT |
| LOW | linux/flutter/generated_plugin_registrant.h | 1 | // | COMMENT |
| LOW | .github/workflows/build.yml | 421 | set +e | COMMENT |
| LOW | .github/workflows/build.yml | 441 | # - run: flutter pub get | COMMENT |
| LOW | lib/models/jellyfin_models.dart | 661 | int? width; | COMMENT |
| LOW | lib/models/jellyfin_models.dart | 821 | @HiveField(0) | COMMENT |
| LOW | lib/models/jellyfin_models.dart | 841 | // String? manufacturer; | COMMENT |
| LOW | lib/models/jellyfin_models.dart | 861 | // String? modelNumber; | COMMENT |
| LOW | lib/models/jellyfin_models.dart | 881 | // bool enableSingleAlbumArtLimit; | COMMENT |
| LOW | lib/models/jellyfin_models.dart | 901 | // String? albumArtPn; | COMMENT |
| LOW | lib/models/jellyfin_models.dart | 941 | // @Deprecated("removed from API") | COMMENT |
| LOW | lib/models/jellyfin_models.dart | 961 | // @Deprecated("removed from API") | COMMENT |
| LOW | lib/extensions/string.dart | 21 | COMMENT | |
| LOW | …/PlaybackHistoryScreen/playback_history_list_tile.dart | 81 | ), | COMMENT |
| LOW | lib/components/MusicScreen/item_wrapper.dart | 61 | COMMENT | |
| LOW | lib/services/playon_service.dart | 61 | } | COMMENT |
| LOW | lib/services/client_certificate_installer.dart | 21 | static const _writeFailureCodes = {32, 54, 104, 10053, 10054}; | COMMENT |
| LOW | lib/services/radio_service_helper.dart | 401 | // find all unique genre, shuffleall sources | COMMENT |
| LOW | lib/services/jellyfin_api.dart | 121 | /// will be recursive. true/false. | COMMENT |
| LOW | lib/services/jellyfin_api.dart | 141 | /// "SeriesPrimaryImage" "SeriesStudio" "SortName" "SpecialEpisodeNumbers" | COMMENT |
| LOW | lib/services/jellyfin_api.dart | 201 | COMMENT | |
| LOW | lib/services/jellyfin_api.dart | 381 | /// Specify this to localize the search to a specific item or folder. Omit | COMMENT |
| LOW | lib/services/jellyfin_api.dart | 401 | /// "RecursiveItemCount" "Settings" "ScreenshotImageTags" | COMMENT |
| LOW | lib/services/jellyfin_api.dart | 501 | /// Specify this to localize the search to a specific item or folder. Omit | COMMENT |
| LOW | lib/services/downloads_service.dart | 61 | // Flags for controlling sync/downloads | COMMENT |
| LOW | lib/services/music_player_background_task.dart | 1361 | COMMENT | |
| LOW | lib/services/queue_service.dart | 1681 | COMMENT | |
| LOW | lib/services/discord_rpc.dart | 141 | } | COMMENT |
| LOW | lib/services/carplay_helper.dart | 41 | /// Fallback section cap, same reasoning as [_fallbackMaxListItems]. Covers the | COMMENT |
| LOW | lib/services/carplay_helper.dart | 801 | emptyViewTitleVariants: [GlobalSnackbar.requireL10n.emptyFilteredListTitle], | COMMENT |
| LOW | windows/runner/utils.h | 1 | #ifndef RUNNER_UTILS_H_ | COMMENT |
| LOW | windows/runner/win32_window.cpp | 1 | #include "win32_window.h" | COMMENT |
| LOW | windows/runner/resource.h | 1 | //{{NO_DEPENDENCIES}} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | lib/screens/music_screen.dart | 226 | // If this setting changes, the appbar will change its preferred height, so we need to rebuild the scaffold. | COMMENT |
| MEDIUM | lib/components/now_playing_bar.dart | 523 | // The now playing bar must be enclosed in a SafeArea at all times so that the enclosing scaffold properly adds | COMMENT |
| MEDIUM | lib/components/global_snackbar.dart | 67 | // has all global context present. The scaffold context is missing most global state. | COMMENT |
| MEDIUM | …/components/HomeScreen/finamp_music_screen_header.dart | 72 | // We cannot make this reactive ourselves because it is the surrounding scaffold that needs to rebuild, not | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/code_recap/extract_history.py | 63 | except Exception as e: | CODE |
| MEDIUM | tools/code_recap/extract_history.py | 64 | print(f"Error fetching API: {e}") | CODE |
| MEDIUM | tools/code_recap/extract_history.py | 80 | print(f"Error running git command: {result.stderr}", file=sys.stderr) | CODE |
| MEDIUM | tools/code_recap/extract_history.py | 84 | print("Error: 'git' command not found. Please ensure Git is installed.", file=sys.stderr) | CODE |
| MEDIUM | tools/code_recap/extract_history.py | 125 | print(f"Error: No git repository found at {PATH}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/services/downloads_service.dart | 553 | // Step 1 - Remove invalid links and restore node hierarchy. | COMMENT |
| LOW | lib/services/downloads_service.dart | 694 | // Step 2 - Get all items into correct state matching filesystem and downloader. | COMMENT |
| LOW | lib/services/downloads_service.dart | 763 | // Step 3 - Resync all nodes from anchor to connect up all needed nodes | COMMENT |
| LOW | lib/services/downloads_service.dart | 769 | // Step 4 - Fetch all missing lyrics | COMMENT |
| LOW | lib/services/downloads_service.dart | 808 | // Step 5 - Make sure there are no unanchored nodes in metadata. | COMMENT |
| LOW | lib/services/downloads_service.dart | 817 | // Step 6 - Make sure there are no orphan files in track directory. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pubspec.yaml | 230 | # The following section is specific to Flutter. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pubspec.yaml | 233 | # included with your application, so that you can use the icons in | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/code_recap/extract_history.py | 4 | CODE | |
| LOW | tools/code_recap/extract_history.py | 8 | CODE | |
| LOW | tools/code_recap/recap.py | 2 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …components/PlayerScreen/player_screen_album_image.dart | 96 | // Load player cover at max size to allow more seamless scaling | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/code_recap/extract_history.py | 30 | def get_github_username_from_commit(repo_path, commit_hash, displayname): | CODE |