Repository Analysis

TiddlyWiki/TiddlyWiki5

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

3.6 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of TiddlyWiki/TiddlyWiki5, a JavaScript project with 8,609 GitHub stars. SynthScan v2.0 examined 122,939 lines of code across 928 source files, recording 136 pattern matches distributed across 10 syntactic categories. The overall adjusted score of 3.6 places this repository in the Likely human-written band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

3.6
Adjusted Score
3.6
Raw Score
100%
Time Factor
2026-07-14
Last Push
8.6K
Stars
JavaScript
Language
122.9K
Lines of Code
928
Files
136
Pattern Hits
2026-07-14
Scan Date
0.06
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

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

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 1HIGH 54MEDIUM 4LOW 77

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

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 statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Cross-Language Confusion (JS/TS)54 hits · 348 pts
SeverityFileLineSnippetContext
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js152 print('failed to register reporter "' + env.reporter + '"');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js153 print(e.message);CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js154 print(e.stack);CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js204 print('Usage: jasmine [command] [options] [files]');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js205 print('');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js206 print('Commands:');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js212 print('%s\t%s', lPad(commandNameText, 10), subCommands[cmd].description);CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js214 print('');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js215 print('If no command is given, jasmine specs will be run');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js216 print('');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js217 print('');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js219 print('Options:');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js220 print('%s\tturn off color in spec output', lPad('--no-color', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js221 print('%s\tforce turn on color in spec output', lPad('--color', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js222 print('%s\tfilter specs to run only those that match the given string', lPad('--filter=', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js223 print('%s\tload helper files that match the given string', lPad('--helper=', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js224 print('%s\tload module that match the given string', lPad('--require=', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js225 print('%s\t[true|false] stop spec execution on expectation failure', lPad('--stop-on-failure=', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js226 print('%s\t[true|false] stop Jasmine execution on spec failure', lPad('--fail-fast=', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js227 print('%s\tpath to your optional jasmine.json', lPad('--config=', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js228 print('%s\tpath to reporter to use instead of the default Jasmine reporter', lPad('--reporter=', 18));CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js229 print('');CODE
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js230 print('The given arguments take precedence over options in your jasmine.json');CODE
HIGHplugins/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
HIGHplugins/tiddlywiki/jasmine/files/jasmine/lib/command.js236 print('jasmine v' + require('../package.json').version);CODE
HIGHplugins/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.js137function 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