AI Slop Code Risk Monitor

blacktop/ipsw

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

iOS/macOS Research Swiss Army Knife

1.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for blacktop/ipsw, a Go project with 3,848 GitHub stars. SynthScan examined 355,943 lines of code across 1577 source files, recording 407 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.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.

1.6
Adjusted Signal
1.6
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
3.8K
Stars
Go
Language
355.9K
Lines of Code
1.6K
Files
407
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 6.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.9/100 · LOW

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

Agent Over-Engineering Ratio 0.0/100 · LOW

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

PR Review Velocity Impact 6.6/100 · LOW

Which changes need focused human review? 407 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 6HIGH 3MEDIUM 4LOW 394

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 407 distinct pattern matches across 13 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 Block264 hits · 258 pts
SeverityFileLineSnippetContext
LOWconfig.example.yml1# This is an example config.yml file with some sensible defaults.COMMENT
LOW.goreleaser.yml161 # hooks:COMMENT
LOW.goreleaser.yml181 # goarch:COMMENT
LOW.goreleaser.yml201 # - PKG_CONFIG_PATH=/tmp/install_aarch64/usr/local/lib/pkgconfigCOMMENT
LOWcmd/ipsw/cmd/symbolicate.go121 # Show disassembly around panic frames with --peek (default 5 instructions)COMMENT
LOWcmd/ipsw/cmd/dyld/dyld_mg.go181 // for _, key := range lookHere {COMMENT
LOWinternal/syms/jsonl.go341// In facts mode, a "comparison_facts_collection_start" line follows the "ipsw"COMMENT
LOWinternal/diff/tasks_sandbox.go61// does not alter its parser output. parseSandboxProfiles always walks the fixedCOMMENT
LOWinternal/diff/tasks_sandbox.go81COMMENT
LOWinternal/diff/tasks_sandbox.go441 return slugCOMMENT
LOWinternal/diff/jobs_ents.go21// code-signature blob extraction piggybacks on the same walk that feedsCOMMENT
LOWinternal/diff/jobs_ents.go161 appendLaunchConstraint(&out, "Responsible", cs.LaunchConstraintsResponsible)COMMENT
LOWinternal/diff/md.go321// list renders as a plain, always-visible bullet list. At or above it (but belowCOMMENT
LOWinternal/diff/md.go481 fmt.Fprintf(&body, "## %s\n\n", bin)COMMENT
LOWinternal/diff/jobs_dsc.go61 if j == nil || j.d == nil {COMMENT
LOWinternal/diff/jobs_dsc.go101 j.d.Old.Webkit = j.hydrated.OldWebkitCOMMENT
LOWinternal/diff/jobs_dsc.go121// machosJob, but DSC image diffs suppress load-command comparison because cacheCOMMENT
LOWinternal/diff/jobs_dsc.go201}COMMENT
LOWinternal/diff/task.go21// uses html/template so renderers may compose pre-escaped fragments withoutCOMMENT
LOWinternal/diff/task.go41//COMMENT
LOWinternal/diff/task.go61//COMMENT
LOWinternal/diff/task.go101// MachoWalkTask is a mount-scoped Task that participates in the sharedCOMMENT
LOWinternal/diff/task.go121// MachoVolumeAborter is optionally implemented by [MachoWalkTask]s that keepCOMMENT
LOWinternal/diff/tasks_firmwares.go61COMMENT
LOWinternal/diff/tasks_firmwares.go81 hashMachoDiffConfig(h, t.firmwareDiffConfig())COMMENT
LOWinternal/diff/jobs_localizations.go101// extraction), or the rendered Localizations section semantics change in a wayCOMMENT
LOWinternal/diff/jobs_localizations.go121// InputHash digests the task-scope inputs: the old and new BuildManifest DMGCOMMENT
LOWinternal/diff/ipsw_artifacts.go361}COMMENT
LOWinternal/diff/ipsw_artifacts.go441}COMMENT
LOWinternal/diff/ipsw_artifacts.go541 }COMMENT
LOWinternal/diff/tasks_kexts.go61 return d.parseKernelcache()COMMENT
LOWinternal/diff/tasks_kexts.go281func (t *kextsTask) Markdown(w *strings.Builder, outputDir string) error {COMMENT
LOWinternal/diff/sandbox_buildtag.go1//go:build sandboxCOMMENT
LOWinternal/diff/diff.go121COMMENT
LOWinternal/diff/diff.go801}COMMENT
LOWinternal/diff/diff.go841// extractOldKernelcache resolves a single Old-side kernelcache on disk andCOMMENT
LOWinternal/diff/diff.go961 }COMMENT
LOWinternal/diff/tasks_kdks.go41// so the dwarf parse + markdown rendering pipeline is unchanged.COMMENT
LOWinternal/diff/tasks_kdks.go61// thing that can change the rendered bytes is the parse/diff/render logic itself,COMMENT
LOWinternal/diff/tasks_kdks.go81 return filepath.Join(path+".dSYM/Contents/Resources/DWARF", filepath.Base(path))COMMENT
LOWinternal/diff/tasks_kdks.go101// without writing real KDK files (which are multi-GB dSYM DWARF binaries). ok isCOMMENT
LOWinternal/diff/tasks_kdks.go121// InputHash digests the EXTERNAL KDK inputs: the user-passed d.Old.KDK andCOMMENT
LOWinternal/diff/tasks_kdks.go241 return nilCOMMENT
LOWinternal/diff/cache_idempotency_test.go21// bug.COMMENT
LOWinternal/diff/sandbox_buildtag_stub.go1//go:build !sandboxCOMMENT
LOWinternal/diff/tasks_kdks_cache_test.go61COMMENT
LOWinternal/diff/jobs_machos.go21// participates in the shared per-volume Mach-O walk via [MachoWalkTask],COMMENT
LOWinternal/diff/jobs_machos.go241// Version reports the cache payload / output-semantics version. SeeCOMMENT
LOWinternal/diff/jobs_machos.go261// - IgnoreBuildTimestamps (only when enabled; false preserves legacy scope)COMMENT
LOWinternal/diff/jobs_machos.go281 hashMachoDiffConfig(h, j.conf)COMMENT
LOWinternal/diff/volume_jobs.go61// the loop without real mounts.COMMENT
LOWinternal/diff/volume_jobs.go301}COMMENT
LOWinternal/diff/jobs_files.go141const filesCacheVersion = 1COMMENT
LOWinternal/diff/jobs_files.go361// JSON returns the per-task report payload: the per-bucket [FileDiff]COMMENT
LOWinternal/diff/jobs_launchd.go61// launchdJob. Bump it whenever the persisted row layout (the rendered launchdCOMMENT
LOWinternal/diff/jobs_launchd.go81COMMENT
LOWinternal/diff/jobs_features.go101// featuresJob. Bump it whenever the persisted row layout (per-volumeCOMMENT
LOWinternal/diff/jobs_features.go121}COMMENT
LOWinternal/diff/report.go1package diffCOMMENT
LOWinternal/diff/tasks_iboot.go61// no output-affecting flags: parseIBoot always extracts the iBoot strings,COMMENT
204 more matches not shown…
TODO Padding96 hits · 168 pts
SeverityFileLineSnippetContext
LOWcmd/ipsw/cmd/idev/idev_restore_ramdisk.go41 panic("not implemented") // TODO: implementCODE
LOWcmd/ipsw/cmd/idev/idev_restore_update.go41 panic("not implemented") // TODO: implementCODE
LOWcmd/ipsw/cmd/idev/idev_restore_tss.go41 panic("not implemented") // TODO: implementCODE
LOWinternal/commands/macho/swift.go28 Addrs bool // TODO: implement in swift string formattersCODE
LOW⚡api/server/routes/idev/routes.go23 // ig.GET("/apps", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go24 // ig.GET("/apps/install", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go25 // ig.GET("/apps/ls", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go26 // ig.GET("/apps/uninstall", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go28 // ig.GET("/comp", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go30 // ig.GET("/crash", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go31 // ig.GET("/crash/clear", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go32 // ig.GET("/crash/ls", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go33 // ig.GET("/crash/pull", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go35 // ig.GET("/diag", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go44 // ig.GET("/fsyms", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go46 // ig.GET("/img", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go47 // ig.GET("/img/lookup", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go48 // ig.GET("/img/ls", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go49 // ig.GET("/img/mount", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go50 // ig.GET("/img/unmount", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go63 // ig.GET("/loc", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go64 // ig.GET("/loc/clear", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go65 // ig.GET("/loc/play", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go66 // ig.GET("/loc/set", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go68 // ig.GET("/noti", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go70 // ig.GET("/pcap", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go72 // ig.GET("/prof", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go73 // ig.GET("/prof/cloud", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go74 // ig.GET("/prof/install", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go75 // ig.GET("/prof/ls", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go76 // ig.GET("/prof/rm", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go77 // ig.GET("/prof/wifi", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go79 // ig.GET("/prov", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go80 // ig.GET("/prov/clear", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go81 // ig.GET("/prov/dump", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go82 // ig.GET("/prov/install", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go83 // ig.GET("/prov/ls", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go84 // ig.GET("/prov/rm", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go86 // ig.GET("/proxy", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go88 // ig.GET("/ps", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go90 // ig.GET("/restore", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go91 // ig.GET("/restore/enter", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go92 // ig.GET("/restore/exit", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go94 // ig.GET("/screen", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go96 // ig.GET("/springb", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go97 // ig.GET("/springb/icon", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go98 // ig.GET("/springb/orient", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go99 // ig.GET("/springb/wallpaper", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go101 // ig.GET("/syslog", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/idev/routes.go103 // ig.GET("/wifi", handler) // TODO: implement thisCOMMENT
LOWapi/server/routes/idev/routes.go11 // ig.GET("/afc", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go10 // m.GET("/a2o", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go11 // m.GET("/a2s", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go12 // m.GET("/bbl", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go13 // m.GET("/disass", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go14 // m.GET("/dump", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go67 // m.GET("/lipo", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go68 // m.GET("/o2a", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go69 // m.GET("/patch", handler) // TODO: implement thisCOMMENT
LOW⚡api/server/routes/macho/routes.go70 // m.GET("/search", handler) // TODO: implement thisCOMMENT
36 more matches not shown…
Hallucination Indicators6 hits · 60 pts
SeverityFileLineSnippetContext
CRITICALinternal/diff/md.go73 d.Old.Kernel.Version.KernelVersion.Date.Format("Mon, 02Jan2006 15:04:05 MST"),CODE
CRITICALinternal/diff/md.go76 d.New.Kernel.Version.KernelVersion.Date.Format("Mon, 02Jan2006 15:04:05 MST"),CODE
CRITICALinternal/diff/format.go1672 data.OldKernelDate = d.Old.Kernel.Version.KernelVersion.Date.Format(CODE
CRITICALinternal/diff/format.go1679 data.NewKernelDate = d.New.Kernel.Version.KernelVersion.Date.Format(CODE
CRITICALinternal/diff/tasks_kexts_cache_test.go223 if !dst.d.New.Kernel.Version.KernelVersion.Date.Equal(newVer.KernelVersion.Date) {CODE
CRITICALinternal/diff/tasks_kexts_cache_test.go227 if zone, _ := dst.d.New.Kernel.Version.KernelVersion.Date.Zone(); zone != "PDT" {CODE
Verbosity Indicators12 hits · 24 pts
SeverityFileLineSnippetContext
LOWinternal/commands/ent/replacement.go360 // Step 1: Delete old IPSW dataCOMMENT
LOW⚡pkg/img4/payload_test.go231 // Step 1: Create payloadCOMMENT
LOW⚡pkg/img4/payload_test.go237 // Step 2: MarshalCOMMENT
LOW⚡pkg/img4/payload_test.go243 // Step 3: ParseCOMMENT
LOW⚡pkg/img4/payload_test.go249 // Step 4: Verify parsed matches originalCOMMENT
LOW⚡pkg/img4/payload_test.go257 // Step 5: Test decompression and data integrityCOMMENT
LOWpkg/img4/img4_test.go712 // Step 1: Create IMG4 from real dataCOMMENT
LOW⚡pkg/img4/img4_test.go733 // Step 2: Marshal the IMG4COMMENT
LOW⚡pkg/img4/img4_test.go741 // Step 3: Parse the IMG4 backCOMMENT
LOW⚡pkg/img4/img4_test.go747 // Step 4: Extract and validate individual componentsCOMMENT
LOWpkg/img4/img4_test.go778 // Step 5: Test decompression and extra dataCOMMENT
LOWpkg/img4/img4_test.go798 // Step 6: Test roundtrip creation from extracted componentsCOMMENT
Structural Annotation Overuse12 hits · 24 pts
SeverityFileLineSnippetContext
LOWinternal/commands/ent/replacement.go360 // Step 1: Delete old IPSW dataCOMMENT
LOW⚡pkg/img4/payload_test.go231 // Step 1: Create payloadCOMMENT
LOW⚡pkg/img4/payload_test.go237 // Step 2: MarshalCOMMENT
LOW⚡pkg/img4/payload_test.go243 // Step 3: ParseCOMMENT
LOW⚡pkg/img4/payload_test.go249 // Step 4: Verify parsed matches originalCOMMENT
LOW⚡pkg/img4/payload_test.go257 // Step 5: Test decompression and data integrityCOMMENT
LOWpkg/img4/img4_test.go712 // Step 1: Create IMG4 from real dataCOMMENT
LOW⚡pkg/img4/img4_test.go733 // Step 2: Marshal the IMG4COMMENT
LOW⚡pkg/img4/img4_test.go741 // Step 3: Parse the IMG4 backCOMMENT
LOW⚡pkg/img4/img4_test.go747 // Step 4: Extract and validate individual componentsCOMMENT
LOWpkg/img4/img4_test.go778 // Step 5: Test decompression and extra dataCOMMENT
LOWpkg/img4/img4_test.go798 // Step 6: Test roundtrip creation from extracted componentsCOMMENT
AI Response Leakage2 hits · 15 pts
SeverityFileLineSnippetContext
HIGHinternal/srp/srp.go26// In this implementation:COMMENT
HIGHpkg/dyld/prebuilt.go148 // FIXME: REMOVE once I have added iOS 18.x supportCOMMENT
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMpkg/kernelcache/kernelcache.go284 // Essentially: lipo -thin arm64eCOMMENT
MEDIUMpkg/kernelcache/ref/joker.c2550 // Definitely clean this up sometime... especially now that INFO is used..COMMENT
MEDIUMpkg/img4/manifest.go759 // Scan for certificate patterns in the data (more robust approach)COMMENT
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHREADME.md156- [DeepWiki](https://deepwiki.com/blacktop/ipsw), an AI-generated guide to the codebaseCODE
Redundant / Tautological Comments4 hits · 5 pts
SeverityFileLineSnippetContext
LOWcmd/ipsw/cmd/download/download_tss.go82 # Check if iOS version is still being signedCOMMENT
LOWcmd/ipsw/cmd/download/download_tss.go85 # Check if latest iOS version is still being signedCOMMENT
LOW.github/workflows/update-fcs-keys.yml256 # Check if normalization or cache update actually changed anything.COMMENT
LOWpkg/crashlog/ida.go225 # Check if address exists in the databaseSTRING
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMcmd/ipsw/cmd/symbolicate.go136 # Shows runtime addresses you can use with lldb breakpointsCOMMENT
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippetContext
LOWinternal/download/ota_records_test.go80 releaseVariant.ArchiveDecryptionKey = "other-fake-key"CODE
LOWinternal/download/ota_records_test.go89 alternate.ArchiveDecryptionKey = "fake-key"CODE
LOWinternal/commands/ent/templates/static/highlight.min.js313}),ae=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code",CODE
Hyper-Verbose Identifiers2 hits · 2 pts
SeverityFileLineSnippetContext
LOWhack/extras/webdriver.py7 def test_feature_status_page_search(self):CODE
LOWhack/extras/webdriver.py21 def test_feature_status_page_filters(self):CODE
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWinternal/commands/ida/scripts/decomp.py7CODE