AI Slop Code Risk Monitor

arcsin1/oh-my-ppt

SlopCodeMonitor badge for arcsin1/oh-my-ppt Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Describe what you need — a presentation, lesson, or story — and let the AI build clean, beautiful HTML slides for you. Local-first. Works offline. Works for you.

2.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for arcsin1/oh-my-ppt, a TypeScript project with 2,250 GitHub stars. SynthScan examined 207,556 lines of code across 1097 source files, recording 360 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 2.3 (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.

2.3
Adjusted Signal
2.3
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
2.2K
Stars
TypeScript
Language
207.6K
Lines of Code
1.1K
Files
360
Pattern Hits
2026-10-31
Scan Date
0.00
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 7.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.9/100 · LOW

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

Agent Over-Engineering Ratio 9.6/100 · LOW

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

PR Review Velocity Impact 10.7/100 · LOW

Which changes need focused human review? 360 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 3HIGH 0MEDIUM 41LOW 316

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 360 distinct pattern matches across 5 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 Identifiers309 hits · 316 pts
SeverityFileLineSnippetContext
LOWresources/index-runtime.js66 function normalizeIndexTransitionType(type) {CODE
LOWresources/index-runtime.js86 function ensureIndexTransitionBaseStyles() {CODE
LOWresources/index-runtime.js111 function ensurePresentBackgroundStyles() {CODE
LOWresources/index-runtime.js125 function clearPendingPlaybackRequests() {CODE
LOWresources/index-runtime.js185 function postPlaybackAdvanceToFrame(offset) {CODE
LOWresources/index-runtime.js278 function isDeckSwitcherWheelTarget(target) {CODE
LOWresources/index-runtime.js363 function handleFramePlaybackMessage(event) {CODE
LOWresources/ppt-runtime.js131 function applyPrintAnimationEndState(rawTargets, params) {CODE
LOWresources/ppt-runtime.js343 function ensureChartNumberFormatters(config) {CODE
LOWresources/ppt-runtime.js457 function createCompletedAnimationStub() {CODE
LOWresources/ppt-runtime.js641 function consumePlaybackStepOrNavigate(offset, requestId) {CODE
LOWresources/ppt-runtime.js657 function normalizePlaybackWheelDelta(event) {CODE
LOWresources/ppt-runtime.js697 function nextWheelNavigationRequestId() {CODE
LOWresources/ppt-runtime.js906 function isContiguousClickGroupValue(group) {CODE
LOWresources/ppt-runtime.js1011 function applyRepeatDirectionParams(params, animDef) {CODE
LOWresources/ppt-runtime.js1463 function removeUnsafeMasterElementNodes(layer) {CODE
LOWresources/ppt-runtime.js1475 function syncMasterWatermarkFontSize(root, layer) {CODE
LOWresources/ppt-runtime.js1567 function loadMasterElementsWhenReady() {CODE
LOWtests/unit/tools/page-frame-padding.test.ts113 expect(indexRuntimeSource).toContain('function ensurePresentBackgroundStyles()')CODE
LOWtests/unit/runtime/index-runtime-logic.test.ts44function normalizeIndexTransitionType(type: string): string {CODE
LOWtests/unit/runtime/index-runtime-logic.test.ts70function simulateEnsureFrameLoadedOrder(): string[] {CODE
LOWtests/unit/runtime/index-runtime-logic.test.ts86function simulateWaitForFrameLoadBeforeActivation(): string[] {CODE
LOWtests/unit/runtime/index-runtime-logic.test.ts122function shouldAnimateDeckTransition(args: {CODE
LOW⚡tests/unit/runtime/index-runtime-logic.test.ts145function shouldAcceptFramePlaybackMessage(args: {CODE
LOW⚡tests/unit/runtime/index-runtime-logic.test.ts154function clearPendingPlaybackRequestsForTest(CODE
LOW⚡tests/unit/runtime/index-runtime-logic.test.ts164function normalizeWheelDeltaForTest(event: {CODE
LOWtests/unit/runtime/index-runtime-logic.test.ts175function createWheelNavigatorForTest(args?: {CODE
LOWtests/unit/runtime/index-runtime-logic.test.ts611 function shouldIncludeDefaultMotion(html: string): boolean {CODE
LOWtests/unit/prompt/source-grounding.test.ts316 editSystem.indexOf('function buildSinglePageEditPrompt(')CODE
LOWtests/unit/prompt/content-expansion.test.ts257 editSystem.indexOf('function buildSinglePageEditPrompt(')CODE
LOWtests/unit/prompt/content-expansion.test.ts260 editSystem.indexOf('function buildSinglePageEditPrompt('),CODE
LOWtests/unit/prompt/layout-budget.test.ts97 editSystem.indexOf('function buildSinglePageEditPrompt(')CODE
LOWtests/unit/prompt/layout-budget.test.ts100 editSystem.indexOf('function buildSinglePageEditPrompt('),CODE
LOWtests/unit/preview/text-hit-selection.test.ts124function setupMixedInlineParagraphPage(script: string) {CODE
LOWtests/unit/preview/text-hit-selection.test.ts250function setupFormulaWithoutAnnotationPage(script: string) {CODE
LOWtests/unit/preview/text-hit-selection.test.ts569function setupGeneratedBackgroundPage(script: string) {CODE
LOW…derer/src/components/html-editor/HtmlEditorAiPanel.tsx19function HtmlEditorAiMessageBubble({CODE
LOW…components/html-editor/HtmlEditorMediaInsertDialog.tsx52function normalizeExternalMediaUrl(value: string): string | null {CODE
LOW…components/html-editor/HtmlEditorMediaInsertDialog.tsx61export function HtmlEditorMediaInsertDialog({CODE
LOW…nderer/src/components/html-editor/HtmlEditorCanvas.tsx155export function applyHtmlEditorPreviewUrlParams(CODE
LOW…nents/session-create/SessionCreateSuggestionDialog.tsx106export function SessionCreateSuggestionDialog({CODE
LOWsrc/renderer/src/components/preview/PreviewIframe.tsx246export function isCurrentInspectorSelectionRequest(args: {CODE
LOW…omponents/master-layouts/MasterLayoutLibraryDialog.tsx177export function MasterLayoutLibraryDialog(): React.JSX.Element | null {CODE
LOW…ts/session-detail/workspace/toolbar/DynamicToolRow.tsx60function ensureDynamicToolRowMotionStyles(): void {CODE
LOW…/session-detail/toolbar/useSessionToolbarController.ts16export function useSessionToolbarController(sessionId: string) {CODE
LOW⚡…nents/session-detail/shared/pageEditGenerationEvent.ts17export function isPageEditGenerationEvent(CODE
LOW⚡…nents/session-detail/shared/pageEditGenerationEvent.ts24export function isDeckEditGenerationEvent(CODE
LOW⚡…nents/session-detail/shared/pageEditGenerationEvent.ts31export function isStyleSwitchGenerationEvent(CODE
LOW…/components/session-detail/shared/imageMessageUtils.ts4export function buildImageMessageCacheKey(sessionId: string, pageId: string): string {CODE
LOW…erer/src/components/session-detail/shared/pageUtils.ts21export function normalizePagesForSelection(pages: GeneratedPage[]): SessionPreviewPage[] {CODE
LOW…ssion-detail/speech/useSpeechScriptDrawerController.ts9export function useSpeechScriptDrawerController(sessionId: string) {CODE
LOW…ents/session-detail/hooks/useImageGenerationActions.ts20export function useImageGenerationActions(sessionId: string) {CODE
LOW…r/src/components/session-detail/hooks/chatSendUtils.ts57export function isUnsupportedMainSessionPageStructureRequest(userMessage: string): boolean {CODE
LOW…omponents/session-detail/hooks/exportProgressToast.tsx23function ExportProgressDescription({CODE
LOW…s/session-detail/hooks/useWorkspaceRibbonController.ts18export function useWorkspaceRibbonActionsRegistration(CODE
LOW…s/session-detail/hooks/useWorkspaceRibbonController.ts54export function useWorkspaceRibbonController(isSavingEdits: boolean): {CODE
LOW…s/session-detail/element-inspector/elementEditUtils.ts87export function buildSelectedElementFromSnapshot(args: {CODE
LOW…mponents/session-detail/modal/generationActivityLog.ts21export function resolveGenerationActivityStatus(CODE
LOW…mponents/session-detail/modal/generationActivityLog.ts53export function buildGenerationActivityLogContent(CODE
LOWsrc/renderer/src/hooks/generationNotificationToast.ts38export function createGenerationNotificationToast({CODE
249 more matches not shown…
Decorative Section Separators35 hits · 105 pts
SeverityFileLineSnippetContext
MEDIUMsrc/renderer/src/store/htmlEditHistoryStore.ts5// ─── Types ────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/store/htmlEditHistoryStore.ts119// ─── Helpers ──────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/store/htmlEditHistoryStore.ts321// ─── Store ────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/store/editHistoryStore.ts5// ─── Types ────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/store/editHistoryStore.ts119// ─── Helpers ──────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/store/editHistoryStore.ts321// ─── Store ────────────────────────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts394 // ─── html-editor:listMedia ─────────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts406 // ─── html-editor:chooseAndImportMedia ──────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts437 // ─── html-editor:import ────────────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts524 // ─── html-editor:ensureAnchor ──────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts541 // ─── html-editor:applyEdits ────────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts559 // ─── html-editor:listVersions ──────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts575 // ─── html-editor:restoreVersion ────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts633 // ─── html-editor:export ────────────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts649 // ─── html-editor:openInBrowser ─────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts673 // ─── html-editor:revealFile ─────────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts692 // ─── html-editor:listDocuments ─────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts709 // ─── html-editor:listMessages ──────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts736 // ─── html-editor:clearMessages ─────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts745 // ─── html-editor:openDocument ──────────────────────────COMMENT
MEDIUMsrc/main/html-editor/html-editor-handlers.ts815 // ─── html-editor:cleanup(只删数据库记录,不删磁盘文件) ─────COMMENT
MEDIUMsrc/main/io/html-pptx/font-collect.ts227// ─── TTF merge ──────────────────────────────────────────────────────COMMENT
MEDIUMsrc/main/element-editor/shared.ts6// ─── 共享锁 ───────────────────────────────────────────────COMMENT
MEDIUMsrc/main/element-editor/shared.ts25// ─── 常量 ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/main/element-editor/shared.ts85// ─── 通用工具函数 ──────────────────────────────────────────COMMENT
MEDIUMsrc/main/element-editor/shared.ts350// ─── Patch 函数 ────────────────────────────────────────────COMMENT
MEDIUMsrc/main/element-editor/handlers.ts36 // ─── element-anchor:ensure ──────────────────────────────COMMENT
MEDIUMsrc/main/element-editor/handlers.ts86 // ─── element-animation:get / set ───────────────────────COMMENT
MEDIUMsrc/main/element-editor/handlers.ts202 // ─── element-editor:delete-element ──────────────────────COMMENT
MEDIUMsrc/main/element-editor/handlers.ts252 // ─── edit:save-batch ────────────────────────────────────COMMENT
MEDIUMsrc/main/element-editor/handlers.ts468 // ─── element-editor:apply-sync-to-all-pages ─────────────COMMENT
MEDIUMsrc/main/element-editor/handlers.ts577 // ─── drag-editor:update-element-layout ──────────────────COMMENT
MEDIUMsrc/main/element-editor/handlers.ts630 // ─── text-editor:update-element-text ────────────────────COMMENT
MEDIUMsrc/main/element-editor/handlers.ts668 // ─── text-editor:update-element-properties ──────────────COMMENT
MEDIUMsrc/main/generation/agent-runner.ts206// ── Shared agent stream processor ───────────────────────────────────────COMMENT
Hallucination Indicators3 hits · 30 pts
SeverityFileLineSnippetContext
CRITICALtests/unit/generation/job-manager.test.ts112 const sessionJobFinishedCall = ctx.db.updateSessionJobStatus.mock.calls.findIndex(CODE
CRITICALtests/unit/generation/job-manager.test.ts439 const sessionJobFinishedCall = ctx.db.updateSessionJobStatus.mock.calls.findIndex(CODE
CRITICALtests/unit/generation/job-manager.test.ts445 const fallbackRunFailureCall = ctx.db.updateGenerationRunStatus.mock.calls.findIndex(CODE
Modern AI Meta-Vocabulary6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMresources/skills/oh-my-ppt-layout/SKILL.md113## 5. Overpacked chart slide guardrailsCOMMENT
MEDIUM…s/unit/edit-jobs/replace-page-content-fragment.test.ts49 // normalizer wraps it in a scaffold and decorates block-level children).COMMENT
MEDIUMtests/unit/prompt/content-expansion.test.ts96 // and guardrails, so it must not drift into layout-specific recipes.COMMENT
MEDIUM…t/session-detail/preview-stage-ruler-direction.test.ts5// These source-level assertions are intentionally narrow guardrails for ruler/guide wiring.COMMENT
MEDIUMsrc/main/generation/add-page-flow.ts238 // ── Step 4: Create scaffold ──COMMENT
MEDIUMsrc/main/generation/retry-single-page-flow.ts214 // Write scaffold before generationCOMMENT
Fake / Example Data7 hits · 7 pts
SeverityFileLineSnippetContext
LOWresources/tailwindcss.v3.js27`),v=y.length-1,v>0?(k=a+v,S=w-y[v].length):(k=a,S=s),T=D.comment,a=k,p=k,d=w-S):c===D.slash?(w=o,T=c,p=a,d=o-s,l=w+1):(CODE
LOWsrc/main/io/pptx-import/chart-renderer.ts98 `<section data-block-id="${escapeHtml(args.blockId)}" data-pptx-kind="chart" data-pptx-import-mode="placeholder" data-CODE
LOWsrc/main/io/pptx-import/index.ts1527 return `<section data-block-id="${escapeHtml(args.blockId)}" data-pptx-kind="table" data-pptx-import-mode="placeholdCODE
LOWsrc/main/io/pptx-import/index.ts1660 if (html.includes('data-pptx-import-mode="placeholder"') && args.chartRewrite) {CODE
LOWsrc/main/io/pptx-import/index.ts1687 if (html.includes('data-pptx-import-mode="placeholder"')) {CODE
LOW…agent-runtime/prompt/templates/style-import/preview.md11- Write original, presentation-ready copy inspired by the style's mood and suitable scenarios. Use a strong title, a conCODE
LOWsrc/main/session/page-html-builders.ts22 el.removeAttr('placeholder')CODE