Beyond file syncing and sharing, a new way to organize your files with extensible file properties and flexible views
This report summarizes scanner evidence for haiwen/seafile, a C project with 15,407 GitHub stars. SynthScan examined 60,358 lines of code across 128 source files, recording 116 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 2.3 (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? 93 finding(s).
Are imports declared and package/API names verified? 13 finding(s).
Are wrappers, guards, and repeated structures necessary? 29 finding(s).
Which changes need focused human review? 116 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 116 distinct pattern matches across 6 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 | msi/custom/custom.c | 1 | #include <windows.h> | COMMENT |
| LOW | include/seafile-error.h | 1 | #ifndef SEAFILE_ERROR_H | COMMENT |
| LOW | include/seafile-error.h | 21 | #define SEAF_ERR_DIR_MISSING 515 | COMMENT |
| LOW | include/seafile-error.h | 41 | #define SYNC_ERROR_ID_ACCESS_DENIED 10 | COMMENT |
| LOW | include/seafile-error.h | 61 | #define SYNC_ERROR_ID_NO_ERROR 29 | COMMENT |
| LOW | tests/sync-auto-test/test_cases/test_release.py | 301 | # def test_concurrent_mod(): | COMMENT |
| LOW | common/log.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/obj-backend-fs.c | 1 | #ifndef _WIN32_WINNT | COMMENT |
| LOW | common/block-backend-fs.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/rpc-service.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/fs-mgr.h | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/seafile-crypt.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/password-hash.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/common.h | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/common.h | 21 | COMMENT | |
| LOW | common/diff-simple.h | 1 | #ifndef DIFF_SIMPLE_H | COMMENT |
| LOW | common/log.h | 1 | #ifndef LOG_H | COMMENT |
| LOW | common/block-mgr.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/fs-mgr.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/cdc/rabin-checksum.c | 1 | #include <sys/types.h> | COMMENT |
| LOW | common/cdc/cdc.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | common/cdc/cdc.c | 21 | #include "../seafile-crypt.h" | COMMENT |
| LOW | common/index/index.h | 1 | #ifndef INDEX_H | COMMENT |
| LOW | common/index/index.h | 21 | #include <limits.h> | COMMENT |
| LOW | common/index/index.h | 41 | #define S_ISSOCK(x) 0 | COMMENT |
| LOW | common/index/cache-tree.c | 1 | COMMENT | |
| LOW | daemon/seafile-session.h | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/timer.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/job-mgr.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/set-perm.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/wt-monitor-win32.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/wt-monitor-macos.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/repo-mgr.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/repo-mgr.c | 21 | #include "commit-mgr.h" | COMMENT |
| LOW | daemon/seaf-daemon.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/seaf-daemon.c | 21 | #include <glib.h> | COMMENT |
| LOW | daemon/wt-monitor-linux.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/notif-mgr.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/vc-utils.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/seafile-session.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/seafile-session.c | 21 | #include <event2/event_compat.h> | COMMENT |
| LOW | daemon/http-tx-mgr.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/http-tx-mgr.c | 21 | #include <openssl/asn1.h> | COMMENT |
| LOW | daemon/http-tx-mgr.c | 41 | #define HTTP_REQUEST_TIME_OUT 408 | COMMENT |
| LOW | daemon/seafile-config.h | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/seafile-config.h | 21 | #define KEY_ALLOW_INVALID_WORKTREE "allow_invalid_worktree" | COMMENT |
| LOW | daemon/c_bpwrapper.cpp | 101 | #endif | COMMENT |
| LOW | daemon/repo-mgr.h | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/cevent.h | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/clone-mgr.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/sync-mgr.c | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | daemon/sync-mgr.c | 21 | #include <shlobj.h> | COMMENT |
| LOW | lib/utils.h | 1 | /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | COMMENT |
| LOW | lib/utils.h | 21 | #include <glib.h> | COMMENT |
| LOW | lib/utils.h | 41 | #include <errno.h> | COMMENT |
| LOW | lib/utils.h | 61 | #define SEAFILE_CLIENT_VERSION PACKAGE_VERSION | COMMENT |
| LOW | lib/utils.h | 181 | #endif | COMMENT |
| LOW | lib/repo.c | 1 | /* repo.c generated by valac 0.56.7, the Vala compiler | COMMENT |
| LOW | lib/seafile-object.h | 1 | /* seafile-object.h generated by valac 0.56.7, the Vala compiler, do not modify */ | COMMENT |
| LOW | lib/seafile-object.h | 21 | #define SEAFILE_TYPE_REPO (seafile_repo_get_type ()) | COMMENT |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | python/seafile/rpcclient.py | 17 | def seafile_sync_error_id_to_str(): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 22 | def seafile_del_file_sync_error_by_id(): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 32 | def seafile_get_total_block_size(): | CODE |
| LOW | python/seafile/rpcclient.py | 57 | def seafile_set_upload_rate_limit(limit): | CODE |
| LOW | python/seafile/rpcclient.py | 62 | def seafile_set_download_rate_limit(limit): | CODE |
| LOW | python/seafile/rpcclient.py | 128 | def seafile_cancel_clone_task(repo_id): | CODE |
| LOW | python/seafile/rpcclient.py | 138 | def seafile_find_transfer_task(repo_id): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 149 | def seafile_get_repo_sync_task(): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 154 | def seafile_is_auto_sync_enabled(): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 159 | def seafile_get_file_sync_errors(): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 171 | def seafile_set_repo_property(repo_id, key, value): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 176 | def seafile_get_repo_property(repo_id, key): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 181 | def seafile_get_repo_relay_address(repo_id): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 186 | def seafile_get_repo_relay_port(repo_id): | CODE |
| LOW⚡ | python/seafile/rpcclient.py | 191 | def seafile_update_repo_relay_info(repo_id, addr, port): | CODE |
| LOW | python/seafile/rpcclient.py | 206 | def seafile_generate_magic_and_random_key(enc_version, repo_id, password): | CODE |
| LOW | python/seafile/rpcclient.py | 216 | def seafile_add_del_confirmation(key, value): | CODE |
| LOW | scripts/breakpad.py | 29 | def generate_seafile_breakpad_symbol(project_dir, program_name, symbols_output): | CODE |
| LOW | scripts/breakpad.py | 59 | def generate_seafile_gui_breakpad_symbol(project_dir, program_name, symbol_output): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/sync-auto-test/util.py | 26 | except Exception: | CODE |
| HIGH | tests/sync-auto-test/util.py | 43 | except Exception: | CODE |
| HIGH | tests/sync-auto-test/util.py | 113 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/seafile/rpcclient.py | 1 | CODE | |
| LOW | python/seafile/__init__.py | 2 | CODE | |
| LOW | tests/sync-auto-test/test_cases/test_release.py | 3 | CODE | |
| LOW | tests/sync-auto-test/test_cases/test_release.py | 5 | CODE | |
| LOW | tests/sync-auto-test/test_cases/test_release.py | 6 | CODE | |
| LOW | tests/sync-auto-test/test_cases/test_release.py | 7 | CODE | |
| LOW | tests/sync-auto-test/test_cases/test_release.py | 7 | CODE | |
| LOW | scripts/breakpad.py | 10 | CODE | |
| LOW | scripts/breakpad.py | 12 | CODE | |
| LOW | scripts/breakpad.py | 12 | CODE | |
| LOW | scripts/breakpad.py | 12 | CODE | |
| LOW | scripts/breakpad.py | 13 | CODE | |
| LOW | scripts/breakpad.py | 14 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setupwin.py | 169 | except Exception as e: | CODE |
| MEDIUM | msi/strip-files.py | 9 | def do_strip(fn): | CODE |
| LOW | tests/sync-auto-test/util.py | 26 | except Exception: | CODE |
| LOW | tests/sync-auto-test/util.py | 43 | except Exception: | CODE |
| LOW | tests/sync-auto-test/util.py | 113 | except Exception: | CODE |
| MEDIUM | tests/sync-auto-test/util.py | 35 | def clean_sync_data(conf): | CODE |
| MEDIUM | tests/sync-auto-test/util.py | 106 | def clean(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/sync-auto-test/test_cases/test_release.py | 172 | # Create a new file | COMMENT |