AI Slop Code RIsk Monitor

fastapi/full-stack-fastapi-template

Full-stack web application template with FastAPI, React, SQLModel, PostgreSQL, Vite, Tailwind CSS, shadcn/ui, FastAPI Cloud, and Docker Compose.

5.3 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for fastapi/full-stack-fastapi-template, a TypeScript project with 45,937 GitHub stars. SynthScan examined 18,156 lines of code across 215 source files, recording 73 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 5.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.

5.3
Adjusted Signal
5.3
Raw Pattern Score
100%
Time Factor
2026-10-08
Last Push
45.9K
Stars
TypeScript
Language
18.2K
Lines of Code
215
Files
73
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 20.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.7/100 · LOW

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

Agent Over-Engineering Ratio 12.7/100 · LOW

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

PR Review Velocity Impact 23.0/100 · LOW

Which changes need focused human review? 73 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 0MEDIUM 11LOW 62

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 73 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.

Hyper-Verbose Identifiers46 hits · 48 pts
SeverityFileLineSnippetContext
LOWbackend/app/utils.py70def generate_reset_password_email(email_to: str, email: str, token: str) -> EmailData:CODE
LOWbackend/app/utils.py87def generate_new_account_email(CODE
LOWbackend/app/utils.py105def generate_password_reset_token(email: str) -> str:CODE
LOWbackend/app/utils.py118def verify_password_reset_token(token: str) -> str | None:CODE
LOWbackend/app/main.py14def custom_generate_unique_id(route: APIRoute) -> str:CODE
LOWbackend/app/core/config.py80 def _enforce_non_default_secrets(self) -> Self:CODE
LOWbackend/app/api/deps.py52def get_current_active_superuser(current_user: CurrentUser) -> User:CODE
LOWbackend/app/api/routes/login.py105def recover_password_html_content(email: str, session: SessionDep) -> Any:CODE
LOWbackend/tests/conftest.py39def normal_user_token_headers(client: TestClient, db: Session) -> dict[str, str]:CODE
LOWbackend/tests/utils/user.py10def user_authentication_headers(CODE
LOWbackend/tests/utils/user.py30def authentication_token_from_email(CODE
LOWbackend/tests/utils/utils.py17def get_superuser_token_headers(client: TestClient) -> dict[str, str]:CODE
LOW⚡backend/tests/crud/test_user.py30def test_not_authenticate_user(db: Session) -> None:CODE
LOW⚡backend/tests/crud/test_user.py37def test_check_if_user_is_active(db: Session) -> None:CODE
LOW⚡backend/tests/crud/test_user.py45def test_check_if_user_is_active_inactive(db: Session) -> None:CODE
LOW⚡backend/tests/crud/test_user.py53def test_check_if_user_is_superuser(db: Session) -> None:CODE
LOW⚡backend/tests/crud/test_user.py61def test_check_if_user_is_superuser_normal_user(db: Session) -> None:CODE
LOWbackend/tests/api/routes/test_login.py28def test_get_access_token_incorrect_password(client: TestClient) -> None:CODE
LOWbackend/tests/api/routes/test_login.py67def test_recovery_password_user_not_exits(CODE
LOWbackend/tests/api/routes/test_login.py113def test_reset_password_invalid_token(CODE
LOWbackend/tests/api/routes/test_items.py55def test_read_item_not_enough_permissions(CODE
LOWbackend/tests/api/routes/test_items.py100def test_update_item_not_found(CODE
LOWbackend/tests/api/routes/test_items.py114def test_update_item_not_enough_permissions(CODE
LOWbackend/tests/api/routes/test_items.py142def test_delete_item_not_found(CODE
LOWbackend/tests/api/routes/test_items.py154def test_delete_item_not_enough_permissions(CODE
LOWbackend/tests/api/routes/test_users.py15def test_get_users_superuser_me(CODE
LOWbackend/tests/api/routes/test_users.py26def test_get_users_normal_user_me(CODE
LOWbackend/tests/api/routes/test_users.py37def test_create_user_new_email(CODE
LOWbackend/tests/api/routes/test_users.py60def test_get_existing_user_as_superuser(CODE
LOWbackend/tests/api/routes/test_users.py79def test_get_non_existing_user_as_superuser(CODE
LOWbackend/tests/api/routes/test_users.py90def test_get_existing_user_current_user(client: TestClient, db: Session) -> None:CODE
LOWbackend/tests/api/routes/test_users.py117def test_get_existing_user_permissions_error(CODE
LOWbackend/tests/api/routes/test_users.py132def test_get_non_existing_user_permissions_error(CODE
LOWbackend/tests/api/routes/test_users.py146def test_create_user_existing_username(CODE
LOWbackend/tests/api/routes/test_users.py165def test_create_user_by_normal_user(CODE
LOWbackend/tests/api/routes/test_users.py267def test_update_password_me_incorrect_password(CODE
LOWbackend/tests/api/routes/test_users.py282def test_update_user_me_email_exists(CODE
LOWbackend/tests/api/routes/test_users.py300def test_update_password_me_same_password_error(CODE
LOWbackend/tests/api/routes/test_users.py342def test_register_user_already_exists_error(client: TestClient) -> None:CODE
LOWbackend/tests/api/routes/test_users.py384def test_update_user_not_exists(CODE
LOWbackend/tests/api/routes/test_users.py397def test_update_user_email_exists(CODE
LOWbackend/tests/api/routes/test_users.py451def test_delete_user_me_as_superuser(CODE
LOWbackend/tests/api/routes/test_users.py463def test_delete_user_super_user(CODE
LOWbackend/tests/api/routes/test_users.py482def test_delete_user_not_found(CODE
LOWbackend/tests/api/routes/test_users.py493def test_delete_user_current_super_user_error(CODE
LOWbackend/tests/api/routes/test_users.py508def test_delete_user_without_privileges(CODE
Self-Referential Comments11 hits · 33 pts
SeverityFileLineSnippetContext
MEDIUMcompose.override.yml14 # Create an entrypoint "http" listening on port 80COMMENT
MEDIUMcompose.deploy.yml18 # Create an entrypoint "http" listening on port 80COMMENT
MEDIUMcompose.deploy.yml23 # Create an entrypoint "https" listening on port 443COMMENT
MEDIUMcompose.deploy.yml60 # Create a volume to store the certificates, even if the container is recreatedCOMMENT
MEDIUMcompose.yml13 # Create an entrypoint "http" listening on port 80COMMENT
MEDIUMcompose.yml46 # Define the port inside of the Docker service to useCOMMENT
MEDIUMcompose.yml80 # Define the port inside of the Docker service to useCOMMENT
MEDIUM…98dd8ec85a3_edit_replace_id_integers_in_all_models_.py25 # Create a new UUID column with a default UUID valueCOMMENT
MEDIUMbackend/tests/crud/test_user.py101 # Create a bcrypt hash directly (simulating legacy password)COMMENT
MEDIUMbackend/tests/api/routes/test_login.py136 # Create a bcrypt hash directly (simulating legacy password)COMMENT
MEDIUMbackend/tests/api/routes/test_login.py170 # Create an argon2 hash (current default)COMMENT
Fake / Example Data5 hits · 5 pts
SeverityFileLineSnippetContext
LOWfrontend/src/routes/login.tsx91 placeholder="user@example.com"CODE
LOWfrontend/src/routes/recover-password.tsx101 placeholder="user@example.com"CODE
LOWfrontend/src/routes/signup.tsx122 placeholder="user@example.com"CODE
LOWbackend/tests/api/routes/test_login.py54 patch("app.core.config.settings.SMTP_USER", "admin@example.com"),CODE
LOWbackend/tests/api/routes/test_users.py43 patch("app.core.config.settings.SMTP_USER", "admin@example.com"),CODE
Unused Imports5 hits · 5 pts
SeverityFileLineSnippetContext
LOWbackend/app/alembic/env.py1CODE
LOW…rsions/fe56fa70289e_add_created_at_to_user_and_item.py10CODE
LOW…98dd8ec85a3_edit_replace_id_integers_in_all_models_.py10CODE
LOW…sions/1a31ce608336_add_cascade_delete_relationships.py10CODE
LOW…ons/9c0a54914c78_add_max_length_for_string_varchar_.py10CODE
Over-Commented Block4 hits · 4 pts
SeverityFileLineSnippetContext
LOWfrontend/playwright.config.ts41 use: {COMMENT
LOWfrontend/playwright.config.ts61 // storageState: 'playwright/.auth/user.json',COMMENT
LOWbackend/alembic.ini1# A generic, single database configuration.COMMENT
LOWbackend/alembic.ini21# the 'revision' command, regardless of autogenerateCOMMENT
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWbackend/app/initial_data.py8logger = logging.getLogger(__name__)CODE
LOWbackend/app/utils.py16logger = logging.getLogger(__name__)CODE