AI Slop Code RIsk Monitor

loco-rs/loco

🚂 🦀 The one-person framework for Rust for side-projects and startups

6.7 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for loco-rs/loco, a Rust project with 9,426 GitHub stars. SynthScan examined 104,040 lines of code across 616 source files, recording 497 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 6.7 (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.

6.7
Adjusted Signal
6.7
Raw Pattern Score
100%
Time Factor
2026-09-24
Last Push
9.4K
Stars
Rust
Language
104.0K
Lines of Code
616
Files
497
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 27.0/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 1.1/100 · LOW

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

Agent Over-Engineering Ratio 0.8/100 · LOW

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

PR Review Velocity Impact 28.5/100 · MEDIUM

Which changes need focused human review? 497 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 2HIGH 2MEDIUM 86LOW 407

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 497 distinct pattern matches across 9 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.

Over-Commented Block404 hits · 399 pts
SeverityFileLineSnippetContext
LOWdeny.toml1# cargo-deny — supply-chain policy for the dependency tree.COMMENT
LOWevals/tasks/user-search/wiring/config/test.yaml1# Loco configuration file documentationCOMMENT
LOWevals/tasks/user-search/wiring/config/test.yaml61# Initializers ConfigurationCOMMENT
LOWevals/hidden/links_behavior.rs1//! Hidden behavioural test.COMMENT
LOWloco-new/tests/wizard/new.rs21COMMENT
LOWloco-new/tests/wizard/new.rs41// Serialized: every combo builds into one shared CARGO_TARGET_DIR (seeCOMMENT
LOWloco-new/tests/wizard/new.rs81 true,COMMENT
LOWloco-new/tests/wizard/new.rs141 env_map.insert("DB_IDLE_TIMEOUT".into(), "2000".into());COMMENT
LOWloco-new/tests/wizard/new.rs421COMMENT
LOWloco-new/tests/wizard/new.rs561 // .stderr_null()COMMENT
LOWloco-new/tests/templates/frontend.rs1//! Coverage for the clientside SPA the wizard emits.COMMENT
LOWloco-new/tests/templates/config.rs1//! Every generated config file must be usable by the app that receives it.COMMENT
LOWloco-new/tests/templates/agent_skill.rs1//! Coverage for the agent material every generated app ships.COMMENT
LOWloco-new/base_template/src/models/users.rs281 /// Sets the email verification information for the user andCOMMENT
LOWloco-new/base_template/src/models/users.rs301 /// database.COMMENT
LOWloco-new/base_template/src/models/users.rs321 /// email.COMMENT
LOWloco-new/base_template/src/controllers/page.rs1use loco_rs::prelude::*;COMMENT
LOWloco-new/base_template/src/controllers/auth.rs161#[debug_handler]COMMENT
LOWloco-new/src/lib.rs21/// published 1.0.x, which renders the YAML-safe `<%= ... %>` config delimitersCOMMENT
LOWloco-new/src/lib.rs61 #[cfg_attr(unix, default)]COMMENT
LOWloco-new/src/wizard.rs81#[derive(COMMENT
LOWloco-new/src/generator/executer/mod.rs41 ///COMMENT
LOWloco-new/src/generator/executer/mod.rs61COMMENT
LOWwebsite/src/env.d.ts1/// <reference types="@astrojs/starlight/virtual" />COMMENT
LOWtests/controller/middlewares.rs81 handle.abort();COMMENT
LOWexamples/demo/config/test.yaml1# Loco configuration file documentationCOMMENT
LOWexamples/demo/config/test.yaml61# Initializers ConfigurationCOMMENT
LOWexamples/demo/config/production.yaml1# Loco configuration file documentationCOMMENT
LOWexamples/demo/config/production.yaml41COMMENT
LOWexamples/demo/config/production.yaml61 secure: trueCOMMENT
LOWexamples/demo/config/development.yaml1# Loco configuration file documentationCOMMENT
LOWexamples/demo/config/development.yaml61 # Override the SMTP hello name (default is the machine's hostname)COMMENT
LOWexamples/demo/src/models/users.rs281 /// generates a unique reset password token, and updates it in theCOMMENT
LOWexamples/demo/src/models/users.rs301 /// This method sets the timestamp when the user successfully verifies theirCOMMENT
LOWexamples/demo/src/controllers/auth.rs161#[debug_handler]COMMENT
LOWexamples/reference_spa/config/test.yaml1# Loco configuration file documentationCOMMENT
LOWexamples/reference_spa/config/test.yaml61 # password:COMMENT
LOWexamples/reference_spa/config/production.yaml1# Loco configuration file documentationCOMMENT
LOWexamples/reference_spa/config/production.yaml61 port: <%= get_env(name="MAILER_PORT", default="587") %>COMMENT
LOWexamples/reference_spa/config/development.yaml1# Loco configuration file documentationCOMMENT
LOWexamples/reference_spa/config/development.yaml61 # user:COMMENT
LOWexamples/reference_spa/tests/models/posts.rs21 // query your model, e.g.:COMMENT
LOWexamples/reference_spa/src/models/users.rs281 /// generates a unique reset password token, and updates it in theCOMMENT
LOWexamples/reference_spa/src/models/users.rs301 /// This method sets the timestamp when the user successfully verifies theirCOMMENT
LOWexamples/reference_spa/src/dtos/common.rs1use loco_rs::model::query::PageResponse;COMMENT
LOWexamples/reference_spa/src/controllers/auth.rs161#[debug_handler]COMMENT
LOW.github/workflows/lint-future.yml1name: "[lint:future]"COMMENT
LOW.github/workflows/loco-rs-ci-sanity.yml1# To optimize CI runtime:COMMENT
LOW.github/workflows/docs.yml101 # types. It was never wired up, and by the time it was itCOMMENT
LOW.github/workflows/loco-rs-ci.yml1name: "[loco_rs:ci]"COMMENT
LOWxtask/src/docs_syntax.rs1//! Parse every fenced `rust` block in the docs tree and fail on the ones thatCOMMENT
LOWxtask/src/eval.rs1//! The Loco agent eval: does an agent actually write idiomatic Loco?COMMENT
LOWxtask/src/eval.rs21//! The judge never scores a submission alone. Every task ships a curatedCOMMENT
LOWxtask/src/eval.rs81COMMENT
LOWxtask/src/eval.rs641///COMMENT
LOWxtask/src/versions.rs21const CRATE_VERSION: (&str, &str) = ("Cargo.toml", r"(?m)^version.*$");COMMENT
LOWxtask/src/agent_skill.rs1//! Keeps the `loco` agent skill correct and single-sourced.COMMENT
LOWxtask/src/agent_skill.rs21//!COMMENT
LOWxtask/src/agent_skill.rs41const SKILL_DIR: &str = "skills/loco";COMMENT
LOWxtask/src/agent_skill.rs61/// `.claude/skills/` is the Agent Skills convention; the generated app'sCOMMENT
344 more matches not shown…
Modern AI Meta-Vocabulary72 hits · 218 pts
SeverityFileLineSnippetContext
MEDIUMloco-new/tests/wizard/new.rs52// full-stack SPA: db + clientside — the flagship `generate scaffold` pathCOMMENT
MEDIUMloco-new/tests/templates/frontend.rs78 // The scaffold injects nav entries here. Without the anchor the generatedCOMMENT
MEDIUMloco-new/tests/templates/frontend.rs79 // app is a dead end: you scaffold a resource and nothing links to it.COMMENT
MEDIUMloco-new/tests/templates/config.rs185 // The development JWT secret is generated into the file at scaffold time.COMMENT
MEDIUMloco-new/base_template/frontend/src/routes.tsx7// scaffold:importsCOMMENT
MEDIUMloco-new/base_template/frontend/src/routes.tsx20 // scaffold:routesCOMMENT
MEDIUM…/src/content/docs/docs/explanation/coming-from-axum.md19| A hand-rolled `ApiContext` struct + `AddExtensionLayer`/`State` | `AppContext` (8 fields: `environment`, `db`, `queue_CODE
MEDIUM…ite/src/content/docs/docs/how-to/override-templates.md36# override every template under a folder (e.g. all the scaffold's frontend pages)COMMENT
MEDIUM…ite/src/content/docs/docs/how-to/override-templates.md61# edit .loco-templates/scaffold/api/controller.tCOMMENT
MEDIUMwebsite/src/content/docs/docs/how-to/paginate.md95## 5. The scaffold's typed envelopeCOMMENT
MEDIUMwebsite/src/content/docs/docs/how-to/build-a-spa.md98| `frontend/src/routes.tsx` | imports and routes, injected at the `// scaffold:imports` and `// scaffold:routes` anchorsCODE
MEDIUMwebsite/src/content/docs/docs/how-to/build-a-spa.md194[`examples/reference_spa`](https://github.com/loco-rs/loco/tree/master/examples/reference_spa) in the Loco repository isCODE
MEDIUMwebsite/src/content/docs/docs/how-to/use-generators.md12`cargo loco generate` (alias `g`) is compiled only in debug builds — `#[cfg(debug_assertions)]` gates the whole subcommaCODE
MEDIUMwebsite/src/content/docs/docs/tutorials/the-tour.md21## Models and controllers: a scaffold, and a plain model with a relationCOMMENT
MEDIUMwebsite/src/content/docs/docs/reference/generators.md8`cargo loco generate <kind>` (alias `cargo loco g <kind>`) scaffolds application code from templates baked into the `locCODE
MEDIUMwebsite/src/content/docs/docs/reference/generators.md30### Model, migration, scaffoldCOMMENT
MEDIUMwebsite/src/content/docs/docs/reference/generators.md47# scaffold (model + DTOs + controller; adds React hooks/pages if the app has a frontend/)COMMENT
MEDIUMwebsite/src/content/docs/docs/reference/cli.md172`enum ComponentArg`, `src/cli.rs:173-382` — only present in debug builds (`#[cfg(debug_assertions)]` on `Commands::GenerCODE
MEDIUMexamples/reference_spa/frontend/src/routes.tsx7// scaffold:importsCOMMENT
MEDIUMexamples/reference_spa/frontend/src/routes.tsx24 // scaffold:routesCOMMENT
MEDIUMexamples/reference_spa/tests/requests/posts.rs66/// scaffold's old hand-rolled arithmetic and the framework's `query::paginate`COMMENT
MEDIUMexamples/reference_spa/tests/requests/posts.rs68/// `total_pages` -- which the scaffold's own envelope did not even carry --COMMENT
MEDIUMxtask/src/eval.rs91 /// Flags passed to `loco new`. Tasks sharing a signature share a scaffold.COMMENT
MEDIUMxtask/src/eval.rs302/// The pristine `loco new` scaffold for a task's flags, created on first useCOMMENT
MEDIUMxtask/src/eval.rs331 // Every run starts from the pristine scaffold, so one task cannot inheritCOMMENT
MEDIUMloco-gen/tests/templates/controller.rs70/// the scaffold's `--no-auth`, and it has to reach both the handlers and theCOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs9/// Loco 1.0 ships a single scaffold flavor: DTO + controller + React-SPACOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs15// A flat inventory of every artifact one scaffold emits. Splitting it intoCOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs150 // no `tests/requests/<plural>.rs` is generated for the API scaffold: aCOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs156/// Adaptive scaffold, headless path: with `frontend: false` (a non-clientsideCOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs216/// One scaffold could never catch this. Two can.COMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs285/// `{target}_id` regardless produced a scaffold that referenced a column theCOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs343/// The scaffold is authenticated by default: every handler takes anCOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs484/// Every resource the scaffold generates has to be reachable from somewhereCOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs533/// first: `loco g scaffold task done:bool! title:string!` producedCOMMENT
MEDIUMloco-gen/tests/templates/scaffold.rs589/// A scaffold in an app with no frontend must not emit `#[ts(export)]`.COMMENT
MEDIUM⚡loco-gen/tests/templates/utils.rs49/// `// scaffold:imports` / `// scaffold:routes` anchor comments the ApiCOMMENT
MEDIUM⚡loco-gen/tests/templates/utils.rs50/// scaffold's `frontend_list.t` injects into. The once-per-app baseCOMMENT
MEDIUM⚡loco-gen/tests/templates/utils.rs57// scaffold:importsCOMMENT
MEDIUMloco-gen/tests/templates/utils.rs69 // scaffold:routesCOMMENT
MEDIUMloco-gen/tests/templates/utils.rs95/// `scaffold:nav` anchor the Api scaffold's `frontend_list.t` injects into.COMMENT
MEDIUM⚡loco-gen/tests/templates/anchors.rs4//! `inject-above` in the migrator, `// scaffold:imports` andCOMMENT
MEDIUM⚡loco-gen/tests/templates/anchors.rs5//! `// scaffold:routes` in the SPA route table. An anchor that goes missingCOMMENT
MEDIUM⚡loco-gen/tests/templates/anchors.rs13//! lost both scaffold anchors, so `loco g scaffold` inside the repository's ownCOMMENT
MEDIUMloco-gen/tests/templates/anchors.rs44/// The scaffold also injects a nav entry, so a generated resource is reachableCOMMENT
MEDIUMloco-gen/tests/templates/anchors.rs46/// the anchor and `loco g scaffold` fails outright.COMMENT
MEDIUMloco-gen/tests/templates/anchors.rs68 for anchor in ["// scaffold:imports", "// scaffold:routes"] {CODE
MEDIUMloco-gen/src/controller.rs12/// the body — so this is opt-in (`--auth`), the mirror of the scaffold'sCOMMENT
MEDIUMloco-gen/src/lib.rs106 /// Whether to include timestamps (`created_at``updated_at`at columns) in the scaffoldCOMMENT
MEDIUMloco-gen/src/lib.rs130 /// Unlike the scaffold, a bare controller is public by default — it hasCOMMENT
MEDIUMloco-gen/src/column.rs11//! migration/model/scaffold generators.COMMENT
MEDIUMloco-gen/src/column.rs76/// (HTML/HTMX) scaffold.COMMENT
MEDIUMloco-gen/src/column.rs303 // JSON column. SQLite would accept all three, but the scaffold keeps oneCOMMENT
MEDIUMloco-gen/src/column.rs345/// `SQLite` fails to compile. 64-bit keeps the scaffold portable acrossCOMMENT
MEDIUMloco-gen/src/column.rs407/// scaffold input: these are automatically generated by Loco (`created_at` /COMMENT
MEDIUMloco-gen/src/column.rs414/// Parse raw `(field_name, spec)` scaffold fields into `Column`s, skippingCOMMENT
MEDIUMloco-gen/src/column.rs1038 // portable scaffold must not emit a 32-bit `int`.COMMENT
MEDIUMloco-gen/src/scaffold.rs13/// Loco 1.0 ships a single scaffold flavor built straight fromCOMMENT
MEDIUMloco-gen/src/scaffold.rs37 // - scaffold is never a link tableCOMMENT
MEDIUMloco-gen/src/scaffold.rs164/// `frontend_*.t` templates (`loco-gen/src/templates/scaffold/api/`).COMMENT
12 more matches not shown…
Self-Referential Comments7 hits · 21 pts
SeverityFileLineSnippetContext
MEDIUMevals/tasks/user-search/wiring/config/test.yaml11 # Define the logging format. options: compact, pretty or jsonCOMMENT
MEDIUMexamples/demo/config/test.yaml11 # Define the logging format. options: compact, pretty or jsonCOMMENT
MEDIUMexamples/demo/config/production.yaml16 # Define the logging format. options: compact, pretty or jsonCOMMENT
MEDIUMexamples/demo/config/development.yaml11 # Define the logging format. options: compact, pretty or jsonCOMMENT
MEDIUMexamples/reference_spa/config/test.yaml11 # Define the logging format. options: compact, pretty or jsonCOMMENT
MEDIUMexamples/reference_spa/config/production.yaml16 # Define the logging format. options: compact, pretty or jsonCOMMENT
MEDIUMexamples/reference_spa/config/development.yaml11 # Define the logging format. options: compact, pretty or jsonCOMMENT
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALsrc/cli.rs803 .unwrap_or_else(|| boot_result.app_context.config.server.binding.clone()),CODE
CRITICALsrc/cli.rs979 .unwrap_or_else(|| boot_result.app_context.config.server.binding.clone()),CODE
AI Slop Vocabulary5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMloco-new/base_template/src/controllers/auth.rs180/// This flow enhances security by avoiding traditional passwords and providing a seamless login experience.COMMENT
MEDIUMexamples/demo/src/controllers/auth.rs180/// This flow enhances security by avoiding traditional passwords and providing a seamless login experience.COMMENT
MEDIUMexamples/reference_spa/src/controllers/auth.rs180/// This flow enhances security by avoiding traditional passwords and providing a seamless login experience.COMMENT
MEDIUM.github/workflows/evals.yml34 # The harness drives the installed `loco` binary, which generates fromCOMMENT
MEDIUM.github/workflows/loco-rs-ci-sanity.yml6# we run comprehensive tests to validate every generator commandCOMMENT
Empty Error Handlers2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHevals/grade.py43except json.JSONDecodeError:CODE
HIGHevals/grade.py112except OSError:CODE
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMsrc/errors.rs53 // ─────────────────────────── Client-facing / API errors ───────────────────────────COMMENT
MEDIUMsrc/errors.rs88 // ─────────────────────────── Internal / infrastructure errors ─────────────────────COMMENT
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWwebsite/src/content/docs/docs/how-to/write-task.md102cargo loco task user:create email:user@example.com name:"John Doe" password:secretCODE
LOWsrc/bgworker/redis.rs1435 let args = serde_json::json!({"email": "user@example.com"});CODE
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOWevals/grade.py62CODE