AI Slop Code Risk Monitor

totec448-spec/chat-on-steroids

SlopCodeMonitor badge for totec448-spec/chat-on-steroids Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).
1.4 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for totec448-spec/chat-on-steroids. SynthScan examined 431,066 lines of code across 1170 source files, recording 498 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.4 (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.4
Adjusted Signal
1.4
Raw Pattern Score
100%
Time Factor
—
Last Push
—
Stars
—
Language
431.1K
Lines of Code
1.2K
Files
498
Pattern Hits
2026-10-31
Scan Date
0.01
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 5.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.7/100 · LOW

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

Agent Over-Engineering Ratio 4.2/100 · LOW

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

PR Review Velocity Impact 6.9/100 · LOW

Which changes need focused human review? 498 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 11HIGH 1MEDIUM 6LOW 480

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 498 distinct pattern matches across 6 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 Identifiers372 hits · 368 pts
SeverityFileLineSnippetContext
LOWextension/background.js783function bindCommandAckProvisional(provisional, conversationId) {CODE
LOWextension/background.js983function journalCountForConversation(conversationId) {CODE
LOWextension/background.js988async function deliverConversationJournal(conversationId) {CODE
LOWextension/background.js1656async function carryFreshReloadProvisional(tab, documentId) {CODE
LOWextension/background.js1679async function adoptFreshReloadProvisional(tab, documentId) {CODE
LOWextension/background.js1943async function rememberBackgroundPlacement(value) {CODE
LOWextension/background.js2107async function reconcileBackgroundWindow(policy) {CODE
LOWextension/background.js2246function prepareDesktopInputReceipt(tabId, id, documentId) {CODE
LOWextension/background.js2581async function currentModelCatalogTarget(nonce) {CODE
LOWextension/background.js2592async function releaseModelCatalogTarget(nonce) {CODE
LOWextension/background.js2674function inspectRequestedPluginRefresh(publications, background, browserOnly = false) {CODE
LOWextension/background.js2926async function applyRequestedBrowserPreferences(request) {CODE
LOWextension/background.js4093async function currentConversationDocument(source, conversationId) {CODE
LOWextension/background.js5130async function cachedEnvironmentDiagnostics() {CODE
LOWextension/background.js5138async function companionDiagnosticSnapshot(found) {CODE
LOWextension/background.js5178function publishCompanionDiagnostics(changed = false) {CODE
LOWextension/background.js5451function clearDeferredRevivalOffersForTab(tabId) {CODE
LOWextension/background.js5458function offerDeferredRevivalToTab(entry, tab) {CODE
LOWextension/background.js5685async function reconcileDeferredRevivalsWithApp() {CODE
LOWextension/fiber.js632 function authoredAssistantMessages(messages, budget) {CODE
LOWextension/content.js179 function notePresentationScrollInput(event) {CODE
LOWextension/content.js901 function matchesSubmittedBootstrap(message, expected) {CODE
LOWextension/content.js938 function acceptedTemporaryDecisionUser(message, decision) {CODE
LOWextension/content.js1782 function claimUnrecordedGeneration(nowGenerating, observedTurns) {CODE
LOWextension/content.js4244 function nativeImageCaptureOwnerCurrent(key, image, observation, heldEpoch, heldConversation) {CODE
LOWextension/content.js5787 function priorStreamRootCompatible(priorKey, rendered) {CODE
LOWextension/content.js6564 function presentationScrollContainer(node) {CODE
LOWextension/content.js6577 function presentationViewportAnchor(sourceTurns) {CODE
LOWextension/content.js6607 function restorePresentationViewport(anchor) {CODE
LOWextension/content.js9155 function compactionSummaryProgress() {CODE
LOWextension/content.js9986 async function maybeResumePendingCompaction(forId = conversationId, forEpoch = epoch) {CODE
LOWextension/content.js10012 async function releaseUndeliveredHandoff(forId, forEpoch) {CODE
LOWextension/content.js10069 function resumePendingCompactionFromRepair(expectedConversationId) {CODE
LOWextension/content.js10610 async function reconcileContinuationMarker(key, marked) {CODE
LOWextension/content.js10684 function releaseContinuationJournal() {CODE
LOWextension/content.js10693 function reconcileContinuationMarkers(markedTurns = markedContinuationTurns()) {CODE
LOWextension/content.js10895 function maybeRecoverResumeGoalTurn() {CODE
LOWextension/content.js10956 function maybeRecoverDurableGoalTurn() {CODE
LOWextension/content.js11691 function rememberResumeGoalPending(conversation, commandId) {CODE
LOWextension/content.js11755 function waitForRevivalSubmitReady(target, attempt, report = () => undefined) {CODE
LOWextension/content.js11836 async function waitForDeferredRevivalCustody(id, target, attempt) {CODE
LOWextension/content.js12877 function flushStreamRequestOrigins() {CODE
LOWextension/content.js12896 function confirmStreamRequestOrigin(claimed, requestIds, observedAt) {CODE
LOWextension/content.js13106 function publishDesktopDecisionPartial() {CODE
LOWextension/content.js13120 async function confirmedProviderTerminal(recordedFinal = false) {CODE
LOWtest/extension.test.ts1086 const source = backgroundSource.slice(backgroundSource.indexOf('function publishCompanionDiagnostics('),CODE
LOWtest/extension.test.ts1087 backgroundSource.indexOf('\nchrome.runtime.onMessage.addListener', backgroundSource.indexOf('function publishCompaCODE
LOWtest/extension.test.ts1107 const source = backgroundSource.slice(backgroundSource.indexOf('function publishCompanionDiagnostics('),CODE
LOWtest/extension.test.ts1108 backgroundSource.indexOf('\nchrome.runtime.onMessage.addListener', backgroundSource.indexOf('function publishCompaCODE
LOWtest/model-startup-wake.test.ts7const wake = source.slice(source.indexOf('let wakeSocket = null;'), source.indexOf('async function applyRequestedBrowserCODE
LOWtest/plugin-refresh-workflow.test.ts209function registrationGatedWorkflow(action: 'current' | 'manual' | 'claim' | 'fail' | 'complete') {CODE
LOWtest/codex-view-image-parity.test.ts48function pngWithCorruptDeflateAndValidChunkCrc(): Buffer {CODE
LOW⚡test/codex-view-image-parity.test.ts77function pngWithValidZlibHeaderOverGarbageDeflate(): Buffer {CODE
LOW⚡test/codex-view-image-parity.test.ts82function pngWithTruncatedPixelData(): Buffer {CODE
LOW⚡test/codex-view-image-parity.test.ts87function pngWithOversizedDecodedGeometry(): Buffer {CODE
LOWtest/codex-view-image-parity.test.ts143function jpegWithScanHeaderButNoEntropyData(): Buffer {CODE
LOWtest/codex-view-image-parity.test.ts161function gifWithDescriptorButNoLzwData(): Buffer {CODE
LOWtest/codex-view-image-parity.test.ts174function webpWithoutImageBitstream(): Buffer {CODE
LOWdocs/superpowers/plans/2026-10-11-app-id-attribution.md237export function resetConnectorIdentityForTests(): void {CODE
LOW…cs/superpowers/plans/2026-10-11-tab-group-placement.md364 - `async function rememberBackgroundPlacement(value): Promise<void>` (sets and persists to `chrome.storage.local.backgCODE
312 more matches not shown…
Hallucination Indicators11 hits · 125 pts
SeverityFileLineSnippetContext
CRITICALtest/browser-control-navigation.test.ts64 expect(chrome.debugger.sendCommand.mock.calls.some(([,method])=>method==='Page.navigate')).toBe(false);CODE
CRITICALtest/cos-browser-sign-in-host.test.ts79const panelState = (panel = native.panels.at(-1)!) => panel.webContents.send.mock.calls.at(-1)?.[1];CODE
CRITICALtest/browser-network-stream.test.ts110 expect(f.chrome.debugger.sendCommand.mock.calls.some(c=>c[1]==='Network.streamResourceContent'||c[1]==='Network.getRCODE
CRITICALtest/browser-network-stream.test.ts116 expect(f.chrome.debugger.sendCommand.mock.calls.some(c=>c[1]==='Network.streamResourceContent'||c[1]==='Network.getRCODE
CRITICAL⚡test/browser-network-stream.test.ts132 expect(f.chrome.debugger.sendCommand.mock.calls.some(c=>c[1]==='Network.streamResourceContent'||c[1]==='Network.getRCODE
CRITICAL⚡test/browser-network-stream.test.ts138 expect(f.chrome.debugger.sendCommand.mock.calls.some(c=>c[1]==='Network.streamResourceContent')).toBe(false);CODE
CRITICAL⚡test/browser-network-stream.test.ts145 expect(f.chrome.debugger.sendCommand.mock.calls.some(c=>c[1]==='Network.streamResourceContent'||c[1]==='Network.getRCODE
CRITICALtest/browser-network-stream.test.ts307 expect(f.chrome.debugger.sendCommand.mock.calls.some(c=>c[1]==='Network.getResponseBody')).toBe(false);CODE
CRITICALtest/browser-network-stream.test.ts404 expect(f.chrome.debugger.sendCommand.mock.calls.some(c=>c[1]==='Network.streamResourceContent')).toBe(false);CODE
CRITICALtest/browser-network-stream.test.ts417 expect(f.chrome.debugger.sendCommand.mock.calls.some(c=>c[1]==='Network.streamResourceContent')).toBe(false);CODE
CRITICALtest/browser-network-stream.test.ts442 expect(f.chrome.debugger.sendCommand.mock.calls.filter(c=>c[1]==='Network.streamResourceContent')).toHaveLength(1);CODE
Over-Commented Block89 hits · 60 pts
SeverityFileLineSnippetContext
LOWextension/background.js5301// the content script, so neither pagehide nor any later observer can retire this conversation.COMMENT
LOWextension/chatgpt-dom.js281 // node — which contains the stream this extension drew into that very turn. TheCOMMENT
LOWextension/chatgpt-dom.js3281 // The shell trigger needs MAIN ownership proof. A cold account can hydrateCOMMENT
LOWextension/fiber.js901 // turn. A Retry/Regenerate can leave the previous finished attempt in the same model whileCOMMENT
LOWextension/fiber.js2501 desiredTurnStamps.set(slot.node, `${scanToken}:${index}`);COMMENT
LOWextension/usage.js421 // The exception, and only within one response: ChatGPT now splits the two sides acrossCOMMENT
LOWextension/content.js21 * module returns, so a ChatGPT redesign cannot reach past it.COMMENT
LOWextension/content.js2461 return { outcome: 'failed', detail: failure.text,COMMENT
LOWextension/content.js2841 return turnSnapshot;COMMENT
LOWextension/content.js2881 pendingObjectiveSend = opening.receipt;COMMENT
LOWextension/content.js2961 }COMMENT
LOWextension/content.js3021 // the live turn at sequence 2, the user message that asked for it at 3, and theCOMMENT
LOWextension/content.js3081 finishGeneration(ended, steering || replacedUnfinished ? { ...bounded, continued: true } : bounded, false);COMMENT
LOWextension/content.js3121 bindResumeGoalTurn(turnId);COMMENT
LOWextension/content.js3141 // what keeps the app's `turn_start` the only one — repeating it would clear the veryCOMMENT
LOWextension/content.js3181 // Request ownership is a page-model fact, not a rendered-row fact. React can leave theCOMMENT
LOWextension/content.js3221 // the conversation is next synced. Until 1.8.8 the only reader of that field ran whileCOMMENT
LOWextension/content.js3241 // that chat twelve times over two and a half hours, each reload re-arming this clock andCOMMENT
LOWextension/content.js3301 (quietOutcome.outcome === 'completed' && freshOutcome.outcome !== 'completed'))COMMENT
LOWextension/content.js3601 if (!generating && epoch === settledEpoch && fiberSettled === settled) void refreshFiber(settled);COMMENT
LOWextension/content.js4661 const askedEpoch = epoch;COMMENT
LOWextension/content.js4761 // request-id grace period for evidence we had deliberately thrown away and filed the callCOMMENT
LOWextension/content.js4821 // they must not repaint another response halfway through feed restoration.COMMENT
LOWextension/content.js4861 //COMMENT
LOWextension/content.js5001 // `request_id` across the retries within a turn — live 2026-08-21, sessionCOMMENT
LOWextension/content.js5181 // ChatGPT exposes a public message id. A thought parent is a stronger logical anchorCOMMENT
LOWextension/content.js5601 // Membership is by durable id and nothing else. An event naming a turn this feedCOMMENT
LOWextension/content.js6001 // message/thought identity (or this document's live/settled node ownership) already choseCOMMENT
LOWextension/content.js6781 const ids = (descriptor.thoughtNotifications || [])COMMENT
LOWextension/content.js6901 // rather than by the section showing it. Deliberately not `turn.id`: a section with noCOMMENT
LOWextension/content.js7561 function settingsView(input) {COMMENT
LOWextension/content.js8621 // input listener, so typing a goal repaints nothing.COMMENT
LOWextension/content.js10241 nativePhase = 'settling';COMMENT
LOWextension/content.js11981 //COMMENT
LOWextension/content.js12481 // Refusals decided before the native Send click: nothing reached ChatGPT (#1086).COMMENT
LOWextension/content.js13061 const assistant = messages.at(-1);COMMENT
LOWextension/content.js14121 const settle = settledPluginView();COMMENT
LOWextension/content.js14581 }COMMENT
LOWtest/mcp.test.ts1001 expect(coreBytes, `core tools/list is ${coreBytes} bytes`).toBeLessThan(20_500);COMMENT
LOWsrc/renderer/main.ts1961COMMENT
LOWsrc/renderer/styles.css4341.session-controls-menu { padding: 8px 0 0; margin-top: 8px; border-top: 1px solid var(--line); }COMMENT
LOWsrc/renderer/styles.css4361#automationSwitch .mode-edit:hover:not(:disabled) { color: var(--ink); background: var(--hover); }COMMENT
LOWsrc/main/report-scrub.ts101 .sort((a, b) => b.length - a.length);COMMENT
LOWsrc/main/exec-hints.ts401 * extra fact the display name intentionally throws away: whether the caller used a path.COMMENT
LOWsrc/main/agents.ts3121function planFinish(agent: Agent, result: string): { info: AgentInfo; report: AgentMessage } {COMMENT
LOWsrc/main/agents.ts4361 // just as much as a call is. Refusing it made a worker whose request-id path broke unwakeableCOMMENT
LOWsrc/main/agents.ts4381 if (agent.info.state === 'detached' && source === 'call') {COMMENT
LOWsrc/main/bridge.ts1701 if (!tool && !bare) continue;COMMENT
LOWsrc/main/bridge.ts2661 { error: 'secure_storage_unavailable', message: storage.detail ?? 'Secure credential storage is unavailable.' },COMMENT
LOWsrc/main/bridge.ts3341 if (!id) return json(res, 400, { error: 'bad_conversation_id' }, origin);COMMENT
LOWsrc/main/bridge.ts3521 await noteRecoveryObservations(id, result.sessionId, observations, result.activity);COMMENT
LOWsrc/main/bridge.ts3601 // A browser tab closing is not evidence that the server-side ChatGPT turn has stopped.COMMENT
LOWsrc/main/bridge.ts3861 (authored === expected || authoredAsTyped === expected)) bootstrapMessageId = openingUserMessage.messageId;COMMENT
LOWsrc/main/bridge.ts4021 200,COMMENT
LOWsrc/main/bridge.ts4061 resetActivity,COMMENT
LOWsrc/main/bridge.ts4081 // ChatGPT's page no longer sees a running turn's results, so the compaction barrier fallsCOMMENT
LOWsrc/main/bridge.ts4101 ? { recordedQuestionFirst: true } : {}),COMMENT
LOWsrc/main/bridge.ts5101 // to redeem owns the command until its lease lapses — a second tab on the same markerCOMMENT
LOWsrc/main/bridge.ts6181 server = instance;COMMENT
LOWsrc/main/bridge.ts6241 // outlives its run is a tab that opens later, introduces itself as a worker ofCOMMENT
29 more matches not shown…
Fake / Example Data19 hits · 19 pts
SeverityFileLineSnippetContext
LOWextension/browser-control-page.js39 element.getAttribute('alt') || element.getAttribute('title') || element.getAttribute('placeholder') ||CODE
LOWtest/ui-plain-words.test.ts22 for (const name of ['title', 'placeholder', 'aria-label']) {CODE
LOWtest/codex-runtime-parity.test.ts123 await writeFile(shellFile, 'placeholder', 'utf8');CODE
LOWtest/renderer-i18n.test.ts312 for (const attr of ['title', 'placeholder', 'aria-label']) {CODE
LOWtest/renderer-i18n.test.ts373 .flatMap(node => ['title', 'aria-label', 'placeholder'].map(name => node.getAttribute(name) ?? ''))].join('\n');CODE
LOWtest/renderer-i18n.test.ts385 .flatMap(node => ['title', 'aria-label', 'placeholder'].map(name => node.getAttribute(name) ?? ''))].join('\n');CODE
LOWsrc/renderer/usage.ts128 const input = document.createElement('input'); input.type = 'number'; input.min = '0'; input.step = '0.01'; ui(inputCODE
LOWsrc/renderer/main.ts1936 ui(apiKey, 'placeholder', () => next.hasApiKey ? t("•••••••• stored") : 'sk-…');CODE
LOWsrc/renderer/i18n.ts101type Property = 'textContent' | 'title' | 'placeholder' | 'aria-label' | 'aria-valuetext' | 'data-usage-hint' | 'data-emCODE
LOWsrc/renderer/i18n.ts176 for (const property of ['title', 'placeholder', 'aria-label'] as const) {CODE
LOWsrc/renderer/chat-search.ts232 ui(field, 'placeholder', () => t("Search chats"));CODE
LOWsrc/renderer/chat.ts507 ui($<HTMLTextAreaElement>('chatInput'), 'placeholder', () => fileDragOver ? t('Drop to attach, up to 20 files') : readCODE
LOWsrc/renderer/chat.ts1484 ui(field, 'placeholder', () => t("Leave empty to use ChatGPT's title"));CODE
LOWsrc/renderer/chat.ts3438 ui($<HTMLTextAreaElement>('sessionObjective'), 'placeholder', () => loop ? t("What should each continuation focus on?"CODE
LOWsrc/renderer/chat.ts4101 add(label?.textContent || control.getAttribute('aria-label') || control.getAttribute('placeholder') || '');CODE
LOWsrc/renderer/chat.ts4107 add(control.getAttribute('aria-label') || control.getAttribute('placeholder') || '');CODE
LOWsrc/renderer/chat.ts8089 ui(goalKey, 'placeholder', () => state.hasGoalKey ? t("•••••••• stored") : 'sk-or-v1-…');CODE
LOWsrc/renderer/chat.ts8099 ui(goalCustomKey, 'placeholder', () => state.hasCustomProviderKey ? t("•••••••• stored") : t("leave empty for a keylesCODE
LOWsrc/renderer/settings-search.ts185 ui(field, 'placeholder', () => t("Search settings…"));CODE
Modern AI Meta-Vocabulary6 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMdocs/worklog-2026-09-19-backlog-triage.md80| [#105](https://github.com/totec448-spec/chat-on-steroids/issues/105) Feature request: Aster-style live Agent Monitor fCODE
MEDIUMdocs/worklog-2026-09-19-backlog-triage.md92| [#171](https://github.com/totec448-spec/chat-on-steroids/issues/171) Multi-agent research needs hard lifecycle controlCODE
MEDIUMdocs/worklog-2026-09-19-backlog-triage.md94| [#181](https://github.com/totec448-spec/chat-on-steroids/issues/181) Let a Prime agent create other prime agents, not CODE
MEDIUMdocs/worklog-2026-09-19-backlog-triage.md106| [#208](https://github.com/totec448-spec/chat-on-steroids/issues/208) Architecture: capability parity audit for memory,CODE
MEDIUMdocs/github-triage-2026-09-22.md82| [#208](https://github.com/totec448-spec/chat-on-steroids/issues/208) Architecture: capability parity audit for memory,CODE
MEDIUMdocs/github-triage-2026-09-22.md102| [#105](https://github.com/totec448-spec/chat-on-steroids/issues/105) Feature request: Aster-style live Agent Monitor fCODE
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHtest/secrets-shield.test.ts68 'API_KEY=your-api-key',CODE