ALIEN is a CUDA-powered artificial life simulation program.
This report summarizes scanner evidence for chrxh/alien, a C++ project with 5,564 GitHub stars. SynthScan examined 160,965 lines of code across 828 source files, recording 400 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 2.5 (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? 389 finding(s).
Are imports declared and package/API names verified? 5 finding(s).
Are wrappers, guards, and repeated structures necessary? 113 finding(s).
Which changes need focused human review? 400 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 400 distinct pattern matches across 13 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 | CMakeLists.txt | 101 | # Force-include: clang-cl requires /FI<path> (no space, MSVC style). | COMMENT |
| LOW | CMakeLists.txt | 121 | # --offload-arch is required at link time to select the correct target. | COMMENT |
| LOW | CMakeLists.txt | 181 | # Force-include the single CUDA->HIP compat header on every HIP translation | COMMENT |
| LOW | CMakeLists.txt | 381 | # The build output directory doubles as the deployment payload | COMMENT |
| LOW | source/McpTools/Impl/McpNetworkTools.cpp | 1 | #include "McpNetworkTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpSimulationTools.cpp | 1 | #include "McpSimulationTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpGenomeEditTools.cpp | 1 | #include "McpGenomeEditTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpSelectionTools.cpp | 1 | #include "McpSelectionTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpTemporalTools.cpp | 1 | #include "McpTemporalTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpGenomeTools.cpp | 1 | #include "McpGenomeTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpEditTools.cpp | 1 | #include "McpEditTools.h" | COMMENT |
| LOW | source/McpTools/Impl/GenomeMassEditService.h | 1 | #pragma once | COMMENT |
| LOW | source/McpTools/Impl/McpInspectionTools.cpp | 1 | #include "McpInspectionTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpDocumentationTools.cpp | 1 | #include "McpDocumentationTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpCreatorTools.cpp | 1 | #include "McpCreatorTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpParameterTools.cpp | 1 | #include "McpParameterTools.h" | COMMENT |
| LOW | source/McpTools/Impl/McpParameterTools.cpp | 21 | COMMENT | |
| LOW | source/McpTools/Impl/McpViewTools.cpp | 1 | #include "McpViewTools.h" | COMMENT |
| LOW | source/McpTools/Impl/GenomeMassEditService.cpp | 1 | #include "GenomeMassEditService.h" | COMMENT |
| LOW | source/McpTools/Impl/McpToolsFacadeImpl.cpp | 1 | #include "McpToolsFacadeImpl.h" | COMMENT |
| LOW | source/McpTools/Impl/McpMassOperationTools.cpp | 1 | #include "McpMassOperationTools.h" | COMMENT |
| LOW | …rce/McpTools/Impl/Tests/GenomeMassEditServiceTests.cpp | 1 | #include <ranges> | COMMENT |
| LOW | source/ConsoleUi/ConsoleInput.cpp | 1 | #include "ConsoleInput.h" | COMMENT |
| LOW | source/Network/McpServer.cpp | 1 | #include "McpServer.h" | COMMENT |
| LOW | source/Server/main.py | 461 | return False | COMMENT |
| LOW | source/Server/main.py | 661 | except (TypeError, ValueError): | COMMENT |
| LOW | source/Gui/Impl/BrowserUserListWidget.cpp | 1 | #include "BrowserUserListWidget.h" | COMMENT |
| LOW | source/Gui/Impl/NodeEditorWidget.cpp | 1 | #include "NodeEditorWidget.h" | COMMENT |
| LOW | source/Gui/Impl/LoginDialog.cpp | 1 | #include "LoginDialog.h" | COMMENT |
| LOW | source/Gui/Impl/ImageToPatternDialog.cpp | 1 | #include "ImageToPatternDialog.h" | COMMENT |
| LOW | source/Gui/Impl/MutationRatesWidget.cpp | 1 | #include "MutationRatesWidget.h" | COMMENT |
| LOW | source/Gui/Impl/AlienGui.h | 1 | #pragma once | COMMENT |
| LOW | source/Gui/Impl/MassEditDialog.cpp | 1 | #include "MassEditDialog.h" | COMMENT |
| LOW | source/Gui/Impl/ConsoleModeController.cpp | 1 | #include "ConsoleModeController.h" | COMMENT |
| LOW | source/Gui/Impl/McpController.cpp | 1 | #include "McpController.h" | COMMENT |
| LOW | source/Gui/Impl/EditSimulationDialog.cpp | 1 | #include "EditSimulationDialog.h" | COMMENT |
| LOW | source/Gui/Impl/DisplaySettingsDialog.cpp | 1 | #include "DisplaySettingsDialog.h" | COMMENT |
| LOW | source/Gui/Impl/GeneGraphWidget.cpp | 1 | #include "GeneGraphWidget.h" | COMMENT |
| LOW | source/Gui/Impl/SimulationParametersMainWindow.cpp | 1 | #include "SimulationParametersMainWindow.h" | COMMENT |
| LOW | source/Gui/Impl/TemporalControlWindow.cpp | 1 | #include "TemporalControlWindow.h" | COMMENT |
| LOW | source/Gui/Impl/OverlayController.cpp | 1 | #include "OverlayController.h" | COMMENT |
| LOW | source/Gui/Impl/SavePictureDialog.cpp | 1 | #include "SavePictureDialog.h" | COMMENT |
| LOW | source/Gui/Impl/PreviewWidget.cpp | 1 | #include "PreviewWidget.h" | COMMENT |
| LOW | source/Gui/Impl/SelectionWidget.cpp | 1 | #include "SelectionWidget.h" | COMMENT |
| LOW | source/Gui/Impl/DocumentationWindow.cpp | 1 | #include "DocumentationWindow.h" | COMMENT |
| LOW | source/Gui/Impl/McpWindow.cpp | 1 | #include "McpWindow.h" | COMMENT |
| LOW | source/Gui/Impl/CreaturePreviewWidget.cpp | 1 | #include "CreaturePreviewWidget.h" | COMMENT |
| LOW | source/Gui/Impl/SimulationInteractionController.cpp | 1 | #include "SimulationInteractionController.h" | COMMENT |
| LOW | source/Gui/Impl/InspectionController.cpp | 1 | #include "InspectionController.h" | COMMENT |
| LOW | source/Gui/Impl/AutosaveWindow.cpp | 1 | #include "AutosaveWindow.h" | COMMENT |
| LOW | source/Gui/Impl/NetworkTransferController.h | 1 | #pragma once | COMMENT |
| LOW | source/Gui/Impl/AutosaveController.cpp | 1 | #include "AutosaveController.h" | COMMENT |
| LOW | source/Gui/Impl/MarkdownRenderer.cpp | 1 | #include "MarkdownRenderer.h" | COMMENT |
| LOW | source/Gui/Impl/EvolutionDashboardWindow.cpp | 1 | #include "EvolutionDashboardWindow.h" | COMMENT |
| LOW | source/Gui/Impl/EditorController.cpp | 1 | #include "EditorController.h" | COMMENT |
| LOW | source/Gui/Impl/AlienGui.cpp | 1 | #include "AlienGui.h" | COMMENT |
| LOW | source/Gui/Impl/SpatialControlWindow.cpp | 1 | #include "SpatialControlWindow.h" | COMMENT |
| LOW | source/Gui/Impl/PictureGuiService.cpp | 1 | #include "PictureGuiService.h" | COMMENT |
| LOW | source/Gui/Impl/MainWindow.cpp | 1 | #include "MainWindow.h" | COMMENT |
| LOW | source/Gui/Impl/MainWindow.cpp | 21 | #include <Engine/Interface/SimulationFacade.h> | COMMENT |
| 202 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | source/Server/main.py | 308 | def _store_active_simulator_count(timestamp: datetime): | CODE |
| LOW⚡ | source/Server/main.py | 317 | def _store_active_simulator_counts_hourly(): | CODE |
| LOW⚡ | source/Server/main.py | 331 | def start_active_simulator_history(): | CODE |
| LOW⚡ | source/Server/main.py | 336 | def stop_active_simulator_history(): | CODE |
| LOW | source/Server/main.py | 258 | def _remove_inactive_simulators(now: float): | CODE |
| LOW | source/Server/main.py | 286 | def get_active_simulator_count(): | CODE |
| LOW | source/Server/main.py | 348 | def get_active_simulator_history(response: Response): | CODE |
| LOW | source/Server/main.py | 486 | def _build_discord_multipart_body(boundary: str, payload: dict, picture: bytes) -> bytes: | CODE |
| LOW | source/Server/main.py | 633 | def _check_password_and_activation_code(user: "User", password: str, activation_code: str) -> bool: | CODE |
| LOW | source/Server/main.py | 1056 | def get_versioned_simulation_list( | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 31 | def test_count_is_zero_without_list_fetches(app_client): | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 35 | def test_list_fetches_are_counted_per_address(app_client): | CODE |
| LOW⚡ | source/Server/tests/test_active_simulators_api.py | 46 | def test_opted_in_clients_are_counted(app_client): | CODE |
| LOW⚡ | source/Server/tests/test_active_simulators_api.py | 52 | def test_opted_out_clients_are_not_counted(app_client): | CODE |
| LOW⚡ | source/Server/tests/test_active_simulators_api.py | 58 | def test_reports_are_counted_per_address(app_client): | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 69 | def test_report_and_list_fetch_from_one_address_count_once(app_client): | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 78 | def test_inactive_simulators_expire(app_client, monkeypatch): | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 91 | def test_addresses_are_not_stored_in_plain_text(app_client): | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 97 | def test_new_simulators_beyond_limit_are_ignored(app_client, monkeypatch): | CODE |
| LOW⚡ | source/Server/tests/test_active_simulators_api.py | 120 | def test_history_is_empty_without_snapshots(app_client): | CODE |
| LOW⚡ | source/Server/tests/test_active_simulators_api.py | 124 | def test_history_is_readable_from_other_origins(app_client): | CODE |
| LOW⚡ | source/Server/tests/test_active_simulators_api.py | 130 | def test_snapshots_store_the_active_simulator_count(app_client, monkeypatch): | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 145 | def test_history_is_sorted_by_time(app_client, monkeypatch): | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 158 | def test_snapshots_are_skipped_during_warm_up(app_client): | CODE |
| LOW | source/Server/tests/test_active_simulators_api.py | 174 | def test_snapshots_are_taken_at_full_hours(app_client, monkeypatch): | CODE |
| LOW | source/Server/tests/conftest.py | 24 | def _bigint_as_integer_in_sqlite(_element, _compiler, **_kw): | CODE |
| LOW⚡ | source/Server/tests/test_users_api.py | 155 | def test_activate_user_with_wrong_code_fails(app_client, helpers): | CODE |
| LOW⚡ | source/Server/tests/test_users_api.py | 161 | def test_activate_user_with_wrong_password_fails(app_client, helpers): | CODE |
| LOW⚡ | source/Server/tests/test_users_api.py | 167 | def test_activate_user_unknown_user_fails(app_client, helpers): | CODE |
| LOW⚡ | source/Server/tests/test_users_api.py | 172 | def test_activate_user_accepts_optional_gpu(app_client, helpers): | CODE |
| LOW⚡ | source/Server/tests/test_users_api.py | 179 | def test_login_success_sets_flags_and_gpu(app_client, helpers): | CODE |
| LOW⚡ | source/Server/tests/test_users_api.py | 611 | def test_reset_password_wrong_email_fails(app_client, helpers): | CODE |
| LOW⚡ | source/Server/tests/test_users_api.py | 621 | def test_reset_password_unknown_user_fails(app_client): | CODE |
| LOW⚡ | source/Server/tests/test_users_api.py | 629 | def test_set_new_password_updates_credentials(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 19 | def test_create_user_succeeds_and_persists_pending_user(app_client): | CODE |
| LOW | source/Server/tests/test_users_api.py | 40 | def test_create_user_rejects_name_with_spaces(app_client): | CODE |
| LOW | source/Server/tests/test_users_api.py | 49 | def test_create_user_rejects_empty_name(app_client): | CODE |
| LOW | source/Server/tests/test_users_api.py | 66 | def test_create_user_replaces_pending_record_with_same_name(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 80 | def test_create_user_rejects_existing_activated_name(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 91 | def test_create_user_rejects_email_of_activated_account(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 106 | def test_create_user_rejects_email_differing_only_in_case_or_spaces(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 117 | def test_create_user_replaces_pending_record_with_same_email(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 129 | def test_create_user_accepts_email_freed_by_deleted_account(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 142 | def test_activate_user_clears_activation_code(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 197 | def test_login_stores_program_version(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 212 | def test_login_without_version_succeeds(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 260 | def test_logout_with_wrong_password_fails(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 269 | def test_refresh_login_accumulates_seconds_capped_per_call(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 322 | def test_refresh_login_caps_long_gap_at_max(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 365 | def test_refresh_login_with_wrong_password_fails(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 375 | def test_refresh_login_updates_gpu(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 393 | def test_refresh_login_without_gpu_keeps_stored_gpu(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 410 | def test_login_resets_clock_so_offline_time_is_not_counted(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 485 | def test_delete_user_removes_row(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 499 | def test_delete_user_cascades_to_userlikes_and_resources(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 555 | def test_delete_user_wrong_password_fails(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 569 | def test_delete_user_unknown_user_fails(app_client): | CODE |
| LOW | source/Server/tests/test_users_api.py | 577 | def test_reset_password_sets_new_activation_code(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 593 | def test_reset_password_accepts_legacy_email_hash(app_client, helpers): | CODE |
| LOW | source/Server/tests/test_users_api.py | 658 | def test_set_new_password_wrong_activation_code_fails(app_client, helpers): | CODE |
| 46 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | resources/docs/first-creature.md | 7 | ## Step 1: Prepare an empty world | COMMENT |
| LOW⚡ | resources/docs/first-creature.md | 19 | ## Step 2: Open the genome editor | COMMENT |
| LOW⚡ | resources/docs/first-creature.md | 29 | ## Step 3: Build a body | COMMENT |
| LOW⚡ | resources/docs/first-creature.md | 38 | ## Step 4: Give it eyes and legs | COMMENT |
| LOW | resources/docs/first-creature.md | 50 | ## Step 5: Bring it to life | COMMENT |
| LOW | resources/docs/first-creature.md | 57 | ## Step 6: Feed it | COMMENT |
| LOW | resources/docs/first-creature.md | 68 | ## Step 7: Let it reproduce | COMMENT |
| LOW | source/Data/MassEditService.cpp | 17 | // Step 1: Group cells by creatureId | COMMENT |
| LOW | source/Data/MassEditService.cpp | 29 | // Step 2: For non-cell objects, find path-connected components via BFS | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | source/Engine/Impl/Tests/RadiationTests.cpp | 19 | // Set a very high radiation rate for all colors as requested | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | source/Server/main.py | 326 | except Exception: | CODE |
| LOW | source/Server/main.py | 542 | except Exception as exc: | CODE |
| LOW | source/Server/main.py | 720 | except Exception as exc: # pragma: no cover - defensive | CODE |
| LOW | source/Server/main.py | 933 | except Exception: | CODE |
| LOW | source/Server/main.py | 1195 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | source/Server/tests/conftest.py | 49 | except AttributeError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | source/Server/main.py | 415 | CODE | |
| LOW | source/Server/main.py | 696 | CODE | |
| LOW | source/Server/main.py | 772 | CODE | |
| LOW | source/Server/main.py | 1275 | CODE | |
| LOW | external/hip/hip_link_win.py | 59 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | source/Server/tests/test_active_simulators_api.py | 3 | CODE | |
| LOW | source/Server/tests/conftest.py | 8 | CODE | |
| LOW | source/Server/tests/conftest.py | 11 | CODE | |
| LOW | source/Server/tests/test_users_api.py | 8 | CODE | |
| LOW | source/Server/tests/test_resources_api.py | 9 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | source/Server/tests/conftest.py | 52 | # Create the schema (the app normally does this in its startup hook). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | source/Data/MassEditService.cpp | 17 | // Step 1: Group cells by creatureId | COMMENT |
| LOW | source/Data/MassEditService.cpp | 29 | // Step 2: For non-cell objects, find path-connected components via BFS | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | source/Server/main.py | 948 | # in that case we count nothing for this refresh and just set | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | external/WinReg/WinReg.hpp | 745 | // Don't forget to NUL-terminate the current string | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | source/Server/tests/conftest.py | 133 | CODE |