Repository Analysis

fallow-rs/fallow

Codebase intelligence for TypeScript and JavaScript. Free static analysis of code and styles: unused code, duplication, circular deps, complexity hotspots, architecture boundaries, design-system drift. Optional paid runtime layer (Fallow Runtime): hot-path review and cold-path deletion evidence from real production traffic.

2.8 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of fallow-rs/fallow, a Rust project with 4,101 GitHub stars. SynthScan v2.0 examined 747,212 lines of code across 1557 source files, recording 1776 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 2.8 places this repository in the Likely human-written band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

2.8
Adjusted Score
2.8
Raw Score
100%
Time Factor
2026-07-14
Last Push
4.1K
Stars
Rust
Language
747.2K
Lines of Code
1.6K
Files
1.8K
Pattern Hits
2026-07-14
Scan Date
0.01
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 6HIGH 4MEDIUM 207LOW 1559

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 1776 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Over-Commented Block1436 hits · 1280 pts
SeverityFileLineSnippetContext
LOWcrates/types/Cargo.toml21COMMENT
LOWcrates/types/src/mcp_manifest.rs1//! Machine-readable manifest of the tools exposed by the fallow MCP server.COMMENT
LOWcrates/types/src/mcp_manifest.rs41 /// Wire tool name (matches the rmcp `#[tool]` method name).COMMENT
LOWcrates/types/src/mcp_manifest.rs421/// - `api_runner`: the `fallow_api::run_*` entry point (the in-process Rust APICOMMENT
LOWcrates/types/src/mcp_manifest.rs441 pub capability: &'static str,COMMENT
LOWcrates/types/src/output_dead_code.rs1//! Typed envelope wrappers for the simple 1:1 dead-code findings whoseCOMMENT
LOWcrates/types/src/output_dead_code.rs101pub struct UnusedFileFinding {COMMENT
LOWcrates/types/src/output_dead_code.rs201#[derive(Debug, Clone, Serialize)]COMMENT
LOWcrates/types/src/output_dead_code.rs261/// Wire-shape envelope for a [`CircularDependency`] finding. MirrorsCOMMENT
LOWcrates/types/src/output_dead_code.rs321#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]COMMENT
LOWcrates/types/src/output_dead_code.rs441 }COMMENT
LOWcrates/types/src/output_dead_code.rs641#[derive(Debug, Clone, Serialize)]COMMENT
LOWcrates/types/src/output_dead_code.rs761pub struct InvalidClientExportFinding {COMMENT
LOWcrates/types/src/output_dead_code.rs861 introduced: None,COMMENT
LOWcrates/types/src/output_dead_code.rs921COMMENT
LOWcrates/types/src/output_dead_code.rs961COMMENT
LOWcrates/types/src/output_dead_code.rs1001COMMENT
LOWcrates/types/src/output_dead_code.rs1041COMMENT
LOWcrates/types/src/output_dead_code.rs1081COMMENT
LOWcrates/types/src/output_dead_code.rs1121COMMENT
LOWcrates/types/src/output_dead_code.rs1161COMMENT
LOWcrates/types/src/output_dead_code.rs1201}COMMENT
LOWcrates/types/src/output_dead_code.rs1241 introduced: None,COMMENT
LOWcrates/types/src/output_dead_code.rs1281 wrapper,COMMENT
LOWcrates/types/src/output_dead_code.rs1301 /// Suggested next steps. Always emitted (possibly empty forCOMMENT
LOWcrates/types/src/output_dead_code.rs1601pub struct UnusedClassMemberFinding {COMMENT
LOWcrates/types/src/output_dead_code.rs1641 member,COMMENT
LOWcrates/types/src/output_dead_code.rs1761}COMMENT
LOWcrates/types/src/output_dead_code.rs1801/// `unused-dev-dependency`.COMMENT
LOWcrates/types/src/output_dead_code.rs1861 }COMMENT
LOWcrates/types/src/output_dead_code.rs2041 }COMMENT
LOWcrates/types/src/output_dead_code.rs2061/// Radix / bits-ui namespace-barrel case where every `index.*` reexportsCOMMENT
LOWcrates/types/src/output_dead_code.rs2241/// `remove-empty-catalog-group` primary. YAML-sourced findings also include aCOMMENT
LOWcrates/types/src/output_dead_code.rs2301COMMENT
LOWcrates/types/src/output_dead_code.rs2421COMMENT
LOWcrates/types/src/output_dead_code.rs2481pub struct MisconfiguredDependencyOverrideFinding {COMMENT
LOWcrates/types/src/output_dead_code.rs2561//COMMENT
LOWcrates/types/src/output_dead_code.rs2841 assert_eq!(COMMENT
LOWcrates/types/src/output_dead_code.rs2941 );COMMENT
LOWcrates/types/src/discover.rs1//! File discovery types: discovered files, file IDs, and entry points.COMMENT
LOWcrates/types/src/discover.rs21#[derive(Debug, Clone)]COMMENT
LOWcrates/types/src/discover.rs41/// let id = FileId(42);COMMENT
LOWcrates/types/src/source_fingerprint.rs1//! Shared source-file fingerprint inputs for cache invalidation.COMMENT
LOWcrates/types/src/lib.rs21pub mod discover;COMMENT
LOWcrates/types/src/lib.rs41pub mod mcp_manifest;COMMENT
LOWcrates/types/src/lib.rs61/// Per-action types attached to health findings, hotspots, refactoringCOMMENT
LOWcrates/types/src/lib.rs81/// Symbol-level trace-chain output contracts.COMMENT
LOWcrates/types/src/results.rs41 /// Total number of entry points detected.COMMENT
LOWcrates/types/src/results.rs61/// UNDERCOUNT is the documented safe direction: a child rendered via a JSXCOMMENT
LOWcrates/types/src/results.rs81 /// `max(p95, 10)` threshold (the same floor coupling concentration uses).COMMENT
LOWcrates/types/src/results.rs101 /// (each capitalized / member JSX tag is one site). SECONDARY context ("incl.COMMENT
LOWcrates/types/src/results.rs121 pub effect: u16,COMMENT
LOWcrates/types/src/results.rs141 /// (source + intermediates + consumer), matching `PropDrillingChain.depth`.COMMENT
LOWcrates/types/src/results.rs161 /// Column of the prop declaration (byte-derived, matching the ReactCOMMENT
LOWcrates/types/src/results.rs181/// `AnalysisResults::react_component_intel` field (likeCOMMENT
LOWcrates/types/src/results.rs201 /// the child five times is five sites but one distinct parent.COMMENT
LOWcrates/types/src/results.rs221/// use std::path::PathBuf;COMMENT
LOWcrates/types/src/results.rs241 pub unused_files: Vec<UnusedFileFinding>,COMMENT
LOWcrates/types/src/results.rs261 /// in [`UnusedDevDependencyFinding`]: same bare struct asCOMMENT
LOWcrates/types/src/results.rs281 /// project-wide. Wrapped in [`UnusedStoreMemberFinding`]: same innerCOMMENT
1376 more matches not shown…
Decorative Section Separators169 hits · 484 pts
SeverityFileLineSnippetContext
MEDIUMcrates/types/src/output_dead_code.rs2045// ── Catalog / dep-override family ───────────────────────────────COMMENT
MEDIUMcrates/types/src/output_dead_code.rs2560// ── Position-0 invariant golden tests ───────────────────────────COMMENT
MEDIUMcrates/types/src/results.rs3837 // ── total_issues / has_issues consistency ──────────────────COMMENT
MEDIUMcrates/types/src/results.rs3847 // ── total_issues counts each category independently ─────────COMMENT
MEDIUMcrates/types/src/results.rs3878 // ── default is truly empty ──────────────────────────────────COMMENT
MEDIUMcrates/types/src/results.rs3903 // ── EntryPointSummary ────────────────────────────────────────COMMENT
MEDIUMcrates/types/src/results.rs3933 // ── sort: unused_files by path ──────────────────────────────COMMENT
MEDIUMcrates/types/src/results.rs3959 // ── sort: unused_exports by path, line, name ────────────────COMMENT
MEDIUMcrates/types/src/results.rs4003 // ── sort: unused_types (same sort as unused_exports) ────────COMMENT
MEDIUMcrates/types/src/results.rs4026 // ── sort: unused_dependencies by path, line, name ───────────COMMENT
MEDIUMcrates/types/src/results.rs4052 // ── sort: unused_dev_dependencies ───────────────────────────COMMENT
MEDIUMcrates/types/src/results.rs4078 // ── sort: unused_optional_dependencies ──────────────────────COMMENT
MEDIUMcrates/types/src/results.rs4183 // ── sort: unlisted_dependencies + inner imported_from ───────COMMENT
MEDIUMcrates/types/src/results.rs4233 // ── sort: duplicate_exports + inner locations ───────────────COMMENT
MEDIUMcrates/types/src/results.rs4279 // ── sort: type_only_dependencies ────────────────────────────COMMENT
MEDIUMcrates/types/src/results.rs4305 // ── sort: test_only_dependencies ────────────────────────────COMMENT
MEDIUMcrates/types/src/results.rs4331 // ── sort: circular_dependencies by files, then length ───────COMMENT
MEDIUMcrates/types/src/results.rs4403 // ── sort: export_usages + inner reference_locations ─────────COMMENT
MEDIUMcrates/types/src/results.rs4454 // ── sort: empty results does not panic ──────────────────────COMMENT
MEDIUMcrates/types/src/results.rs4463 // ── sort: single-element lists remain stable ────────────────COMMENT
MEDIUMcrates/types/src/results.rs4476 // ── serialization ──────────────────────────────────────────COMMENT
MEDIUMcrates/types/src/results.rs4732 // ── clone produces independent copies ───────────────────────COMMENT
MEDIUMcrates/types/src/results.rs4751 // ── export_usages not counted in total_issues ───────────────COMMENT
MEDIUMcrates/types/src/results.rs4769 // ── entry_point_summary not counted in total_issues ─────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs123// ── command-injection (CWE-78), provenance-gated to node:child_process ───────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs158// ── code-injection (CWE-94): eval (ungated) + vm (node:vm) ───────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs194// ── dynamic-regex (CWE-1333), ungated non-literal pattern construction ──────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs424// ── sql-injection (CWE-89), ungated (broad tier) ─────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs498// ── ssrf (CWE-918), ungated (broad tier) ─────────────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs568// ── path-traversal (CWE-22), provenance-gated to node:path ───────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs619// ── open-redirect (CWE-601), ungated (broad tier) ────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs712// ── weak-crypto (CWE-327), provenance-gated to node:crypto ───────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs736// ── unsafe-deserialization (CWE-502): js-yaml + node-serialize ───────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs766// ── prototype-pollution (CWE-1321), ungated (broad tier) ─────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs818// ── zip-slip / tar path traversal (CWE-22), ungated (broad tier) ─────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs840// ── nosql-injection (CWE-943), ungated (broad tier) ──────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs870// ── ssti (CWE-1336), ungated (broad tier) ────────────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs892// ── xxe (CWE-611), ungated (broad tier) ──────────────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs914// ── issue #882 catalogue-only sinks ─────────────────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs914// ── issue #882 catalogue-only sinks ─────────────────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs949// ── secret-pii-log (CWE-532), source-backed logging only ────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs986// ── issue #897 catalogue-only sinks (batch 2) ───────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs986// ── issue #897 catalogue-only sinks (batch 2) ───────────────────────────────COMMENT
MEDIUM…ests/integration_test/security_catalogue_categories.rs1229// ── llm-call-injection (CWE-1427), taint-gated (E11) ─────────────────────────COMMENT
MEDIUMcrates/core/data/tooling.toml27# ── Prefixes: package families where every member is tooling ──────────────COMMENT
MEDIUMcrates/core/data/tooling.toml109# ── Exact package names ───────────────────────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml1013# ════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMcrates/security/data/security_matchers.toml1023# ════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMcrates/security/data/security_matchers.toml1025# ── Angular: DomSanitizer.bypassSecurityTrust* (CWE-79) ─────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml64# ── CWE-79: Dangerous HTML (the proven seed; no provenance needed) ──────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml95# ── CWE-79: Template escape bypass (issue #897) ─────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml113# ── CWE-78: OS command injection ────────────────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml136# ── CWE-94/95: Code injection ───────────────────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml271# ── CWE-89: SQL injection ───────────────────────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml312# ── CWE-918: SSRF ───────────────────────────────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml357# ── CWE-201: Secret-to-network exfil ─────────────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml388# ── CWE-22: Path traversal ──────────────────────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml422# ── CWE-113: HTTP response header injection ─────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml443# ── CWE-601: Open redirect ──────────────────────────────────────────────────COMMENT
MEDIUMcrates/security/data/security_matchers.toml474# ── CWE-346: Wildcard postMessage target origin ─────────────────────────────COMMENT
109 more matches not shown…
Modern AI Meta-Vocabulary28 hits · 80 pts
SeverityFileLineSnippetContext
MEDIUMCHANGELOG.md2218- **Ember.js / Glimmer / Embroider plugin.** New built-in plugin activates on `ember-source`, `ember-cli`, `@embroider/cCODE
MEDIUMCHANGELOG.md2297- **Windows fallow binary now links with a 16 MiB main-thread stack (was 1 MiB, the Windows default).** The new push-to-CODE
MEDIUMCHANGELOG.md2402- **Synthetic Angular `<template>` complexity findings now carry component-inherited CRAP provenance.** When `fallow heaCODE
MEDIUMCHANGELOG.md2454- **Catalog and dependency-override findings now flow through typed `*Finding` envelope wrappers, retiring the legacy `iCODE
MEDIUMCHANGELOG.md2534- **Dependencies imported only from a config file in a hidden directory referenced by `package.json#scripts` are no longCODE
MEDIUMcrates/types/src/output_health.rs329/// untested-file item: an `add-tests` primary action (scaffold tests forCOMMENT
MEDIUMcrates/core/src/plugins/adonis.rs293/// (replacing v5's rc-level `aliases`). The default scaffold ships aCOMMENT
MEDIUMcrates/cli/src/init.rs80 /// first-match value but the AGENTS.md scaffold leaves `- Test:` blankCOMMENT
MEDIUMcrates/cli/src/init.rs278/// Used by `fallow init` (where this is the canonical scaffold) and byCOMMENT
MEDIUMcrates/cli/src/init.rs289 // recommend can never drift on it. init layers its human-oriented scaffoldCOMMENT
MEDIUMcrates/cli/src/init.rs509/// scaffold. The values are globs with no `"`/`\` characters, so a simple quoteCOMMENT
MEDIUMcrates/cli/src/init.rs510/// wrap is sufficient (matching the JSON scaffold's rendering of the same data).COMMENT
MEDIUMcrates/cli/src/init.rs524/// so the TOML scaffold can never drift from the JSON scaffold or fromCOMMENT
MEDIUMcrates/cli/src/init.rs1469 // back to "npm", which must NOT leak into the scaffold.COMMENT
MEDIUMcrates/cli/src/init.rs2203 /// The generated JSON scaffold (also the `fallow fix` missing-config seed viaCOMMENT
MEDIUMcrates/cli/src/init.rs2236 /// The generated TOML scaffold must LOAD through the real config loader withCOMMENT
MEDIUMcrates/cli/src/init.rs2239 /// That sibling test pins the exact key the scaffold writes (`patterns`);COMMENT
MEDIUMcrates/api/src/decision_surface.rs13//! Per the verdict (`.plans/agentic-review-e0-verdict.md`) the decisionCOMMENT
MEDIUMcrates/api/src/decision_surface.rs32//! ## The trust mechanism (anti-hallucination)COMMENT
MEDIUMcrates/extract/src/html.rs72/// interpolation has leaked into a checked-in HTML scaffold.COMMENT
MEDIUMcrates/extract/src/html.rs73/// - `###...###` covers ember-cli blueprint scaffold placeholdersCOMMENT
MEDIUMcrates/extract/src/html.rs73/// - `###...###` covers ember-cli blueprint scaffold placeholdersCOMMENT
MEDIUMcrates/extract/src/cache/types.rs566/// Bumped to 185 on merging the agentic-review branch into main: the LLM-callCOMMENT
MEDIUM.claude/rules/cli-crate.md14- `health/`: complexity analysis. `print_health_result` owns the standalone `fallow health` exit-code gate (issue #786):CODE
MEDIUM.claude/rules/detection.md41- **Package scaffold template assets**: `package.json#files` entries that clearly name runtime-copied template or scaffoCODE
MEDIUM.claude/rules/detection.md185- **Script-referenced hidden directories**: the file walker's hidden-directory filter normally allows only `.storybook` CODE
MEDIUMdocs/output-schema.json3837 "description": "A suggested action attached to a finding in the JSON output. Each finding\ncarries an `actions` arCODE
MEDIUM.cargo/config.toml11# orchestration). POSIX hosts default to 8 MiB so the overflow onlyCOMMENT
Hallucination Indicators6 hits · 75 pts
SeverityFileLineSnippetContext
CRITICAL…ests/integration_test/issue_1785_typed_property_hop.rs111 // `TypeB { a: TypeA }`). A consumer access `this.opts.b.a.leaf.deepM()`COMMENT
CRITICALcrates/api/src/runtime/audit.rs531 duplication_clone_groups: analyses.duplication.output.report.clone_groups.len(),CODE
CRITICALcrates/extract/src/visitor/tests.rs2441 // repeated self-hops (`this.opts.self.self.leaf.deep()`) must terminateCOMMENT
CRITICALcrates/extract/src/visitor/tests.rs2452 this.opts.self.self.leaf.deep();CODE
CRITICALcrates/extract/src/visitor/tests.rs2475 // (`this.opts.b.a.b.a.leaf.deep()`) must terminate and credit theCOMMENT
CRITICALcrates/extract/src/visitor/tests.rs2485 this.opts.b.a.b.a.leaf.deep();CODE
Structural Annotation Overuse32 hits · 55 pts
SeverityFileLineSnippetContext
LOWnpm/fallow/skills/fallow/references/patterns.md31### Step 1: Run full analysisCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md37### Step 2: Review issue countsCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md41### Step 3: Find duplicationCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md47### Step 4: Preview auto-fixCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md53### Step 5: Apply fixes (after user confirmation)COMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md59### Step 6: VerifyCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md318### Step 1: Save current state as baselineCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md324### Step 2: Commit the baselineCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md331### Step 3: CI only fails on NEW issuesCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md337### Step 4: Gradually fix and update baselineCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md395### Step 1: Measure current duplicationCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md403### Step 2: Set threshold slightly above currentCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md413### Step 3: Tighten over timeCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md450### Step 3: Compare resultsCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md460### Step 4: Remove knip configCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md468### Step 1: Preview migrationCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md476### Step 2: Apply migrationCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md507### Step 1: Dry-run firstCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md513### Step 2: Review each proposed changeCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md521### Step 3: Confirm with user before applyingCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md525### Step 4: ApplyCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md531### Step 5: VerifyCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md537### Step 6: Run project testsCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md71### Step 1: Analyze changed filesCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md79### Step 2: If issues found, show specificsCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md429### Step 1: Preview migrationCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md437### Step 2: Apply migrationCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md488### Step 3: Compare resultsCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md627### Step 1: Run combined analysisCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md635### Step 2: Prioritize cleanupCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md696### Step 1: Generate SARIF outputCOMMENT
LOWnpm/fallow/skills/fallow/references/patterns.md702### Step 2: Upload via GitHub ActionCOMMENT
Fake / Example Data37 hits · 37 pts
SeverityFileLineSnippetContext
LOWcrates/core/src/analyze/security/hardcoded_secret.rs428 || lower.contains("placeholder")CODE
LOWcrates/cli/tests/telemetry_tests.rs25 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/telemetry_tests.rs27 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/monorepo_report_paths_tests.rs28 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/monorepo_report_paths_tests.rs30 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/dupes_workspace_tests.rs78 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/dupes_workspace_tests.rs80 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs25 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs27 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs85 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs87 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs940 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs942 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs1025 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs1027 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs1107 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs1109 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs1711 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs1713 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs2679 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs2681 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs2776 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_tests.rs2778 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/changed_workspaces_tests.rs75 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/changed_workspaces_tests.rs77 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/suppressions_tests.rs25 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/suppressions_tests.rs27 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/changed_since_added_files_tests.rs55 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/changed_since_added_files_tests.rs57 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_brief_runtime_focus_tests.rs57 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/tests/audit_brief_runtime_focus_tests.rs59 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/src/audit_tests.rs13 .env("GIT_AUTHOR_EMAIL", "test@test.com")CODE
LOWcrates/cli/src/audit_tests.rs15 .env("GIT_COMMITTER_EMAIL", "test@test.com")CODE
LOWcrates/cli/src/lib.rs5263 for word in ["stub", "placeholder"] {CODE
LOWcrates/extract/src/sfc_template/angular.rs408 "empty" | "default" | "placeholder" | "loading" | "error" => {CODE
LOWcrates/extract/src/template_complexity/mod.rs159 "default" | "placeholder" | "loading" | "error" | "empty" => Ok(Some(after_keyword)),CODE
LOWcrates/engine/src/codeowners.rs703 assert_eq!(co.owner_of(Path::new("index.js")), Some("user@example.com"));CODE
Hyper-Verbose Identifiers27 hits · 27 pts
SeverityFileLineSnippetContext
LOWcrates/napi/index.d.ts412export function detectCircularDependencies(options?: DeadCodeOptions): Promise<DeadCodeReport>;CODE
LOWcrates/napi/types/index.d.ts412export function detectCircularDependencies(options?: DeadCodeOptions): Promise<DeadCodeReport>;CODE
LOWtests/benchmark-corpus/results/dupes-mild.json11 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-mild.json19 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-strict.json11 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-strict.json19 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-semantic.json33 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-semantic.json41 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-defaults.json11 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-defaults.json19 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-weak.json11 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOWtests/benchmark-corpus/results/dupes-weak.json19 "fragment": "import { EventEmitter } from 'events';\n\ninterface DataRecord {\n id: string;\n timestamp: numCODE
LOW…s/benchmark-corpus/src/type1-exact/data-processor-b.ts22export class DataProcessor extends EventEmitter {CODE
LOW…s/benchmark-corpus/src/type1-exact/data-processor-a.ts22export class DataProcessor extends EventEmitter {CODE
LOW.claude/hooks/pre-bash-guard.py155def uses_unbounded_workspace_cargo(command: str, commands: list[list[str]]) -> bool:CODE
LOWscripts/check_telemetry_doc_sync.py48def parse_canonical_allowlist(text: str) -> list[str]:CODE
LOWscripts/check-benchmark-harness.py129def fast_targets_from_generator() -> list[BenchTarget]:CODE
LOWscripts/check-benchmark-harness.py179def assert_codspeed_action_modes(text: str) -> list[str]:CODE
LOWscripts/check-benchmark-harness.py244def validate_required_targets(targets: list[BenchTarget]) -> list[str]:CODE
LOWscripts/public-config-corpus.py510def strip_toml_inline_comment(line: str) -> str:CODE
LOWscripts/public-config-corpus.py530def parse_toml_value_fallback(value: str) -> Any:CODE
LOWscripts/public-config-corpus.py624def strip_jsonc_trailing_commas(content: str) -> str:CODE
LOWnpm/fallow/scripts/verify-binary.js312function currentPlatformPackageName() {CODE
LOWnpm/fallow/scripts/verify-binary.js353function resolvePlatformPackageForVerify(opts) {CODE
LOWnpm/fallow/scripts/run-binary.js20function resolvePlatformPackageName() {CODE
LOWnpm/fallow/scripts/run-binary.js105function writeVerifiedLineIfVersionQuery(verifyResult, version) {CODE
LOWnpm/fallow/scripts/verify-binary.test.js32function makeMismatchedDigestProvider() {CODE
AI Slop Vocabulary6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMcrates/core/src/plugins/supabase.rs49 /// `supabase/functions/` directory are the robust activation signals.COMMENT
MEDIUMcrates/core/src/plugins/registry/mod.rs1112 // and emitting only when an owner is NOT built-in is robust even if aCOMMENT
MEDIUMcrates/cli/tests/common/mod.rs1#![allow(dead_code, reason = "shared harness included by multiple test crates")]COMMENT
MEDIUMcrates/cli/src/ci.rs1478/// CI scripts so the binary is no less robust than the bash glue around itCOMMENT
MEDIUMcrates/engine/tests/dupes_profile.rs132#[ignore = "profiling harness, run manually with -- --ignored"]COMMENT
MEDIUMaction/tests/run.sh1818# Shared mock harness: fallow renders the typed envelope; gh fails on theCOMMENT
Synthetic Comment Markers2 hits · 15 pts
SeverityFileLineSnippetContext
HIGHcrates/mcp/src/server/mod.rs228 /// Audit changed files for dead code, complexity, duplication, and styling. Purpose-built for reviewing AI-generateCOMMENT
HIGHcrates/cli/src/lib.rs1164 /// Purpose-built for reviewing AI-generated code and PR quality gates.COMMENT
Deep Nesting12 hits · 12 pts
SeverityFileLineSnippetContext
LOWtests/benchmark-corpus/evaluate-results.py118CODE
LOWtests/conformance/compare.py113CODE
LOWscripts/scan-hidden-unicode.py99CODE
LOWscripts/scan-hidden-unicode.py191CODE
LOWscripts/scan-hidden-unicode.py230CODE
LOWscripts/public-config-corpus.py443CODE
LOWscripts/public-config-corpus.py487CODE
LOWscripts/public-config-corpus.py510CODE
LOWscripts/public-config-corpus.py543CODE
LOWscripts/public-config-corpus.py567CODE
LOWscripts/public-config-corpus.py624CODE
LOWscripts/public-config-corpus.py659CODE
Example Usage Blocks7 hits · 11 pts
SeverityFileLineSnippetContext
LOWtests/ecosystem/run.sh9# Usage:COMMENT
LOWtests/conformance/verify-fixtures.sh7# Usage:COMMENT
LOWtests/conformance/run.sh6# Usage:COMMENT
LOWtests/conformance/run-all.sh9# Usage:COMMENT
LOWbenchmarks/bench-ci.sh9# Usage:COMMENT
LOWbenchmarks/compare-audit-runtime.sh9# Usage:COMMENT
LOWscripts/alloc-check.sh5# Usage:COMMENT
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMcrates/core/data/tooling.toml8# This file is the single source of truth: it is embedded into the binary viaCOMMENT
MEDIUMcrates/security/data/security_matchers.toml11# This file is the single source of truth: embedded via include_str! and parsedCOMMENT
MEDIUMaction/tests/run.sh2056# Create a pre-computed changed files list (what analyze.sh produces)COMMENT
Unused Imports6 hits · 6 pts
SeverityFileLineSnippetContext
LOWtests/benchmark-corpus/evaluate-results.py12CODE
LOWtests/benchmark-corpus/evaluate-results.py13CODE
LOWscripts/check_telemetry_doc_sync.py37CODE
LOWscripts/check-benchmark-harness.py10CODE
LOWscripts/scan-hidden-unicode.py26CODE
LOWscripts/public-config-corpus.py4CODE
Cross-Language Confusion2 hits · 5 pts
SeverityFileLineSnippetContext
HIGH.claude/hooks/pre-bash-guard.py7(`cargo fmt && git commit`, `A=1 git commit`, `cat x | fallow`) still are.STRING
HIGH.claude/hooks/pre-bash-guard.py105 shlex is quote-aware, so `echo "a && fallow b"` yields a single data tokenSTRING
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWtests/benchmark-corpus/evaluate-results.py205 # Check if this is a cross-category detection (potential FP)COMMENT
LOW.github/workflows/conformance.yml113 # Check if report exists and contains valid JSONCOMMENT
Excessive Try-Catch Wrapping1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMtests/conformance/aggregate.py27 print("Error: no report files found", file=sys.stderr)CODE