AI Slop Code Risk Monitor

anchore/grype

SlopCodeMonitor badge for anchore/grype Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

A vulnerability scanner for container images and filesystems

1.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for anchore/grype, a Go project with 13,154 GitHub stars. SynthScan examined 201,502 lines of code across 1294 source files, recording 161 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 1.0 (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.

1.0
Adjusted Signal
1.0
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
13.2K
Stars
Go
Language
201.5K
Lines of Code
1.3K
Files
161
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 4.0/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 144 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 1.1/100 · LOW

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

PR Review Velocity Impact 4.8/100 · LOW

Which changes need focused human review? 161 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 0MEDIUM 19LOW 142

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 161 distinct pattern matches across 11 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 Block121 hits · 121 pts
SeverityFileLineSnippetContext
LOW.golangci.yaml61# - gochecknoglobalsCOMMENT
LOWcmd/grype/cli/options/experimental.go1package optionsCOMMENT
LOWcmd/grype/cli/options/match.go41// dpkgConfig contains configuration for the dpkg matcher.COMMENT
LOWcmd/grype/cli/options/match.go61 // With "auto": Treat package as 1:2.0.0 → NO MATCH (2.0.0 > 1.5.0)COMMENT
LOWcmd/grype/cli/commands/internal/dbsearch/versions.go1package dbsearchCOMMENT
LOWcmd/grype/cli/commands/internal/dbsearch/versions.go21 // VulnerabilitiesSchemaVersion is the schema version for the `db search vuln` commandCOMMENT
LOWtest/install/test_harness.sh181 # ../../snapshot/grype_0.32.0-SNAPSHOT-e5e847a_linux_arm64.tar.gzCOMMENT
LOWinternal/dbtest/assertions.go121// Matches returns the underlying []match.Match. It is an intentional escapeCOMMENT
LOWinternal/dbtest/assertions.go1141 found match.DistroResultCOMMENT
LOWinternal/dbtest/builder.go41}COMMENT
LOWinternal/dbtest/builder.go101 cacheDir: cacheDir,COMMENT
LOWinternal/dbtest/cmd/manager/main.go1// manager is a CLI tool for creating and maintaining test fixtures from vunnel SQLite caches.COMMENT
LOW.github/workflows/release.yaml41 permissions:COMMENT
LOWgrype/vulnerability_matcher_dropped_test.go1package grypeCOMMENT
LOWgrype/vulnerability_matcher_validation_test.go161 WithLocation("/app/vendor/bundle/gems/rack-protection-1.5.3/lib/rack/protection.rb").COMMENT
LOWgrype/match/ignore_rule_index.go1package matchCOMMENT
LOWgrype/match/match_test.go421COMMENT
LOWgrype/match/ignore.go101COMMENT
LOWgrype/internal/rootio/cpes.go21// grype/db/v6/name: syft's CPE generator produces CPEs from the (rootio-COMMENT
LOWgrype/internal/rootio/rootio.go1// Package rootio detects whether a scanned package was published by Root IOCOMMENT
LOWgrype/internal/rootio/rootio.go21// javaGroupID is consulted only when pkgType is JavaPkg / JenkinsPluginPkg —COMMENT
LOWgrype/internal/rootio/rootio.go41// collisions are implausible:COMMENT
LOWgrype/internal/rootio/rootio.go81 return strings.TrimPrefix(name, "io.root.")COMMENT
LOWgrype/matcher/apk/matcher.go41// Everything is reconciled in result.Set space by vulnerability identity -- ID plus aliases -- soCOMMENT
LOWgrype/matcher/apk/matcher.go181 }COMMENT
LOWgrype/matcher/apk/rootio_test.go21// plus the existing alpine318 fixture's CVE-2024-0727 for the standardCOMMENT
LOWgrype/matcher/apk/rootio_test.go41//COMMENT
LOWgrype/matcher/apk/matcher_test.go461 })COMMENT
LOWgrype/matcher/apk/matcher_test.go561COMMENT
LOWgrype/matcher/apk/matcher_test.go621 ForPackage(pkgID).COMMENT
LOWgrype/matcher/apk/matcher_test.go701 WithArchitecture("aarch64"). // mismatch: Chainguard APH says x86_64COMMENT
LOWgrype/matcher/python/matcher_test.go101 Build()COMMENT
LOW…pe/matcher/python/testdata/python-name-and-vex/db.yaml1auto-generate: trueCOMMENT
LOWgrype/matcher/python/testdata/versionless-vex/db.yaml1# Hand-authored openvex statements with versionless purls, paired with theCOMMENT
LOWgrype/matcher/golang/gosymbols_ghsa_merge_test.go21// third-party scenarios (gjson, aws-sdk-go) exercise DB-side merge and rangeCOMMENT
LOWgrype/matcher/golang/gosymbols_ghsa_merge_test.go41// govulndb custom_ranges tag-space window (< 5.21.2) and patches the lxdCOMMENT
LOWgrype/matcher/golang/gosymbols_ghsa_merge_test.go181 // local names, as syft captures them): the vulnerable constructor (on GO-2022-0635's symbolCOMMENT
LOWgrype/matcher/golang/gosymbols_ghsa_merge_test.go241 // vulnerable project resource listing function (on GO-2024-3312's symbol list) plus otherCOMMENT
LOWgrype/matcher/golang/gosymbols_ghsa_merge_test.go361 }COMMENT
LOWgrype/matcher/golang/gosymbols_test.go21// as the go-imports qualifier. GO-2023-1840 lists the whole "runtime" packageCOMMENT
LOWgrype/matcher/golang/gosymbols_test.go141 // 29405 — cmd/go and cgo flaws that affect the machine that RAN the build, notCOMMENT
LOWgrype/matcher/golang/gosymbols_ghsa_bypass_test.go21// bridging the whole alias group.COMMENT
LOWgrype/matcher/golang/testdata/govulndb-and-ghsa/db.yaml1# Combined govulndb + github fixture exercising the build-time merge of goCOMMENT
LOWgrype/matcher/golang/testdata/govulndb-and-ghsa/db.yaml21# flag every version) while the GHSA bounds it at < 1.34.0. The mergedCOMMENT
LOWgrype/matcher/golang/testdata/govulndb-and-ghsa/db.yaml41# /v9 rows are dropped and the GHSA enriched with symbols; the base//v7//v8COMMENT
LOWgrype/matcher/internal/cpe_test.go1021}COMMENT
LOWgrype/matcher/java/matcher_test.go141 require.Error(t, err, "expected rate-limit error")COMMENT
LOWgrype/matcher/java/matcher_test.go161// surfaces three UnaffectedPackageEntry IgnoreRules - one perCOMMENT
LOWgrype/matcher/java/matcher_test.go221 })COMMENT
LOW…matcher/javascript/testdata/npm-scope-handling/db.yaml1auto-generate: trueCOMMENT
LOWgrype/matcher/rpm/matcher.go21// flags vulnerabilities that should be suppressed on related packages (e.g.,COMMENT
LOWgrype/matcher/rpm/matcher.go141 return almaLinuxMatchesWithUpstreams(provider, binaryPkg)COMMENT
LOWgrype/matcher/rpm/matcher.go181// not changed their version scheme at all --therefore it is safe to assume thatCOMMENT
LOWgrype/matcher/rpm/matcher.go201// the rule from RedHat we should assume a 0 epoch and make the comparison:COMMENT
LOWgrype/matcher/rpm/rhel_multi_rhsa_test.go21// upstream bases reduced to one record whose VulnerableRange partitions the streams:COMMENT
LOWgrype/matcher/rpm/rhel_multi_rhsa_test.go141 SelectDetailByType(match.ExactIndirectMatch).COMMENT
LOWgrype/matcher/rpm/rhel_multi_rhsa_test.go261 Ignores().COMMENT
LOWgrype/matcher/rpm/rhel_multi_rhsa_test.go361COMMENT
LOWgrype/matcher/rpm/rhel_multi_rhsa_test.go521// exercises the redhatEUSMatches two-fetch path -- unchanged in this branch -- against theCOMMENT
LOWgrype/matcher/rpm/rhel_eus_test.go841// lookup against the EUS-overlay fix, a +eus-distro lookup against the sameCOMMENT
61 more matches not shown…
Decorative Section Separators13 hits · 39 pts
SeverityFileLineSnippetContext
MEDIUMinstall.sh27# ------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh32# ------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh286# ------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh288# ------------------------------------------------------------------------COMMENT
MEDIUMgrype/db/v6/diff/vuln_diff_test.go38 // ── no-change cases ────────────────────────────────────────────────COMMENT
MEDIUMgrype/db/v6/diff/vuln_diff_test.go70 // ── CVE (vulnerability_handles) add/remove/modify ──────────────────COMMENT
MEDIUMgrype/db/v6/diff/vuln_diff_test.go135 // ── KEV-only diffs (CVEs with only KEV entries, no NVD) ────────────COMMENT
MEDIUMgrype/db/v6/diff/vuln_diff_test.go186 // ── EPSS diffs (CVEs with NVD + EPSS data) ────────────────────────COMMENT
MEDIUMgrype/db/v6/diff/vuln_diff_test.go230 // ── Combined KEV + EPSS + CVE changes ─────────────────────────────COMMENT
MEDIUMgrype/db/internal/provider/unmarshal/csaf_vex.go14// ── document metadata ────────────────────────────────────────────────COMMENT
MEDIUMgrype/db/internal/provider/unmarshal/csaf_vex.go90// ── product tree ─────────────────────────────────────────────────────COMMENT
MEDIUMgrype/db/internal/provider/unmarshal/csaf_vex.go122// ── vulnerabilities ──────────────────────────────────────────────────COMMENT
MEDIUMgrype/db/internal/provider/unmarshal/csaf_vex.go195// ── unmarshal entry point ────────────────────────────────────────────COMMENT
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMgrype/presenter/cyclonedx/vulnerability.go75 // TODO: we do not leverage the following fields in our modelCOMMENT
MEDIUMgrype/matcher/internal/only_vulnerable_targets.go19// TODO: in the future this should be moved to underneath the store to avoid the need to recompute CPE comparisons and tCOMMENT
MEDIUMgrype/db/v6/data.go41 // Why 6.0.3? This is when OS channel was introduced, which grype-db will leverage, and add additionalCOMMENT
Verbosity Indicators5 hits · 9 pts
SeverityFileLineSnippetContext
LOWgrype/matcher/rpm/almalinux.go66 // Step 1: Find RHEL disclosures for the binary package (direct match)COMMENT
LOWgrype/matcher/rpm/almalinux.go79 // Step 2: Find RHEL disclosures for upstream (source) packages (indirect match)COMMENT
LOWgrype/matcher/rpm/almalinux.go115 // Step 3: Find AlmaLinux unaffected records for the binary packageCOMMENT
LOW⚡grype/matcher/rpm/almalinux.go128 // Step 4: Find AlmaLinux unaffected records for related packages (source/binary relationships)COMMENT
LOW⚡grype/matcher/rpm/almalinux.go136 // Step 5: Apply filtering logic: if disclosure exists and no fix applies, the package is vulnerableCOMMENT
Structural Annotation Overuse5 hits · 9 pts
SeverityFileLineSnippetContext
LOWgrype/matcher/rpm/almalinux.go66 // Step 1: Find RHEL disclosures for the binary package (direct match)COMMENT
LOWgrype/matcher/rpm/almalinux.go79 // Step 2: Find RHEL disclosures for upstream (source) packages (indirect match)COMMENT
LOWgrype/matcher/rpm/almalinux.go115 // Step 3: Find AlmaLinux unaffected records for the binary packageCOMMENT
LOW⚡grype/matcher/rpm/almalinux.go128 // Step 4: Find AlmaLinux unaffected records for related packages (source/binary relationships)COMMENT
LOW⚡grype/matcher/rpm/almalinux.go136 // Step 5: Apply filtering logic: if disclosure exists and no fix applies, the package is vulnerableCOMMENT
Slop Phrases3 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMtest/install/test_harness.sh125 # if you want to see proof in the logs, feel free to adjust the redirectionCOMMENT
MEDIUMgrype/vex/testdata/vex-docs/csaf-demo2.json8 "text": "Example Company VEX document. Unofficial content for demonstration purposes only.",CODE
MEDIUMgrype/vex/testdata/vex-docs/csaf-demo1.json8 "text": "Example Company VEX document. Unofficial content for demonstration purposes only.",CODE
Hyper-Verbose Identifiers5 hits · 6 pts
SeverityFileLineSnippetContext
LOWtest/validate-grype-db-schema.py12def report_schema_versions_found(title, schema_to_locations):CODE
LOWtest/validate-grype-db-schema.py20def assert_single_schema_version(schema_to_locations):CODE
LOW⚡test/validate-grype-db-schema.py69def assert_schema_version_prefix(schema, locations):CODE
LOW⚡test/validate-grype-db-schema.py75def validate_schema_consumers():CODE
LOW⚡test/validate-grype-db-schema.py82def validate_schema_definitions():CODE
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippetContext
LOWgrype/presenter/cyclonedx/testdata/bom-1.6.schema.json904 "examples": ["Acme Inc"]CODE
LOWgrype/presenter/cyclonedx/testdata/bom-1.6.schema.json910 "examples": ["Acme Inc"]CODE
LOWgrype/presenter/cyclonedx/testdata/bom-1.6.schema.json964 "examples": ["Acme Inc"]CODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWcmd/grype/cli/commands/explain.go53 // TODO: implementCOMMENT
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtest/validate-grype-db-schema.py34CODE
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWgrype/db/v5/distribution/testdata/tls/listing.py1CODE