AI Slop Code RIsk Monitor

facet-rs/facet

Rust reflection, serialization, deserialization, pretty printing, etc. — the last proc macro you should need

5.1 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for facet-rs/facet, a Rust project with 2,588 GitHub stars. SynthScan examined 129,519 lines of code across 533 source files, recording 573 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 5.1 (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.1
Adjusted Signal
5.1
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
2.6K
Stars
Rust
Language
129.5K
Lines of Code
533
Files
573
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 19.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.1/100 · LOW

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

Agent Over-Engineering Ratio 2.7/100 · LOW

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

PR Review Velocity Impact 22.2/100 · LOW

Which changes need focused human review? 573 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 0MEDIUM 29LOW 542

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 573 distinct pattern matches across 10 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 Block513 hits · 498 pts
SeverityFileLineSnippetContext
LOW.config/nextest.toml41# Run tests under valgrind with leak checkingCOMMENT
LOWfacet-pretty/src/color.rs1//! Color palettes and terminal theme detection for pretty-printing.COMMENT
LOWfacet-pretty/src/color.rs101 ///COMMENT
LOWfacet-pretty/src/lib.rs1#![warn(missing_docs)]COMMENT
LOWfacet-pretty/src/lib.rs21//! name: String,COMMENT
LOWfacet-pretty/src/printer.rs21use crate::color::ColorGenerator;COMMENT
LOWfacet-pretty/src/printer.rs41 /// Background (#1a1b26)COMMENT
LOWfacet-pretty/src/printer.rs81 // ========================================================================COMMENT
LOWfacet-macros-impl/src/derive.rs1use crate::{ToTokens, *};COMMENT
LOWfacet-macros-impl/src/on_error.rs1use crate::{Delimiter, Group, Ident, Span, TokenStream, TokenTree};COMMENT
LOWfacet-macros-impl/src/lib.rs1// unsynn's Parser API intentionally returns its large Error by value.COMMENT
LOWfacet-macros-impl/src/lib.rs41mod process_struct;COMMENT
LOWfacet-macros-impl/src/extension.rs81 } else {COMMENT
LOWfacet-macros-impl/src/extension.rs121}COMMENT
LOWfacet-macros-impl/src/plugin.rs1//! Plugin system for facet derive macro.COMMENT
LOWfacet-macros-impl/src/plugin.rs201/// This filters out the plugin-system-specific attributes before passingCOMMENT
LOWfacet-macros-impl/src/plugin.rs1321 }COMMENT
LOWfacet-macros-impl/src/process_enum.rs1401 #[automatically_derived]COMMENT
LOWfacet-macros-impl/src/process_enum.rs1421 #attributes_callCOMMENT
LOWfacet-macros-impl/src/process_struct.rs1//! Struct processing and vtable generation for the Facet derive macro.COMMENT
LOWfacet-macros-impl/src/process_struct.rs21//!COMMENT
LOWfacet-macros-impl/src/process_struct.rs41COMMENT
LOWfacet-macros-impl/src/process_struct.rs181 });COMMENT
LOWfacet-macros-impl/src/process_struct.rs481 // Uses prelude aliases for compact output (𝟋VtE, 𝟋VtD)COMMENT
LOWfacet-macros-impl/src/process_struct.rs2581 // Proxy inherent impl (outside the Facet impl so generic params are in scope)COMMENT
LOWfacet-macros-impl/src/attr_grammar/mod.rs1//! Attribute grammar system for declarative extension attribute parsing.COMMENT
LOWfacet-macros-impl/src/attr_grammar/dispatch_attr.rs781 // No value: for Option types, return None; otherwise errorCOMMENT
LOWfacet-macros-impl/src/attr_grammar/dispatch_attr.rs901 return quote_spanned! { span =>COMMENT
LOWfacet-macros-impl/src/attr_grammar/dispatch_attr.rs981 /// A single type in a `list(shape_type)` payload - everything up to the nextCOMMENT
LOWfacet-macros-impl/src/attr_grammar/dispatch_attr.rs1001/// items:COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs61COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs281#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs341 /// If true, generate `<$ty as ::core::default::Default>::default()` when no value provided.COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs361 /// A comma-separated list of types, each converted to a Shape reference.COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs581 }COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs941 // For builtin mode, skip deriving Facet entirely because the derive macroCOMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs1241 @variants { #(#variants_meta),* }COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs1261 // fn is_empty(s: &String) -> bool { ... }COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs1321 }};COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs1341 quote! {COMMENT
LOWfacet-macros-impl/src/attr_grammar/make_parse_attr.rs1401 // import the Attr enum (dependency direction: facet depends on facet-core).COMMENT
LOWfacet-testhelpers/src/lib.rs1#![warn(missing_docs)]COMMENT
LOWfacet-testhelpers/src/lib.rs21//! fn my_test() {COMMENT
LOWfacet-testhelpers/src/lib.rs161///COMMENT
LOWfacet-showcase/src/lib.rs1//! Unified showcase infrastructure for facet format crates.COMMENT
LOWfacet-showcase/src/output.rs1//! Output mode detection and configuration.COMMENT
LOWfacet-macros/src/lib.rs1//! [![Coverage Status](https://coveralls.io/repos/github/facet-rs/facet-macros/badge.svg?branch=main)](https://coverallCOMMENT
LOWfacet-macros/src/lib.rs21#[doc(hidden)]COMMENT
LOWfacet-macros/src/lib.rs41/// Internal proc macro for unified attribute dispatch.COMMENT
LOWfacet-macros/src/lib.rs61/// Internal proc macro for attribute error messages.COMMENT
LOWfacet-macros/src/lib.rs101}COMMENT
LOWfacet-macros/src/lib.rs121/// 3. Call each registered plugin's code generatorCOMMENT
LOWfacet-macros/src/lib.rs141#[doc(hidden)]COMMENT
LOWfacet-macros/src/lib.rs161///COMMENT
LOWfacet-macro-template/src/lib.rs1//! # Facet Macro TemplateCOMMENT
LOWdocs/content/reference/container-attributes.md141COMMENT
LOWfacet-validate/src/lib.rs1//! Validation attributes for facet.COMMENT
LOWfacet-validate/src/lib.rs21//! pub contact_email: String,COMMENT
LOWfacet-validate/src/lib.rs41//! | `min_length` | `validate::min_length = 1` | String, Vec, slices |COMMENT
LOWfacet-validate/src/lib.rs101 ///COMMENT
453 more matches not shown…
Decorative Section Separators24 hits · 72 pts
SeverityFileLineSnippetContext
MEDIUMfacet-reflect/tests/poke/at_path.rs8// ── Test types ──────────────────────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs35// ── Success: struct field mutation ───────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs74// ── Success: list element mutation ──────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs95// ── Success: enum variant field mutation ─────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs136// ── Success: empty path returns root ────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs149// ── Error: root shape mismatch ──────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs161// ── Error: field out of bounds ──────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs182// ── Error: list index out of bounds ─────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs208// ── Error: variant mismatch ─────────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/poke/at_path.rs229// ── Error: unsupported step kinds ───────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs6// ── Test types ──────────────────────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs44// ── Success: struct field ───────────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs81// ── Success: list index ─────────────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs101// ── Success: enum variant + field ───────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs134// ── Success: Option ─────────────────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs150// ── Success: Box (pointer deref) ────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs168// ── Success: map ────────────────────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs186// ── Success: empty path returns root ────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs198// ── Error: root shape mismatch ──────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs211// ── Error: wrong step kind ──────────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs243// ── Error: field out of bounds ──────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs264// ── Error: list index out of bounds ─────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs291// ── Error: enum variant mismatch ────────────────────────────────────COMMENT
MEDIUMfacet-reflect/tests/peek/at_path.rs313// ── Error: option is None ───────────────────────────────────────────COMMENT
Structural Annotation Overuse15 hits · 28 pts
SeverityFileLineSnippetContext
LOWfacet-macros-impl/src/process_enum.rs11/// NOTE: This function generates code that uses short aliases from the 𝟋 prelude.COMMENT
LOWfacet-macros-impl/src/process_enum.rs41/// NOTE: This function generates code that uses short aliases from the 𝟋 prelude.COMMENT
LOW⚡docs/content/reference/field-attributes.md379// Step 1: Create a transparent proxy that wraps StringCOMMENT
LOW⚡docs/content/reference/field-attributes.md384// Step 2: Implement TryFrom for deserialization (Proxy → Color)COMMENT
LOW⚡docs/content/reference/field-attributes.md393// Step 3: Implement TryFrom for serialization (Color → Proxy)COMMENT
LOW⚡docs/content/reference/field-attributes.md402// Step 4: Use the proxy attribute on your fieldCOMMENT
LOW⚡facet-solver/tests/integration/solver.rs472 // Step 1: Probe to find configurationCOMMENT
LOW⚡facet-solver/tests/integration/solver.rs481 // Step 2: Deserialize using resolved configCOMMENT
LOW⚡facet-solver/tests/integration/solver.rs509 // Step 1: Probe to find configurationCOMMENT
LOW⚡facet-solver/tests/integration/solver.rs518 // Step 2: Deserialize using resolved configCOMMENT
LOWfacet-reflect/docs/partial-ownership-redesign.md280### Step 1: Add `iset.unset(idx)` in `begin_nth_struct_field`COMMENT
LOWfacet-reflect/docs/partial-ownership-redesign.md297### Step 2: Verify `end()` already sets isetCOMMENT
LOWfacet-reflect/docs/partial-ownership-redesign.md307### Step 3: Simplify drop logicCOMMENT
LOWfacet-reflect/docs/partial-ownership-redesign.md339### Step 4: Remove `current_child` from Tracker variantsCOMMENT
LOWfacet-reflect/docs/partial-ownership-redesign.md349### Step 5: Rename `is_init` to `state`COMMENT
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALfacet-reflect/src/peek/set.rs103 let iter_init_with_value_fn = self.def.vtable.iter_vtable.init_with_value.unwrap();CODE
CRITICALfacet-reflect/src/peek/map.rs148 let iter_init_with_value_fn = self.def.vtable.iter_vtable.init_with_value.unwrap();CODE
AI Slop Vocabulary5 hits · 14 pts
SeverityFileLineSnippetContext
LOWfacet-solver/src/lib.rs1395 /// # Why not just use `see_key()` results?COMMENT
MEDIUMfacet-macro-parse/src/generic_params.rs438 // Compare string representations for robust assertionCOMMENT
MEDIUMfacet-macro-parse/src/generic_params.rs449 // Compare string representations for robust assertionCOMMENT
MEDIUMfacet-core/src/types/specialization.rs24/// It wraps a value and is used in conjunction with trait implementations that leverageCOMMENT
MEDIUMfacet-core/src/types/specialization.rs36/// trait implementations that leverage Rust's method resolution rules to select differentCOMMENT
Verbosity Indicators4 hits · 9 pts
SeverityFileLineSnippetContext
LOW⚡facet-solver/tests/integration/solver.rs472 // Step 1: Probe to find configurationCOMMENT
LOW⚡facet-solver/tests/integration/solver.rs481 // Step 2: Deserialize using resolved configCOMMENT
LOW⚡facet-solver/tests/integration/solver.rs509 // Step 1: Probe to find configurationCOMMENT
LOW⚡facet-solver/tests/integration/solver.rs518 // Step 2: Deserialize using resolved configCOMMENT
Fake / Example Data7 hits · 8 pts
SeverityFileLineSnippetContext
LOWfacet-pretty/tests/integration/pretty_print.rs41 street: "123 Main St".to_string(),CODE
LOWfacet-pretty/examples/pretty_basic.rs20 street: "123 Main St".to_string(),CODE
LOWfacet-pretty/examples/pretty_showcase.rs341 name: "Acme Corp".into(),CODE
LOWfacet-pretty/examples/pretty_showcase.rs343 street: "123 Main St".into(),CODE
LOWfacet-reflect/tests/partial/misc.rs1334 .set("John Doe".to_string())?CODE
LOWfacet-reflect/tests/partial/misc.rs1344 name: "John Doe".to_string(),CODE
LOWfacet-reflect/src/partial/mod.rs32//! partial = partial.set_field("street", "123 Main St")?;COMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMscripts/lldb-wrapper.sh5# Create a temp script that conditionally shows backtraceCOMMENT
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/lldb-crash-handler.py34 # Check if stopped due to signal (crash)COMMENT
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOWscripts/lldb-crash-handler.py10CODE