AI Slop Code Risk Monitor

perkeep/perkeep

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

Perkeep (née Camlistore) is your personal storage system for life: a way of storing, syncing, sharing, modelling and backing up content.

1.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for perkeep/perkeep, a Go project with 7,257 GitHub stars. SynthScan examined 369,829 lines of code across 1493 source files, recording 372 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.7 (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.7
Adjusted Signal
1.7
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
7.3K
Stars
Go
Language
369.8K
Lines of Code
1.5K
Files
372
Pattern Hits
2026-10-31
Scan Date
0.02
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.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.2/100 · LOW

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

Agent Over-Engineering Ratio 0.1/100 · LOW

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

PR Review Velocity Impact 7.6/100 · LOW

Which changes need focused human review? 372 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

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

No multi-scan history yet — run the scanner again to build trend data.

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 20HIGH 4MEDIUM 5LOW 343

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 372 distinct pattern matches across 10 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 Block313 hits · 313 pts
SeverityFileLineSnippetContext
LOWmisc/docker/synology/build_syno.go81 // Which is why we run it as the last step, and in privileged mode.COMMENT
LOWclients/web/embed/closure/lib/closure/goog/deps.js1// Copyright 2017 The Closure Library Authors. All Rights Reserved.COMMENT
LOWclients/web/embed/closure/lib/closure/goog/base.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOWclients/web/embed/closure/lib/closure/goog/base.js641//COMMENT
LOWclients/web/embed/closure/lib/closure/goog/base.js1021 }COMMENT
LOWclients/web/embed/closure/lib/closure/goog/base.js1721 }COMMENT
LOWclients/web/embed/closure/lib/closure/goog/base.js1741 // most array functions will still work because the array is stillCOMMENT
LOWclients/web/embed/closure/lib/closure/goog/base.js1761COMMENT
LOW…/embed/closure/lib/closure/goog/labs/useragent/util.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…mbed/closure/lib/closure/goog/labs/useragent/engine.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ed/closure/lib/closure/goog/labs/useragent/platform.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…bed/closure/lib/closure/goog/labs/useragent/browser.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ients/web/embed/closure/lib/closure/goog/ui/control.js1// Copyright 2007 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/ui/registry.js1// Copyright 2008 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/ui/decorate.js1// Copyright 2008 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…b/embed/closure/lib/closure/goog/ui/controlrenderer.js1// Copyright 2008 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…eb/embed/closure/lib/closure/goog/ui/controlcontent.js1// Copyright 2009 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…nts/web/embed/closure/lib/closure/goog/ui/component.js1// Copyright 2007 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…nts/web/embed/closure/lib/closure/goog/ui/component.js1061 // Render the child into the parent at the appropriate location. Note thatCOMMENT
LOW…s/web/embed/closure/lib/closure/goog/ui/idgenerator.js1// Copyright 2008 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…/embed/closure/lib/closure/goog/useragent/useragent.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/net/xhrlike.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…b/embed/closure/lib/closure/goog/net/xmlhttpfactory.js1// Copyright 2010 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/net/xmlhttp.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…/closure/lib/closure/goog/net/wrapperxmlhttpfactory.js1// Copyright 2010 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ts/web/embed/closure/lib/closure/goog/net/errorcode.js1// Copyright 2007 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…s/web/embed/closure/lib/closure/goog/net/httpstatus.js1// Copyright 2011 The Closure Library Authors. All Rights Reserved.COMMENT
LOWclients/web/embed/closure/lib/closure/goog/net/xhrio.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ts/web/embed/closure/lib/closure/goog/net/eventtype.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOWclients/web/embed/closure/lib/closure/goog/iter/iter.js1// Copyright 2007 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…embed/closure/lib/closure/goog/bootstrap/webworkers.js1// Copyright 2010 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…web/embed/closure/lib/closure/goog/bootstrap/nodejs.js1// Copyright 2013 The Closure Library Authors.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/array/array.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ients/web/embed/closure/lib/closure/goog/crypt/sha1.js1// Copyright 2005 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/crypt/crypt.js1// Copyright 2008 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ients/web/embed/closure/lib/closure/goog/crypt/hash.js1// Copyright 2011 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ients/web/embed/closure/lib/closure/goog/crypt/sha2.js1// Copyright 2012 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…nts/web/embed/closure/lib/closure/goog/crypt/sha224.js1// Copyright 2012 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/timer/timer.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/timer/timer.js201COMMENT
LOW…/web/embed/closure/lib/closure/goog/reflect/reflect.js1// Copyright 2009 The Closure Library Authors. All Rights Reserved.COMMENT
LOWclients/web/embed/closure/lib/closure/goog/async/run.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…/web/embed/closure/lib/closure/goog/async/workqueue.js1// Copyright 2015 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…s/web/embed/closure/lib/closure/goog/async/nexttick.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…s/web/embed/closure/lib/closure/goog/async/freelist.js1// Copyright 2015 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…s/web/embed/closure/lib/closure/goog/async/throttle.js1// Copyright 2007 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ed/closure/lib/closure/goog/html/trustedresourceurl.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…nts/web/embed/closure/lib/closure/goog/html/safeurl.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…s/web/embed/closure/lib/closure/goog/html/safestyle.js1// Copyright 2014 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…/closure/lib/closure/goog/html/uncheckedconversions.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…/embed/closure/lib/closure/goog/html/safestylesheet.js1// Copyright 2014 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ts/web/embed/closure/lib/closure/goog/html/safehtml.js1// Copyright 2013 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ts/web/embed/closure/lib/closure/goog/html/safehtml.js641 //COMMENT
LOW…/web/embed/closure/lib/closure/goog/html/safescript.js1// Copyright 2014 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/style/style.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/style/style.js461COMMENT
LOW…ents/web/embed/closure/lib/closure/goog/style/style.js621 // How much the element can move in the container, i.e. the difference betweenCOMMENT
LOW…ents/web/embed/closure/lib/closure/goog/style/style.js1881 // ignores them when rendering. Interestingly enough, when we force theCOMMENT
LOWclients/web/embed/closure/lib/closure/goog/math/rect.js1// Copyright 2006 The Closure Library Authors. All Rights Reserved.COMMENT
LOWclients/web/embed/closure/lib/closure/goog/math/size.js1// Copyright 2007 The Closure Library Authors. All Rights Reserved.COMMENT
253 more matches not shown…
Hallucination Indicators20 hits · 220 pts
SeverityFileLineSnippetContext
CRITICAL…ients/web/embed/closure/lib/closure/goog/ui/control.js537 goog.ui.Control.superClass_.enterDocument.call(this);CODE
CRITICAL…ients/web/embed/closure/lib/closure/goog/ui/control.js640 goog.ui.Control.superClass_.exitDocument.call(this);CODE
CRITICAL…ients/web/embed/closure/lib/closure/goog/ui/control.js652 goog.ui.Control.superClass_.disposeInternal.call(this);CODE
CRITICAL…ients/web/embed/closure/lib/closure/goog/ui/control.js741 goog.ui.Control.superClass_.setRightToLeft.call(this, rightToLeft);CODE
CRITICAL…nts/web/embed/closure/lib/closure/goog/ui/component.js590 goog.ui.Component.superClass_.setParentEventTarget.call(this, parent);CODE
CRITICAL…nts/web/embed/closure/lib/closure/goog/ui/component.js612 goog.ui.Component.superClass_.setParentEventTarget.call(this, parent);CODE
CRITICAL…nts/web/embed/closure/lib/closure/goog/ui/component.js869 goog.ui.Component.superClass_.disposeInternal.call(this);CODE
CRITICAL…b/embed/closure/lib/closure/goog/structs/simplepool.js194 goog.structs.SimplePool.superClass_.disposeInternal.call(this);CODE
CRITICAL…b/embed/closure/lib/closure/goog/events/eventtarget.js208 goog.events.EventTarget.superClass_.disposeInternal.call(this);CODE
CRITICAL…eb/embed/closure/lib/closure/goog/events/keyhandler.js511 goog.events.KeyHandler.superClass_.disposeInternal.call(this);CODE
CRITICAL…/embed/closure/lib/closure/goog/events/eventhandler.js467 goog.events.EventHandler.superClass_.disposeInternal.call(this);CODE
CRITICAL…/embed/closure/lib/closure/goog/events/browserevent.js399 goog.events.BrowserEvent.superClass_.stopPropagation.call(this);CODE
CRITICAL…/embed/closure/lib/closure/goog/events/browserevent.js412 goog.events.BrowserEvent.superClass_.preventDefault.call(this);CODE
CRITICAL⚡app/pdfcabinet/ui/jquery-ui.min.js6(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=CODE
CRITICAL⚡app/pdfcabinet/ui/jquery-ui.min.js9}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(eCODE
CRITICALapp/pdfcabinet/ui/jquery.min.js4marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"CODE
CRITICALapp/publisher/jquery.js7237jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {CODE
CRITICAL⚡app/scanningcabinet/ui/jquery-ui.min.js6(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=CODE
CRITICAL⚡app/scanningcabinet/ui/jquery-ui.min.js9}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(eCODE
CRITICALapp/scanningcabinet/ui/jquery.min.js4marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"CODE
Synthetic Comment Markers3 hits · 22 pts
SeverityFileLineSnippetContext
HIGH…/web/embed/closure/lib/closure/goog/a11y/aria/roles.js20 * This is auto-generated code. Do not manually edit! For more detailsCOMMENT
HIGH…embed/closure/lib/closure/goog/a11y/aria/attributes.js21 * This is auto-generated code. Do not manually edit! For more detailsCOMMENT
HIGH…embed/closure/lib/closure/goog/a11y/aria/datatables.js21 * This is auto-generated code. Do not manually edit!COMMENT
Fake / Example Data14 hits · 18 pts
SeverityFileLineSnippetContext
LOWclients/web/embed/closure/lib/closure/goog/base.js2380 * var MSG_NAME = goog.getMsg('Hello {$placeholder}', {'placeholder': 'world'});COMMENT
LOWclients/curl/test_data.txt1Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque at tortor in tellus accumsan euismod. Quisque scelerisqCODE
LOWclients/curl/test_data.txt1Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque at tortor in tellus accumsan euismod. Quisque scelerisqCODE
LOW⚡app/pdfcabinet/ui/jquery-ui.min.js6(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=CODE
LOW⚡app/scanningcabinet/ui/jquery-ui.min.js6(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=CODE
LOW⚡website/testdata/sample.md1# Lorem IpsumCOMMENT
LOW⚡website/testdata/sample.md3Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doCODE
LOW⚡website/testdata/sample.md3Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doCODE
LOWwebsite/static/godocs.js39 search.value = search.getAttribute("placeholder");CODE
LOWwebsite/static/mock.html100<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. NullamCODE
LOWwebsite/static/mock.html100<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. NullamCODE
LOWwebsite/static/mock.html120Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam elementum auctor faucibus. Morbi nec nulla a magna sempeCODE
LOWwebsite/static/mock.html120Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam elementum auctor faucibus. Morbi nec nulla a magna sempeCODE
LOWwebsite/pk-web/pkweb_test.go109 "<title>Lorem Ipsum - Perkeep</title>"},CODE
AI Slop Vocabulary5 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMclients/web/embed/less/less.js201 //TODO - could do with adding more robust error handlingCOMMENT
MEDIUMclients/web/embed/react/react-dom.min.js10!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e(require("react"));else if("functioCODE
LOWclients/web/embed/react/react-with-addons.min.js10!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof definCODE
MEDIUM…id/app/src/main/java/org/camlistore/UploadService.java293 // Definitely don't need to upload thumbnails, butCOMMENT
MEDIUMapp/publisher/jquery.js9795// understands anonymous AMD modules. A named AMD is safest and most robustCOMMENT
Hyper-Verbose Identifiers11 hits · 11 pts
SeverityFileLineSnippetContext
LOWclients/web/embed/closure/lib/closure/goog/base.js2853 function addNewerLanguageTranspilationCheck(modeName, isSupported) {CODE
LOWclients/web/embed/less/less.js4713 function tryConditionFollowedByParenthesis(me) {CODE
LOWclients/web/embed/less/less.js8151 function addAllReplacementsIntoPath( beginningPath, addPaths, replacedElement, originalSelector, result) {CODE
LOWclients/web/embed/less/less.js8160 function mergeElementsOnToSelectors(elements, selectors) {CODE
LOWapp/publisher/jquery.js8053function addToPrefiltersOrTransports( structure ) {CODE
LOWapp/publisher/jquery.js8087function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {CODE
LOW…site/talks/2011-05-07-Camlistore-Sao-Paolo/prettify.js337 function allowAnywhereFoldCaseAndRenumberGroups(regex) {CODE
LOW…site/talks/2011-05-07-Camlistore-Sao-Paolo/prettify.js1017 function recombineTagsAndDecorations(job) {CODE
LOWserver/perkeepd/ui/index.js584 function createPermanodeIfNotExists(results) {CODE
LOWserver/perkeepd/ui/index.js617 function checkExistingCamliMembership(results) {CODE
LOWserver/perkeepd/ui/index.js630 function createPermanodeAssociations(results) {CODE
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHpkg/search/query.go1906 // TODO(mpl): I've added c.BlobRefPrefix, so that c.ParentDir can be directlyCOMMENT
TODO Padding3 hits · 4 pts
SeverityFileLineSnippetContext
LOWinternal/searchtypes/query.go174 EXIF *EXIFConstraint `json:"exif,omitempty"` // TODO: implementCODE
LOWinternal/searchtypes/query.go222 // TODO: implement.COMMENT
LOWpkg/search/query.go1997 // TODO: implement FileCount and FileSize.COMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMcmd/pk-mount/doc.go41# Creating a Root NodeCOMMENT
Structural Annotation Overuse1 hit · 2 pts
SeverityFileLineSnippetContext
LOWserver/perkeepd/ui/blob_item_container_react.js379 // NOTE: This method causes the URL bar to throb for a split second (at least on Chrome), so it should not be called coCOMMENT