OneDrive Client for Linux
This report summarizes scanner evidence for abraunegg/onedrive, a Python project with 12,906 GitHub stars. SynthScan examined 72,182 lines of code across 171 source files, recording 524 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 9.3 (Moderate 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? 258 finding(s).
Are imports declared and package/API names verified? 201 finding(s).
Are wrappers, guards, and repeated structures necessary? 222 finding(s).
Which changes need focused human review? 524 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 524 distinct pattern matches across 11 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 | ci/e2e/evaluate_rerun_gate.py | 2 | CODE | |
| LOW | ci/e2e/run.py | 2 | CODE | |
| LOW | ci/e2e/run.py | 10 | CODE | |
| LOW | ci/e2e/run.py | 16 | CODE | |
| LOW | ci/e2e/run_personal_shared_folders.py | 2 | CODE | |
| LOW | ci/e2e/run_personal_shared_folders.py | 9 | CODE | |
| LOW | ci/e2e/build_pr_summary.py | 2 | CODE | |
| LOW | ci/e2e/rerun_failures.py | 2 | CODE | |
| LOW | ci/e2e/run_business_shared_folders.py | 2 | CODE | |
| LOW | ci/e2e/framework/auth_preflight.py | 1 | CODE | |
| LOW | ci/e2e/framework/auth_preflight.py | 5 | CODE | |
| LOW | ci/e2e/framework/docx.py | 1 | CODE | |
| LOW | ci/e2e/framework/database_capture.py | 1 | CODE | |
| LOW | ci/e2e/framework/database_capture.py | 4 | CODE | |
| LOW | ci/e2e/framework/manifest.py | 1 | CODE | |
| LOW | ci/e2e/framework/__init__.py | 1 | CODE | |
| LOW | ci/e2e/framework/__init__.py | 1 | CODE | |
| LOW | ci/e2e/framework/pdf.py | 1 | CODE | |
| LOW | ci/e2e/framework/result.py | 1 | CODE | |
| LOW | ci/e2e/framework/context.py | 1 | CODE | |
| LOW | ci/e2e/framework/utils.py | 1 | CODE | |
| LOW | ci/e2e/framework/xlsx.py | 1 | CODE | |
| LOW | ci/e2e/framework/image.py | 1 | CODE | |
| LOW | ci/e2e/framework/base.py | 1 | CODE | |
| LOW | …al_shared_folders/sfptc0002_clean_monitor_pull_down.py | 1 | CODE | |
| LOW | …al_shared_folders/sfptc0002_clean_monitor_pull_down.py | 8 | CODE | |
| LOW | …tcases_personal_shared_folders/shared_folder_common.py | 1 | CODE | |
| LOW | …tcases_personal_shared_folders/shared_folder_common.py | 12 | CODE | |
| LOW | …sonal_shared_folders/sfptc0001_clean_sync_pull_down.py | 1 | CODE | |
| LOW | …sonal_shared_folders/sfptc0003_sync_list_validation.py | 1 | CODE | |
| LOW | …sonal_shared_folders/sfptc0003_sync_list_validation.py | 3 | CODE | |
| LOW | …iness_shared_folders/bsftc0003_sync_list_validation.py | 1 | CODE | |
| LOW | …iness_shared_folders/bsftc0001_clean_sync_pull_down.py | 1 | CODE | |
| LOW | …sftc0007_direct_shared_office_timestamp_replacement.py | 1 | CODE | |
| LOW | …ss_shared_folders/bsftc0002_clean_monitor_pull_down.py | 1 | CODE | |
| LOW | …ss_shared_folders/bsftc0002_clean_monitor_pull_down.py | 8 | CODE | |
| LOW | …tcases_business_shared_folders/shared_folder_common.py | 1 | CODE | |
| LOW | …/bsftc0005_get_sharepoint_drive_id_while_monitoring.py | 1 | CODE | |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 1 | CODE | |
| LOW | …ess_shared_folders/bsftc0004_shared_files_pull_down.py | 1 | CODE | |
| LOW | …0028_control_character_non_utf8_filename_validation.py | 1 | CODE | |
| LOW | …2e/testcases/tc0026_reserved_device_name_validation.py | 1 | CODE | |
| LOW | ci/e2e/testcases/tc0009_upload_only_no_remote_delete.py | 1 | CODE | |
| LOW | ci/e2e/testcases/tc0009_upload_only_no_remote_delete.py | 10 | CODE | |
| LOW | ci/e2e/testcases/tc0009_upload_only_no_remote_delete.py | 10 | CODE | |
| LOW | …ases/tc0056_monitor_mode_create_then_delete_quickly.py | 1 | CODE | |
| LOW | …ases/tc0056_monitor_mode_create_then_delete_quickly.py | 9 | CODE | |
| LOW | …2e/testcases/tc0010_upload_only_remove_source_files.py | 1 | CODE | |
| LOW | …2e/testcases/tc0010_upload_only_remove_source_files.py | 10 | CODE | |
| LOW | …2e/testcases/tc0010_upload_only_remove_source_files.py | 10 | CODE | |
| LOW | ci/e2e/testcases/monitor_case_base.py | 1 | CODE | |
| LOW | …070_safebackup_new_file_upload_collision_validation.py | 1 | CODE | |
| LOW | …070_safebackup_new_file_upload_collision_validation.py | 4 | CODE | |
| LOW | …070_safebackup_new_file_upload_collision_validation.py | 6 | CODE | |
| LOW | ci/e2e/testcases/tc0011_skip_file_validation.py | 1 | CODE | |
| LOW | ci/e2e/testcases/tc0011_skip_file_validation.py | 10 | CODE | |
| LOW | ci/e2e/testcases/tc0011_skip_file_validation.py | 10 | CODE | |
| LOW | …tc0071_safebackup_metadata_only_identity_validation.py | 1 | CODE | |
| LOW | …tc0071_safebackup_metadata_only_identity_validation.py | 6 | CODE | |
| LOW | …ses/tc0061_remote_move_into_skip_dir_reconciliation.py | 1 | CODE | |
| 141 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/e2e/evaluate_rerun_gate.py | 54 | def _is_non_rerunnable_failure(case: dict[str, Any]) -> bool: | CODE |
| LOW | ci/e2e/framework/auth_preflight.py | 24 | def account_label_for_context(context: E2EContext) -> str: | CODE |
| LOW | ci/e2e/framework/database_capture.py | 17 | def capture_onedrive_databases( | CODE |
| LOW | ci/e2e/framework/pdf.py | 341 | def validate_pdf_pair_backups(backups: dict[str, list[Path]], expected_revision: str) -> str: | CODE |
| LOW | ci/e2e/framework/context.py | 39 | def _parse_scenario_filter_env(raw: str) -> dict[str, set[str]]: | CODE |
| LOW | ci/e2e/framework/context.py | 144 | def default_onedrive_config_dir(self) -> Path: | CODE |
| LOW | ci/e2e/framework/context.py | 156 | def default_refresh_token_path(self) -> Path: | CODE |
| LOW | ci/e2e/framework/context.py | 179 | def ensure_refresh_token_available(self) -> None: | CODE |
| LOW | ci/e2e/framework/context.py | 190 | def selected_scenarios_for_case(self, case_id: str) -> set[str]: | CODE |
| LOW | ci/e2e/framework/context.py | 218 | def validate_generated_config_dir(self, config_dir: Path) -> None: | CODE |
| LOW | ci/e2e/framework/context.py | 262 | def prepare_minimal_config_dir(self, config_dir: Path, config_text: str) -> Path: | CODE |
| LOW | ci/e2e/framework/context.py | 323 | def bootstrap_suite_cleanup_config_dir(self) -> Path: | CODE |
| LOW | ci/e2e/framework/utils.py | 60 | def is_transient_startup_discovery_failure(stdout: str, stderr: str) -> bool: | CODE |
| LOW | ci/e2e/framework/utils.py | 81 | def should_retry_startup_failure(stdout: str, stderr: str, attempt: int, max_attempts: int) -> bool: | CODE |
| LOW | ci/e2e/framework/utils.py | 85 | def run_command_with_startup_retry( | CODE |
| LOW | ci/e2e/framework/utils.py | 173 | def is_protected_suite_cleanup_path(path: Path) -> bool: | CODE |
| LOW | ci/e2e/framework/utils.py | 230 | def perform_full_account_cleanup( | CODE |
| LOW | ci/e2e/framework/utils.py | 383 | def default_onedrive_config_dir_from_env() -> Path: | CODE |
| LOW | ci/e2e/framework/utils.py | 395 | def get_optional_base_config_text() -> str: | CODE |
| LOW | ci/e2e/framework/utils.py | 420 | def compute_quickxor_hash_bytes(data: bytes) -> str: | CODE |
| LOW | ci/e2e/framework/utils.py | 451 | def compute_quickxor_hash_file(path: Path) -> str: | CODE |
| LOW | ci/e2e/framework/xlsx.py | 204 | def mutate_xlsx_pair_revision(path: Path, old_revision: str, new_revision: str) -> None: | STRING |
| LOW | ci/e2e/framework/xlsx.py | 246 | def validate_xlsx_pair_backups(backups: dict[str, list[Path]], expected_revision: str) -> str: | STRING |
| LOW | ci/e2e/framework/image.py | 643 | def mutate_image_set_revision(path: Path, old_revision: str, new_revision: str) -> None: | CODE |
| LOW | ci/e2e/framework/image.py | 700 | def validate_image_set_backups(backups: dict[str, list[Path]], expected_revision: str) -> str: | CODE |
| LOW | ci/e2e/framework/base.py | 168 | def assert_manifest_not_contains(self, entries: list[str], relative_path: str, message: str | None = None) -> None: | CODE |
| LOW | …tcases_personal_shared_folders/shared_folder_common.py | 269 | def validate_expected_manifest( | CODE |
| LOW | …sonal_shared_folders/sfptc0003_sync_list_validation.py | 517 | def _run_local_stale_cleanup_check( | CODE |
| LOW | …iness_shared_folders/bsftc0003_sync_list_validation.py | 245 | def _run_local_stale_cleanup_check( | CODE |
| LOW | …sftc0007_direct_shared_office_timestamp_replacement.py | 148 | def _capture_direct_shared_file_row(self, config_dir: Path) -> dict[str, object]: | CODE |
| LOW | …tcases_business_shared_folders/shared_folder_common.py | 244 | def validate_required_manifest( | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 292 | def _clean_reserved_remote_subtree( | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 412 | def _exercise_timestamp_preserving_replacement( | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 519 | def _exercise_genuine_remote_conflict( | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 714 | def _exercise_pdf_timestamp_preserving_replacement( | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 828 | def _exercise_pdf_genuine_remote_conflict( | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 1052 | def _create_image_replacement( | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 1070 | def _exercise_image_timestamp_preserving_replacement( | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 1195 | def _exercise_image_genuine_remote_conflict( | CODE |
| LOW | …ess_shared_folders/bsftc0004_shared_files_pull_down.py | 172 | def _validate_manifest_and_stdout( | CODE |
| LOW | …0028_control_character_non_utf8_filename_validation.py | 51 | def _extract_bad_filename_archive( | CODE |
| LOW | …0028_control_character_non_utf8_filename_validation.py | 69 | def _collect_extracted_file_entries(self, root_name: str, extract_root: Path) -> list[str]: | CODE |
| LOW⚡ | ci/e2e/testcases/monitor_case_base.py | 124 | def _read_app_logs_from_offset(self, app_log_dir: Path, start_offset: int) -> str: | CODE |
| LOW⚡ | ci/e2e/testcases/monitor_case_base.py | 132 | def _monitor_app_log_dir_for_stdout(self, stdout_file: Path) -> Path: | CODE |
| LOW⚡ | ci/e2e/testcases/monitor_case_base.py | 135 | def _remember_monitor_app_log_offset(self, stdout_file: Path, offset: int) -> None: | CODE |
| LOW⚡ | ci/e2e/testcases/monitor_case_base.py | 140 | def _monitor_app_log_start_offset(self, stdout_file: Path) -> int: | CODE |
| LOW⚡ | ci/e2e/testcases/monitor_case_base.py | 144 | def _read_monitor_output_from_offsets(self, stdout_file: Path, stdout_start_offset: int) -> str: | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 24 | def _normalise_monitor_path_rendering(value: str) -> str: | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 47 | def _find_monitor_pattern_group(self, output: str, pattern_groups: list[list[str]]) -> int: | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 164 | def _wait_for_initial_sync_complete( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 179 | def _wait_for_monitor_stdout_quiet( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 217 | def _prepare_monitor_for_local_mutation( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 243 | def _wait_for_monitor_patterns( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 261 | def _wait_for_stdout_growth_patterns( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 281 | def _wait_for_any_monitor_pattern_group( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 300 | def _wait_for_any_stdout_growth_pattern_group( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 321 | def _wait_for_required_patterns_and_any_group( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 349 | def _wait_for_post_mutation_sync_complete( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 392 | def _launch_monitor_process_raw( | CODE |
| LOW | ci/e2e/testcases/monitor_case_base.py | 419 | def _wait_for_initial_sync_complete_or_transient_failure( | CODE |
| 97 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 516 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 518 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 689 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 691 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 828 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 830 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 938 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 941 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | docs/usage.md | 1238 | # ====================================================================== | COMMENT |
| MEDIUM | docs/usage.md | 1240 | # ====================================================================== | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1258 | # ====================================================================== | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1260 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1262 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1270 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1273 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/usage.md | 1299 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/usage.md | 1301 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/usage.md | 1326 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/usage.md | 1328 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1361 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1363 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1370 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docs/usage.md | 1372 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/usage.md | 1387 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/usage.md | 1391 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | contrib/docker/entrypoint.sh | 5 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | contrib/docker/entrypoint.sh | 10 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | contrib/docker/entrypoint.sh | 26 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | contrib/docker/entrypoint.sh | 28 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | contrib/docker/entrypoint.sh | 71 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | contrib/docker/entrypoint.sh | 73 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | contrib/docker/entrypoint.sh | 233 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | contrib/docker/entrypoint.sh | 235 | # ---------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docs/ubuntu-package-install.md | 262 | #### Step 1: Add the OpenSuSE Build Service repository release key | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 268 | #### Step 2: Add the OpenSuSE Build Service repository | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 274 | #### Step 3: Update your apt package cache | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 277 | #### Step 4: Install 'onedrive' | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 280 | #### Step 5: Read 'Known Issues' with these packages | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 289 | #### Step 1: Add the OpenSuSE Build Service repository release key | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 295 | #### Step 2: Add the OpenSuSE Build Service repository | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 301 | #### Step 3: Update your apt package cache | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 304 | #### Step 4: Install 'onedrive' | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 307 | #### Step 5: Read 'Known Issues' with these packages | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 316 | #### Step 1: Add the OpenSuSE Build Service repository release key | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 322 | #### Step 2: Add the OpenSuSE Build Service repository | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 328 | #### Step 3: Update your apt package cache | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 331 | #### Step 4: Install 'onedrive' | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 334 | #### Step 5: Read 'Known Issues' with these packages | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 343 | #### Step 1: Add the OpenSuSE Build Service repository release key | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 349 | #### Step 2: Add the OpenSuSE Build Service repository | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 355 | #### Step 3: Update your apt package cache | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 358 | #### Step 4: Install 'onedrive' | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 361 | #### Step 5: Read 'Known Issues' with these packages | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 370 | #### Step 1: Add the OpenSuSE Build Service repository release key | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 376 | #### Step 2: Add the OpenSuSE Build Service repository | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 382 | #### Step 3: Update your apt package cache | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 385 | #### Step 4: Install 'onedrive' | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 388 | #### Step 5: Read 'Known Issues' with these packages | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 398 | #### Step 1: Add the OpenSuSE Build Service repository release key | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 404 | #### Step 2: Add the OpenSuSE Build Service repository | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 410 | #### Step 3: Update your apt package cache | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 413 | #### Step 4: Install 'onedrive' | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 416 | #### Step 5: Read 'Known Issues' with these packages | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 425 | #### Step 1: Add the OpenSuSE Build Service repository release key | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 431 | #### Step 2: Add the OpenSuSE Build Service repository | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 437 | #### Step 3: Update your apt package cache | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 440 | #### Step 4: Install 'onedrive' | COMMENT |
| LOW⚡ | docs/ubuntu-package-install.md | 443 | #### Step 5: Read 'Known Issues' with these packages | COMMENT |
| LOW | docs/ubuntu-package-install.md | 34 | ### Step 1: Remove any configured PPA and associated 'onedrive' package and systemd service files | COMMENT |
| LOW | docs/ubuntu-package-install.md | 100 | ### Step 2: Ensure your system is up-to-date | COMMENT |
| LOW | docs/ubuntu-package-install.md | 196 | ### Step 3: Determine what your OS is based on | COMMENT |
| LOW | docs/ubuntu-package-install.md | 212 | ### Step 4: Pick the correct instructions to use | COMMENT |
| LOW | docs/webhooks.md | 38 | ### Step 1: Application configuration | COMMENT |
| LOW | docs/webhooks.md | 62 | ### Step 2: Install and configure 'nginx' | COMMENT |
| LOW | docs/webhooks.md | 106 | ### Step 4: Initial Firewall/Router Configuration | COMMENT |
| LOW | docs/webhooks.md | 113 | ### Step 5: Use Let's Encrypt 'certbot' to create a SSL Certificate and deploy to your 'nginx' webhook configuration | COMMENT |
| LOW | docs/webhooks.md | 152 | ### Step 6: Update 'nginx' to only use TLS 1.2 and TLS 1.3 | COMMENT |
| LOW | docs/webhooks.md | 285 | ### Step 7: Secure your 'nginx' configuration to only allow Microsoft 365 to connect | COMMENT |
| LOW | docs/webhooks.md | 292 | ### Step 8: Test your 'onedrive' application using this configuration | COMMENT |
| LOW | docs/sharepoint-libraries.md | 162 | ### Step 2: Edit new systemd service file | COMMENT |
| LOW | docs/sharepoint-libraries.md | 176 | ### Step 3: Enable the new systemd service | COMMENT |
| LOW | docs/sharepoint-libraries.md | 196 | ### Step 4: Viewing systemd status and logs for the custom service | COMMENT |
| LOW | docs/advanced-usage.md | 114 | ### Step 2: Edit new systemd service file | COMMENT |
| LOW | docs/advanced-usage.md | 129 | ### Step 3: Enable the new systemd service | COMMENT |
| LOW | docs/advanced-usage.md | 149 | ### Step 4: Viewing systemd status and logs for the custom service | COMMENT |
| LOW | docs/national-cloud-deployments.md | 20 | ## Step 1: Register a new application with Microsoft Azure | COMMENT |
| LOW | docs/national-cloud-deployments.md | 43 | ## Step 2: Configure application authentication scopes | COMMENT |
| LOW | docs/national-cloud-deployments.md | 55 | ## Step 3: Validate that the authentication / redirect URI is correct | COMMENT |
| LOW | docs/national-cloud-deployments.md | 70 | ## Step 4: Configure the onedrive client to use new application registration | COMMENT |
| LOW | docs/national-cloud-deployments.md | 83 | ## Step 5: Configure the onedrive client to use the specific Microsoft Azure deployment | COMMENT |
| LOW | docs/national-cloud-deployments.md | 119 | ## Step 6: Authenticate the client | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/e2e/run.py | 209 | CODE | |
| LOW | ci/e2e/run.py | 282 | CODE | |
| LOW | ci/e2e/run_personal_shared_folders.py | 54 | CODE | |
| LOW | ci/e2e/run_personal_shared_folders.py | 109 | CODE | |
| LOW | ci/e2e/run_business_shared_folders.py | 69 | CODE | |
| LOW | ci/e2e/run_business_shared_folders.py | 122 | CODE | |
| LOW | ci/e2e/framework/docx.py | 58 | CODE | |
| LOW | ci/e2e/framework/xlsx.py | 337 | CODE | |
| LOW | ci/e2e/framework/image.py | 69 | CODE | |
| LOW | ci/e2e/framework/image.py | 248 | CODE | |
| LOW | …tcases_personal_shared_folders/shared_folder_common.py | 256 | CODE | |
| LOW | …sonal_shared_folders/sfptc0003_sync_list_validation.py | 666 | CODE | |
| LOW | …iness_shared_folders/bsftc0003_sync_list_validation.py | 393 | CODE | |
| LOW | …tcases_business_shared_folders/shared_folder_common.py | 231 | CODE | |
| LOW | …/bsftc0005_get_sharepoint_drive_id_while_monitoring.py | 41 | CODE | |
| LOW | …e2e/testcases/tc0079_display_sync_status_validation.py | 170 | CODE | |
| LOW | …e2e/testcases/tc0021_resumable_transfers_validation.py | 374 | CODE | |
| LOW | …estcases/tc0085_websocket_wake_during_active_upload.py | 46 | CODE | |
| LOW | ci/e2e/testcases/tc0016_check_nosync_validation.py | 236 | CODE | |
| LOW | …estcases/tc0063_local_parent_rename_during_download.py | 69 | CODE | |
| LOW | …estcases/tc0063_local_parent_rename_during_download.py | 121 | CODE | |
| LOW | …ases/tc0057_recycle_bin_delete_behaviour_validation.py | 377 | CODE | |
| LOW | …0080_monitor_remote_directory_rename_reconciliation.py | 188 | CODE | |
| LOW | …0080_monitor_remote_directory_rename_reconciliation.py | 341 | CODE | |
| LOW | …e2e/testcases/tc0077_timestamp_authority_validation.py | 49 | CODE | |
| LOW | ci/e2e/testcases/tc0015_skip_symlinks_validation.py | 76 | CODE | |
| LOW | …es/tc0087_resync_monitor_working_directory_boundary.py | 32 | CODE | |
| LOW | …es/tc0087_resync_monitor_working_directory_boundary.py | 137 | CODE | |
| LOW | …stcases/tc0083_delta_children_reconciliation_parity.py | 29 | CODE | |
| LOW | …0065_sync_list_remote_directory_move_reconciliation.py | 628 | CODE | |
| LOW | …0065_sync_list_remote_directory_move_reconciliation.py | 1050 | CODE | |
| LOW | …cases/tc0082_single_directory_delete_reconciliation.py | 22 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …tcases_personal_shared_folders/shared_folder_common.py | 263 | except OSError: | CODE |
| HIGH | …sonal_shared_folders/sfptc0003_sync_list_validation.py | 512 | except OSError: | CODE |
| HIGH | …tcases_business_shared_folders/shared_folder_common.py | 238 | except OSError: | CODE |
| HIGH | …tcases/tc0058_monitor_download_only_cleanup_cadence.py | 412 | except FileNotFoundError: | CODE |
| HIGH | …es/tc0087_resync_monitor_working_directory_boundary.py | 165 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/e2e/run.py | 386 | except Exception as exc: | CODE |
| LOW | ci/e2e/run_personal_shared_folders.py | 173 | except Exception as exc: | CODE |
| LOW | ci/e2e/run_business_shared_folders.py | 186 | except Exception as exc: | CODE |
| LOW | ci/e2e/framework/auth_preflight.py | 127 | except Exception as exc: | CODE |
| LOW | …sftc0007_direct_shared_office_timestamp_replacement.py | 607 | except Exception as exc: | CODE |
| LOW | …sftc0007_direct_shared_office_timestamp_replacement.py | 624 | except Exception as exc: | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 1893 | except Exception as exc: | CODE |
| LOW | …0006_sharepoint_shared_folder_timestamp_replacement.py | 1906 | except Exception as exc: | CODE |
| LOW | …e2e/testcases/tc0021_resumable_transfers_validation.py | 1993 | except Exception as exc: | CODE |
| LOW | …e2e/testcases/tc0021_resumable_transfers_validation.py | 2105 | except Exception as exc: | CODE |
| LOW | …e2e/testcases/tc0021_resumable_transfers_validation.py | 2474 | except Exception as exc: | CODE |
| LOW | …e2e/testcases/tc0021_resumable_transfers_validation.py | 2586 | except Exception as exc: | CODE |
| LOW | …e2e/testcases/tc0021_resumable_transfers_validation.py | 2964 | except Exception as exc: | CODE |
| LOW | …e2e/testcases/tc0021_resumable_transfers_validation.py | 3154 | except Exception as exc: | CODE |
| LOW | …cases/tc0081_historical_database_upgrade_validation.py | 443 | except Exception as exc: | CODE |
| LOW | …cases/tc0081_historical_database_upgrade_validation.py | 593 | except Exception as exc: | CODE |
| LOW | …cases/tc0081_historical_database_upgrade_validation.py | 632 | except Exception as exc: | CODE |
| LOW | …cases/tc0081_historical_database_upgrade_validation.py | 734 | except Exception as exc: | CODE |
| LOW | ci/e2e/testcases/tc0016_check_nosync_validation.py | 791 | except Exception as exc: | CODE |
| LOW | …estcases/tc0063_local_parent_rename_during_download.py | 114 | except Exception as exc: # noqa: BLE001 - preserve the exact failure in artifacts | CODE |
| LOW | …e2e/testcases/tc0077_timestamp_authority_validation.py | 881 | except Exception as exc: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …tcases/tc0058_monitor_download_only_cleanup_cadence.py | 407 | # differ across harness/debug paths. | COMMENT |
| MEDIUM | …cases/tc0081_historical_database_upgrade_validation.py | 97 | # workspace retaining usable .git metadata: the E2E harness only needs | COMMENT |
| MEDIUM | …ases/tc0057_recycle_bin_delete_behaviour_validation.py | 531 | # Established harness pattern (TC0079): clone both the complete config | COMMENT |
| MEDIUM | …0065_sync_list_remote_directory_move_reconciliation.py | 1912 | # harness rather than imposing a new combined timing contract. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/e2e/framework/pdf.py | 321 | def set_pdf_pair_mtime(path: Path, times: tuple[float, float]) -> None: | CODE |
| LOW | ci/e2e/framework/xlsx.py | 226 | def set_xlsx_pair_mtime(path: Path, times: tuple[float, float]) -> None: | STRING |
| LOW | ci/e2e/framework/image.py | 676 | def set_image_set_mtime(path: Path, times: tuple[float, float]) -> None: | CODE |
| LOW⚡ | …cases/tc0081_historical_database_upgrade_validation.py | 318 | def _set_database_user_version(db_path: Path, user_version: int) -> None: | CODE |
| LOW | …first_upload_only_timestamp_preservation_validation.py | 46 | def _set_file_mtime(self, path: Path, epoch_seconds: int) -> None: | CODE |
| LOW | …e2e/testcases/tc0077_timestamp_authority_validation.py | 72 | def _set_faketime_offset(self, control_file: Path, offset_seconds: int) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/usage.md | 1241 | # IMPORTANT: | COMMENT |
| LOW | docs/usage.md | 1321 | COMMENT | |
| LOW | docs/usage.md | 1361 | # ---------------------------------------------------------------------- | COMMENT |
| LOW | .github/workflows/spellcheck.yaml | 1 | name: Check Spelling | COMMENT |
| LOW | .github/workflows/spellcheck.yaml | 21 | # | COMMENT |
| LOW | .github/workflows/spellcheck.yaml | 41 | # and configuring the action with `use_sarif: 1` | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …e2e/testcases/tc0079_display_sync_status_validation.py | 516 | # Create an independent mutator from the established clean evaluator state. | COMMENT |