AI Slop Code Risk Monitor

graphhopper/graphhopper

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

Open source routing engine for OpenStreetMap. Use it as Java library or standalone web server.

0.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for graphhopper/graphhopper, a Java project with 6,750 GitHub stars. SynthScan examined 222,503 lines of code across 1221 source files, recording 60 pattern matches distributed across 9 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
2026-10-30
Last Push
6.8K
Stars
Java
Language
222.5K
Lines of Code
1.2K
Files
60
Pattern Hits
2026-10-31
Scan Date
0.01
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 1.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.9/100 · LOW

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

Agent Over-Engineering Ratio 0.2/100 · LOW

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

PR Review Velocity Impact 3.3/100 · LOW

Which changes need focused human review? 60 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 7HIGH 3MEDIUM 5LOW 45

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 60 distinct pattern matches across 9 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.

Hallucination Indicators7 hits · 70 pts
SeverityFileLineSnippetContext
CRITICALweb-bundle/src/main/java/vector_tile/VectorTile.java2373 com.google.protobuf.AbstractMessageLite.Builder.addAll(CODE
CRITICALweb-bundle/src/main/java/vector_tile/VectorTile.java2556 com.google.protobuf.AbstractMessageLite.Builder.addAll(CODE
CRITICALweb-bundle/src/main/java/vector_tile/VectorTile.java4100 com.google.protobuf.AbstractMessageLite.Builder.addAll(CODE
CRITICALweb-bundle/src/main/java/vector_tile/VectorTile.java4337 com.google.protobuf.AbstractMessageLite.Builder.addAll(CODE
CRITICALweb-bundle/src/main/java/vector_tile/VectorTile.java4558 com.google.protobuf.AbstractMessageLite.Builder.addAll(CODE
CRITICALweb-bundle/src/main/java/vector_tile/VectorTile.java5375 com.google.protobuf.AbstractMessageLite.Builder.addAll(CODE
CRITICAL…/src/main/java/com/graphhopper/gtfs/TripFromLabel.java184 return new com.graphhopper.gtfs.fare.Trip.Segment(ptLeg.feed_id, ptLeg.route_id,CODE
Over-Commented Block40 hits · 40 pts
SeverityFileLineSnippetContext
LOWconfig-example.yml1graphhopper:COMMENT
LOWconfig-example.yml21 # allow_turn_penalty_in_request: true (enable custom turn_penalty for requests at runtime)COMMENT
LOWconfig-example.yml41 - name: footCOMMENT
LOWconfig-example.yml61#COMMENT
LOWconfig-example.yml81COMMENT
LOWconfig-example.yml101COMMENT
LOWconfig-example.yml121 # prepare.ch.threads: 1COMMENT
LOWconfig-example.yml141 # graph.elevation.dataaccess: RAMCOMMENT
LOWconfig-example.yml161 # elevation and will remove the extra points that long edge sampling addedCOMMENT
LOWconfig-example.yml181 # graph.urban_density.residential_radius: 400COMMENT
LOWconfig-example.yml201COMMENT
LOWconfig-example.yml221 # motorized vehicles. This leads to a smaller and less dense graph, because there are fewer ways (obviously),COMMENT
LOWconfig-example.yml241 # graph.dataaccess.type.edges: FOREIGN_MMAPCOMMENT
LOWbenchmark/download_map.sh1#!/bin/bashCOMMENT
LOWbenchmark/benchmark.sh1#!/bin/bashCOMMENT
LOWbenchmark/post_benchmark.sh1#!/bin/bashCOMMENT
LOWtools/src/main/java/com/graphhopper/ui/MiniGraphUI.java421COMMENT
LOW…est/java/com/graphhopper/util/InstructionListTest.java441COMMENT
LOW…/src/test/java/com/graphhopper/util/GHUtilityTest.java61// assertTrue(map2.containsValue(0));COMMENT
LOW…m/graphhopper/storage/index/LocationIndexTreeTest.java41COMMENT
LOW…m/graphhopper/storage/index/LocationIndexTreeTest.java521COMMENT
LOW…/com/graphhopper/routing/CHQueryWithTurnCostsTest.java581 // at node 2 we cannot go from 4 to 1 directly, but we need to take the loop at 2 first. when the backwardCOMMENT
LOW…java/com/graphhopper/routing/AStarBidirectionTest.java41 // already arrived and the stopping criterion is fulfilled. Node 2 still remains in the queue at this point.COMMENT
LOW…hhopper/routing/subnetwork/NodeBasedTarjanSCCTest.java141 public void testTarjan_issue761() {COMMENT
LOW…/routing/util/parsers/BikeAccessAndRoadAccessTest.java81 Arguments.of("residential", "motor_vehicle=no", true, BCOMMENT
LOW…/test/java/com/graphhopper/routing/lm/LMIssueTest.java101 // Eventually the best path was not updated correctly because the spt entry of the fwd search already had a wayCOMMENT
LOW…st/java/com/graphhopper/routing/ch/CHTurnCostTest.java161 // 0 3 - 4 8COMMENT
LOW…st/java/com/graphhopper/routing/ch/CHTurnCostTest.java441 public void testFindPath_randomContractionOrder_complicatedGraphAndPath() {COMMENT
LOW…pper/routing/ch/PrepareContractionHierarchiesTest.java321 BaseGraph g = new BaseGraph.Builder(encodingManager).create();COMMENT
LOW…main/resources/com/graphhopper/custom_models/bike.json1// to use this custom model you need to set the following option in the config.ymlCOMMENT
LOW…re/src/main/java/com/graphhopper/search/KVStorage.java61 // map = new HashMap(); map.put("some", "value"); map.put("some2", "value2"); is added via the method add, then we sCOMMENT
LOW…/main/java/com/graphhopper/geohash/SpatialKeyAlgo.java41 * See the drawing below. This is called a Z-order curve (because of the path you get when you followCOMMENT
LOW…m/graphhopper/isochrone/algorithm/JTSTriangulator.java81 // Sites may contain repeated coordinates. Especially for edge-based traversal, that's expected -- we visitCOMMENT
LOW…ain/java/com/graphhopper/routing/AlternativeRoute.java281 correspondingToEntry = correspondingToEntry.parent;COMMENT
LOW…in/java/com/graphhopper/routing/lm/LMApproximator.java141 return (maxWeightInt - 1) * factor;COMMENT
LOW…in/java/com/graphhopper/routing/lm/LMApproximator.java161 //COMMENT
LOW…re/src/main/java/com/graphhopper/routing/ev/State.java41COMMENT
LOW…/main/java/com/graphhopper/http/GraphHopperBundle.java241 for (Object k : System.getProperties().keySet()) {COMMENT
LOW…s/src/main/java/com/graphhopper/gtfs/PtRouterImpl.java261 if (visitedNodes >= maxVisitedNodesForRequest) {COMMENT
LOW…rc/main/java/com/graphhopper/matching/MapMatching.java681COMMENT
Magic Placeholder Names2 hits · 10 pts
SeverityFileLineSnippetContext
HIGH…ent-hc/src/test/java/com/graphhopper/api/Examples.java24 String apiKey = "<YOUR_API_KEY>";CODE
HIGH…ent-hc/src/test/java/com/graphhopper/api/Examples.java24 String apiKey = "<YOUR_API_KEY>";CODE
Slop Phrases3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMconfig-example.yml240 # If FOREIGN_MMAP is not suited for everything you can use it for selected files e.g. while import to reduce heap usagCOMMENT
MEDIUMconfig-example.yml246 # If also for routing the environment is heap constrained and you can sacrify speed, then you can also use FOREIGN_MMACOMMENT
MEDIUMreader-gtfs/config-example-pt.yml3 # for multiple files you can use: gtfs.file: file1.zip,file2.zip,file3.zipCOMMENT
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHmap-matching/tools/mapmatch.py278L.control.layers(null, overlays).addTo(map);CODE
Excessive Try-Catch Wrapping2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMmap-matching/tools/mapmatch.py59 print(f"Error: --chunk must be between 1 and {len(chunks)}", file=sys.stderr)CODE
MEDIUMmap-matching/tools/mapmatch.py173 print(f"Error: debug template not found at {template_path}", file=sys.stderr)CODE
Hyper-Verbose Identifiers3 hits · 3 pts
SeverityFileLineSnippetContext
LOW…in/java/com/graphhopper/gtfs/PtRouterFreeWalkImpl.java116 private class RequestHandler {CODE
LOW…s/src/main/java/com/graphhopper/gtfs/PtRouterImpl.java115 private class RequestHandler {CODE
LOW…n/java/com/graphhopper/gtfs/PtRouterTripBasedImpl.java92 private class RequestHandler {CODE
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…hhopper/routing/util/NameSimilarityEdgeFilterTest.java52 edge = createTestEdgeIterator("Lorem Ipsum");CODE
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOWmap-matching/tools/mapmatch.py128CODE