AI Slop Code RIsk Monitor

coderamp-labs/gitingest

Replace 'hub' with 'ingest' in any GitHub URL to get a prompt-friendly extract of a codebase

16.2 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for coderamp-labs/gitingest, a Python project with 15,894 GitHub stars. SynthScan examined 11,101 lines of code across 95 source files, recording 150 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 16.2 (Elevated 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.

16.2
Adjusted Signal
16.2
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
15.9K
Stars
Python
Language
11.1K
Lines of Code
95
Files
150
Pattern Hits
2026-10-12
Scan Date
0.01
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 36.8/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 82 finding(s).

Hallucinated Dependency & Supply Chain Risk 20.2/100 · LOW

Are imports declared and package/API names verified? 50 finding(s).

Agent Over-Engineering Ratio 33.5/100 · MEDIUM

Are wrappers, guards, and repeated structures necessary? 80 finding(s).

PR Review Velocity Impact 54.5/100 · HIGH

Which changes need focused human review? 150 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 1MEDIUM 10LOW 139

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 150 distinct pattern matches across 12 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.

Hyper-Verbose Identifiers59 hits · 60 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py30def get_ensure_git_installed_call_count() -> int:CODE
LOWtests/test_notebook_utils.py14def test_process_notebook_all_cells(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_notebook_utils.py48def test_process_notebook_with_worksheets(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_notebook_utils.py80def test_process_notebook_multiple_worksheets(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_notebook_utils.py118def test_process_notebook_code_only(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_notebook_utils.py139def test_process_notebook_markdown_only(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_notebook_utils.py161def test_process_notebook_raw_only(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_notebook_utils.py183def test_process_notebook_empty_cells(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_notebook_utils.py206def test_process_notebook_invalid_cell_type(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_notebook_utils.py225def test_process_notebook_with_output(write_notebook: WriteNotebookFunc) -> None:CODE
LOWtests/test_git_utils.py35def test_validate_github_token_valid(token: str) -> None:CODE
LOWtests/test_git_utils.py52def test_validate_github_token_invalid(token: str) -> None:CODE
LOWtests/test_git_utils.py113def test_create_git_auth_header(token: str) -> None:CODE
LOWtests/test_git_utils.py129def test_create_git_repo_helper_calls(CODE
LOWtests/test_git_utils.py195def test_create_git_auth_header_with_ghe_url(token: str, url: str, expected_hostname: str) -> None:CODE
LOWtests/test_git_utils.py234def test_create_git_repo_with_ghe_urls(CODE
LOWtests/test_git_utils.py264def test_create_git_repo_ignores_non_github_urls(CODE
LOW⚡tests/test_gitignore_feature.py35def test_load_gitignore_patterns(tmp_path: Path) -> None:CODE
LOWtests/test_gitignore_feature.py52async def test_ingest_with_gitignore(repo_path: Path) -> None:CODE
LOWtests/test_clone.py70async def test_clone_nonexistent_repository(repo_exists_true: AsyncMock) -> None:CODE
LOWtests/test_clone.py121async def test_clone_without_commit(repo_exists_true: AsyncMock, gitpython_mocks: dict) -> None:CODE
LOWtests/test_clone.py149async def test_clone_creates_parent_directory(tmp_path: Path, gitpython_mocks: dict) -> None:CODE
LOWtests/test_clone.py170async def test_clone_with_specific_subpath(gitpython_mocks: dict) -> None:CODE
LOWtests/test_clone.py192async def test_clone_with_include_submodules(gitpython_mocks: dict) -> None:CODE
LOWtests/test_clone.py209async def test_check_repo_exists_with_auth_token(mocker: MockerFixture) -> None:CODE
LOWtests/test_pattern_utils.py7def test_process_patterns_empty_patterns() -> None:CODE
LOWtests/test_pattern_utils.py20def test_parse_patterns_valid() -> None:CODE
LOWtests/test_pattern_utils.py33def test_process_patterns_include_and_ignore_overlap() -> None:CODE
LOWtests/test_ingestion.py201def test_include_ignore_patterns(CODE
LOWtests/test_summary.py86def _calculate_expected_lines(ref_type: str, *, is_main_branch: bool) -> int:CODE
LOWtests/test_cli.py62def test_cli_with_stdout_output() -> None:CODE
LOWtests/test_cli.py93def _invoke_isolated_cli_runner(args: list[str]) -> Result:CODE
LOWtests/query_parser/test_query_parser.py42async def test_parse_url_valid_https(url: str, stub_resolve_sha: dict[str, AsyncMock]) -> None:CODE
LOWtests/query_parser/test_query_parser.py51async def test_parse_url_valid_http(url: str, stub_resolve_sha: dict[str, AsyncMock]) -> None:CODE
LOWtests/query_parser/test_query_parser.py90async def test_parse_query_mixed_case(stub_resolve_sha: dict[str, AsyncMock]) -> None:CODE
LOWtests/query_parser/test_query_parser.py106async def test_parse_url_with_subpaths(CODE
LOWtests/query_parser/test_query_parser.py129async def test_parse_url_invalid_repo_structure(stub_resolve_sha: dict[str, AsyncMock]) -> None:CODE
LOWtests/query_parser/test_query_parser.py144async def test_parse_local_dir_path_local_path() -> None:CODE
LOWtests/query_parser/test_query_parser.py160async def test_parse_local_dir_path_relative_path() -> None:CODE
LOWtests/query_parser/test_query_parser.py176async def test_parse_remote_repo_empty_source(stub_resolve_sha: dict[str, AsyncMock]) -> None:CODE
LOWtests/query_parser/test_query_parser.py199async def test_parse_url_branch_and_commit_distinction(CODE
LOWtests/query_parser/test_query_parser.py222async def test_parse_local_dir_path_uuid_uniqueness() -> None:CODE
LOWtests/query_parser/test_query_parser.py237async def test_parse_url_with_query_and_fragment(stub_resolve_sha: dict[str, AsyncMock]) -> None:CODE
LOWtests/query_parser/test_query_parser.py254async def test_parse_url_unsupported_host(stub_resolve_sha: dict[str, AsyncMock]) -> None:CODE
LOWtests/query_parser/test_query_parser.py270async def test_parse_query_with_branch() -> None:CODE
LOWtests/query_parser/test_query_parser.py304async def test_parse_repo_source_with_various_url_patterns(CODE
LOWtests/query_parser/test_query_parser.py330async def _assert_basic_repo_fields(url: str, sha_mock: AsyncMock) -> IngestionQuery:CODE
LOWtests/query_parser/test_git_host_agnostic.py31async def test_parse_query_without_host(CODE
LOWtests/server/test_flow_integration.py49async def test_remote_repository_analysis(request: pytest.FixtureRequest) -> None:CODE
LOWtests/server/test_flow_integration.py74async def test_invalid_repository_url(request: pytest.FixtureRequest) -> None:CODE
LOWtests/server/test_flow_integration.py171async def test_repository_with_patterns(request: pytest.FixtureRequest) -> None:CODE
LOWsrc/server/server_utils.py18async def rate_limit_exception_handler(request: Request, exc: Exception) -> Response:CODE
LOWsrc/static/llms.txt334def ingest_with_token_rotation(repo_url: str, token_manager):CODE
LOWsrc/gitingest/clone.py130async def _perform_post_clone_operations(CODE
LOWsrc/gitingest/utils/query_parser_utils.py101async def _try_domains_for_user_and_repo(user_name: str, repo_name: str, token: str | None = None) -> str:CODE
LOWsrc/gitingest/utils/query_parser_utils.py133def _is_valid_git_commit_hash(commit: str) -> bool:CODE
LOWsrc/gitingest/utils/query_parser_utils.py219def _get_user_and_repo_from_path(path: str) -> tuple[str, str]:CODE
LOWsrc/gitingest/utils/os_utils.py6async def ensure_directory_exists_or_create(path: Path) -> None:CODE
LOWsrc/gitingest/utils/git_utils.py187async def fetch_remote_branches_or_tags(url: str, *, ref_type: str, token: str | None = None) -> list[str]:CODE
Unused Imports50 hits · 50 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py7CODE
LOWtests/test_git_utils.py7CODE
LOWtests/test_clone.py7CODE
LOWtests/test_ingestion.py7CODE
LOWtests/test_cli.py3CODE
LOWtests/query_parser/test_query_parser.py8CODE
LOWtests/query_parser/test_git_host_agnostic.py7CODE
LOWsrc/server/form_types.py3CODE
LOWsrc/server/routers_utils.py3CODE
LOWsrc/server/models.py3CODE
LOWsrc/server/server_config.py3CODE
LOWsrc/server/s3_utils.py3CODE
LOWsrc/server/query_processor.py3CODE
LOWsrc/server/main.py3CODE
LOWsrc/server/routers/__init__.py3CODE
LOWsrc/server/routers/__init__.py4CODE
LOWsrc/server/routers/__init__.py5CODE
LOWsrc/gitingest/query_parser.py3CODE
LOWsrc/gitingest/ingestion.py3CODE
LOWsrc/gitingest/output_formatter.py3CODE
LOWsrc/gitingest/__init__.py3CODE
LOWsrc/gitingest/__init__.py3CODE
LOWsrc/gitingest/entrypoint.py3CODE
LOWsrc/gitingest/__main__.py4CODE
LOWsrc/gitingest/clone.py3CODE
LOWsrc/gitingest/utils/query_parser_utils.py3CODE
LOWsrc/gitingest/utils/auth.py3CODE
LOWsrc/gitingest/utils/logging_config.py7CODE
LOWsrc/gitingest/utils/ignore_patterns.py3CODE
LOWsrc/gitingest/utils/ingestion_utils.py3CODE
LOWsrc/gitingest/utils/compat_typing.py4CODE
LOWsrc/gitingest/utils/compat_typing.py9CODE
LOWsrc/gitingest/utils/compat_typing.py9CODE
LOWsrc/gitingest/utils/compat_typing.py14CODE
LOWsrc/gitingest/utils/compat_typing.py6CODE
LOWsrc/gitingest/utils/compat_typing.py11CODE
LOWsrc/gitingest/utils/compat_typing.py11CODE
LOWsrc/gitingest/utils/compat_typing.py16CODE
LOWsrc/gitingest/utils/pattern_utils.py3CODE
LOWsrc/gitingest/utils/file_utils.py3CODE
LOWsrc/gitingest/utils/notebook.py3CODE
LOWsrc/gitingest/utils/git_utils.py3CODE
LOWsrc/gitingest/schemas/ingestion.py3CODE
LOWsrc/gitingest/schemas/filesystem.py3CODE
LOWsrc/gitingest/schemas/cloning.py3CODE
LOWsrc/gitingest/schemas/__init__.py3CODE
LOWsrc/gitingest/schemas/__init__.py4CODE
LOWsrc/gitingest/schemas/__init__.py4CODE
LOWsrc/gitingest/schemas/__init__.py4CODE
LOWsrc/gitingest/schemas/__init__.py5CODE
Self-Referential Comments5 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_gitignore_feature.py24 # Create a file that should be includedCOMMENT
MEDIUM⚡tests/test_gitignore_feature.py28 # Create a file that should be excludedCOMMENT
MEDIUMsrc/server/main.py87 # Define the default allowed hosts for the applicationCOMMENT
MEDIUMsrc/server/metrics_server.py10# Create a logger for this moduleCOMMENT
MEDIUMsrc/server/metrics_server.py13# Create a separate FastAPI app for metricsCOMMENT
Redundant / Tautological Comments7 hits · 13 pts
SeverityFileLineSnippetContext
LOWsrc/server/query_processor.py98 # Check if file exists on S3COMMENT
LOWsrc/server/query_processor.py281 # Check if digest already exists on S3 before cloningCOMMENT
LOW⚡src/server/main.py48 # Set traces_sample_rate to capture transactions for tracingCOMMENT
LOW⚡src/server/main.py50 # Set profile_session_sample_rate to profile sessionsCOMMENT
LOW⚡src/server/main.py52 # Set profile_lifecycle to automatically run the profilerCOMMENT
LOWsrc/gitingest/utils/logging_config.py138 # Check if we're in Kubernetes or production environmentCOMMENT
LOWsrc/gitingest/utils/notebook.py47 # Check if the notebook contains worksheetsCOMMENT
Excessive Try-Catch Wrapping10 hits · 10 pts
SeverityFileLineSnippetContext
LOWsrc/server/routers_utils.py54 except Exception as exc:CODE
LOWsrc/server/s3_utils.py383 except Exception as exc:CODE
LOWsrc/server/s3_utils.py462 except Exception as exc:CODE
LOWsrc/server/query_processor.py131 except Exception as exc:CODE
LOWsrc/server/query_processor.py187 except Exception as metadata_exc:CODE
LOWsrc/server/query_processor.py270 except Exception as exc:CODE
LOWsrc/server/query_processor.py307 except Exception as exc:CODE
LOWsrc/gitingest/__main__.py187 except Exception as exc:CODE
LOWsrc/gitingest/utils/git_utils.py104 except Exception as exc:CODE
LOWsrc/gitingest/schemas/filesystem.py134 except Exception as exc:CODE
Decorative Section Separators3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_cli.py72 # ─── core expectations (stdout) ────────────────────────────────────-COMMENT
MEDIUMsrc/static/llms.txt136# ================================================COMMENT
MEDIUMsrc/static/llms.txt138# ================================================COMMENT
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHsrc/gitingest/utils/git_utils.py118except git.GitCommandError:CODE
Modern Structural Boilerplate4 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/server/routers/__init__.py7__all__ = ["dynamic", "index", "ingest"]CODE
LOWsrc/gitingest/__init__.py5__all__ = ["ingest", "ingest_async"]CODE
LOWsrc/gitingest/utils/compat_typing.py18__all__ = ["Annotated", "ParamSpec", "StrEnum", "TypeAlias"]CODE
LOWsrc/gitingest/schemas/__init__.py7__all__ = ["CloneConfig", "FileSystemNode", "FileSystemNodeType", "FileSystemStats", "IngestionQuery"]CODE
AI Slop Vocabulary3 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMtests/conftest.py228 """Provide comprehensive GitPython mocks for testing."""STRING
MEDIUMtests/conftest.py233 """Set up comprehensive GitPython mocks."""STRING
LOWsrc/gitingest/query_parser.py79 # If no extra path parts, just returnCOMMENT
Deep Nesting3 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/server/s3_utils.py486CODE
LOWsrc/gitingest/ingestion.py123CODE
LOWsrc/gitingest/clone.py32CODE
AI Structural Patterns3 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/gitingest/entrypoint.py35CODE
LOWsrc/gitingest/entrypoint.py151CODE
LOWsrc/gitingest/__main__.py117CODE
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOWsrc/static/llms.txt121```COMMENT