AI Slop Code RIsk Monitor

firecrawl/open-lovable

🔥 Clone and recreate any website as a modern React app in seconds

5.9 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for firecrawl/open-lovable, a TypeScript project with 28,660 GitHub stars. SynthScan examined 54,126 lines of code across 320 source files, recording 98 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 5.9 (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.

5.9
Adjusted Signal
5.9
Raw Pattern Score
100%
Time Factor
2026-10-09
Last Push
28.7K
Stars
TypeScript
Language
54.1K
Lines of Code
320
Files
98
Pattern Hits
2026-10-12
Scan Date
0.11
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 6.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 18.1/100 · LOW

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

Agent Over-Engineering Ratio 3.8/100 · LOW

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

PR Review Velocity Impact 25.4/100 · MEDIUM

Which changes need focused human review? 98 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

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

No multi-scan history yet — run the scanner again to build trend data.

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 5HIGH 31MEDIUM 10LOW 52

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 98 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.

Cross-Language Confusion (JS/TS)30 hits · 165 pts
SeverityFileLineSnippetContext
HIGHlib/morph-fast-apply.ts155print("WROTE:${fullPath}")CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts89 print("STDOUT:")CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts90 print(result.stdout)CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts92 print("\\nSTDERR:")CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts93 print(result.stderr)CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts94 print(f"\\nReturn code: {result.returncode}")CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts207 print("STDOUT:")CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts208 print(result.stdout)CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts210 print("\\nSTDERR:")CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts211 print(result.stderr)CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts212 print(f"\\nReturn code: {result.returncode}")CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts388print('✓ src/index.css')CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts390print('\\nAll files created successfully!')CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts399print('Installing npm packages...')CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts408 print('✓ Dependencies installed successfully')CODE
HIGH⚡lib/sandbox/providers/e2b-provider.ts410 print(f'⚠ Warning: npm install had issues: {result.stderr}')CODE
HIGHlib/sandbox/providers/e2b-provider.ts132 print(f"✓ Written: ${fullPath}")CODE
HIGHlib/sandbox/providers/e2b-provider.ts149 print(content)CODE
HIGHlib/sandbox/providers/e2b-provider.ts175 print(json.dumps(files))CODE
HIGHlib/sandbox/providers/e2b-provider.ts242print('Setting up React app with Vite and Tailwind...')CODE
HIGHlib/sandbox/providers/e2b-provider.ts272print('✓ package.json')CODE
HIGHlib/sandbox/providers/e2b-provider.ts291print('✓ vite.config.js')CODE
HIGHlib/sandbox/providers/e2b-provider.ts308print('✓ tailwind.config.js')CODE
HIGHlib/sandbox/providers/e2b-provider.ts320print('✓ postcss.config.js')CODE
HIGHlib/sandbox/providers/e2b-provider.ts338print('✓ index.html')CODE
HIGHlib/sandbox/providers/e2b-provider.ts354print('✓ src/main.jsx')CODE
HIGHlib/sandbox/providers/e2b-provider.ts374print('✓ src/App.jsx')CODE
HIGHlib/sandbox/providers/e2b-provider.ts436print(f'✓ Vite dev server started with PID: {process.pid}')CODE
HIGHlib/sandbox/providers/e2b-provider.ts437print('Waiting for server to be ready...')CODE
HIGHlib/sandbox/providers/e2b-provider.ts482print(f'✓ Vite restarted with PID: {process.pid}')CODE
Hallucination Indicators5 hits · 50 pts
SeverityFileLineSnippetContext
CRITICALapp/api/apply-ai-code-stream/route.ts763 global.conversationState.context.projectEvolution.majorChanges.push({CODE
CRITICALapp/api/conversation-state/route.ts88 global.conversationState.context.projectEvolution.majorChanges.slice(-2);CODE
CRITICALapp/api/apply-ai-code/route.ts778 global.conversationState.context.projectEvolution.majorChanges.push({CODE
CRITICALapp/api/generate-ai-code-stream/route.ts557 const majorChanges = global.conversationState.context.projectEvolution.majorChanges.slice(-2);CODE
CRITICALapp/api/generate-ai-code-stream/route.ts1839 global.conversationState.context.projectEvolution.majorChanges.push({CODE
Decorative Section Separators8 hits · 36 pts
SeverityFileLineSnippetContext
MEDIUM⚡README.md19# =================================================================COMMENT
MEDIUM⚡README.md21# =================================================================COMMENT
MEDIUM⚡README.md24# =================================================================COMMENT
MEDIUM⚡README.md26# =================================================================COMMENT
MEDIUM⚡README.md32# =================================================================COMMENT
MEDIUM⚡README.md34# =================================================================COMMENT
MEDIUM⚡README.md37# =================================================================COMMENT
MEDIUM⚡README.md39# =================================================================COMMENT
Over-Commented Block30 hits · 30 pts
SeverityFileLineSnippetContext
LOWapp/generation/page.tsx1101// COMMENT
LOWapp/generation/page.tsx1121// addChatMessage(`Error restarting Vite: ${error instanceof Error ? error.message : 'Unknown error'}`, 'error');COMMENT
LOWapp/generation/page.tsx2261// COMMENT
LOWapp/generation/page.tsx2281// COMMENT
LOWapp/generation/page.tsx2301// }COMMENT
LOWapp/generation/page.tsx2321// if (!sandboxData) {COMMENT
LOWapp/generation/page.tsx2341// 1. Create a COMPLETE React application with App.jsx as the main componentCOMMENT
LOWapp/generation/page.tsx2361// - Make sure the app actually renders visible contentCOMMENT
LOWapp/generation/page.tsx2381// isStreaming: true,COMMENT
LOWapp/generation/page.tsx2401// sandboxId: sandboxData?.id,COMMENT
LOWapp/generation/page.tsx2421// COMMENT
LOWapp/generation/page.tsx2441// isThinking: false,COMMENT
LOWapp/generation/page.tsx2461// streamedCode: prev.streamedCode + data.text,COMMENT
LOWapp/generation/page.tsx2481// ...prev,COMMENT
LOWapp/generation/page.tsx2501// if (generatedCode) {COMMENT
LOWapp/generation/page.tsx2521// }COMMENT
LOWapp/generation/page.tsx2541// scrapedContent: scrapeData,COMMENT
LOWapp/generation/page.tsx2561// setTargetUrl('');COMMENT
LOWapp/generation/page.tsx2581// setScreenshotError(null);COMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx81};COMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx101// ssr: false,COMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx121// increaseProgress = (increaseProgress + 1) % 5;COMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx141// }, []);COMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx161COMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx181COMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx201// result += char;COMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx221// // Keep original characterCOMMENT
LOWcomponents/app/(home)/sections/hero/Title/Title.tsx241// />COMMENT
LOWcomponents/shared/icons/animated-icons.tsx241COMMENT
LOWcomponents/shared/icons/Logo.tsx1const Logo = ({ ...props }) => (COMMENT
Verbosity Indicators7 hits · 12 pts
SeverityFileLineSnippetContext
LOWapp/api/apply-ai-code-stream/route.ts427 // Step 1: Install packagesCOMMENT
LOWapp/api/apply-ai-code-stream/route.ts520 // Step 2: Create/update filesCOMMENT
LOWapp/api/apply-ai-code-stream/route.ts672 // Step 3: Execute commandsCOMMENT
LOW⚡lib/build-validator.ts14 // Step 1: Wait for Vite to process files (give it time to compile)COMMENT
LOW⚡lib/build-validator.ts17 // Step 2: Check if the sandbox is actually serving contentCOMMENT
LOWlib/build-validator.ts35 // Step 3: Check if it's the default page or actual appCOMMENT
LOWlib/build-validator.ts50 // Step 4: Check for Vite error overlay in HTMLCOMMENT
Structural Annotation Overuse7 hits · 12 pts
SeverityFileLineSnippetContext
LOWapp/api/apply-ai-code-stream/route.ts427 // Step 1: Install packagesCOMMENT
LOWapp/api/apply-ai-code-stream/route.ts520 // Step 2: Create/update filesCOMMENT
LOWapp/api/apply-ai-code-stream/route.ts672 // Step 3: Execute commandsCOMMENT
LOW⚡lib/build-validator.ts14 // Step 1: Wait for Vite to process files (give it time to compile)COMMENT
LOW⚡lib/build-validator.ts17 // Step 2: Check if the sandbox is actually serving contentCOMMENT
LOWlib/build-validator.ts35 // Step 3: Check if it's the default page or actual appCOMMENT
LOWlib/build-validator.ts50 // Step 4: Check for Vite error overlay in HTMLCOMMENT
Hyper-Verbose Identifiers6 hits · 6 pts
SeverityFileLineSnippetContext
LOWlib/morph-fast-apply.ts42async function morphChatCompletionsCreate(payload: any) {CODE
LOWlib/context-selector.ts138function buildFileStructureSection(manifest: FileManifest): string {CODE
LOWlib/context-selector.ts253function buildComponentRelationships(CODE
LOWlib/edit-intent-analyzer.ts188function findFeatureInsertionPoints(prompt: string, manifest: FileManifest): string[] {CODE
LOWlib/edit-examples.ts232export function getComponentPatternPrompt(fileStructure: string): string {CODE
LOWlib/ai/provider-manager.ts48function getOrCreateClient(provider: ProviderName, apiKey?: string, baseURL?: string): ProviderClient {CODE
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGH…ents/app/(home)/sections/ai-readiness/ControlPanel.tsx805 isAI: true, // Mark as AI-generatedCODE
Slop Phrases2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMapp/api/scrape-website/route.ts27 markdown: `# Example Website\n\nThis is mock content for demonstration purposes.`,CODE
MEDIUMapp/api/scrape-website/route.ts28 html: `<h1>Example Website</h1><p>This is mock content for demonstration purposes.</p>`,CODE
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWapp/api/generate-ai-code-stream/route.ts1160 contextParts.push('2. **NO PLACEHOLDERS** - Use real content, not lorem ipsum');CODE
Redundant / Tautological Comments1 hit · 1 pts
SeverityFileLineSnippetContext
LOWlib/sandbox/providers/e2b-provider.ts129 # Write fileCOMMENT