AI Slop Code RIsk Monitor

matomo-org/matomo

Empowering People Ethically 🚀 — Matomo is hiring! Join us → https://matomo.org/jobs Matomo is the leading open-source alternative to Google Analytics, giving you complete control and built-in privacy. Easily collect, visualise, and analyse data from websites & apps. Star us on GitHub ⭐️ – Pull Requests welcome!

6.6 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for matomo-org/matomo, a PHP project with 21,940 GitHub stars. SynthScan examined 1,878,868 lines of code across 11688 source files, recording 11136 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 6.6 (Moderate 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.

6.6
Adjusted Signal
6.6
Raw Pattern Score
100%
Time Factor
2026-10-09
Last Push
21.9K
Stars
PHP
Language
1.9M
Lines of Code
11.7K
Files
11.1K
Pattern Hits
2026-10-12
Scan Date
0.02
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 24.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 4.5/100 · LOW

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

Agent Over-Engineering Ratio 23.3/100 · LOW

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

PR Review Velocity Impact 29.1/100 · MEDIUM

Which changes need focused human review? 11136 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 193HIGH 1MEDIUM 19LOW 10923

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 11136 distinct pattern matches across 11 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.

Hyper-Verbose Identifiers9602 hits · 9964 pts
SeverityFileLineSnippetContext
LOWcore/Access.php253 public function getRawSitesWithSomeViewAccess($login)CODE
LOWcore/Access.php290 public function getRawSitesWithSomeViewAccessWithinTokenScope($login)CODE
LOWcore/Access.php436 private function applyTokenAccessLevelRestrictionToLoadedSites(): voidCODE
LOWcore/Access.php538 private function rebuildCapabilitySiteIdsFromRoles(array $rolesBySite): voidCODE
LOWcore/Access.php578 private function isCapabilityWithinTokenAccessLevel(Capability $capability): boolCODE
LOWcore/Access.php597 private function isSuperUserRestrictedByTokenAccessLevel(): boolCODE
LOWcore/Access.php610 public static function getTokenAccessLevelRankings(): arrayCODE
LOWcore/Access.php639 public static function getTokenAccessLevelsDescending(): arrayCODE
LOWcore/Access.php644 private function clampRoleByTokenAccessLevel(string $role): stringCODE
LOWcore/Access.php668 private function normalizeTokenAccessLevel($tokenAccessLevel): ?stringCODE
LOWcore/Access.php689 private function resolveTokenAccessLevelForResult(AuthResult $result): ?stringCODE
LOWcore/Access.php734 private function findAuthenticatingTokenMetadata(CODE
LOWcore/Access.php872 public function getSitesIdWithAtLeastViewAccess()CODE
LOWcore/Access.php906 public function getSitesIdWithAtLeastWriteAccess()CODE
LOWcore/Access.php923 public function getSitesIdWithAdminAccess()CODE
LOWcore/Access.php954 public function getSitesIdWithWriteAccess()CODE
LOWcore/Access.php966 public function checkUserHasSuperUserAccess()CODE
LOWcore/Access.php1010 public function checkUserHasSomeWriteAccess()CODE
LOWcore/Access.php1022 public function checkUserHasSomeAdminAccess()CODE
LOWcore/Access.php1034 public function checkUserHasSomeViewAccess()CODE
LOWcore/Segment.php298 private function getExpressionsWithUnionsResolved(array $expressions): arrayCODE
LOWcore/Segment.php361 private function getInvertedOperatorForSubQuery($operator)CODE
LOWcore/Segment.php776 private function mergeSubqueryExpressionsInTree(array $tree): arrayCODE
LOWcore/Segment.php787 private function mergeSubqueryExpressionsInExpr(array $expressions, bool $isAndChain): arrayCODE
LOWcore/Archive.php280 public static function shouldSkipArchiveIfSkippingSegmentArchiveForToday(Site $site, Period $period, Segment $segmenCODE
LOWcore/Archive.php380 public function getDataTableFromNumericAndMergeChildren($names)CODE
LOWcore/Archive.php486 public static function createDataTableFromArchive($recordName, $idSite, $period, $date, $segment, $expanded = false,CODE
LOWcore/Archive.php607 private function addDataToResultCollection(CODE
LOWcore/Archive.php697 private function cacheArchiveIdsAfterLaunching($archiveNamesByPlugin): voidCODE
LOWcore/Archive.php752 private function cacheArchiveIdsWithoutLaunching($plugins): voidCODE
LOWcore/Archive.php1017 private function getArchiveIdsAndStatesByMonth($doneFlags): arrayCODE
LOWcore/Archive.php1052 public function forceFetchingWithoutLaunchingArchiving()CODE
LOWcore/Mail.php360 protected function parseDomainPlaceholderAsPiwikHostName($email)CODE
LOWcore/DataArray.php44 public function getDataArrayWithTwoLevels()CODE
LOWcore/DataArray.php361 public function enrichMetricsWithConversions()CODE
LOWcore/SettingsServer.php55 public static function setIsNotTrackerApiRequest()CODE
LOWcore/SettingsServer.php147 public static function raiseMemoryLimitIfNecessary()CODE
LOWcore/SettingsServer.php233 private static function getMegaBytesFromShorthandByte($value)CODE
LOWcore/Filesystem.php252 public static function unlinkTargetFilesNotPresentInSource($source, $target)CODE
LOWcore/Filesystem.php276 public static function sortFilesDescByPathLength($files)CODE
LOWcore/Filesystem.php539 private static function tryToCopyFileAndVerifyItWasCopied($source, $dest)CODE
LOWcore/Filesystem.php573 public static function isFileSystemCaseInsensitive(): boolCODE
LOWcore/Filesystem.php617 private static function createIndexFilesToPreventDirectoryListing($path)CODE
LOWcore/Cookie.php458 private static function getSameSiteValueForBrowser($default)CODE
LOWcore/Plugin.php162 private function hasDefinedPluginInformationInPluginClass()CODE
LOWcore/Plugin.php261 public function requiresInternetConnection()CODE
LOWcore/Plugin.php477 public function getMissingDependenciesAsString($piwikVersion = null)CODE
LOWcore/Plugin.php518 public function schedulePluginReArchiving()CODE
LOWcore/Plugin.php549 public static function getPluginNameFromBacktrace($backtrace)CODE
LOWcore/Plugin.php570 public static function getPluginNameFromNamespace($namespaceOrClassName)CODE
LOWcore/Plugin.php597 public function getPluginLastActivationTime()CODE
LOWcore/Plugin.php611 public function getPluginLastDeactivationTime()CODE
LOWcore/ArchiveProcessor.php221 public function aggregateDataTableRecords(CODE
LOWcore/ArchiveProcessor.php329 public function getNumberOfVisitsConverted()CODE
LOWcore/ArchiveProcessor.php409 protected function getAggregatedDataTableMapFromBlobs(\Iterator $dataTableBlobs, $columnsAggregationOperation, $coluCODE
LOWcore/ArchiveProcessor.php452 public function areColumnsNotAlreadyRenamed($table)CODE
LOWcore/ArchiveProcessor.php472 protected function enrichWithUniqueVisitorsMetric(Row $row)CODE
LOWcore/ArchiveProcessor.php550 private function getIdSitesToComputeNbUniques()CODE
LOWcore/ArchiveProcessor.php602 protected function getAggregatedDataTableMap($data, $columnsAggregationOperation)CODE
LOWcore/ArchiveProcessor.php623 protected function aggregatedDataTableMapsAsOne(Map $map, DataTable $aggregated)CODE
9542 more matches not shown…
Hallucination Indicators193 hits · 1578 pts
SeverityFileLineSnippetContext
CRITICALplugins/CoreVisualizations/javascripts/jqplot.js570 this.jqplotParams.axes.xaxis.ticksOriginal = this.jqplotParams.axes.xaxis.ticks.slice();CODE
CRITICALplugins/CoreVisualizations/javascripts/jqplot.js573 var ticks = this.jqplotParams.axes.xaxis.ticks = this.jqplotParams.axes.xaxis.ticksOriginal.slice();CODE
CRITICALplugins/CoreHome/javascripts/materialize-bc.spec.js54 global.M.Modal.prototype._handleFocus.call({ el: modal }, { target: target });CODE
CRITICALplugins/Overlay/javascripts/Piwik_Overlay.js487 var currentHashStr = window.CoreHome.MatomoUrl.url.value.hash.replace(/^[#/?]+/g, '');CODE
CRITICALplugins/Overlay/javascripts/Piwik_Overlay.js500 hashChangeCallback(window.CoreHome.MatomoUrl.url.value.hash.replace(/^[#/?]+/g, ''));CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-3.3.1.js7(function(){var h=Ext.util,k=Ext.each,g=true,i=false;h.Observable=function(){var l=this,m=l.events;if(l.listeners){l.on(CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-3.3.1.js11var swfobject=function(){var F="undefined",t="object",U="Shockwave Flash",Y="ShockwaveFlash.ShockwaveFlash",s="applicatiCODE
CRITICALtests/javascript/frameworks/ext/ext-base-2.3.0.js183return[tmp[0][0],tmp[0][1]];};};(function(){Ext.lib.ColorAnim=function(el,attributes,duration,method){Ext.lib.ColorAnim.CODE
CRITICALtests/javascript/frameworks/ext/ext-base-2.3.0.js216return Ext.lib.Easing.bounceOut(t*2-d,0,c,d)*.5+c*.5+b;}};(function(){Ext.lib.Motion=function(el,attributes,duration,metCODE
CRITICALtests/javascript/frameworks/ext/ext-base-2.3.0.js225else{superclass.setRuntimeAttribute.call(this,attr);}};var translateValues=function(val,start){var pageXY=Ext.lib.Dom.geCODE
CRITICALtests/javascript/frameworks/ext/ext-core-3.0.0.js9window.undefined=window.undefined;Ext={version:"3.0"};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e==CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js710Ext.dd.DragSource.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{dragElId:this.proxy.id,resizeFrCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js711if(this.afterDragEnter){this.afterDragEnter(target,e,id);}}},beforeDragEnter:function(target,e,id){return true;},alignElCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js720var data=this.getDragData(e);if(data&&this.onBeforeDrag(data,e)!==false){this.dragData=data;this.proxy.stop();Ext.dd.DraCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js723Ext.dd.DropTarget.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{isTarget:true});};Ext.extend(ExCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js726Ext.dd.DragZone=function(el,config){Ext.dd.DragZone.superclass.constructor.call(this,el,config);if(this.containerScroll)CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js729Ext.dd.DropZone=function(el,config){Ext.dd.DropZone.superclass.constructor.call(this,el,config);};Ext.extend(Ext.dd.DropCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js785Ext.data.SimpleStore=function(config){Ext.data.SimpleStore.superclass.constructor.call(this,Ext.apply(config,{reader:newCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js787Ext.data.SimpleStore.superclass.loadData.call(this,data,append);}});CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js789Ext.data.JsonStore=function(c){Ext.data.JsonStore.superclass.constructor.call(this,Ext.apply(c,{proxy:c.proxy||(!c.data?CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js805Ext.data.DataProxy=function(){this.addEvents('beforeload','load');Ext.data.DataProxy.superclass.constructor.call(this);}CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js807Ext.data.MemoryProxy=function(data){Ext.data.MemoryProxy.superclass.constructor.call(this);this.data=data;};Ext.extend(ECODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js810Ext.data.HttpProxy=function(conn){Ext.data.HttpProxy.superclass.constructor.call(this);this.conn=conn;this.useAjax=!connCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js814Ext.data.HttpProxy.superclass.destroy.call(this);}});CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js816Ext.data.ScriptTagProxy=function(config){Ext.data.ScriptTagProxy.superclass.constructor.call(this);Ext.apply(this,configCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js819this.fireEvent("load",this,o,trans.arg);trans.callback.call(trans.scope||window,result,trans.arg,true);},handleFailure:fCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js821Ext.data.JsonReader=function(meta,recordType){meta=meta||{};Ext.data.JsonReader.superclass.constructor.call(this,meta,reCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1040Ext.layout.FitLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,onLayout:function(ct,target){Ext.layout.FCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1043this.activeItem=item;item.show();this.layout();}},renderAll:function(ct,target){if(this.deferredRender){this.renderItem(CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1045Ext.layout.AnchorLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,getAnchorViewSize:function(ct,target){CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1085this.isSlid=false;if(this.animFloat!==false){this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:functioCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1089var sd=this.splitEl.dom,s=sd.style;var sh=sd.offsetHeight;this.panel.setPosition(box.x,box.y+sh);s.left=(box.x)+'px';s.tCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1097Ext.layout.FormLayout=Ext.extend(Ext.layout.AnchorLayout,{labelSeparator:':',getAnchorViewSize:function(ct,target){returCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1103c.render('x-form-el-'+c.id);}else{Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments);}},adjustWidthAnchorCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1111Ext.layout.Accordion.superclass.renderItem.apply(this,arguments);c.header.addClass('x-accordion-hd');c.on('beforeexpand'CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1116Ext.layout.TableLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:false,setContainer:function(ct){Ext.layout.TCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1263this.panel.el.dom.style.display='none';}},repair:function(xy,callback,scope){this.hide();if(typeof callback=="function")CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1266Ext.state.Provider=function(){this.addEvents("statechange");this.state={};Ext.state.Provider.superclass.constructor.callCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1275Ext.state.CookieProvider=function(config){Ext.state.CookieProvider.superclass.constructor.call(this);this.path="/";this.CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1276this.setCookie(name,value);Ext.state.CookieProvider.superclass.set.call(this,name,value);},clear:function(name){this.cleCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1580curNode=c;c.expand(false,false,f);};curNode.expand(false,false,f);},selectPath:function(path,attr,callback){attr=attr||"CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1581(this.useArrows?'x-tree-arrows':this.lines?"x-tree-lines":"x-tree-no-lines")});},initEvents:function(){Ext.tree.TreePaneCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1584this.getSelectionModel().init(this);},afterRender:function(){Ext.tree.TreePanel.superclass.afterRender.call(this);this.rCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1586this.root.destroy();this.nodeHash=null;Ext.tree.TreePanel.superclass.onDestroy.call(this);}});Ext.tree.TreePanel.nodeTypCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1614break;};}});Ext.tree.MultiSelectionModel=function(config){this.selNodes=[];this.selMap={};this.addEvents("selectionchangCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1621this.childrenRendered=false;this.rendered=false;Ext.tree.TreeNode.superclass.constructor.call(this,attributes);this.expaCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1622if(this.rendered){this.renderIndent(true,true);}},setLastChild:function(node){var ol=this.lastChild;Ext.tree.TreeNode.suCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1624var node=Ext.tree.TreeNode.superclass.appendChild.call(this,n);if(node&&this.childrenRendered){node.render();}CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1625this.ui.updateExpandIcon();return node;},removeChild:function(node){this.ownerTree.getSelectionModel().unselect(node);ExCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1629var newNode=Ext.tree.TreeNode.superclass.insertBefore.apply(this,arguments);if(newNode&&refNode&&this.childrenRendered){CODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1642this.childrenRendered=true;},sort:function(fn,scope){Ext.tree.TreeNode.superclass.sort.apply(this,arguments);if(this.chiCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1647Ext.tree.AsyncTreeNode=function(config){this.loaded=config&&config.loaded===true;this.loading=false;Ext.tree.AsyncTreeNoCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1650Ext.tree.AsyncTreeNode.superclass.expand.call(this,deep,anim,callback);},isLoading:function(){return this.loading;},loadCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1727if(Ext.dd.DragZone){Ext.tree.TreeDragZone=function(tree,config){Ext.tree.TreeDragZone.superclass.constructor.call(this,tCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1730Ext.tree.TreeEditor=function(tree,fc,config){fc=fc||{};var field=fc.events?fc:new Ext.form.TextField(fc);Ext.tree.TreeEdCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1733this.autoEditTimer=this.startEdit.defer(this.editDelay,this,[node.ui.textNode,value]);return false;}},bindScroll:functioCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1736Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents('beforeshow','beforehide','show','hide','click','mouseovCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1779Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents('click','acCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1780Ext.menu.BaseItem.superclass.destroy.call(this);},render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.mCODE
CRITICAL⚡tests/javascript/frameworks/ext/ext-all-2.3.0.js1786Ext.menu.TextItem.superclass.constructor.call(this,cfg);};Ext.extend(Ext.menu.TextItem,Ext.menu.BaseItem,{hideOnClick:faCODE
133 more matches not shown…
Over-Commented Block1175 hits · 700 pts
SeverityFileLineSnippetContext
LOWCHANGELOG.md1821COMMENT
LOWcore/DataTable/Renderer/Xml.php261COMMENT
LOWplugins/ExampleTheme/docs/index.md1## DocumentationCOMMENT
LOWplugins/ExampleTheme/stylesheets/theme.less1// Theme colors are defined through Theme.configureThemeVariables so they canCOMMENT
LOW…cking/Reports/AbstractAIChatbotFavouredPagesReport.php201COMMENT
LOWplugins/UserCountryMap/javascripts/visitor-map.js801 // so it isn't treated as a clickable (region) row. TheCOMMENT
LOWplugins/UserCountryMap/javascripts/visitor-map.js1401 */COMMENT
LOWplugins/UserCountryMap/javascripts/visitor-map.js1461 // boxes. When the loaded SVG defines an #insets group, add a non-interactiveCOMMENT
LOW…Visualizations/JqplotDataGenerator/ForecastBuilder.php301 // Reset on every non-rendered tick so a suppressed or skipped forecast does notCOMMENT
LOW…Visualizations/JqplotDataGenerator/ForecastBuilder.php421 // been observed this period, so a forecast below the current partial isCOMMENT
LOW…Visualizations/JqplotDataGenerator/ForecastBuilder.php1621 // target, which caps its own fetched window before the same two steps.COMMENT
LOW…tions/JqplotDataGenerator/ForecastSubPeriodFetcher.php221 // getDateEnd() is the calendar end of the (possibly in-progress) last displayed period,COMMENT
LOW…tions/JqplotDataGenerator/ForecastSubPeriodFetcher.php421 // full union of all contributing plugins' metrics (VisitsSummary, Actions, Referrers,COMMENT
LOW…tions/JqplotDataGenerator/ForecastSubPeriodFetcher.php941 $dateKey = $tablePeriod->getDateStart()->toString($rowKey);COMMENT
LOW…tions/JqplotDataGenerator/ForecastMetricClassifier.php181 // ratio's value can move in either direction within a partial period). Plugins extendCOMMENT
LOW…tions/JqplotDataGenerator/ForecastMetricClassifier.php201 // data rather than from the daily archives, which is why aggregating daily archivesCOMMENT
LOW…reVisualizations/vue/src/Sparklines/SparklineCard.less21 // Query container for the metric readout: MetricValue's number + heights scale with this width viaCOMMENT
LOW…tests/Unit/JqplotDataGenerator/ForecastBuilderTest.php801 // Same-DoW feed-forward also has to apply to MONOTONICITY_FREE series (ratios,COMMENT
LOW…tests/Unit/JqplotDataGenerator/ForecastBuilderTest.php841 // Tick 2: with feed-forward, $runningDailySamples['2026-04-28'] = 35. Walk from May 5COMMENT
LOW…tests/Unit/JqplotDataGenerator/ForecastBuilderTest.php901COMMENT
LOW…tests/Unit/JqplotDataGenerator/ForecastBuilderTest.php961 // the chunk-3 walk it lands on (100 + 100 + 500) / 3 = 233.33.COMMENT
LOW…tests/Unit/JqplotDataGenerator/ForecastBuilderTest.php1861 // 12:00:00 → today is index 3 (Saturday). Apr 1-3 (Wed/Thu/Fri) are completed real;COMMENT
LOW…tests/Unit/JqplotDataGenerator/ForecastBuilderTest.php1901 {COMMENT
LOW…tests/Unit/JqplotDataGenerator/ForecastBuilderTest.php1921 // - scale = 60875 / 30437.5 = 2.0 (exact)COMMENT
LOW…tests/Unit/JqplotDataGenerator/ForecastBuilderTest.php1961COMMENT
LOW…t/JqplotDataGenerator/ForecastSubPeriodFetcherTest.php1161 // whose format() is non-identity: the outer evolution chart runs the NumericCOMMENT
LOW…s/PrivacyManager/tests/Integration/DataPurgingTest.php621 $this->checkLogDataPurged();COMMENT
LOWplugins/ImageGraph/StaticGraph/GridGraph.php421 // can not currently be used because pChart's label design is not flexible enoughCOMMENT
LOWplugins/ImageGraph/StaticGraph/GridGraph.php441// $Format = array(COMMENT
LOWplugins/ImageGraph/StaticGraph/GridGraph.php461// // display only one min & max labelCOMMENT
LOWplugins/ImageGraph/StaticGraph/GridGraph.php481// if ($value < $minValue)COMMENT
LOWplugins/Marketplace/stylesheets/_variables.less21// One height for every card, so a row reads as a row whatever its descriptions run to. The tallestCOMMENT
LOW…ProfessionalServices/stylesheets/productPromotion.less1// Contextual plugin promotion shown above the widgets of a dashboard.COMMENT
LOWplugins/ExamplePlugin/docs/index.md1## DocumentationCOMMENT
LOWplugins/Actions/ArchivingHelper.php521 $configLimit = $configGeneral['archiving_ranking_query_row_limit'];COMMENT
LOW…/tests/Unit/Processor/ExceptionToTextProcessorTest.php161COMMENT
LOW…/tests/Unit/Processor/ExceptionToTextProcessorTest.php221 $wholeTrace = preg_replace('/\\(\\d+\\)/', '', $wholeTrace);COMMENT
LOW…/tests/Unit/Processor/ExceptionToTextProcessorTest.php281COMMENT
LOW…/tests/Unit/Processor/ExceptionToTextProcessorTest.php301#11 {main},COMMENT
LOWplugins/GeoIp2/data/isoRegionNames.php1<?phpCOMMENT
LOW…nsitions/vue/src/TransitionsReport/TransitionsRow.less1// Two tones per side. The pale tone -- the ribbon palette's light end -- fills the rows of theCOMMENT
LOWplugins/ExampleReport/Reports/GetExampleReport.php41 // processed metrics will be assignedCOMMENT
LOWjs/piwik.js1061COMMENT
LOWjs/piwik.js2341 // pk_vid = visitor IDCOMMENT
LOW…sources/extractSearchEngineInformationFromUrlTests.yml201# Bing mobile image search has a special URLCOMMENT
LOW…ts/PHPUnit/Unit/AssetManager/scripts/SimpleComments.js1//This is a simple commentCOMMENT
LOWtests/lib/q-1.4.1/spec/lib/jasmine-1.2.0/jasmine.css1body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }COMMENT
LOWtests/lib/q-1.4.1/spec/lib/jasmine-1.2.0/jasmine.css21#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; }COMMENT
LOWtests/lib/q-1.4.1/spec/lib/jasmine-1.2.0/jasmine.css41#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }COMMENT
LOWtests/lib/q-1.4.1/spec/lib/jasmine-1.2.0/jasmine.css61#TrivialReporter .options { text-align: right; font-size: .8em; }COMMENT
LOWtests/javascript/index.php201 // a. Let Pk be ToString(k).COMMENT
LOWtests/javascript/jslint/jslint.js1// jslint.jsCOMMENT
LOWtests/javascript/jslint/jslint.js21// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERCOMMENT
LOWtests/javascript/jslint/jslint.js41// or an object whose keys are used as global names, with a boolean valueCOMMENT
LOWtests/javascript/jslint/jslint.js61// If a stopping error was found, a null will be the last element of theCOMMENT
LOWtests/javascript/jslint/jslint.js81// functions: [COMMENT
LOWtests/javascript/jslint/jslint.js101// STRINGCOMMENT
LOWtests/javascript/jslint/jslint.js121// STRING: NUMBERCOMMENT
LOWtests/javascript/jslint/jslint.js141// var myErrorReport = JSLINT.error_report(data);COMMENT
LOWtests/javascript/jslint/jslint.js161COMMENT
1115 more matches not shown…
Fake / Example Data131 hits · 146 pts
SeverityFileLineSnippetContext
LOWcore/Plugin.php183 * - 'author_homepage' => string // author homepage URL (or email "mailto:youremail@example.org")COMMENT
LOWcore/Updater.php123 * $mail->addTo('test@example.org');COMMENT
LOWcore/Db/Schema/Mysql.php651 VALUES ( 'anonymous', '', 'anonymous@example.org', '', 0, '$now', '$now' , NULL);");CODE
LOWcore/API/DocumentationGenerator.php265 'email' => 'test@example.org',CODE
LOWplugins/WebsiteMeasurable/MeasurableSettings.php188 'placeholder' => $ip,CODE
LOWplugins/WebsiteMeasurable/Settings/Urls.php43 'placeholder' => "http://example.com/\nhttps://www.example.org/",CODE
LOW⚡plugins/CoreAdminHome/tests/Integration/TasksTest.php241 $this->assertEquals($mail->getEmailAddress(), 'hello@example.org');CODE
LOWplugins/CoreAdminHome/tests/Integration/TasksTest.php271 $this->assertEquals('hello@example.org', $mail->getEmailAddress());CODE
LOW…ins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue161 $materialInput.attr('placeholder', placeholder);CODE
LOW…oreVisualizations/Visualizations/Sparklines/Config.php203 'group' => 'placeholder' . count($this->sparklines),CODE
LOWplugins/Goals/Recommendations/HomepageAnalyzer.php931 $field->getAttribute('placeholder'),CODE
LOW⚡plugins/ExampleUI/Controller.php19 $notification = new Notification('Lorem ipsum dolor sit amet, consectetur adipiscing elit.');CODE
LOW⚡plugins/ExampleUI/Controller.php19 $notification = new Notification('Lorem ipsum dolor sit amet, consectetur adipiscing elit.');CODE
LOW⚡plugins/ExampleUI/Controller.php22 $notification = new Notification('Neque porro quisquam est qui dolorem ipsum quia dolor sit amet.');CODE
LOW⚡plugins/ExampleUI/Controller.php22 $notification = new Notification('Neque porro quisquam est qui dolorem ipsum quia dolor sit amet.');CODE
LOW⚡…nager/tests/Integration/ScopedTokenSiteListingTest.php43 $model->addUser(self::LOGIN, 'pwhash', 'scopedsitelisting@example.org', Date::now()->getDatetime());CODE
LOW…s/PrivacyManager/vue/src/Compliance/Compliance.spec.ts16 props: ['modelValue', 'placeholder', 'showAllSitesItem'],CODE
LOW…tplace/vue/src/MarketplaceHero/MarketplaceHero.spec.ts17 props: ['modelValue', 'placeholder', 'showClear'],CODE
LOW…tplace/vue/src/MarketplaceHero/MarketplaceHero.spec.ts22 :placeholder="placeholder"CODE
LOW⚡…tplace/vue/src/MarketplaceHero/MarketplaceHero.spec.ts49 expect(mountHero({ pluginCount: 142 }).find('.searchInputStub').attributes('placeholder'))CODE
LOW⚡…tplace/vue/src/MarketplaceHero/MarketplaceHero.spec.ts55 expect(mountHero().find('.searchInputStub').attributes('placeholder'))CODE
LOW⚡…tplace/vue/src/MarketplaceHero/MarketplaceHero.spec.ts62 expect(input.attributes('aria-label')).toBe(input.attributes('placeholder'));CODE
LOW…arketplace/vue/src/MarketplaceHero/MarketplaceHero.vue16 :placeholder="placeholder"CODE
LOW…arketplace/vue/src/MarketplaceHero/MarketplaceHero.vue17 :aria-label="placeholder"CODE
LOW…arketplace/vue/src/PluginDetails/PluginDetails.spec.ts410 + '<a href="mailto:dev@example.org">mail</a></p>',CODE
LOW…arketplace/vue/src/PluginDetails/PluginDetails.spec.ts422 'mailto:dev@example.org',CODE
LOWplugins/Marketplace/tests/Integration/ApiTest.php298 self::assertSame(['hello@example.org' => ''], $sentMail->getRecipients());CODE
LOWplugins/Marketplace/Api/Service.php82 * @param null|array $postData eg array('email' => 'user@example.org')COMMENT
LOWplugins/Marketplace/Api/Service.php136 * @param null|array $postData eg array('email' => 'user@example.org')COMMENT
LOWplugins/ScheduledReports/API.php126 * 'additionalEmails' => ['user@example.com']]` for email reports.COMMENT
LOWplugins/ScheduledReports/API.php216 * 'additionalEmails' => ['user@example.com']]` for email reports.COMMENT
LOW⚡…ledReports/tests/Integration/SubscriptionModelTest.php89 [true, [], 'hello@example.org', 1, false, []],CODE
LOW⚡…ledReports/tests/Integration/SubscriptionModelTest.php91 [true, ['hello@example.org'], 'hello@example.org', 1, false, []],CODE
LOW⚡…ledReports/tests/Integration/SubscriptionModelTest.php93 [false, ['hello@example.org'], 'hello@example.org', 1, false, []],CODE
LOW⚡…ledReports/tests/Integration/SubscriptionModelTest.php97 [false, ['guest@example.org', 'test@matomo.org'], 'guest@example.org', 2, false, ['test@matomo.org']],CODE
LOW⚡plugins/ScheduledReports/tests/Integration/ApiTest.php651 APIUsersManager::getInstance()->addUser('recycledLogin', 'password', 'recycled2@example.org');CODE
LOWplugins/ScheduledReports/tests/Integration/ApiTest.php383 'additionalEmails' => array('test@test.com', 't2@test.com'),CODE
LOWplugins/ScheduledReports/tests/Integration/ApiTest.php669 'recycledmodel@example.org',CODE
LOWplugins/ScheduledReports/tests/Integration/ApiTest.php678 APIUsersManager::getInstance()->addUser($login, 'password', $login . '@example.org');CODE
LOWplugins/ScheduledReports/tests/Integration/ApiTest.php1494 'additionalEmails' => array('test@test.com', 'test@test.com', 't2@test.com', 'test@test.com'),CODE
LOWplugins/ScheduledReports/tests/Integration/ApiTest.php1505 $expectedEmails = array('test@test.com', 't2@test.com');CODE
LOWplugins/ScheduledReports/tests/Integration/ApiTest.php1551 'additionalEmails' => array('test@test.com', 't2@test.com'),CODE
LOW…ager/vue/src/PersonalSettings/PersonalSettings.spec.ts24 userEmail: 'someone@example.org',CODE
LOW⚡plugins/UsersManager/tests/Integration/ModelTest.php716 $this->model->addUser($recycledLogin, 'password', 'recycled@example.org', Date::now()->getDatetime());CODE
LOW⚡plugins/UsersManager/tests/Integration/ModelTest.php731 $this->model->addUser('anonymous', '', 'anonymous@example.org', Date::now()->getDatetime());CODE
LOWplugins/UsersManager/tests/Integration/ModelTest.php419 $this->model->addUser('anonymous', 'not_a_hash', 'anonymous@example.org', Date::now()->getDatetime());CODE
LOWplugins/UsersManager/tests/Integration/ModelTest.php747 $this->model->addUser('createdLogin', 'password', 'created@example.org', Date::now()->getDatetime());CODE
LOW⚡…ns/UsersManager/tests/Integration/UsersManagerTest.php422 $this->api->addUser('existinguser', 'password', 'existinguser@example.org');CODE
LOW⚡…ns/UsersManager/tests/Integration/UsersManagerTest.php428 $this->api->addUser('existinguser', 'password', 'anotheremail@example.org');CODE
LOW⚡…ns/UsersManager/tests/Integration/UsersManagerTest.php470 $this->api->addUser("geggeqgeqag", "geqgeagae", "test@test.com");CODE
LOW⚡…ns/UsersManager/tests/Integration/UsersManagerTest.php480 $this->api->addUser("geggeqgeqag", "geqgeagae", "test@test.com");CODE
LOW⚡…ns/UsersManager/tests/Integration/UsersManagerTest.php1151 'email' => "test@test.com",CODE
LOW⚡…ns/UsersManager/tests/Integration/UsersManagerTest.php1169 'email' => "test@test.com",CODE
LOW⚡…ns/UsersManager/tests/Integration/UsersManagerTest.php1187 'email' => "test@test.com",CODE
LOW…ns/UsersManager/tests/Integration/UsersManagerTest.php185 'email' => "test@test.com",CODE
LOW…ns/UsersManager/tests/Integration/UsersManagerTest.php390 $this->api->addUser("geggeqgeqag", "geqgeagae", "test@test.com");CODE
LOW…ns/UsersManager/tests/Integration/UsersManagerTest.php451 $this->api->addUser("geggeqgeqag", "geqgeagae", "test@test.com");CODE
LOW…ns/UsersManager/tests/Integration/UsersManagerTest.php1204 'email' => "test@test.com",CODE
LOW…ns/UsersManager/tests/Integration/UsersManagerTest.php1248 'email' => "test@test.com",CODE
LOW…ns/UsersManager/tests/Integration/UsersManagerTest.php1271 'email' => "test@test.com",CODE
71 more matches not shown…
Slop Phrases19 hits · 33 pts
SeverityFileLineSnippetContext
LOWcore/ViewDataTable/Config.php429 * Attention: Message will be printed raw. Don't forget to escape where needed!COMMENT
LOWcore/ViewDataTable/Config.php436 * Attention: Message will be printed raw. Don't forget to escape where needed!COMMENT
LOWcore/ViewDataTable/Config.php544 * Attention: Message will be printed raw. Don't forget to escape where needed!COMMENT
LOWplugins/Marketplace/tests/resources/v2.0_plugins.json1525 "faq": "<p><strong>I have a large database, can I install the plugin on the command line?</stronCODE
LOWplugins/Marketplace/tests/resources/v2.0_plugins.json1525 "faq": "<p><strong>I have a large database, can I install the plugin on the command line?</stronCODE
MEDIUMplugins/Marketplace/tests/resources/v2.0_plugins.json3616 "faq": "<p><strong>Why is PIWIK 2.5 required?</strong></p>\n\n<p>Because the configuration (to bCODE
MEDIUMplugins/Marketplace/tests/resources/v2.0_plugins.json5033 "faq": "<p><strong>What are the requirements for this plugin?</strong></p>\n\n<ul><li><a href=\"CODE
LOWplugins/Marketplace/tests/resources/v2.0_plugins.json5033 "faq": "<p><strong>What are the requirements for this plugin?</strong></p>\n\n<ul><li><a href=\"CODE
MEDIUM…gins/ExampleTracker/Columns/ExampleActionDimension.php50 * detected correctly, you may want to adjust the type manually. The configured type will affect how the dimensionCOMMENT
MEDIUM…/ExampleTracker/Columns/ExampleConversionDimension.php46 * detected correctly, you may want to adjust the type manually. The configured type will affect how the dimensionCOMMENT
MEDIUM…ugins/ExampleTracker/Columns/ExampleVisitDimension.php45 * detected correctly, you may want to adjust the type manually. The configured type will affect how the dimensionCOMMENT
LOWplugins/ExamplePlugin/Widgets/MyExampleWidget.php67 * twig template. In such a case don't forget to create a twig template (eg. myViewTemplate.twig) in theCOMMENT
LOWplugins/Feedback/lang/en.json72 "FormNotEnoughFeedbackText": "Please don't forget to share your feedback below.",CODE
MEDIUMplugins/GeoIp2/lang/en.json31 "HowToSetupGeoIPIntro": "You do not appear to have accurate Geolocation setup. This is a useful feature and withCODE
LOWplugins/ExampleReport/Reports/GetExampleReport.php87 * report. Don't forget to create the defined twig template within the templates folder of your plugin in order toCOMMENT
LOWtests/PHPUnit/Integration/Columns/DimensionTest.php426 $this->fail("Dimension does no longer exist: $dimension\nPlease update list of available column dimensioCODE
LOW⚡tests/javascript/frameworks/ext/ext-all-3.3.1.js7(function(){var h=Ext.util,k=Ext.each,g=true,i=false;h.Observable=function(){var l=this,m=l.events;if(l.listeners){l.on(CODE
LOWlibs/Zend/Db/Select.php461 * bindings, don't forget to pass the values when actuallyCOMMENT
MEDIUM.ddev/config.yaml208# If you prefer you can change this to "ddev.local" to preserveCOMMENT
AI Slop Vocabulary8 hits · 24 pts
SeverityFileLineSnippetContext
MEDIUMplugins/Overlay/client/followingpages.js399 // derive the offset and dimensions is more robust.COMMENT
MEDIUMtests/javascript/frameworks/dojo/dojo-1.6.0.js9383 // "$" function, dojo.query provides robust, high-performanceCOMMENT
MEDIUMtests/javascript/frameworks/dojo/dojo-1.4.3.js9364 // "$" function, dojo.query provides robust, high-performanceCOMMENT
MEDIUMtests/javascript/frameworks/dojo/dojo-1.3.3.js7803 // "$" function, dojo.query provides robust, high-performanceCOMMENT
MEDIUMtests/javascript/frameworks/dojo/dojo-1.0.3.js5915 // "$" function, dojo.query provides robust, high-performanceCOMMENT
MEDIUMtests/javascript/frameworks/dojo/dojo-1.1.2.js6609 // "$" function, dojo.query provides robust, high-performanceCOMMENT
MEDIUMtests/javascript/frameworks/dojo/dojo-1.5.0.js9379 // "$" function, dojo.query provides robust, high-performanceCOMMENT
MEDIUM.ddev/config.yaml101# can specify any version, and is more robust than using 'nvm'.COMMENT
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHtests/resources/staticFileServer.php53// Setting zlib output compression as requestedCOMMENT
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM.github/scripts/clean-build.sh5# ------------COMMENT
MEDIUM.github/scripts/clean-build.sh9# ------------COMMENT
Excessive Try-Catch Wrapping3 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMtests/javascript/jash/Jash.js1269 jash.print("Error: the loop type '" + type + "' does not exist");CODE
LOW.ddev/commands/host/matomo_plugins_lib.sh126except Exception:CODE
LOW.ddev/commands/host/matomo_plugins_lib.sh147except Exception:CODE
Self-Referential Comments1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMplugins/Installation/ServerFilesGenerator.php124 $content = "# This file is auto generated by Matomo, do not edit directly\n# Please report any issue or improvemCODE
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWcore/Db/TransactionLevel.php55 // the first time we need to check if the transaction level actually works byCOMMENT