AI Slop Code Risk Monitor

storytold/gridcraft

SlopCodeMonitor badge for storytold/gridcraft Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).
0.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for storytold/gridcraft. SynthScan examined 211,980 lines of code across 678 source files, recording 113 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 0.6 (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.

0.6
Adjusted Signal
0.6
Raw Pattern Score
100%
Time Factor
—
Last Push
—
Stars
—
Language
212.0K
Lines of Code
678
Files
113
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 2.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 0.0/100 · LOW

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

PR Review Velocity Impact 2.8/100 · LOW

Which changes need focused human review? 113 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

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

No multi-scan history yet — run the scanner again to build trend data.

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 3LOW 110

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 113 distinct pattern matches across 4 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 Block105 hits · 105 pts
SeverityFileLineSnippetContext
LOWpackaging/env.sh1# shellcheck shell=bashCOMMENT
LOWpackaging/macos/package.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/web/package.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/freebsd/package.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/linux/flatpak-oci.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/linux/package.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/linux/flatpak-bundle.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/linux/flatpak/ai.storyteller.gridcraft.yml1# Flatpak manifest for GridCraft, ready for a Flathub submission.COMMENT
LOWpackaging/linux/flatpak/ai.storyteller.gridcraft.yml21 - --filesystem=xdg-data/ArtCraft/versions:roCOMMENT
LOW…ging/linux/flatpak/ai.storyteller.gridcraft.bundle.yml1# Flatpak manifest for the single-file bundle attached to every GitHub releaseCOMMENT
LOW…ging/linux/flatpak/ai.storyteller.gridcraft.bundle.yml21 # Display: Wayland first; X11 only when no Wayland compositor is running.COMMENT
LOWcrates/chart/src/trend.rs1//! Trendline maths: least-squares fits behind chart trendlines and moving averages.COMMENT
LOWcrates/chart/src/lib.rs1//! GridCraft charts (layer L3, toolkit-free).COMMENT
LOWcrates/numfmt/src/decimal.rs1//! Decimal-string rounding and the General format.COMMENT
LOWcrates/xlsx/src/xml.rs481 } else {COMMENT
LOWcrates/xlsx/src/lib.rs1//! GridCraft file formats: XLSX (transitional and strict) and CSV import/export, plus XLSB and ODS data importCOMMENT
LOWcrates/xlsx/src/pivot.rs1//! PivotTables: pivot cache definitions and records (ECMA-376 Part 1 §18.10.1) and PivotTableCOMMENT
LOWcrates/xlsx/src/sheet_read.rs81const MAX_HYPERLINK_CELLS: u64 = 10_000;COMMENT
LOWcrates/xlsx/src/passthrough.rs1//! Pass-through of package content GridCraft does not model, so that open → edit → save keeps it.COMMENT
LOWcrates/xlsx/src/csv.rs301 wb.sheets = vec![Arc::new(sheet)];COMMENT
LOWcrates/xlsx/src/feature_bags.rs1//! Feature property bags ([MS-XLSX] 2.1.22, 2.3.9): how Excel stores cell checkboxes.COMMENT
LOWcrates/xlsx/src/crypto.rs1//! Password-encrypted workbooks. Excel wraps the ordinary OOXML package in a compound file withCOMMENT
LOWcrates/pdf/src/lib.rs1//! A tiny, self-contained PDF 1.7 writer for GridCraft's print and PDF export.COMMENT
LOWcrates/pdf/src/metrics.rs1//! Advance widths of the standard 14 PDF fonts, in 1/1000 em, for the printable ASCII range.COMMENT
LOWcrates/mcp/src/lib.rs1//! GridCraft's MCP server.COMMENT
LOWcrates/mcp/src/control_auth.rs1//! Authentication of the control channel (#777).COMMENT
LOWcrates/calc/src/recalc.rs1//! Dependency graph and recalculation.COMMENT
LOWcrates/calc/src/eval.rs21use array::map_unary;COMMENT
LOWcrates/calc/src/recalc/graph.rs41}COMMENT
LOWcrates/calc/src/recalc/pass_host.rs41 /// Other formulas read at [`MAX_NESTED`] levels deep by the evaluations being abandoned. TheyCOMMENT
LOWcrates/ui-egui/build.rs1//! Bake the contributor credits into the binary as static Rust tables. Nothing is read at run time.COMMENT
LOWcrates/ui-egui/tests/it/symbol_glyphs.rs1//! The interface's symbol characters must not render as empty boxes (#197, #54): the UI font oftenCOMMENT
LOWcrates/ui-egui/src/desktop_theme.rs1//! The desktop's own light/dark choice, for an interface setting that follows it.COMMENT
LOWcrates/ui-egui/src/doc_windows.rs1//! Desktop: each workbook window is a native window of its own.COMMENT
LOWcrates/ui-egui/src/control.rs1//! Programmatic control of the running app (agents, tests, MCP).COMMENT
LOWcrates/ui-egui/src/lib.rs101 pub keytip_invoke: Option<&'static str>,COMMENT
LOWcrates/ui-egui/src/lib.rs241 /// style tables are walked only when a workbook changes.COMMENT
LOWcrates/ui-egui/src/lib.rs261 pub(crate) capture_epoch: u64,COMMENT
LOWcrates/ui-egui/src/lib.rs281 /// Automate › Macros: relative recording, recent macros, a macro's question.COMMENT
LOWcrates/ui-egui/src/theme.rs1//! Design tokens and fonts.COMMENT
LOWcrates/ui-egui/src/services.rs21 /// insert into a subsequent dialog or open the image as a workbook.COMMENT
LOWcrates/ui-egui/src/services.rs41 /// Web: hand PDF bytes to the browser's print flow directly (no download,COMMENT
LOWcrates/ui-egui/src/grid.rs221 /// The PivotTable Fields pane's `pivot.fields` answer, cached per (doc uid, revision, pivot):COMMENT
LOWcrates/ui-egui/src/fonts.rs1//! The fonts installed on the machine, so the font list can offer them and cells can render withCOMMENT
LOWcrates/ui-egui/src/fonts.rs21COMMENT
LOWcrates/ui-egui/src/macro_editor.rs1//! The macro step editor (Automate › New Macro; Macros › Edit, Create, Step Into): a large,COMMENT
LOWcrates/ui-egui/src/app.rs161 }COMMENT
LOWcrates/ui-egui/src/widgets.rs361pub fn color_palette(ui: &mut Ui, theme_colors: &[u32; 12], none_label: &str) -> Option<String> {COMMENT
LOWcrates/ui-egui/src/craft_fonts_policy.rs1//! craft-fonts build policy shared by `build.rs` and the UI crate.COMMENT
LOWcrates/ui-egui/src/selection_glide.rs1//! The selection outline glides to a new selection instead of jumping there, like Excel's cellCOMMENT
LOWcrates/ui-egui/src/selection_glide.rs21//! drag) and the cell editor use the real cells at once.COMMENT
LOWcrates/ui-egui/src/app/input.rs1use super::{SheetApp, control};COMMENT
LOWcrates/ui-egui/src/theme/font_fallback.rs1#[cfg(not(target_arch = "wasm32"))]COMMENT
LOWcrates/ui-egui/src/keytips/keytip_table.rs1//! The keytip sequence table: every Excel-style Alt access sequence and what it does.COMMENT
LOWcrates/ui-egui/src/control/screenshots.rs41COMMENT
LOWcrates/ui-egui/src/control/screenshots.rs261 /// Settle time before the first issuance (the UI must be still).COMMENT
LOWcrates/model/src/features.rs361COMMENT
LOWcrates/model/src/features.rs461 /// Combo charts: this series drawn as a line on the secondary axis.COMMENT
LOWcrates/model/src/style.rs121 pub minor_font: String,COMMENT
LOWcrates/model/src/store.rs141 return None;COMMENT
45 more matches not shown…
AI Slop Vocabulary3 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMcrates/ui-egui/Cargo.toml19# harness (and a host with no symbol font) renders them as tofu.COMMENT
MEDIUMxtask/src/keytips.rs342 out.push_str(&format!("\n#[test]\nfn {}() {{\n let mut h = harness(blank());\n {body}\n}}\n", test_name(&eCODE
MEDIUMxtask/src/stats.rs125 println!("\n(#[test] counts source attributes; macro-generated tests count once. Use --exact for harness counts.CODE
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippetContext
LOWcrates/numfmt/src/tests.rs102 assert_eq!(f(phone, 5551234.0), "555-1234");CODE
LOWcrates/pdf/src/tests.rs90 first.link_uri(-20.0, -20.0, 40.0, 40.0, "mailto:a@example.org");CODE
LOWcrates/functions/src/text.rs1414 is_text(ev("REGEXEXTRACT", vec![t("tel 555-1234 or 555-9876"), t("[0-9]{3}-[0-9]{4}")]), "555-1234");CODE
LOWcrates/functions/src/text.rs1416 assert_eq!(rows_of(&v), vec![vec![tv("555-1234")], vec![tv("555-9876")]]);CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWpackaging/linux/flatpak-oci.sh5# Usage:COMMENT