AI Slop Code RIsk Monitor

bdring/FluidNC

The next generation of motion control firmware

4.5 Low pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for bdring/FluidNC, a C++ project with 2,593 GitHub stars. SynthScan examined 150,475 lines of code across 813 source files, recording 595 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 4.5 (Low 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.

4.5
Adjusted Signal
4.5
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
2.6K
Stars
C++
Language
150.5K
Lines of Code
813
Files
595
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 17.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.4/100 · LOW

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

Agent Over-Engineering Ratio 3.3/100 · LOW

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

PR Review Velocity Impact 20.1/100 · LOW

Which changes need focused human review? 595 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 7MEDIUM 22LOW 566

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

Over-Commented Block508 hits · 508 pts
SeverityFileLineSnippetContext
LOWbuild-release.py461 # build still boots fine (without PSRAM) on none/Octal modules, same asCOMMENT
LOWplatformio.ini601# Hijacks the "native" platform (same one macos/linux/windows_x86 use) andCOMMENT
LOWplatformio.ini721build_flags = ${tests_common.build_flags} -DVARIANT="coverage" -O0 --coverageCOMMENT
LOWtools/gen_config_docs.py61# concrete type.COMMENT
LOWtools/gen_config_docs.py81# (spi/i2s/uart/i2c) stands alone for a field that IS one of that bus's ownCOMMENT
LOWtools/gen_config_docs.py481 if member:COMMENT
LOWtools/gen_config_docs.py521 elif len(extra) == 1:COMMENT
LOWtools/gen_config_docs.py581 # when @ignore_drift is present: a human has already looked atCOMMENT
LOWtools/build_config_docs.py261# SECTIONS entry has an empty contributor list by design (it defines zeroCOMMENT
LOWFluidNC/posix/SimulatorWebSocketServer.h1#pragma onceCOMMENT
LOWFluidNC/posix/SimulatorWebSocketServer.h21COMMENT
LOWFluidNC/posix/Console.cpp1#include <iostream>COMMENT
LOWFluidNC/posix/Console.cpp21# undef B110COMMENT
LOWFluidNC/posix/Console.cpp41#ifdef B1800COMMENT
LOWFluidNC/posix/Console.cpp61#endifCOMMENT
LOWFluidNC/posix/Console.cpp81# undef B1000000COMMENT
LOWFluidNC/posix/Console.cpp101#ifdef B4000000COMMENT
LOWFluidNC/posix/simulator_engine.cpp1// Simulator stepping engine - tracks motion and sends position updates via WebSocketCOMMENT
LOWFluidNC/posix/Platform.h1#pragma onceCOMMENT
LOWFluidNC/rp2040/StepTimer.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/AsyncTCP.h1#pragma onceCOMMENT
LOWFluidNC/rp2040/nvs.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/FreeRTOS_Compat.cpp1// FreeRTOS compatibility for RP2040COMMENT
LOWFluidNC/rp2040/WifiImpl.cpp1#ifdef PICO_RP2350COMMENT
LOWFluidNC/rp2040/tud_cdc_line_coding_wrapper.cpp1/*COMMENT
LOWFluidNC/rp2040/tud_cdc_line_coding_wrapper.cpp41#endifCOMMENT
LOWFluidNC/rp2040/littlefs.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/localfs.cpp1// Copyright 2025 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/ws2812.h1// --------- //COMMENT
LOWFluidNC/rp2040/gpio.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/pio_engine_delayed.cpp1// Copyright (c) 2024 - Mitch BradleyCOMMENT
LOWFluidNC/rp2040/pio_engine_delayed.cpp161 if (ticks) {COMMENT
LOWFluidNC/rp2040/spi.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/timed_engine.cpp1// Copyright (c) 2024 - Mitch BradleyCOMMENT
LOWFluidNC/rp2040/StepTimer.h1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/rp2040.h1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/sdspi.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/uart.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/delay_usecs.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/Platform.h1// Copyright (c) 2024 - FluidNC RP2040 Port - Platform DefinitionCOMMENT
LOWFluidNC/rp2040/Platform.h21COMMENT
LOWFluidNC/rp2040/Platform.h41inline bool should_exit() {COMMENT
LOWFluidNC/rp2040/fnc_uart.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/VFS.cpp21COMMENT
LOWFluidNC/rp2040/pio_engine.cpp1// Copyright (c) 2024 - Mitch BradleyCOMMENT
LOWFluidNC/rp2040/rp2040.cpp1// Copyright (c) 2024 - FluidNC RP2040 PortCOMMENT
LOWFluidNC/rp2040/sys/statvfs.h1#pragma onceCOMMENT
LOWFluidNC/stdfs/std-path.cpp1// Class filesystem::path -*- C++ -*-COMMENT
LOWFluidNC/stdfs/std-dir.cpp1// Class filesystem::directory_entry etc. -*- C++ -*-COMMENT
LOWFluidNC/stdfs/std-dir.cpp21# define _GLIBCXX_USE_CXX11_ABI 1COMMENT
LOWFluidNC/stdfs/ops-common.h1// Filesystem operation utilities -*- C++ -*-COMMENT
LOWFluidNC/stdfs/std-ops.cpp1// Filesystem operations -*- C++ -*-COMMENT
LOWFluidNC/stdfs/std-ops.cpp21# include "fluidnc_vfs_ops.h"COMMENT
LOWFluidNC/stdfs/std-ops.cpp41# include <sys/stat.h> // stat, utimensat, fchmodatCOMMENT
LOWFluidNC/stdfs/dir-common.h1// Filesystem directory iterator utilities -*- C++ -*-COMMENT
LOWFluidNC/stdfs/dir-common.h21// a copy of the GCC Runtime Library Exception along with this program;COMMENT
LOWFluidNC/stdfs/include/bits/fs_path.h1// Class filesystem::path -*- C++ -*-COMMENT
LOWFluidNC/stdfs/include/bits/fs_path.h21// a copy of the GCC Runtime Library Exception along with this program;COMMENT
LOWFluidNC/stdfs/include/bits/fs_fwd.h1// Filesystem declarations -*- C++ -*-COMMENT
LOWFluidNC/stdfs/include/bits/fs_ops.h1// Filesystem operational functions -*- C++ -*-COMMENT
448 more matches not shown…
Decorative Section Separators15 hits · 45 pts
SeverityFileLineSnippetContext
MEDIUMstack-trace-decoder.html282// ── State ──────────────────────────────────────────────────────────COMMENT
MEDIUMstack-trace-decoder.html299// ── Address extraction ─────────────────────────────────────────────COMMENT
MEDIUMstack-trace-decoder.html335// ── Binary search in sorted symbol table ───────────────────────────COMMENT
MEDIUMstack-trace-decoder.html374// ── Decode ─────────────────────────────────────────────────────────COMMENT
MEDIUMstack-trace-decoder.html463// ── Load .addrinfo from GitHub release ─────────────────────────────COMMENT
MEDIUMstack-trace-decoder.html515// ── Load local .addrinfo file ──────────────────────────────────────COMMENT
MEDIUMstack-trace-decoder.html538// ── Load GitHub releases list ──────────────────────────────────────COMMENT
MEDIUMstack-trace-decoder.html569// ── Helpers ────────────────────────────────────────────────────────COMMENT
MEDIUMstack-trace-decoder.html595// ── Init ───────────────────────────────────────────────────────────COMMENT
MEDIUMplatformio.ini329# ==========================================COMMENT
MEDIUMplatformio.ini331# ==========================================COMMENT
MEDIUMplatformio.ini598# ==========================================COMMENT
MEDIUMplatformio.ini600# ==========================================COMMENT
MEDIUMtools/build_config_docs.py370# ---------------------------------------------------------------------------COMMENT
MEDIUMtools/build_config_docs.py375# ---------------------------------------------------------------------------COMMENT
Empty Error Handlers7 hits · 35 pts
SeverityFileLineSnippetContext
HIGHtools/gen_config_docs.py712except ValueError:CODE
HIGHtools/gen_config_docs.py716except ValueError:CODE
HIGHtools/gen_config_docs.py462except ValueError:CODE
HIGHtools/gen_config_docs.py600except ValueError:CODE
HIGHtools/stack_trace_decoder/generate_addrinfo.py93except FileNotFoundError:CODE
HIGHfluidterm/fluidterm.py30except:CODE
HIGHfluidterm/fluidterm.py514except ValueError:CODE
Deep Nesting20 hits · 20 pts
SeverityFileLineSnippetContext
LOWgenerate_vcxproj.py132CODE
LOWtools/gen_config_docs.py138CODE
LOWtools/gen_config_docs.py468CODE
LOWtools/build_config_docs.py408CODE
LOWtools/build_config_docs.py511CODE
LOWtools/fluidnc_validate_core.py98CODE
LOWtools/fluidnc_validate_core.py242CODE
LOWtools/fluidnc_validate_core.py180CODE
LOWtools/testing/test_pin_numbers.py22CODE
LOWtools/stack_trace_decoder/server.py76CODE
LOWtools/stack_trace_decoder/generate_addrinfo.py30CODE
LOWtools/stack_trace_decoder/generate_addrinfo.py135CODE
LOWfixture_tests/tool/op_entries.py8CODE
LOWexamples/http_command/http_command_server.py44CODE
LOWfluidterm/fluidterm.py1131CODE
LOWfluidterm/fluidterm.py628CODE
LOWfluidterm/fluidterm.py671CODE
LOWfluidterm/fluidterm.py718CODE
LOWfluidterm/fluidterm.py949CODE
LOWfluidterm/fluidterm.py202CODE
Structural Annotation Overuse9 hits · 18 pts
SeverityFileLineSnippetContext
LOW⚡coverage.py50 # Step 1: Clean previous coverage dataCOMMENT
LOW⚡coverage.py55 # Step 2: Build and run testsCOMMENT
LOW⚡coverage.py61 # Step 3: Generate coverage reportCOMMENT
LOW⚡tools/stack_trace_decoder/generate_addrinfo.py237 # Step 1: Get all text symbolsCOMMENT
LOW⚡tools/stack_trace_decoder/generate_addrinfo.py244 # Step 2: Get source info for all symbol addressesCOMMENT
LOW⚡tools/stack_trace_decoder/generate_addrinfo.py253 # Step 3: Build the addrinfo structureCOMMENT
LOWtools/stack_trace_decoder/generate_addrinfo.py276 # Step 4: Write outputCOMMENT
LOWFluidNC/src/GCode.cpp428 // Step 0 - remove whitespace and comments and convert to upper caseCOMMENT
LOWFluidNC/src/Protocol.cpp633// NOTE: This function is called from the main loop, buffer sync, and mc_move_motors() only and executesCOMMENT
Excessive Try-Catch Wrapping10 hits · 17 pts
SeverityFileLineSnippetContext
MEDIUMbuild-release.py275 print("Error: failed to generate config_items.yaml", file=sys.stderr)CODE
LOWtools/validate_fluidnc_config.py191 except Exception as e:CODE
LOWtools/stack_trace_decoder/server.py125 except Exception as exc:CODE
MEDIUMtools/stack_trace_decoder/generate_addrinfo.py107 print(f"Error running nm: {result.stderr}", file=sys.stderr)CODE
MEDIUM⚡tools/stack_trace_decoder/generate_addrinfo.py216 print(f"Error: ELF file not found: {elf_path}", file=sys.stderr)CODE
MEDIUM⚡tools/stack_trace_decoder/generate_addrinfo.py226 print("Error: Could not find 'nm' tool. Install ESP toolchain or use --toolchain-prefix.", file=sys.stderr)CODE
MEDIUM⚡tools/stack_trace_decoder/generate_addrinfo.py229 print("Error: Could not find 'addr2line' tool. Install ESP toolchain or use --toolchain-prefix.", file=sys.stderCODE
LOWFluidNC/wasm/pio_toolchain_wasm.py15except Exception:CODE
LOWfluidterm/fluidterm.py1043 except Exception as e:STRING
LOWfluidterm/fluidterm.py1075 except Exception as e:STRING
Verbosity Indicators7 hits · 15 pts
SeverityFileLineSnippetContext
LOW⚡coverage.py50 # Step 1: Clean previous coverage dataCOMMENT
LOW⚡coverage.py55 # Step 2: Build and run testsCOMMENT
LOW⚡coverage.py61 # Step 3: Generate coverage reportCOMMENT
LOW⚡tools/stack_trace_decoder/generate_addrinfo.py237 # Step 1: Get all text symbolsCOMMENT
LOW⚡tools/stack_trace_decoder/generate_addrinfo.py244 # Step 2: Get source info for all symbol addressesCOMMENT
LOW⚡tools/stack_trace_decoder/generate_addrinfo.py253 # Step 3: Build the addrinfo structureCOMMENT
LOWtools/stack_trace_decoder/generate_addrinfo.py276 # Step 4: Write outputCOMMENT
Unused Imports13 hits · 13 pts
SeverityFileLineSnippetContext
LOWbuild-release.py9CODE
LOWbuild-release.py10CODE
LOWcoverage.py20CODE
LOWgit-version.py2CODE
LOWgit-version.py2CODE
LOWtools/fluidnc_config_mcp_server.py71CODE
LOWtools/stack_trace_decoder/server.py2CODE
LOWtools/stack_trace_decoder/generate_addrinfo.py22CODE
LOWfixture_tests/tool/controller.py2CODE
LOWfluidterm/fluidterm.py10CODE
LOWfluidterm/fluidterm.py20CODE
LOWfluidterm/fluidterm.py27CODE
LOWembedded/build.py5CODE
Hyper-Verbose Identifiers3 hits · 3 pts
SeverityFileLineSnippetContext
LOWtools/fluidnc_config_mcp_server.py156def validate_fluidnc_config_file(path: str, permissive: bool = False) -> dict:CODE
LOWtools/validate_fluidnc_config.py144def find_default_config_items(config_path: Path) -> Path:CODE
LOWexamples/http_command/http_command_server.py185 def handle_home_assistant_state(self, path):CODE
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMFluidNC/src/Planner.cpp377 // from path, but used as a robust way to compute cornering speeds, as it takes into account theCOMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMfluidterm/fluidterm.py5# This file is part of pySerial. https://github.com/pyserial/pyserialCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWplatformio.ini716# Usage:COMMENT