AI Slop Code Risk Monitor

ueberdosis/tiptap

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

The headless rich text editor framework for web artisans.

0.4 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for ueberdosis/tiptap, a TypeScript project with 38,913 GitHub stars. SynthScan examined 325,222 lines of code across 2354 source files, recording 107 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 0.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.

0.4
Adjusted Signal
0.4
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
38.9K
Stars
TypeScript
Language
325.2K
Lines of Code
2.4K
Files
107
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 1.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.7/100 · LOW

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

Agent Over-Engineering Ratio 1.2/100 · LOW

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

PR Review Velocity Impact 2.0/100 · LOW

Which changes need focused human review? 107 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 2HIGH 0MEDIUM 2LOW 103

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 107 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 Identifiers77 hits · 77 pts
SeverityFileLineSnippetContext
LOWscripts/aggregate-changeset.js146function shouldUpdateDependencyBasedOnConfig(cwd, release, dependency, config) {CODE
LOWscripts/aggregate-changeset.js309function replaceOrPrependVersionSection(body, newSection, version) {CODE
LOWpackages/extension-code/src/code.ts97function shortestUnusedBacktickRun(text: string): number {CODE
LOW…s/ai-toolkit/tests/integration/serverAiToolkit.test.ts51function createEditorWithExplicitExtensions(CODE
LOW…ages/core/tests/utils/createViewMutationTestContext.ts4export function createViewMutationTestContext() {CODE
LOWpackages/core/src/decorations/DecorationManager.test.ts621 function spanningBoundaryExtension(name: string) {CODE
LOWpackages/core/src/decorations/DecorationManager.test.ts638 function blockStartWidgetExtension(name: string) {CODE
LOWpackages/core/src/decorations/DecorationManager.test.ts749 function beforeTransactionListeners(editor: Editor) {CODE
LOW…/src/decorations/helpers/decorationsToPMDecorations.ts15export function decorationsToPMDecorations(CODE
LOW…e/src/decorations/helpers/hasResolvableChangedRange.ts10export function hasResolvableChangedRange(step: Step): boolean {CODE
LOW…src/decorations/helpers/filterOutOfRangeDecorations.ts23export function filterOutOfRangeDecorations({CODE
LOW…e/src/decorations/helpers/shouldRecomputeDecoration.ts10export function shouldRecomputeDecoration(CODE
LOW…ore/src/utilities/markdown/createInlineMarkdownSpec.ts14function serializeShortcodeAttributes(attrs: Record<string, any>): string {CODE
LOW…/src/utilities/markdown/renderNestedMarkdownContent.ts76export function renderNestedMarkdownContent(CODE
LOW…/src/utilities/markdown/createAtomBlockMarkdownSpec.ts56export function createAtomBlockMarkdownSpec(options: AtomBlockMarkdownSpecOptions): {CODE
LOWpackages/core/src/commands/toggleList.ts115function createInnerSelectionForWholeDocList(tr: Transaction) {CODE
LOWpackages/core/src/helpers/isProseMirrorCellSelection.ts12export function isProseMirrorCellSelection(selection: unknown): selection is CellSelection {CODE
LOW…ages/core/src/helpers/getSchemaByResolvedExtensions.ts19export function getSchemaByResolvedExtensions(CODE
LOWpackages/core/src/helpers/findParentNodeClosestToPos.ts14export function findParentNodeClosestToPos(CODE
LOW…kages/core/src/helpers/getTextSerializersFromSchema.ts10export function getTextSerializersFromSchema(schema: Schema): Record<string, TextSerializer> {CODE
LOW…re/src/helpers/injectExtensionAttributesToParseRule.ts12export function injectExtensionAttributesToParseRule(CODE
LOW…kages/core/src/helpers/isProseMirrorAddNodeMarkStep.ts12export function isProseMirrorAddNodeMarkStep(value: unknown): value is AddNodeMarkStep {CODE
LOW…ckages/core/src/helpers/isProseMirrorRemoveMarkStep.ts12export function isProseMirrorRemoveMarkStep(value: unknown): value is RemoveMarkStep {CODE
LOW…ckages/core/src/helpers/getAttributesFromExtensions.ts10export function getAttributesFromExtensions(extensions: Extensions): ExtensionAttribute[] {CODE
LOWpackages/core/src/helpers/isProseMirrorNodeSelection.ts12export function isProseMirrorNodeSelection(selection: unknown): selection is NodeSelection {CODE
LOW…/core/src/helpers/getSchemaSpecByResolvedExtensions.ts60export function getSchemaSpecByResolvedExtensions(CODE
LOW…ges/core/src/helpers/isProseMirrorReplaceAroundStep.ts12export function isProseMirrorReplaceAroundStep(value: unknown): value is ReplaceAroundStep {CODE
LOW…es/core/src/helpers/isProseMirrorRemoveNodeMarkStep.ts12export function isProseMirrorRemoveNodeMarkStep(value: unknown): value is RemoveNodeMarkStep {CODE
LOWpackages/core/src/helpers/rewriteUnknownContent.ts27function rewriteUnknownContentInner({CODE
LOW…s/core/src/helpers/warnOnDuplicatedProseMirrorModel.ts17export function warnOnDuplicatedProseMirrorModel(schema: Schema): void {CODE
LOW…ges/extension-find-and-replace/src/find-and-replace.ts131function getPendingAwarePluginState(CODE
LOW…n-find-and-replace/src/state/debounced-search-state.ts27export function clearDebouncedSearchState(editor: Editor): void {CODE
LOWpackages/suggestion/src/plugin/floating-ui.ts23export function createSuggestionFloatingUiConfig({CODE
LOWpackages/extension-table/src/utils/parseAlign.ts53export function normalizeTableCellAlignFromAttributes(CODE
LOW…/table/utilities/preserveCellSelectionOnContextMenu.ts41export function preserveCellSelectionOnContextMenu() {CODE
LOW…ges/extension-drag-handle/src/helpers/nodeRangeDrop.ts112export function createDroppedNodeRangeSelection(CODE
LOWpackages/markdown/src/utils.ts23export function extractAbsorbedBlankLines(tokens: MarkdownToken[]): MarkdownToken[] {CODE
LOWpackages/markdown/src/utils/htmlTagDetection.ts185export function htmlContainsUnrecognizedTag(html: string, schemaTags: Set<string>): boolean {CODE
LOW…extension-ruby-text/src/ruby-text-decoration-plugin.ts52function defaultRenderAnnotationEditor({CODE
LOW…s/src/placeholder/utils/buildPlaceholderDecorations.ts89export function buildPlaceholderDecorations({CODE
LOW…ensions/src/placeholder/utils/placeholderStateField.ts111function updateDecorationsInRanges({CODE
LOW…ensions/src/placeholder/utils/placeholderStateField.ts169export function createPlaceholderStateField({CODE
LOW…s/src/placeholder/utils/createPlaceholderDecoration.ts20export function createPlaceholderDecoration(options: {CODE
LOW…s/src/placeholder/utils/preparePlaceholderAttribute.ts6export function preparePlaceholderAttribute(attr: string): string {CODE
LOW…que-id/tests/integration/uniqueIdCollaboration.test.ts65function createCollabEditorWithProvider(provider: ReturnType<typeof createMockProvider>) {CODE
LOWpackages/extension-mathematics/src/utils.ts35export function createMathMigrateTransaction(CODE
LOWpackages/extension-list/src/ordered-list/utils.ts97function interruptsLazyContinuation(line: string): boolean {CODE
LOWpackages/extension-list/src/ordered-list/utils.ts228export function parsePlainTextOrderedListPaste(text: string): JSONContent | null {CODE
LOW…/src/ordered-list/collectOrderedListItemsFromSource.ts35export function collectOrderedListItemsFromSource(CODE
LOWpackages/extension-list/src/ordered-list/roman.ts208export function areOrderedListMarkersSequential(markers: string[]): boolean {CODE
LOWpackages/extension-list/src/ordered-list/roman.ts249export function buildOrderedListAttrsFromMarker(marker: string): Record<string, string | number> {CODE
LOW…ckages/extension-list/src/ordered-list/ordered-list.ts63function cssListStyleTypeToHtmlType(style: string): string | null {CODE
LOWpackages/extension-list/src/item/list-item.ts38function isSameLineOrderedListToken(token: MarkdownToken): boolean {CODE
LOWpackages/extension-list/src/item/list-item.ts50function parseSameLineOrderedListText(text: string, helpers: MarkdownParseHelpers): JSONContent[] {CODE
LOWpackages/static-renderer/CHANGELOG.md982 function MyCustomComponentWithoutContent() {CODE
LOWpackages/static-renderer/CHANGELOG.md1037 function MyCustomComponentWithContent() {CODE
LOWpackages/static-renderer/CHANGELOG.md1530 function MyCustomComponentWithoutContent() {CODE
LOWpackages/static-renderer/CHANGELOG.md1585 function MyCustomComponentWithContent() {CODE
LOWpackages/static-renderer/CHANGELOG.md1806 function MyCustomComponentWithoutContent() {CODE
LOWpackages/static-renderer/CHANGELOG.md1861 function MyCustomComponentWithContent() {CODE
17 more matches not shown…
Fake / Example Data23 hits · 27 pts
SeverityFileLineSnippetContext
LOWpackages/core/src/commands/setContent.test.ts108 '<p><span data-type="mention" data-id="1" data-label="John Doe">@John Doe</span></p>',CODE
LOWpackages/core/src/commands/setContent.test.ts111 '<span data-type="mention" data-id="1" data-label="John Doe" data-mention-suggestion-char="@">@John Doe</span>',CODE
LOWpackages/suggestion/src/types.ts275 * @example ({ editor, query }) => [{ id: 1, label: 'John Doe' }]COMMENT
LOWpackages/markdown/src/MarkdownManager.test.ts379 const markdown = '[@ id="user123" label="John Doe"] said hello'CODE
LOWpackages/markdown/src/MarkdownManager.test.ts385 expect(doc.content![0].content![0].attrs!.label).toBe('John Doe')CODE
LOWpackages/markdown/src/MarkdownManager.test.ts701 attrs: { id: 'user123', label: 'John Doe' },CODE
LOWpackages/markdown/src/MarkdownManager.test.ts710 expect(markdown).toBe('[@ id="user123" label="John Doe"] said hello')CODE
LOWpackages/markdown/src/MarkdownManager.test.ts765 markdown: '[@ id="user123" label="John Doe"] said hello',CODE
LOW…nsions/src/placeholder/placeholderSettingsPluginKey.ts5export const placeholderSettingsPluginKey = new PluginKey<PlaceholderOptions['placeholder']>(CODE
LOWpackages/extensions/src/placeholder/types.ts29 * @default 'placeholder'COMMENT
LOWpackages/extensions/src/placeholder/constants.ts5export const DEFAULT_DATA_ATTRIBUTE = 'placeholder'CODE
LOWpackages/extensions/src/placeholder/placeholder.ts18 setPlaceholder: (placeholder: PlaceholderOptions['placeholder']) => ReturnTypeCODE
LOWpackages/extensions/src/placeholder/placeholder.ts29 name: 'placeholder',CODE
LOW…s/src/placeholder/utils/createPlaceholderDecoration.ts31 placeholder: PlaceholderOptions['placeholder']CODE
LOW…tension-collaboration-caret/src/collaboration-caret.ts20 * @example { name: 'John Doe', color: '#305500' }COMMENT
LOW…tension-collaboration-caret/src/collaboration-caret.ts68 * @example editor.commands.updateUser({ name: 'John Doe', color: '#305500' })COMMENT
LOW…-list/tests/integration/orderedListPhoneNumber.test.ts45 content: [{ type: 'paragraph', content: [{ type: 'text', text: '555-1234' }] }],CODE
LOWpackages/extension-link/tests/integration/link.test.ts425 expect(shouldAutoLink('user@example.com')).toBe(true)CODE
LOWdemos/src/Nodes/Mention/index.spec.ts20 '<p><span data-type="mention" data-id="1" data-label="John Doe">@John Doe</span></p>',CODE
LOW⚡…iments/CollaborationMappingPerformance/React/index.tsx24 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',CODE
LOW⚡…iments/CollaborationMappingPerformance/React/index.tsx24 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',CODE
LOW⚡…iments/CollaborationMappingPerformance/React/index.tsx30 'Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet.',CODE
LOW⚡…iments/CollaborationMappingPerformance/React/index.tsx30 'Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet.',CODE
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALpackages/core/src/helpers/getChangedRanges.test.ts30 transform.addMark(2, 7, doc.type.schema.marks.bold.create())CODE
CRITICALpackages/extension-node-range/src/node-range.ts94 this.editor.view.dom.classList.add('ProseMirror-noderangeselection')CODE
Slop Phrases3 hits · 5 pts
SeverityFileLineSnippetContext
MEDIUMdemos/src/Examples/TransformPastedHTML/Vue/index.vue127 <p><em>Note: The buttons above simulate the transform for demonstration purposes. Real paste events (Ctrl+V / CmCODE
MEDIUMdemos/src/Examples/TransformPastedHTML/React/index.jsx78 <p><em>Note: The buttons above simulate the transform for demonstration purposes. Real paste events (Ctrl+V / Cmd+CODE
LOWdemos/src/Examples/Default/React/index.tsx38 I know, I know, this is impressive. It's only the tip of the iceberg though. Give it a try and click a little bit arouCODE
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/make-demo.sh19# Check if the directory already existsCOMMENT
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpackages/vue/src/VueNodeViewRenderer.ts181 // add support for scoped stylesCOMMENT