AI Slop Code Risk Monitor

sbt/sbt

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

sbt, the interactive build tool

1.5 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for sbt/sbt, a Scala project with 4,951 GitHub stars. SynthScan examined 166,715 lines of code across 2603 source files, recording 84 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.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.

1.5
Adjusted Signal
1.5
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
5.0K
Stars
Scala
Language
166.7K
Lines of Code
2.6K
Files
84
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.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 4.9/100 · LOW

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

Agent Over-Engineering Ratio 1.1/100 · LOW

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

PR Review Velocity Impact 6.7/100 · LOW

Which changes need focused human review? 84 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 15HIGH 1MEDIUM 4LOW 64

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 84 distinct pattern matches across 7 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 Indicators15 hits · 165 pts
SeverityFileLineSnippetContext
CRITICALmain-command/src/main/scala/sbt/State.scala384 s.configuration.provider.scalaProvider.launcher.globalLock.apply(CODE
CRITICAL…lete/src/main/scala/sbt/internal/util/LineReader.scala224 sbt.internal.util.complete.JLineCompletion.installCustomCompletor(cr, complete)CODE
CRITICAL…ogging/src/main/scala/sbt/internal/util/Terminal.scala844 org.jline.utils.InfoCmp.Capability.values().map(c => c.toString -> c).toMapCODE
CRITICAL…rver-test/src/test/scala/testpkg/BuildServerTest.scala774 |def jdk: File = sbt.internal.util.Util.javaHome.toFile()STRING
CRITICALproject/Utils.scala104 dotty.tools.dotc.core.StdNames.nme.keywords.map(_.toString).toSetCODE
CRITICALmain-settings/src/main/scala/sbt/Def.scala251 sbt.internal.util.complete.Parsers.spaceDelimited(argLabel)CODE
CRITICALmain-settings/src/main/scala/sbt/InputTask.scala75 Types.const(sbt.internal.util.complete.DefaultParsers.success(()))CODE
CRITICAL…il-cache/src/test/scala/sbt/util/ActionCacheTest.scala895 val midnightUTC = java.nio.file.attribute.FileTime.from(CODE
CRITICAL⚡util-cache/src/main/scala/sbt/util/Output.scala36 val js = sjsonnew.support.scalajson.unsafe.Converter.toJson(value).getCODE
CRITICAL⚡util-cache/src/main/scala/sbt/util/Output.scala39 sjsonnew.support.scalajson.unsafe.CompactPrinter.print(js, out)CODE
CRITICAL⚡util-cache/src/main/scala/sbt/util/Output.scala48 val js = sjsonnew.support.scalajson.unsafe.Converter.toJson(value).getCODE
CRITICAL⚡util-cache/src/main/scala/sbt/util/Output.scala53 sjsonnew.support.scalajson.unsafe.CompactPrinter.print(js, out)CODE
CRITICALutil-cache/src/main/scala/sbt/util/Input.scala53 .fromJson(sjsonnew.support.scalajson.unsafe.Parser.parseFromFile(file).get)CODE
CRITICALutil-cache/src/main/scala/sbt/util/Input.scala71 sjsonnew.support.scalajson.unsafe.Parser.parseFromByteArray(bytes).getCODE
CRITICALutil-cache/src/main/scala/sbt/util/Input.scala73 sjsonnew.support.scalajson.unsafe.Converter.fromJson(json).getCODE
Over-Commented Block34 hits · 34 pts
SeverityFileLineSnippetContext
LOWmain-command/src/main/scala/sbt/BasicCommands.scala201 def multiParser(s: State): Parser[List[String]] = multiParserImpl(Some(s))COMMENT
LOWmain-command/src/main/scala/sbt/BasicCommands.scala221 // we search for a named command whose name is a prefix of the first command in the list.COMMENT
LOWsbt-app/src/sbt-test/nio/file-hashes/original/Bar.md1### BarCOMMENT
LOWsbt-app/src/sbt-test/nio/file-hashes/changes/Bar.md1### Bar updatedCOMMENT
LOWsbt-app/src/sbt-test/nio/file-hashes/base/Bar.md1### BarCOMMENT
LOWsbt-app/src/sbt-test/nio/diff/changes/Bar.md1### new barCOMMENT
LOWsbt-app/src/sbt-test/nio/diff/base/Bar.md1### BarCOMMENT
LOWsbt-app/src/sbt-test/nio/last-modified/changes/Bar.md1### new barCOMMENT
LOWsbt-app/src/sbt-test/nio/last-modified/changes/Bar2.md1### new bar 2COMMENT
LOWsbt-app/src/sbt-test/nio/last-modified/base/Bar.md1### BarCOMMENT
LOW…rc/main/scala/sbt/internal/util/hashing/WyHash64.scala121 // val secret2 = PRIME64_2COMMENT
LOW…rc/main/scala/sbt/internal/util/hashing/WyHash64.scala141 // var see0 = sCOMMENT
LOW…rc/main/scala/sbt/internal/util/hashing/WyHash64.scala161 // b = readLongLE(buf, off + len - 8)COMMENT
LOWproject/SbtScriptedIT.scala1// import sbt._COMMENT
LOWproject/SbtScriptedIT.scala21// override lazy val globalSettings = Seq(COMMENT
LOWproject/SbtScriptedIT.scala41// git.checkout().setName(ref).call()COMMENT
LOWproject/SbtScriptedIT.scala61// s"""-Dsbt.build.lm.moduleName=${lmArtifactID}""",COMMENT
LOWproject/SbtScriptedIT.scala81COMMENT
LOWproject/SbtScriptedIT.scala101// sbtTestDirectory.value / thisProject.value.id,COMMENT
LOW…n/scala/sbt/internal/librarymanagement/LMSysProp.scala21 case "0" | "never" | "false" => Some(false)COMMENT
LOW…internal/librarymanagement/SemanticSelectorExtra.scala61 s"$op$versionStr$tagsStr"COMMENT
LOWscripts/distrust-emudhra.sh1#!/usr/bin/env bashCOMMENT
LOW.github/workflows/ci.yml161 ./sbt -v "RepoOverrideTest/scripted force-proxy-repos-file/*"COMMENT
LOWmain-settings/src/test/scala/sbt/std/UsageTest.scala161 val it6b = Def.inputTaskDyn {COMMENT
LOWlauncher-package/upload/sbt-upload.sh1#!/usr/bin/env bashCOMMENT
LOWlauncher-package/upload/sbt-upload.sh21#COMMENT
LOWlauncher-package/upload/sbt-upload.sh41# - for POLR_USERNAME/POLR_PASSWORD, you will need the credentialsCOMMENT
LOWlauncher-package/upload/sbt-upload.sh61#COMMENT
LOWlauncher-package/upload/sbt-upload.sh261 echoCOMMENT
LOWlauncher-package/src/universal/conf/sbtconfig.txt1# sbt configuration file for WindowsCOMMENT
LOWmain/src/main/scala/sbt/internal/SysProp.scala61 def double(name: String, default: Double): Double =COMMENT
LOWmain/src/main/scala/sbt/internal/ConsoleProject.scala101 // Two things are required so the REPL resolves `sbt.*` (e.g.COMMENT
LOWmain/src/main/scala/sbt/internal/ConsoleProject.scala121 // objects for every `sbt.*` and `scala.*` class. `local` skipsCOMMENT
LOWmain/src/main/scala/sbt/internal/LogManager.scala241 // private[sbt] def setGlobalLogLevels(s: State, data: Def.Settings): State =COMMENT
Hyper-Verbose Identifiers25 hits · 25 pts
SeverityFileLineSnippetContext
LOWtasks-standard/src/main/scala/sbt/Task.scala29 def getOrElse[B](key: AttributeKey[B], default: => B): B = attributes.getOrElse(key, default)CODE
LOWtasks-standard/src/main/scala/sbt/std/Transform.scala38 private def getOrId(map: [A] => TaskId[A] => Option[Task[A]]): [A] => TaskId[A] => Task[A] =CODE
LOW…ile/src/main/scala/sbt/internal/parser/SbtParser.scala104 def getOrCreateReporter(uniqueFileName: String): StoreReporter =CODE
LOW…util-logging/src/main/scala/sbt/util/LogExchange.scala51 def getOrElseUpdateStringCodec[A](tag: String, v: ShowLines[A]): ShowLines[A] =CODE
LOW…main/scala/sbt/internal/inc/ZincComponentManager.scala41 def getOrElse(orElse: => Iterable[File]): Iterable[File] =CODE
LOW…tion/src/main/scala/sbt/internal/util/Attributes.scala188 def getOrElse[T](k: AttributeKey[T], default: => T): T =CODE
LOW…collection/src/main/scala/sbt/internal/util/PMap.scala37 def getOrUpdate[T](k: K[T], make: => V[T]): V[T]CODE
LOW…collection/src/main/scala/sbt/internal/util/PMap.scala101 def getOrUpdate[T](k: K[T], make: => V[T]) =CODE
LOW…n/scala/sbt/internal/librarymanagement/LMSysProp.scala26 def getOrFalse(name: String): Boolean = booleanOpt(name).getOrElse(false)CODE
LOW…n/scala/sbt/internal/librarymanagement/LMSysProp.scala27 def getOrTrue(name: String): Boolean = booleanOpt(name).getOrElse(true)CODE
LOWmain-settings/src/main/scala/sbt/Structure.scala336 final def getOrElse[A2 >: A1](or: => A2): Initialize[A2] =CODE
LOWmain-settings/src/main/scala/sbt/Structure.scala483 def getOrElse[A2 >: A1](or: => A2): Initialize[Task[A2]] =CODE
LOWmain/src/main/scala/sbt/ProjectExtra.scala267 def getOrError[T](state: State, key: AttributeKey[T], msg: String): T =CODE
LOWmain/src/main/scala/sbt/ProjectExtra.scala596 def getOrNil[A](s: State, key: AttributeKey[List[A]]): List[A] =CODE
LOWmain/src/main/scala/sbt/MainLoop.scala239 def getOrSet[T](state: State, key: AttributeKey[T], value: Extracted => T): State =CODE
LOWmain/src/main/scala/sbt/Extracted.scala131 private def getOrError[T](key: ScopedKey[?], value: Option[T])(usingCODE
LOWmain/src/main/scala/sbt/Extracted.scala136 private def getOrError[T](key: ScopedKey[T])(usingCODE
LOWmain/src/main/scala/sbt/internal/SysProp.scala39 def getOrFalse(name: String): Boolean = booleanOpt(name).getOrElse(false)CODE
LOWmain/src/main/scala/sbt/internal/SysProp.scala40 def getOrTrue(name: String): Boolean = booleanOpt(name).getOrElse(true)CODE
LOWmain/src/main/scala/sbt/internal/SysProp.scala284 private def getOrUpdateSysProp(key: String)(value: String): String =CODE
LOWmain/src/main/scala/sbt/internal/BuildDef.scala122 private def getOrElseUpdate(CODE
LOW…in/scala/sbt/internal/server/BuildServerReporter.scala193 private def getAndClearPreviousDocuments(source: VirtualFileRef): Seq[TextDocumentIdentifier] =CODE
LOWmain/src/main/scala/sbt/nio/FileStamp.scala245 def getOrElseUpdate(path: Path, stamper: FileStamper): Option[FileStamp] =CODE
LOWutil-cache/src/main/scala/sbt/util/CacheImplicits.scala74 private def getOrElseUpdate(CODE
LOWutil-cache/src/main/scala/sbt/util/CacheImplicits.scala89 private def getOrElseUpdate(CODE
Decorative Section Separators4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMlauncher-package/upload/sbt-upload.sh76#--------------------------------------------------------------COMMENT
MEDIUM…/test/scala/sbt/internal/CompilerConsoleOptsTest.scala13 // ── deterministic unit cases ──────────────────────────────────────────────COMMENT
MEDIUM…/test/scala/sbt/internal/CompilerConsoleOptsTest.scala111 // ── property-based cases ──────────────────────────────────────────────────COMMENT
MEDIUM…/test/scala/sbt/internal/CompilerConsoleOptsTest.scala127 // ── helpers ───────────────────────────────────────────────────────────────COMMENT
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHLLM_POLICY.md11- Ensure that you review and understand all code generated by AI tools before including it in your PR - do not blindly tCODE
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippetContext
LOW…t-test/project/remote-project-transitive-deps/setup.sh10git config user.email "test@test.com"CODE
LOW…app/src/sbt-test/project/remote-project-dedup/setup.sh9git config user.email "test@test.com"CODE
LOW…rc/sbt-test/project/remote-project-git-branch/setup.sh9git config user.email "test@test.com"CODE
LOW…pp/src/sbt-test/project/remote-project-update/setup.sh8git config user.email "test@test.com"CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/distrust-emudhra.sh13# Usage:COMMENT