Backup and keep your application settings in sync.
This report summarizes scanner evidence for lra/mackup, a Python project with 15,338 GitHub stars. SynthScan examined 11,416 lines of code across 653 source files, recording 195 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 34.5 (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.
Can maintainers explain intent, assumptions, and trade-offs? 193 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 77 finding(s).
Which changes need focused human review? 195 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 195 distinct pattern matches across 10 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 |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_utils.py | 37 | # Create a tmp file | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 49 | # Create a tmp folder | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 77 | # Create a tmp file | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 81 | # Create a tmp folder | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 134 | # Create a tmp folder | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 137 | # Create a tmp file | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 141 | # Create a tmp folder | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 169 | # Create a tmp folder | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 172 | # Create a tmp file | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 176 | # Create a tmp folder | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 202 | # Create a source and a destination tmp folders | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 206 | # Create a folder inside the source folder | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 209 | # Create the same subfolder inside the destination folder | COMMENT |
| MEDIUM⚡ | tests/test_utils.py | 214 | # Create a tmp file in the src subfolder | COMMENT |
| MEDIUM | tests/test_utils.py | 103 | # Create a tmp FIFO file | COMMENT |
| MEDIUM | tests/test_utils.py | 108 | # Create a tmp folder | COMMENT |
| MEDIUM | tests/test_utils.py | 244 | # Create a tmp file | COMMENT |
| MEDIUM | tests/test_utils.py | 248 | # Create a tmp folder | COMMENT |
| MEDIUM | tests/test_utils.py | 271 | # Create a tmp file | COMMENT |
| MEDIUM | tests/test_utils.py | 275 | # Create a tmp directory with a sub folder | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 16 | # Create a mock Mackup instance | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 20 | # Create a temporary home directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 30 | # Create the ApplicationProfile instance | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 54 | # Create a test file in the home directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 58 | # Create the actual file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 98 | # Create a verbose ApplicationProfile | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 106 | # Create a test file in the home directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 110 | # Create the actual file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 139 | # Create a test file in the mackup directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 143 | # Create the actual file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 172 | # Create a verbose ApplicationProfile | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 180 | # Create a test file in the mackup directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 184 | # Create the actual file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 213 | # Create a test directory in the home directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 218 | # Create a file inside the directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 247 | # Create a test directory in the mackup directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 252 | # Create a file inside the directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 281 | # Create a dry_run ApplicationProfile | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 289 | # Create a test file in the home directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 293 | # Create the actual file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 318 | # Create a dry_run ApplicationProfile | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 326 | # Create a test file in the mackup directory | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 330 | # Create the actual file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 399 | # Create a test file in the mackup directory (regular file, not a link) | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 404 | # Create the mackup file as a regular file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 408 | # Create the home file as a regular file (not a link) | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 439 | # Create a test file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 444 | # Create the mackup file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 448 | # Create a different target file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 453 | # Create the home file as a symbolic link pointing to the wrong target | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 483 | # Create a test file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 488 | # Create the mackup file first | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 492 | # Create the home file as a symbolic link pointing to the mackup file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 519 | # Create a test file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 524 | # Create the mackup file first (simulating link install) | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 528 | # Create the home file as a symbolic link pointing to the mackup file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 565 | # Create a verbose ApplicationProfile | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 573 | # Create a test file | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 578 | # Create the mackup file first (simulating link install) | COMMENT |
| MEDIUM⚡ | tests/test_application.py | 582 | # Create the home file as a symbolic link pointing to the mackup file | COMMENT |
| 14 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_utils.py | 48 | def test_delete_folder_recursively(self): | CODE |
| LOW⚡ | tests/test_utils.py | 200 | def test_copy_dir_that_exists(self): | CODE |
| LOW | tests/test_utils.py | 330 | def test_failed_backup_location(self): | CODE |
| LOW | tests/test_utils.py | 353 | def test_dropbox_folder_location_with_malformed_host_db(self): | CODE |
| LOW | tests/test_utils.py | 379 | def test_google_drive_folder_location_with_missing_path_entry(self): | CODE |
| LOW | tests/test_utils.py | 402 | def test_google_drive_folder_location_uses_user_default_db(self): | CODE |
| LOW | tests/test_utils.py | 431 | def test_can_file_be_synced_on_current_platform(self): | CODE |
| LOW | tests/test_appsdb_xdg.py | 34 | def test_legacy_custom_apps_dir(self): | CODE |
| LOW | tests/test_appsdb_xdg.py | 52 | def test_legacy_takes_priority_over_xdg(self): | CODE |
| LOW | tests/test_appsdb_xdg.py | 69 | def test_both_directories_merged(self): | CODE |
| LOW | tests/test_appsdb_xdg.py | 81 | def test_xdg_default_fallback(self): | CODE |
| LOW | tests/test_appsdb_xdg.py | 93 | def test_applications_database_loads_xdg_apps(self): | CODE |
| LOW | tests/test_appsdb_xdg.py | 104 | def test_applications_database_priority_loads_legacy(self): | CODE |
| LOW | tests/test_config.py | 18 | def assert_correct_config_read(expected_directory): | CODE |
| LOW | tests/test_config.py | 39 | def test_config_find_correct_default(self): | CODE |
| LOW | tests/test_config.py | 63 | def test_config_finds_correct_envvar(self): | CODE |
| LOW | tests/test_config.py | 110 | def test_config_engine_dropbox(self): | CODE |
| LOW | tests/test_config.py | 128 | def test_config_engine_filesystem_absolute(self): | CODE |
| LOW | tests/test_config.py | 146 | def test_config_engine_filesystem(self): | CODE |
| LOW | tests/test_config.py | 168 | def test_config_engine_google_drive(self): | CODE |
| LOW | tests/test_config.py | 186 | def test_config_engine_icloud(self): | CODE |
| LOW⚡ | tests/test_config.py | 206 | def test_config_engine_filesystem_no_path(self): | CODE |
| LOW⚡ | tests/test_config.py | 210 | def test_config_engine_unknown(self): | CODE |
| LOW⚡ | tests/test_config.py | 214 | def test_config_apps_to_ignore(self): | CODE |
| LOW | tests/test_config.py | 250 | def test_config_apps_to_ignore_and_sync(self): | CODE |
| LOW⚡ | tests/test_config_file_option.py | 20 | def test_config_with_relative_path(self): | CODE |
| LOW⚡ | tests/test_config_file_option.py | 26 | def test_config_with_absolute_path(self): | CODE |
| LOW⚡ | tests/test_config_file_option.py | 33 | def test_mackup_with_config_file(self): | CODE |
| LOW⚡ | tests/test_config_file_option.py | 41 | def test_mackup_without_config_file(self): | CODE |
| LOW⚡ | tests/test_config_file_option.py | 49 | def test_config_file_does_not_exist(self): | CODE |
| LOW⚡ | tests/test_application.py | 52 | def test_copy_files_to_mackup_folder_permission_error(self): | CODE |
| LOW⚡ | tests/test_application.py | 96 | def test_copy_files_to_mackup_folder_permission_error_verbose(self): | CODE |
| LOW⚡ | tests/test_application.py | 137 | def test_copy_files_from_mackup_folder_permission_error(self): | CODE |
| LOW⚡ | tests/test_application.py | 170 | def test_copy_files_from_mackup_folder_permission_error_verbose(self): | CODE |
| LOW⚡ | tests/test_application.py | 211 | def test_copy_files_to_mackup_folder_with_directory_permission_error(self): | CODE |
| LOW⚡ | tests/test_application.py | 245 | def test_copy_files_from_mackup_folder_with_directory_permission_error(self): | CODE |
| LOW⚡ | tests/test_application.py | 279 | def test_copy_files_to_mackup_folder_dry_run_no_permission_error(self): | CODE |
| LOW⚡ | tests/test_application.py | 316 | def test_copy_files_from_mackup_folder_dry_run_no_permission_error(self): | CODE |
| LOW⚡ | tests/test_application.py | 397 | def test_link_uninstall_mackup_not_a_link(self): | CODE |
| LOW⚡ | tests/test_application.py | 437 | def test_link_uninstall_mackup_points_to_wrong_target(self): | CODE |
| LOW⚡ | tests/test_application.py | 481 | def test_link_uninstall_mackup_points_correctly(self): | CODE |
| LOW⚡ | tests/test_application.py | 517 | def test_copy_files_to_mackup_folder_skips_already_linked_files(self): | CODE |
| LOW⚡ | tests/test_application.py | 563 | def test_copy_files_to_mackup_folder_skips_already_linked_files_verbose(self): | CODE |
| LOW⚡ | tests/test_application.py | 620 | def test_copy_files_to_mackup_folder_backs_up_symlink_to_different_location(self): | CODE |
| LOW | tests/test_application.py | 85 | def test_files_are_sorted_for_deterministic_processing(self): | CODE |
| LOW | tests/test_application.py | 353 | def test_copy_files_to_mackup_folder_decline_replace_skips_copy(self): | CODE |
| LOW | tests/test_application.py | 375 | def test_copy_files_from_mackup_folder_decline_replace_skips_copy(self): | CODE |
| LOW⚡ | tests/test_backup_after_link_install.py | 55 | def test_backup_after_link_install_does_not_delete_mackup_files(self): | CODE |
| LOW | tests/test_backup_after_link_install.py | 136 | def test_backup_after_link_install_verbose_shows_skip_message(self): | CODE |
| LOW⚡ | tests/test_cli.py | 155 | def test_backup_and_restore_full_workflow(self): | CODE |
| LOW⚡ | tests/test_cli.py | 189 | def test_backup_preserves_file_permissions(self): | CODE |
| LOW⚡ | tests/test_cli.py | 207 | def test_restore_with_missing_backup(self): | CODE |
| LOW | tests/test_cli.py | 95 | def test_backup_creates_mackup_folder(self): | CODE |
| LOW | tests/test_cli.py | 128 | def test_restore_copies_file_back(self): | CODE |
| LOW | tests/test_cli.py | 304 | def test_restore_fails_when_mackup_folder_missing(self): | CODE |
| LOW | tests/test_cli.py | 317 | def test_force_and_force_no_are_mutually_exclusive(self): | CODE |
| LOW | tests/test_cli.py | 328 | def test_backup_single_named_app(self): | CODE |
| LOW | tests/test_cli.py | 338 | def test_backup_unsupported_app_exits_with_error(self): | CODE |
| LOW | tests/test_cli.py | 350 | def test_backup_named_app_overrides_config(self): | CODE |
| LOW | tests/test_cli.py | 373 | def test_link_uninstall_single_app_skips_global_teardown(self): | CODE |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_backup_after_link_install.py | 65 | # Step 1: Simulate initial state - files exist in home | COMMENT |
| LOW | tests/test_backup_after_link_install.py | 76 | # Step 2: Run link install | COMMENT |
| LOW | tests/test_backup_after_link_install.py | 109 | # Step 3: Run backup (this is where the edge case would occur) | COMMENT |
| LOW⚡ | tests/test_cli.py | 164 | # Step 1: Backup | COMMENT |
| LOW⚡ | tests/test_cli.py | 172 | # Step 2: Modify original file | COMMENT |
| LOW⚡ | tests/test_cli.py | 181 | # Step 3: Restore (should replace modified file with backup) | COMMENT |
| LOW | doc/configuration_merge_guide.md | 16 | ## Step 0: Read Through This Entire Guide First | COMMENT |
| LOW | doc/configuration_merge_guide.md | 20 | ## Step 1: Determine Which Configuration Files to Merge | COMMENT |
| LOW | doc/configuration_merge_guide.md | 46 | ## Step 2: Prepare Your Workstations for Syncing | COMMENT |
| LOW | doc/configuration_merge_guide.md | 145 | ## Step 3: Push Out the Configuration Files with Mackup | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_utils.py | 44 | # Check if mackup can really delete it | COMMENT |
| LOW⚡ | tests/test_utils.py | 69 | # Check if mackup can really delete it | COMMENT |
| LOW | tests/test_utils.py | 92 | # Check if mackup can copy it | COMMENT |
| LOW | tests/test_utils.py | 120 | # Check if mackup can copy it | COMMENT |
| LOW | tests/test_utils.py | 156 | # Check if mackup can copy it | COMMENT |
| LOW | tests/test_utils.py | 189 | # Check if mackup can copy it | COMMENT |
| LOW | tests/test_utils.py | 230 | # Check if mackup can copy it | COMMENT |
| LOW | tests/test_utils.py | 259 | # Check if mackup can link it and the link points to the correct place | COMMENT |
| LOW | tests/test_cli.py | 29 | # Set HOME to our test directory | COMMENT |
| LOW | src/mackup/application.py | 70 | # Check if home file is a symlink pointing to mackup file | COMMENT |
| LOW | src/mackup/application.py | 222 | # Check if we already have a backup | COMMENT |
| LOW | src/mackup/application.py | 312 | # Check if there is already a file in the home folder | COMMENT |
| LOW | src/mackup/application.py | 365 | # Check if there is a corresponding file in the home folder | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_backup_after_link_install.py | 65 | # Step 1: Simulate initial state - files exist in home | COMMENT |
| LOW | tests/test_backup_after_link_install.py | 76 | # Step 2: Run link install | COMMENT |
| LOW | tests/test_backup_after_link_install.py | 109 | # Step 3: Run backup (this is where the edge case would occur) | COMMENT |
| LOW⚡ | tests/test_cli.py | 164 | # Step 1: Backup | COMMENT |
| LOW⚡ | tests/test_cli.py | 172 | # Step 2: Modify original file | COMMENT |
| LOW⚡ | tests/test_cli.py | 181 | # Step 3: Restore (should replace modified file with backup) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mackup/config.py | 257 | CODE | |
| LOW | src/mackup/appsdb.py | 17 | CODE | |
| LOW | src/mackup/application.py | 50 | CODE | |
| LOW | src/mackup/application.py | 126 | CODE | |
| LOW | src/mackup/application.py | 185 | CODE | |
| LOW | src/mackup/application.py | 269 | CODE | |
| LOW | src/mackup/application.py | 348 | CODE | |
| LOW | src/mackup/utils.py | 153 | CODE | |
| LOW | src/mackup/utils.py | 238 | CODE | |
| LOW | src/mackup/main.py | 258 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | doc/.mackup.cfg | 19 | # If you want to specify another directory, you can use the "file_system" | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | doc/.mackup.cfg | 1 | # | COMMENT |
| LOW | doc/.mackup.cfg | 21 | # files where you explicitly told him to, using the "path" setting. | COMMENT |
| LOW | doc/.mackup.cfg | 41 | # If this list is empty, Mackup will try to sync all the supported | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_config.py | 56 | except Exception: | CODE |
| LOW⚡ | tests/test_cli.py | 221 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | doc/ARCHITECTURE.md | 242 | ├── mackup.py # Core orchestration engine | CODE |