AI Slop Code Risk Monitor

JetBrains/thinkrail

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

Vibe code with pi in a lightweight, real IDE that customises itself around the way you work — The Vibe You Need

1.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for JetBrains/thinkrail, a TypeScript project with 6,892 GitHub stars. SynthScan examined 401,110 lines of code across 2045 source files, recording 407 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.1 (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.1
Adjusted Signal
1.1
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
6.9K
Stars
TypeScript
Language
401.1K
Lines of Code
2.0K
Files
407
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 4.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.7/100 · LOW

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

Agent Over-Engineering Ratio 4.7/100 · LOW

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

PR Review Velocity Impact 5.7/100 · LOW

Which changes need focused human review? 407 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 3HIGH 3MEDIUM 9LOW 392

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 407 distinct pattern matches across 7 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 Identifiers380 hits · 386 pts
SeverityFileLineSnippetContext
LOWdesign-audit/catalog/pseudo.ts42export function installForcedPseudoStates(): number {CODE
LOWpi-extensions/ask-user-question/src/extension.ts54export function createAskUserQuestionExtension(CODE
LOWpi-extensions/ask-user-question/src/core.ts136export function buildQuestionnaireResponse(CODE
LOW…tensions/ask-user-question/web/AskUserQuestionCard.tsx267export function createQuestionAttentionClaim(): (scope: object, toolCallId: string) => boolean {CODE
LOW…inkrail-extensions/ask-user-question/web/readResult.ts12export function readAskUserQuestionResult(raw: unknown): AskUserQuestionResult | null {CODE
LOWpackages/resource-renderers/src/renderers/register.ts16export function registerBundledResourceRenderers(): void {CODE
LOW…/resource-renderers/src/renderers/html/htmlDocument.ts74export function prepareHtmlPreviewDocument(document: Document): string {CODE
LOW…ages/resource-renderers/src/renderers/json/jsonDiff.ts174export function oldToRenderedJsonPointers(CODE
LOW…esource-renderers/src/renderers/json/jsonDiffReview.ts58export function buildJsonDiffReviewLayout({CODE
LOW…enderers/src/renderers/notebook/NotebookOutputView.tsx54export function notebookMarkdownComponents(CODE
LOW…enderers/src/renderers/notebook/NotebookOutputView.tsx103export function notebookMarkdownUrlTransform(url: string): string {CODE
LOW…rce-renderers/src/renderers/notebook/outputDocument.ts11export function buildNotebookHtmlDocument(html: string): string {CODE
LOW…ages/resource-renderers/src/support/monacoMenuIcons.ts78export function decorateEditorContextMenus(CODE
LOWpackages/resource-renderers/src/registry/selection.ts13export function rendererImplementationKey(rendererId: string, mobile: boolean): string {CODE
LOWpackages/contracts/src/wsProtocol.ts494export function isSubagentCompletionMessage(CODE
LOWpackages/contracts/src/wsProtocol.ts531export function isBackgroundCommandCompletionMessage(CODE
LOWpackages/contracts/src/wsProtocol.ts680export function isSharedModelContextTarget(CODE
LOWpackages/contracts/src/piProtocol.ts27export function assistantToolCallsAreExecutable(stopReason: string | undefined): boolean {CODE
LOWpackages/contracts/src/domain.ts1754export function isJbcentralQuotaRefreshSeconds(value: unknown): value is number {CODE
LOWpackages/pi-background-commands/src/extension.ts133export function createBackgroundCommandsExtension(CODE
LOWpackages/server/src/buildSupport.ts46export function resolveBuildRuntimeSources(): BuildRuntimeSources {CODE
LOWpackages/server/src/settings/layoutPresets.ts170export function validateCustomLayoutPresets(value: unknown): LayoutPreset[] {CODE
LOWpackages/server/src/settings/layoutPresets.ts181export function normalizeStoredCustomLayoutPresets(value: unknown): LayoutPreset[] {CODE
LOWpackages/server/src/resourceHistory/resourceHistory.ts228export function removeWorkspaceResourceHistory(workspaceId: string): void {CODE
LOWpackages/server/src/host/settledLifecycle.ts139export async function refreshOpenProjectReviews(): Promise<void> {CODE
LOWpackages/server/src/host/todoReview.ts86export async function clearChangesRequestedIfResolved(p: ItemRef): Promise<void> {CODE
LOWpackages/server/src/host/todoReview.ts93export function reconcilePendingReviewsOnBoot(): void {CODE
LOWpackages/server/src/host/packages.ts85export async function packagesSetResourceEnabled(params: {CODE
LOWpackages/server/src/host/subagentPolicy.ts17export function resolveSubagentMaxConcurrent(CODE
LOWpackages/server/src/host/terminalSend.ts5export function terminalDeliveryForSendStatus(status: number): TerminalDeliveryResult {CODE
LOW⚡packages/server/src/host/productAnalytics.ts27export function additionalAnalyticsEnabled(config: Pick<AppConfig, "analyticsEnabled">): boolean {CODE
LOW⚡packages/server/src/host/productAnalytics.ts31export function initialAdditionalAnalyticsEnabled(CODE
LOW⚡packages/server/src/host/productAnalytics.ts37export function applyAdditionalAnalyticsSettings(CODE
LOWpackages/server/src/host/productAnalytics.ts64export function captureReviewCommentAdded(CODE
LOWpackages/server/src/host/productAnalytics.ts77export function captureReviewCommentsSent(CODE
LOWpackages/server/src/host/productAnalytics.ts89export function captureReviewCommentResolved(CODE
LOWpackages/server/src/auth/jbcentral.test.ts52export default function syntheticCentralExtension(pi) {CODE
LOWpackages/server/src/auth/jbcentral.ts75export function setJbcentralAppliedPublisher(publisher: () => void): void {CODE
LOWpackages/server/src/auth/jbcentral.ts79export function setJbcentralChangedPublisher(publisher: () => void): void {CODE
LOWpackages/server/src/auth/jbcentral.ts115function invalidateStatusObservation(): void {CODE
LOWpackages/server/src/auth/jbcentral.ts312export function initializeJbcentralRuntime(): Promise<void> {CODE
LOWpackages/server/src/auth/jbcentral.ts581export async function resetJbcentralStateForTests(): Promise<void> {CODE
LOWpackages/server/src/projects/projects.ts158export async function refreshRecentProjectFolders(budgetMs: number): Promise<void> {CODE
LOWpackages/server/src/projects/projects.ts356function inspectResolvedProjectPath(path: string): ProjectPathStatus {CODE
LOWpackages/server/src/terminal/completionQueue.ts19export function createTerminalCompletionQueue(push: PushToClient): TerminalCompletionQueue {CODE
LOWpackages/server/src/terminal/terminalManager.ts126function assertTerminalGridDimension(value: unknown): void {CODE
LOWpackages/server/src/terminal/terminalManager.ts141function assertTerminalCatalogCapacity(tabs: readonly TabRecord[]): void {CODE
LOWpackages/server/src/terminal/shellArgs.ts32export function terminalShellStartFailure(CODE
LOW⚡packages/server/src/agent/anthropicExtraUsage.ts14export function anthropicExtraUsageWarningEnabled(CODE
LOW⚡packages/server/src/agent/anthropicExtraUsage.ts20export function anthropicExtraUsageWarningEnabledOnDisk(CODE
LOW⚡packages/server/src/agent/anthropicExtraUsage.ts29export async function anthropicSubscriptionAuthActive(CODE
LOWpackages/server/src/agent/anthropicExtraUsage.ts41export async function shouldWarnAnthropicExtraUsage(subject: ExtraUsageSubject): Promise<boolean> {CODE
LOWpackages/server/src/agent/anthropicExtraUsage.ts56export async function disableAnthropicExtraUsageWarning(): Promise<void> {CODE
LOWpackages/server/src/agent/delegation.ts50export function setSubagentConcurrencyResolver(CODE
LOWpackages/server/src/agent/delegation.ts56export function refreshSubagentConcurrency(workspaceId?: string): void {CODE
LOWpackages/server/src/agent/delegation.ts77export function reconcileSessionSubagentUsage(CODE
LOWpackages/server/src/agent/delegation.ts182export function removeWorkspaceDelegation(workspaceId: string): void {CODE
LOWpackages/server/src/agent/agentSessionManager.test.ts215function installStalledAskResultHook(name: string): { startedPath: string; remove: () => void } {CODE
LOWpackages/server/src/agent/agentSessionManager.test.ts994async function withPersistentVisualizeChat(CODE
LOWpackages/server/src/agent/agentSessionManager.test.ts1980function installExternalQuestionnaire(cwd: string): void {CODE
320 more matches not shown…
Hallucination Indicators3 hits · 30 pts
SeverityFileLineSnippetContext
CRITICALpackages/pi-dag/extension/adapter.test.ts300 const bindings = f.service.bind.mock.calls.map(([binding]) => binding);CODE
CRITICALpackages/pi-dag/extension/adapter.test.ts337 expect(f.service.bind.mock.calls.at(-1)?.[0].execution).toEqual({CODE
CRITICALpackages/pi-dag/extension/adapter.test.ts468 const binding = f.service.bind.mock.calls.at(-1)?.[0];CODE
Modern AI Meta-Vocabulary9 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMscripts/attributionClaimContract.test.ts108 "https://thinkrail.ai/?utm_source=google&utm_medium=cpc&utm_campaign=agentic-launch&utm_content=hero",CODE
MEDIUMscripts/attributionClaimContract.test.ts115 "https://thinkrail.ai/blog/introducing-thinkrail/?utm_source=newsletter&utm_medium=email&utm_campaign=agentic-launch&CODE
MEDIUMapps/website/astro.config.ts16 page !== "https://thinkrail.ai/agentic-development/" &&CODE
MEDIUMapps/website/astro.config.ts17 page !== "https://thinkrail.ai/agentic-ide/" &&CODE
MEDIUMapps/website/src/validateBuild.ts325 if (sitemap.includes("https://thinkrail.ai/agentic-development/")) {CODE
MEDIUMapps/website/src/validateBuild.ts328 if (sitemap.includes("https://thinkrail.ai/agentic-ide/")) {CODE
MEDIUMapps/website/src/vibecoding/SiteHeader.tsx10 { label: "Orchestration", href: "#orchestration" },CODE
MEDIUMapps/website/src/vibecoding/SPEC.md13further routes over the same module, at `https://thinkrail.ai/agentic-development/` andCODE
MEDIUMapps/website/src/vibecoding/SPEC.md14`https://thinkrail.ai/agentic-ide/`: its header navigation, hero and quick start, desktop download controls, scripted chCODE
Cross-Language Confusion (JS/TS)3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHpackages/server/src/auth/jbcentral.test.ts75 elif [ -f "$THINKRAIL_CENTRAL_TEST_CONTROL/outdated" ]; thenCODE
HIGHpackages/server/src/auth/jbcentral.test.ts77 elif [ -f "$THINKRAIL_CENTRAL_TEST_CONTROL/newer" ]; thenCODE
HIGHpackages/server/src/auth/jbcentral.test.ts108 elif [ "$quota_alt" = "1" ]; thenCODE
Fake / Example Data10 hits · 10 pts
SeverityFileLineSnippetContext
LOWscripts/check-i18n.ts31 "placeholder",CODE
LOWscripts/check-i18n.ts48 "placeholder",CODE
LOWe2e/queue.live.spec.ts27 await expect(input).toHaveAttribute("placeholder", /Steer the agent at its next step/, {CODE
LOWe2e/queue.live.spec.ts61 await expect(input).toHaveAttribute("placeholder", /Steer the agent at its next step/, {CODE
LOWe2e/subagent-settings.spec.ts57 await expect(current.workspaceLimit).toHaveAttribute("placeholder", "4");CODE
LOWe2e/subagent-settings.spec.ts178 await expect(source.workspaceLimit).toHaveAttribute("placeholder", "4");CODE
LOWe2e/subagent-settings.spec.ts190 await expect(observer.workspaceLimit).toHaveAttribute("placeholder", "6");CODE
LOWe2e/message-actions.spec.ts75 const huge = `First line of the huge paste. ${"lorem ipsum dolor sit amet consectetur adipiscing elit ".repeat(CODE
LOWe2e/message-actions.spec.ts75 const huge = `First line of the huge paste. ${"lorem ipsum dolor sit amet consectetur adipiscing elit ".repeat(CODE
LOWapps/website/content/blog/BLOG.md65 "jane-doe": { "name": "Jane Doe", "url": "https://example.com/jane" }CODE
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWinstall.sh1#!/usr/bin/env bashCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpackages/server/src/host/handlers.ts1537export async function handleRequest(CODE