AI Slop Code Risk Monitor

pshenok/server-survival

SlopCodeMonitor badge for pshenok/server-survival Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Tower defense game that teaches cloud architecture. Build infrastructure, survive traffic, learn scaling.

3.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for pshenok/server-survival, a JavaScript project with 6,472 GitHub stars. SynthScan examined 35,530 lines of code across 85 source files, recording 115 pattern matches distributed across 3 syntactic categories. The legacy adjusted pattern signal is 3.3 (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.

3.3
Adjusted Signal
3.3
Raw Pattern Score
100%
Time Factor
2026-10-21
Last Push
6.5K
Stars
JavaScript
Language
35.5K
Lines of Code
85
Files
115
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 15.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 1.4/100 · LOW

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

PR Review Velocity Impact 15.2/100 · LOW

Which changes need focused human review? 115 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 1LOW 114

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 115 distinct pattern matches across 3 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 Block104 hits · 104 pts
SeverityFileLineSnippetContext
LOWgame.js301const d = 50;COMMENT
LOWgame.js401const plane = new THREE.Plane(new THREE.Vector3(0, 1, 0), 0);COMMENT
LOWgame.js421 // graded the new run against the old level's conditions.COMMENT
LOWgame.js541COMMENT
LOWgame.js861 });COMMENT
LOWgame.js1081COMMENT
LOWdocs/superpowers/plans/2026-05-24-campaign-mode.md161// id — 1..14, used for unlock + persistenceCOMMENT
LOWsrc/tutorial.js481 // LEAVING THE LESSON WITHOUT FINISHING IT. hide() only hides the modal —COMMENT
LOWsrc/config.js261 desc: "<b>Queue.</b> Buffers requests during spikes. Prevents drops.",COMMENT
LOWsrc/config.js381 },COMMENT
LOWsrc/config.js481 tooltip: {COMMENT
LOWsrc/config.js581 gpu: {COMMENT
LOWsrc/config.js621 // direct-wired GPU has only its tiny bounded intake — during warmup orCOMMENT
LOWsrc/config.js661 desc: "<b>Substation.</b> +6 kW of grid capacity. GPUs draw 6 kW each and cannot be placed past the cap.",COMMENT
LOWsrc/config.js681 // targetUtil 0.7 the fleet stays right-sized — ~2 instances at 10 RPS —COMMENT
LOWsrc/config.js701 // collapse. The $75 Monitoring node alerted at 0.85, i.e. 170%, long pastCOMMENT
LOWsrc/config.js741 scaleInUtil: 0.3, // scale in below this (hysteresis gap prevents flapping)COMMENT
LOWsrc/config.js761 // targetUtil/scaleInUtil gap). Real-world mapping: ASG target tracking onCOMMENT
LOWsrc/config.js781 // Resilience tuning (#196). Times are in seconds of GAME time (fast-forwardCOMMENT
LOWsrc/config.js841 // is the signal the game has never had. The reward keeps itsCOMMENT
LOWsrc/ui/hud-tabs.js1// Phone HUD tabs (#12).COMMENT
LOWsrc/ui/metrics-panel.js1// METRICS dashboard panel (#194): the collapsible right-column panel betweenCOMMENT
LOWsrc/ui/campaign-ui.js241 // The tutorial had exactly one call site — survival's start button — so aCOMMENT
LOWsrc/ui/link-feedback.js1// What the player sees when a link is refused.COMMENT
LOWsrc/ui/failure-badges.js1// Educational failure badges (#156). When a request dies, a short floatingCOMMENT
LOWsrc/ui/failure-badges.js21// THREE HYGIENE: each badge owns a canvas texture + sprite material, and bothCOMMENT
LOWsrc/ui/toolbar.js1// Service palette with category tabsCOMMENT
LOWsrc/ui/toolbar.js361 renderPalette();COMMENT
LOWsrc/ui/share.js1// Share Architecture (#157): PNG export + shareable ?arch= URL.COMMENT
LOWsrc/ui/share.js41// node parked just off the edge still shares — 1e300 does not.COMMENT
LOWsrc/locales/hi.js1// Hindi locale (Hinglish register). The register mirrors how Indian techCOMMENT
LOWsrc/locales/hi.js21// cost -> लागत, expenses -> खर्च, income -> आय, net profit -> शुद्ध लाभ,COMMENT
LOWsrc/core/events.js1// Random-events system (#155 PR 4): survival malicious spikes, trafficCOMMENT
LOWsrc/core/events.js301//COMMENT
LOWsrc/core/events.js581COMMENT
LOWsrc/core/failure-reasons.js1// Failure taxonomy (#156, educational failure badges). One symbolic constantCOMMENT
LOWsrc/core/actions.js1// Simulation-core request lifecycle (#155 PR 4): spawn -> route -> score ->COMMENT
LOWsrc/core/actions.js21// only here, only to draw a label, and never influences control flow. See theCOMMENT
LOWsrc/core/actions.js221 // answer. Without this a queue is a FREE win: the reference boardCOMMENT
LOWsrc/core/actions.js321 // not a win. Recorded after updateScore, which owns both verdicts.COMMENT
LOWsrc/core/actions.js341 }COMMENT
LOWsrc/core/actions.js361 recordOutcome("failed");COMMENT
LOWsrc/core/metrics.js1// Observability layer (#194, Wave 1 of #193): the metrics collection engine.COMMENT
LOWsrc/core/metrics.js41// }COMMENT
LOWsrc/achievements/ui.js1// Achievements UI (#158): the unlock toast queue and the Trophies panel.COMMENT
LOWsrc/achievements/definitions.js1// Achievement definitions (#158). Pure data + pure predicates — the engine inCOMMENT
LOWsrc/achievements/definitions.js21// locale — i18n.setLocaleCOMMENT
LOWsrc/achievements/definitions.js61// minimalist — servicesCount <= 4 alive at win, pre-built includedCOMMENT
LOWsrc/achievements/definitions.js141 // SURVIVAL-ONLY — failover_proven, breaker_comeback, second_chance,COMMENT
LOWsrc/achievements/definitions.js161 // PLAYER-PLACED GPUs only, so L23's pre-built GPU earns nothing.COMMENT
LOWsrc/achievements/definitions.js201 // ---- The AI Wave (poll; player-placed GPUs only) ----COMMENT
LOWsrc/achievements/achievements.js1// Achievements engine (#158). Owns persistence, session state, the 2 Hz pollCOMMENT
LOWsrc/achievements/achievements.js21// INCREASES only. The failures-panel clear-all button zeroes the rawCOMMENT
LOWsrc/input/handlers.js121 // can't move the eye — it spins the camera's UP vector instead, whichCOMMENT
LOWsrc/input/handlers.js521});COMMENT
LOWsrc/input/handlers.js961// which delivers no mouseup at all to the container — left isDraggingNode,COMMENT
LOWsrc/input/handlers.js1001}COMMENT
LOWsrc/persistence/save-load.js261 // load replaced the board while window.campaign kept grading it.COMMENT
LOWsrc/campaign/levels.js1// Campaign level definitions. See spec atCOMMENT
LOWsrc/campaign/levels.js21// forceOutageAtSec — game time at which the first Firewall is knocked offlineCOMMENT
44 more matches not shown…
Hyper-Verbose Identifiers10 hits · 10 pts
SeverityFileLineSnippetContext
LOWgame.js263function updateServiceHealthIndicators() {CODE
LOWgame.js785function retryWithSameArchitecture() {CODE
LOWdocs/superpowers/plans/2026-05-24-campaign-mode.md1404function updateCampaignProgressLabel() {CODE
LOWdocs/superpowers/plans/2026-05-24-campaign-mode.md1545function applyCampaignToolbarGating(allowed, forbidden) {CODE
LOWsrc/ui/campaign-ui.js104function updateCampaignProgressLabel() {CODE
LOWsrc/ui/campaign-ui.js194function campaignStartCurrentLevel() {CODE
LOWsrc/ui/campaign-ui.js264function applyCampaignToolbarGating(allowed, forbidden) {CODE
LOWsrc/core/actions.js489function calculateFailChanceBasedOnLoad(load) {CODE
LOWsrc/sim/power.js50export function substationRemovalStrandsGpus() {CODE
LOWsrc/sim/handlers/serverless.js15export function chargeServerlessInvocation(service) {CODE
Modern AI Meta-Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMdocs/superpowers/plans/2026-05-24-campaign-mode.md38## Task 1: Branch scaffold + empty modules + script wiringCOMMENT