AI Slop Code Risk Monitor

udecode/plate

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

Rich-text editor with AI and shadcn/ui

0.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for udecode/plate, a TypeScript project with 16,681 GitHub stars. SynthScan examined 733,706 lines of code across 3869 source files, recording 280 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 0.6 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

0.6
Adjusted Signal
0.6
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
16.7K
Stars
TypeScript
Language
733.7K
Lines of Code
3.9K
Files
280
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 2.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.6/100 · LOW

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

Agent Over-Engineering Ratio 1.4/100 · LOW

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

PR Review Velocity Impact 2.8/100 · LOW

Which changes need focused human review? 280 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 6HIGH 8MEDIUM 19LOW 247

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 280 distinct pattern matches across 15 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 Identifiers207 hits · 212 pts
SeverityFileLineSnippetContext
LOWpackages/plitejs/src/core/public-state.ts10430export function retainTransactionSnapshotIndex(CODE
LOWpackages/plitejs/src/core/document-shape.ts187export function assertEditorDocumentContainers(CODE
LOWpackages/plitejs/src/core/change/document-change.ts82export function assertNamedDocumentRootKey(CODE
LOWpackages/plitejs/src/dom/utils/diff-text.ts85export function longestCommonPrefixLength(str: string, another: string) {CODE
LOWpackages/plitejs/src/dom/utils/diff-text.ts97function longestCommonSuffixLength(CODE
LOW…/plitejs/src/react/editable/runtime-selection-state.ts25export function readRuntimeSelectionRange(editor: Editor): Range | null {CODE
LOW⚡packages/plitejs/src/react/editable/editing-kernel.ts180export function getEditableCommandDefinition(command: null): null;CODE
LOW⚡packages/plitejs/src/react/editable/editing-kernel.ts181export function getEditableCommandDefinition(CODE
LOW⚡packages/plitejs/src/react/editable/editing-kernel.ts184export function getEditableCommandDefinition(command: EditableCommand | null) {CODE
LOWpackages/plitejs/src/react/hooks/use-plite-runtime.tsx349export function useOptionalPliteRuntimeContext() {CODE
LOWpackages/plitejs/src/react/hooks/use-plite-runtime.tsx353export function useRequiredPliteRuntimeContext(): PliteRuntimeContextValue {CODE
LOW…ckages/plitejs/src/react/hooks/use-editor-selector.tsx82export function useRequiredEditorSelectorContext() {CODE
LOW…ckages/plitejs/src/react/hooks/use-editor-selector.tsx485export function useFlushDeferredSelectorsOnRender() {CODE
LOW…t/hooks/android-input-manager/android-input-manager.ts146export function createAndroidInputManager({CODE
LOW…latejs/src/markdown/lib/internal/markdownConversion.ts363 .use(function remarkUnwritableNodeWriter(this: Processor) {CODE
LOW…atejs/src/features/basic-nodes/lib/BaseBlockPlugins.ts249function isLiftableBlockquoteChild({CODE
LOW…latejs/src/tabbable/react/TabbableEffects.internal.tsx71export function createTabIndexRestorationQueue() {CODE
LOW…ges/platejs/src/react/internal/rendered-attributes.tsx230export function PlateRenderedAttributeProvider({CODE
LOW…kages/platejs/src/react/stores/plate/usePluginStore.ts138function resolvePluginStoreSelector(CODE
LOW…platejs/src/react/utils/pipeRenderElement.internal.tsx109function getFastInjectedAttributes({CODE
LOW…kages/platejs/src/react/components/EditorRefEffect.tsx30function ViewElementAttributesHookProgram({CODE
LOW…kages/platejs/src/react/components/EditorRefEffect.tsx53export function ViewElementAttributesEffect({CODE
LOWpackages/platejs/src/react/components/NodeSelection.tsx93function NodeSelectionHighlightPortalComponent({CODE
LOW…/platejs/src/docx/export/lib/internal/docx-document.ts328function generateContentTypesFragments(CODE
LOW…/platejs/src/docx/export/lib/internal/docx-document.ts355function generateSectionReferenceXML(CODE
LOW.github/workflows/verify-changesets.yml61 function parseChangesetReleaseTypes(content) {CODE
LOW.github/workflows/verify-changesets.yml120 function getChangesetValidationErrors(files) {CODE
LOW…ate/src/app/api/ai/command/prompt/getGeneratePrompt.ts15function buildGenerateFreeformPrompt(messages: ChatMessage[]) {CODE
LOW…ate/src/app/api/ai/command/prompt/getGeneratePrompt.ts59function buildGenerateContextPrompt(CODE
LOW…emplate/src/app/api/ai/command/prompt/getEditPrompt.ts18function buildEditMultiBlockPrompt(CODE
LOW…te/src/app/api/ai/command/prompt/getEditTablePrompt.ts12export function buildEditTableMultiCellPrompt(CODE
LOW…yground-template/src/components/ui/suggestion-node.tsx55export function getBlockSuggestionWrapperClassName({CODE
LOW…yground-template/src/components/ui/suggestion-node.tsx85export function VoidRemoveSuggestionOverlay({CODE
LOW…yground-template/src/components/ui/suggestion-node.tsx108export function SuggestionLineBreakAnchor({CODE
LOW…yground-template/src/components/ui/suggestion-node.tsx139function SuggestionLineBreakElementAnchor({CODE
LOW…yground-template/src/components/ui/suggestion-node.tsx265export function SuggestionLineBreakContent({CODE
LOW…nd-template/src/components/ui/equation-node-static.tsx55export function InlineEquationElementStatic(CODE
LOW…nd-template/src/components/ui/equation-node-static.tsx139export function InlineEquationElementDocx(CODE
LOW…-template/src/components/ui/code-block-node-static.tsx105function getCodeBlockLanguageLabel(lang?: string | null) {CODE
LOW…late-playground-template/src/components/ui/toolbar.tsx198export function ToolbarSplitButtonPrimary({CODE
LOW…late-playground-template/src/components/ui/toolbar.tsx223export function ToolbarSplitButtonSecondary({CODE
LOW…nd-template/src/components/ui/footnote-node-static.tsx5export function FootnoteReferenceElementStatic(CODE
LOW…nd-template/src/components/ui/footnote-node-static.tsx21export function FootnoteDefinitionElementStatic(CODE
LOW…-template/src/components/ui/suggestion-node-static.tsx40export function isStaticVoidRemoveSuggestion(element: TElement) {CODE
LOW…-template/src/components/ui/suggestion-node-static.tsx47export function VoidRemoveSuggestionOverlayStatic({CODE
LOW…template/src/components/ui/equation-toolbar-button.tsx10export function InlineEquationToolbarButton(CODE
LOW…und-template/src/components/ui/list-toolbar-button.tsx27export function BulletedListToolbarButton() {CODE
LOW…und-template/src/components/ui/list-toolbar-button.tsx105export function NumberedListToolbarButton() {CODE
LOW…layground-template/src/components/ui/footnote-node.tsx223export function FootnoteDefinitionElement(CODE
LOW…round-template/src/components/ui/table-node-static.tsx96export function TableCellHeaderElementStatic(CODE
LOW…e-playground-template/src/components/ui/table-node.tsx815function ExpandedSelectionTableFloatingToolbarContent(CODE
LOW…e-playground-template/src/components/ui/table-node.tsx834function CollapsedTableFloatingToolbarContent(CODE
LOW…e-playground-template/src/components/ui/table-node.tsx871function TableFloatingToolbarContent({CODE
LOW…e-playground-template/src/components/ui/table-node.tsx1010function TableBordersDropdownMenuContent(CODE
LOW…round-template/src/components/ui/code-drawing-node.tsx47function createDebouncedCodeDrawingRenderer(CODE
LOW…yground-template/src/components/ui/code-block-node.tsx129function getCodeBlockLanguageLabel(lang?: string | null) {CODE
LOW…nd-template/src/components/ui/emoji-toolbar-button.tsx387function EmojiPickerSearchAndClear({CODE
LOWtemplates/plate-template/src/components/ui/toolbar.tsx198export function ToolbarSplitButtonPrimary({CODE
LOWtemplates/plate-template/src/components/ui/toolbar.tsx223export function ToolbarSplitButtonSecondary({CODE
LOW⚡apps/www/public/r/ai-api.json56 "content": "import dedent from 'dedent';\nimport type { AIChatRequestRefs } from 'platejs/ai';\nimport type { MarkCODE
147 more matches not shown…
Hallucination Indicators6 hits · 60 pts
SeverityFileLineSnippetContext
CRITICALpackages/plitejs/src/authored/ledger/cards.ts79 placeIn(previous.last, previous.last.slot.changes.ends.get(previous.id)),CODE
CRITICAL…es/plitejs/src/react/editable/external-text-runtime.ts471 const viewRoot = toInternalRoot(this.runtime.editor.read.view.root());CODE
CRITICAL…es/plitejs/src/react/editable/external-text-runtime.ts528 toInternalRoot(this.runtime.editor.read.view.root())CODE
CRITICAL…es/plitejs/src/react/editable/external-text-runtime.ts606 toInternalRoot(this.runtime.editor.read.view.root())CODE
CRITICAL…es/plitejs/src/react/editable/external-text-runtime.ts1025 this.runtime.editor.read.view.root()CODE
CRITICAL…ages/platejs/src/features/table/lib/BaseTablePlugin.ts2386 const exact = context.editor.api.dom.clipboard.readSlice(input);CODE
Synthetic Comment Markers4 hits · 28 pts
SeverityFileLineSnippetContext
HIGH⚡apps/www/public/r/ai-api.json50 "content": "import dedent from 'dedent';\nimport { ElementApi, NodeApi, RangeApi } from 'platejs';\nimport type { CODE
HIGHapps/www/public/r/docs-meta.json9 "content": "{\n \"root\": true,\n \"pages\": [\n \"---Get Started---\",\n \"[Introduction](/docs/plate)\",CODE
HIGH⚡apps/www/public/r/ai-docs.json9 "content": "---\ntitle: AI\ndescription: AI-powered writing assistance.\ndocs:\n - route: https://pro.platejs.orgCODE
HIGH⚡apps/www/public/r/ai-docs.json9 "content": "---\ntitle: AI\ndescription: AI-powered writing assistance.\ndocs:\n - route: https://pro.platejs.orgCODE
Over-Commented Block24 hits · 24 pts
SeverityFileLineSnippetContext
LOWlefthook.yml1# EXAMPLE USAGE:COMMENT
LOWlefthook.yml21# parallel: trueCOMMENT
LOWlefthook.yml41# - script: "hello.go"COMMENT
LOWtooling/config/.ncurc.yml1# npm-check-updates configuration used by pnpm deps:check && pnpm deps:updateCOMMENT
LOW.github/workflows/ci.yml121 # runs-on: ubuntu-latestCOMMENT
LOW…-playground-template/src/components/editor/use-chat.ts1341 {COMMENT
LOW…-playground-template/src/components/editor/use-chat.ts1361 // {COMMENT
LOWapps/www/src/app/(app)/docs/[[...slug]]/doc-content.tsx301 // <div className="sticky top-0 flex w-[230px] flex-col">COMMENT
LOW…/(app)/examples/plite/_examples/utils/prism-runtime.ts1import type PrismType from 'prismjs';COMMENT
LOWapps/www/src/registry/registry-pro.ts121 // name: 'emoji-pro',COMMENT
LOWapps/www/src/registry/registry-pro.ts141 // },COMMENT
LOWapps/www/src/registry/registry-pro.ts161 // - Resize columns with drag handlesCOMMENT
LOWapps/www/src/registry/registry-pro.ts181 // },COMMENT
LOWapps/www/src/registry/registry-pro.ts201 // - Custom date formatting optionsCOMMENT
LOWapps/www/src/registry/registry-examples.ts1201 // },COMMENT
LOWapps/www/src/lib/rehype-component.ts241 // if (!component) {COMMENT
LOWapps/www/src/lib/rehype-component.ts261 // // Add code as children so that rehype can take over at build time.COMMENT
LOWapps/www/src/lib/rehype-component.ts301 // node.children?.push(COMMENT
LOWapps/www/src/lib/rehype-component.ts321 // })COMMENT
LOWapps/www/src/lib/rehype-component.ts341 // name: 'extractedClassNames',COMMENT
LOWapps/www/src/lib/rehype-component.ts361 // }),COMMENT
LOWapps/www/src/lib/rehype-component.ts381 // properties: {COMMENT
LOWapps/www/src/lib/rehype-utils.ts261 return Array.from(new Set(deps));COMMENT
LOWapps/www/src/lib/rehype-utils.ts281// fileCOMMENT
AI Slop Vocabulary7 hits · 16 pts
SeverityFileLineSnippetContext
MEDIUM…es/platejs/src/docx/export/lib/internal/xml-builder.ts2166 // Essentially if background color needs to be across the rowCOMMENT
MEDIUM⚡apps/www/public/r/ai-api.json56 "content": "import dedent from 'dedent';\nimport type { AIChatRequestRefs } from 'platejs/ai';\nimport type { MarkCODE
MEDIUMapps/www/public/r/plugin-rules-docs.json9 "content": "---\ntitle: Plugin Rules\ndescription: Configure common editing behaviors.\n---\n\nPlugin Rules controCODE
MEDIUMapps/www/public/r/browser-docs.json9 "content": "---\ntitle: \"Browser\"\ndescription: \"Use the first-party browser proof harness for editor behavior CODE
MEDIUMapps/www/public/r/media-docs.json9 "content": "---\ntitle: Media\ndocs:\n - route: https://pro.platejs.org/docs/examples/media\n title: Plus\n -CODE
MEDIUMapps/www/public/r/installation-plate-ui-docs.json9 "content": "---\ntitle: Plate UI\ndescription: Install, customize, and sync copied Plate UI components.\n---\n\nPlCODE
MEDIUMapps/www/public/r/copilot-docs.json9 "content": "---\ntitle: Copilot\ndescription: AI-powered text completion suggestions.\ndocs:\n - route: https://pCODE
Magic Placeholder Names2 hits · 12 pts
SeverityFileLineSnippetContext
HIGH⚡apps/www/public/r/ai-docs.json9 "content": "---\ntitle: AI\ndescription: AI-powered writing assistance.\ndocs:\n - route: https://pro.platejs.orgCODE
HIGHapps/www/public/r/copilot-docs.json9 "content": "---\ntitle: Copilot\ndescription: AI-powered text completion suggestions.\ndocs:\n - route: https://pCODE
Fake / Example Data12 hits · 12 pts
SeverityFileLineSnippetContext
LOWpackages/plitejs/src/testing/jsx.ts131 hplaceholder: { type: 'placeholder' },CODE
LOWpackages/plitejs/src/testing/jsx.ts164 hplaceholder: createElementWithDefaultText('placeholder'),CODE
LOWpackages/plitejs/src/dom/plugin/dom-coverage.ts65 | { nodeKey?: NodeKey; type: 'placeholder' };CODE
LOWpackages/plitejs/src/dom/utils/weak-maps.ts130export const PLACEHOLDER_SYMBOL = Symbol('placeholder') as unknown as string;CODE
LOWpackages/plitejs/src/react/viewport-boundary.tsx24 anchor: { type: 'placeholder' as const },CODE
LOW…/plitejs/src/react/components/editable-text-blocks.tsx708 | 'placeholder'CODE
LOW…plitejs/src/react/components/dom-coverage-boundary.tsx75 anchor: { type: 'placeholder' as const },CODE
LOW…plitejs/src/react/components/dom-coverage-boundary.tsx178 anchor: { type: 'placeholder' as const },CODE
LOW…es/plitejs/src/react/editable/root-selector-sources.ts221 profileId: 'placeholder',CODE
LOWpackages/test/README.md176const editor = await openExample(page, 'placeholder', {CODE
LOW…s/platejs/src/internal/mergePlateRenderedAttributes.ts17 if (name === 'className' || name === 'placeholder') {CODE
LOWpackages/platejs/src/internal/plugin/resolvePlugins.ts851 name === 'placeholder' ||CODE
Slop Phrases5 hits · 11 pts
SeverityFileLineSnippetContext
MEDIUM…emplate/src/app/api/ai/command/prompt/getEditPrompt.ts49 Hey, here's how you can set things up quickly.CODE
MEDIUM⚡apps/www/public/r/ai-api.json56 "content": "import dedent from 'dedent';\nimport type { AIChatRequestRefs } from 'platejs/ai';\nimport type { MarkCODE
MEDIUMapps/www/public/r/toolbar-docs.json9 "content": "---\ntitle: Toolbar\ndescription: Fixed and floating toolbars for your editor.\ndocs:\n - route: httpCODE
MEDIUMapps/www/public/r/installation-docs-docs.json9 "content": "---\ntitle: Local Docs\ndescription: Set up Plate's documentation locally for version-controlled, AI-eCODE
MEDIUM…rc/registry/app/api/ai/command/prompt/getEditPrompt.ts51 Hey, here's how you can set things up quickly.CODE
Self-Referential Comments5 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMapps/www/public/r/installation-node-docs.json9 "content": "---\ntitle: Node.js\ndescription: Install and configure Plate for Node.js conversion and document workCODE
MEDIUMapps/www/public/r/yjs-docs.json9 "content": "---\ntitle: Collaboration\ndescription: Real-time collaboration with Yjs\ntoc: true\n---\n\n<ComponentCODE
MEDIUMapps/www/public/r/api-editor-api-docs.json9 "content": "---\ntitle: \"Editor\"\ndescription: \"Core editor runtime API for reads, transactions, roots, state, CODE
MEDIUMapps/www/public/r/combobox-docs.json9 "content": "---\ntitle: Combobox\ndocs:\n - route: /docs/components/inline-combobox\n title: Inline Combobox\nCODE
MEDIUMapps/www/public/r/static-docs.json9 "content": "---\ntitle: Static Rendering\ndescription: A minimal, memoized, read-only version of Plate with RSC/SSCODE
AI Response Leakage1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHapps/www/public/r/comment-docs.json9 "content": "---\ntitle: Comments\ndescription: Add comments to text, reply in threads, and keep them attached as yCODE
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippetContext
HIGH…/www/src/registry/examples/values/code-block-value.tsx55 {` """Get a task by index, return None if not found."""`}CODE
Modern AI Meta-Vocabulary2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMapps/www/public/r/editor-docs.json9 "content": "---\ntitle: Editor Configuration\ndescription: Learn how to configure and customize the Plate editor.\CODE
MEDIUMapps/www/public/r/editor-docs.json9 "content": "---\ntitle: Editor Configuration\ndescription: Learn how to configure and customize the Plate editor.\CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWtooling/scripts/brl.sh68# Check if the src/react directory exists and run barrelsby if it does and if index.tsx doesn't existCOMMENT
LOWtooling/scripts/brl.sh73# Check if the src/static directory exists and run barrelsby if it does and if index.tsx doesn't existCOMMENT
Verbosity Indicators1 hit · 1 pts
SeverityFileLineSnippetContext
LOWapps/www/public/r/installation-mcp-docs.json9 "content": "---\ntitle: MCP Server\ndescription: Use the Model Context Protocol with Plate.\n---\n\nUse the shadcnCODE
Structural Annotation Overuse1 hit · 1 pts
SeverityFileLineSnippetContext
LOWapps/www/public/r/installation-mcp-docs.json9 "content": "---\ntitle: MCP Server\ndescription: Use the Model Context Protocol with Plate.\n---\n\nUse the shadcnCODE