AI Slop Code Risk Monitor

TiddlyWiki/TiddlyWiki5

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

A self-contained JavaScript wiki for the browser, Node.js, AWS Lambda etc.

3.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for TiddlyWiki/TiddlyWiki5, a JavaScript project with 8,696 GitHub stars. SynthScan examined 123,773 lines of code across 932 source files, recording 136 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 3.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.

3.6
Adjusted Signal
3.6
Raw Pattern Score
100%
Time Factor
2026-10-18
Last Push
8.7K
Stars
JavaScript
Language
123.8K
Lines of Code
932
Files
136
Pattern Hits
2026-10-31
Scan Date
0.06
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 3.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 13.7/100 · LOW

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

Agent Over-Engineering Ratio 1.2/100 · LOW

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

PR Review Velocity Impact 15.7/100 · LOW

Which changes need focused human review? 136 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 1HIGH 54MEDIUM 4LOW 77

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 136 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.

Cross-Language Confusion (JS/TS)54 hits · 348 pts
SeverityFileLineSnippetContext
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js152 print('failed to register reporter "' + env.reporter + '"');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js153 print(e.message);CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js154 print(e.stack);CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js204 print('Usage: jasmine [command] [options] [files]');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js205 print('');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js206 print('Commands:');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js212 print('%s\t%s', lPad(commandNameText, 10), subCommands[cmd].description);CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js214 print('');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js215 print('If no command is given, jasmine specs will be run');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js216 print('');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js217 print('');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js219 print('Options:');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js220 print('%s\tturn off color in spec output', lPad('--no-color', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js221 print('%s\tforce turn on color in spec output', lPad('--color', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js222 print('%s\tfilter specs to run only those that match the given string', lPad('--filter=', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js223 print('%s\tload helper files that match the given string', lPad('--helper=', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js224 print('%s\tload module that match the given string', lPad('--require=', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js225 print('%s\t[true|false] stop spec execution on expectation failure', lPad('--stop-on-failure=', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js226 print('%s\t[true|false] stop Jasmine execution on spec failure', lPad('--fail-fast=', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js227 print('%s\tpath to your optional jasmine.json', lPad('--config=', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js228 print('%s\tpath to reporter to use instead of the default Jasmine reporter', lPad('--reporter=', 18));CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js229 print('');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js230 print('The given arguments take precedence over options in your jasmine.json');CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js231 print('The path to your optional jasmine.json can also be configured by setting the JASMINE_CONFIG_PATH environment vaCODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js236 print('jasmine v' + require('../package.json').version);CODE
HIGH⚡plugins/tiddlywiki/jasmine/files/jasmine/lib/command.js237 print('jasmine-core v' + options.jasmine.coreVersion());CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js52 print('Unknown options: ' + env.unknownOptions.join(', '));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js53 print('');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js169 print('spec/support/jasmine.json already exists in your project.');CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js48 print('Randomized with seed ' + options.order.seed);CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js51 print('Started');CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js60 print('Failures:');CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js75 print("Pending:");CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js85 print('Ran ' + executableSpecCount + ' of ' + specCount + plural(' spec', specCount));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js95 print(specCounts);CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js97 print('No specs found');CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js102 print('Finished in ' + seconds + ' ' + plural('second', seconds));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js106 print('Incomplete: ' + result.incompleteReason);CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js111 print('Randomized with seed ' + result.order.seed);CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js112 print(' (jasmine --random=true --seed=' + result.order.seed + ')');CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js123 print(colored('yellow', '*'));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js129 print(colored('green', '.'));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js137 print(colored('red', 'F'));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js192 print(failedSpecNumber + ') ');CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js193 print(result.fullName);CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js199 print('Suite error: ' + result.fullName);CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js207 print(indent('Message:', 2));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js209 print(colored('red', indent(failedExpectation.message, 4)));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js211 print(indent('Stack:', 2));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js213 print(indent(stackFilter(failedExpectation.stack), 4));CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js222 print(pendingSpecNumber + ') ');CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js223 print(result.fullName);CODE
HIGH⚡…asmine/files/jasmine/lib/reporters/console_reporter.js229 print(indent(colored('yellow', pendingReason), 2));CODE
HIGH…asmine/files/jasmine/lib/reporters/console_reporter.js151 print('\n');CODE
Over-Commented Block40 hits · 36 pts
SeverityFileLineSnippetContext
LOWcore/modules/utils/dom/csscolorparser.js1// (c) Dean McNamee <dean@gmail.com>, 2012.COMMENT
LOWcore/modules/widgets/navigator.js401COMMENT
LOWbin/serve.sh1#!/bin/bashCOMMENT
LOWeditions/test/tiddlers/tests/test-back-indexer.js101 // if(updateDescriptor["new"].exists) { ... } // correct: stays greenCOMMENT
LOWeditions/test/tiddlers/tests/test-linked-list.js121 var pair = compare(remove(newPair(["A", "A"]), ["A", "A"])); //COMMENT
LOW…/test-edit-widgets/test-edit-text-widget-attributes.js181 // ---------------------------------------------------------------COMMENT
LOW…/test-edit-widgets/test-edit-text-widget-attributes.js301 // manual:COMMENT
LOWplugins/tiddlywiki/qrcode/files/qrcode/qrcode.js1//---------------------------------------------------------------------COMMENT
LOWplugins/tiddlywiki/bibtex/files/bibtexParse.js1/* start bibtexParse 0.0.24 */COMMENT
LOWplugins/tiddlywiki/xmldom/files/sax.js341 s = S_TAG_SPACE;COMMENT
LOWplugins/tiddlywiki/xmldom/files/dom.js1101 //var attrs = node2.attributes;COMMENT
LOWplugins/tiddlywiki/text-slicer/modules/slicer.js341 if(url.slice(0,5) === "data:") {COMMENT
LOWplugins/tiddlywiki/jasmine/jasmine-plugin.js41 // The `global` property is needed in two places:COMMENT
LOWplugins/tiddlywiki/jasmine/jasmine-plugin.js101 } else {COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js61 // @property lastId: NumberCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js1661COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js2001COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js3161COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js3181 // outside the view. To set the restriction dynamically, useCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js3201 // @option fadeAnimation: Boolean = trueCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js3221 // right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js4121 // @method wrapLatLng(latlng: LatLng): LatLngCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js4241 this._paneRenderers = {};COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js4401 _initEvents: function (remove) {COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js4421 // @event contextmenu: MouseEventCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js5081 position: 'topright',COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js7701 var Marker = Layer.extend({COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js7741 // @option riseOffset: Number = 250COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js7761 // visible within the map's boundsCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js9221 // @namespace MarkerCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js10141 // @aka Popup optionsCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js10161 // inside a popup if its content exceeds it.COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js10181 // @option autoPanPadding: Point = Point(5, 5)COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js10641 // @namespace TooltipCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js11181 options: {COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js11221 // @option maxNativeZoom: Number = undefinedCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js12061 // @aka TileLayer optionsCOMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js13681 if (map.options.doubleClickZoom === 'center') {COMMENT
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js13721COMMENT
LOW…eospatial/files/open-location-code/openlocationcode.js1// Copyright 2014 Google Inc. All rights reserved.COMMENT
Hyper-Verbose Identifiers24 hits · 24 pts
SeverityFileLineSnippetContext
LOWcore/modules/filters/math.js202function makeNumericBinaryOperator(fnCalc) {CODE
LOWcore/modules/filters/math.js213function makeNumericReducingOperator(fnCalc,initialValue,fnFinal) {CODE
LOWcore/modules/filters/json-ops.js135function getDataItemValueAsStrings(data,indexes) {CODE
LOWcore/modules/filters/json-ops.js155function convertDataItemValueToStrings(item) {CODE
LOWcore/modules/filters/json-ops.js188function convertDataItemKeysToStrings(item) {CODE
LOWcore/modules/filters/strings.js150function makeStringReducingOperator(fnCalc,initialValue) {CODE
LOWcore/modules/utils/messaging.js24function BrowserMessagingSubscriber(options) {CODE
LOWcore/modules/utils/messaging.js68function BrowserMessagingPublisher(options) {CODE
LOW…tils/diff-match-patch/diff_match_patch_uncompressed.js484function diffCleanupSemanticLossless(diffs) {CODE
LOWcore/modules/widgets/importvariables.js112 function haveListedTiddlersChanged() {CODE
LOWeditions/test/tiddlers/tests/test-filters.js65 function testWithAndWithoutIndexers(options) {CODE
LOWplugins/tiddlywiki/markdown/wrapper.js162function parseStringLiteralExtended(source,pos) {CODE
LOWplugins/tiddlywiki/twitter-archivist/archivist.js195function TwitterArchivistSourceNodeJs(options) {CODE
LOWplugins/tiddlywiki/twitter-archivist/archivist.js222function TwitterArchivistSourceBrowser(options) {CODE
LOW…ugins/tiddlywiki/wikitext-serialize/utils/parsetree.js27exports.serializeWikitextParseTree = function serializeWikitextParseTree(tree,options) {CODE
LOWplugins/tiddlywiki/jasmine/run-wiki-based-tests.js58 function readMultipleTiddlersTiddler(title) {CODE
LOW…jasmine/files/jasmine-core/lib/jasmine-core/jasmine.js2464 function originalTimingFunctionsIntact() {CODE
LOW…jasmine/files/jasmine-core/lib/jasmine-core/jasmine.js3867 function objectKeysAreDifferentFormatter(actual, expected, path) {CODE
LOW…jasmine/files/jasmine-core/lib/jasmine-core/jasmine.js3889 function constructorsAreDifferentFormatter(actual, expected, path) {CODE
LOW…jasmine/files/jasmine-core/lib/jasmine-core/jasmine.js3900 function actualArrayIsLongerFormatter(actual, expected, path) {CODE
LOWplugins/tiddlywiki/jasmine/files/jasmine/lib/jasmine.js214 function exitIfAllStreamsCompleted() {CODE
LOWplugins/tiddlywiki/dynaview/dynaview.js218function shouldPreserveScrollPosition() {CODE
LOWplugins/tiddlywiki/geospatial/operators/lookup.js30function getPolygonsContainingPoint(featureCollection,point) {CODE
LOW…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js400 function checkDeprecatedMixinEvents(includes) {CODE
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALplugins/tiddlywiki/codemirror/files/codemirror.js1!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&defineCODE
Fake / Example Data7 hits · 7 pts
SeverityFileLineSnippetContext
LOWcore/modules/editor/factory.js172 this.editPlaceholder = this.getAttribute("placeholder");CODE
LOWcore/modules/editor/engines/simple.js38 this.domNode.setAttribute("placeholder",this.widget.editPlaceholder);CODE
LOWcore/modules/editor/engines/framed.js64 this.domNode.setAttribute("placeholder",this.widget.editPlaceholder);CODE
LOWcore/modules/widgets/edit-shortcut.js43 this.inputNode.setAttribute("placeholder",this.shortcutPlaceholder);CODE
LOWcore/modules/widgets/edit-shortcut.js73 this.shortcutPlaceholder = this.getAttribute("placeholder");CODE
LOW…/test-edit-widgets/test-edit-text-widget-attributes.js209 expect(dn.getAttribute("placeholder")).toBe("Type here");CODE
LOWplugins/tiddlywiki/highlight/files/highlight.min.js316}),ae=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code",CODE
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMbin/serve.sh84# --------------------------------------------------COMMENT
MEDIUMbin/serve.sh98#----------------------------------------------------COMMENT
Slop Phrases3 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js7785 * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPCOMMENT
LOW.github/workflows/ci.yml70 # When making a change here, don't forget to see if it also applies to the stepCOMMENT
LOW.github/workflows/ci.yml70 # When making a change here, don't forget to see if it also applies to the stepCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM…/tiddlywiki/geospatial/files/leaflet.js/leaflet-src.js12092 // If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zooCOMMENT
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippetContext
LOW.github/workflows/pr-validation.yml16 # Step 1: Validate PR pathsCOMMENT
LOW.github/workflows/pr-validation.yml27 # Step 2: Validate change notesCOMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOW.github/workflows/pr-validation.yml16 # Step 1: Validate PR pathsCOMMENT
LOW.github/workflows/pr-validation.yml27 # Step 2: Validate change notesCOMMENT