AI Slop Code Risk Monitor

YishenTu/claudian

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

An Obsidian plugin that embeds Claude Code, Codex and other agents as an AI collaborator in your vault.

3.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for YishenTu/claudian, a TypeScript project with 15,869 GitHub stars. SynthScan examined 358,427 lines of code across 1661 source files, recording 791 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 3.0 (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.

3.0
Adjusted Signal
3.0
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
15.9K
Stars
TypeScript
Language
358.4K
Lines of Code
1.7K
Files
791
Pattern Hits
2026-10-31
Scan Date
0.02
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 9.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 4.7/100 · LOW

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

Agent Over-Engineering Ratio 9.7/100 · LOW

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

PR Review Velocity Impact 13.5/100 · LOW

Which changes need focused human review? 791 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 25HIGH 4MEDIUM 0LOW 762

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 791 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 Identifiers712 hits · 734 pts
SeverityFileLineSnippetContext
LOWtests/setupWindow.ts14function reportProcessEnvReplacement(): void {CODE
LOWtests/__mocks__/obsidian.ts741export function setObsidianActiveDocument(document?: Document): void {CODE
LOWtests/__mocks__/claude-agent-sdk.ts162export function setMockSupportedCommandsImplementation(CODE
LOWtests/__mocks__/claude-agent-sdk.ts201export function setMockInitializationResult(implementation: () => Promise<SDKControlInitializeResponse>): void {CODE
LOWtests/__mocks__/claude-agent-sdk.ts337export function createScriptedPersistentQuery(CODE
LOWtests/__mocks__/claude-agent-sdk.ts361export function createFailingPersistentQuery(CODE
LOWtests/__mocks__/claude-agent-sdk.ts385export function createPromptDrivenPersistentQuery(CODE
LOWtests/__mocks__/claude-agent-sdk.ts450export function createThrowingPersistentQuery(error: Error): ReturnType<CODE
LOWtests/__mocks__/claude-agent-sdk.ts460export function createIdlePersistentQuery(): ReturnType<CODE
LOW…p/conversations/ConversationRepository.history.test.ts66function createOpencodeHistoryService(readMessages: (route: string) => Promise<unknown[]>): OpencodeConversationHistorySCODE
LOW…laude/execution/ClaudeExecutionEventNormalizer.test.ts189 function expectAuthenticationOverrideGuidance(message: string): void {CODE
LOW…nit/providers/codex/runtime/CodexBinaryLocator.test.ts27 function restoreEnvironmentVariable(CODE
LOW…nit/providers/codex/runtime/CodexBinaryLocator.test.ts38 function createCompleteWindowsCodexRuntime(dir: string): string {CODE
LOWtests/integration/main.test.ts179 function getConversationPersistence(CODE
LOWtests/integration/main.test.ts1309 async function prepareHeldHistoryRelease() {CODE
LOWtests/integration/main.test.ts3723 async function detachedLinkedContentSession() {CODE
LOW…sts/integration/app/startup/ApplicationStartup.test.ts81 async function loadApplicationWithMetadata(): Promise<ApplicationDomains> {CODE
LOW…viders/claude/execution/ClaudeExecutionBackend.test.ts3677function applyProviderStateProjection(CODE
LOW…codex/execution/CodexExecutionBackend.protocol.test.ts255function expectPendingForkOwnership(CODE
LOW…codex/execution/CodexExecutionBackend.protocol.test.ts275function expectPendingForkOwnershipEvent(CODE
LOW…codex/execution/CodexExecutionBackend.protocol.test.ts2244 function countTranscriptRootProbes(): number {CODE
LOW…rs/deepseek/execution/DeepSeekExecutionBackend.test.ts633async function queueBehindFailedAutomaticTurn(): Promise<{ run: ReturnType<ProviderExecutionSession['execute']>; events:CODE
LOW…runtime/GrokModelCatalogCoordinator.concurrent.test.ts87function deferNextConditionalMutation(host: ProviderHost): {CODE
LOW…runtime/GrokModelCatalogCoordinator.concurrent.test.ts119function deferConditionalMutations(host: ProviderHost, count: number): {CODE
LOW…/integration/providers/pi/runtime/PiSubprocess.test.ts526function createWindowsCommandTarget(commandPath: string, targetPath: string): string {CODE
LOW…oviders/pi/execution/PiExecutionBackend.kernel.test.ts220function createConversationHistory(prefix: string) {CODE
LOW…n/providers/pi/history/PiRetiredBindingRestore.test.ts79async function treeBranchesOfEditedPrompt(repository: ConversationRepository, id: string) {CODE
LOW…iders/opencode/metadata/OpencodeHTTPMetadataFixture.ts43export function createOpencodeHTTPMetadataFixture(): OpencodeHTTPMetadataFixture {CODE
LOW…tegration/features/chat/tabs/TabRuntimeFactory.test.ts150function expectTabManagerMetadataReleased(manager: TabManager, tabId: string): void {CODE
LOW…tegration/features/chat/tabs/TabRuntimeFactory.test.ts156function createTrackedTabContainer(): {CODE
LOW…tegration/features/chat/tabs/TabRuntimeFactory.test.ts679 async function startLaterTurnUnderQuestion() {CODE
LOW…atures/chat/side-chat/SideChatInteractions.dom.test.ts200async function startLaterTurnUnderQuestion() {CODE
LOW…ures/chat/composer/PromptHistoryNavigation.dom.test.ts137function accessibilityFingerprints(result: Awaited<ReturnType<typeof axe>>): string[] {CODE
LOW…/conversation/ConversationController.branching.test.ts12async function createConversationControllerDeps(...args: Parameters<typeof createBaseDeps>) {CODE
LOWtests/helpers/ChatInputHarness.ts54export function requestedUserMessageStarted(CODE
LOWtests/helpers/providerRuntimeHost.ts25export async function createProviderHostFixture(options: ProviderHostFixtureOptions = {}) {CODE
LOWtests/helpers/providerModelCatalogs.ts28export function assertCatalogModelAvailable(CODE
LOWtests/helpers/sdkMessages.ts140export function buildCompactBoundaryMessage(CODE
LOWtests/helpers/sdkMessages.ts193export function buildResultSuccessMessage(CODE
LOWtests/helpers/ChatExecutionHarness.ts272export function createExecutionPersistence(): Mocked<ChatExecutionPersistence> {CODE
LOWtests/helpers/core/fsWriteFaults.ts27export function createFsPromisesWithWriteFaults(): typeof FsPromises {CODE
LOWtests/helpers/providers/grokHistory.ts24export function resolveGrokPromptIndexAfterAssistant(CODE
LOWtests/helpers/providers/codex/CodexWorkspaceHarness.ts9export async function createCodexWorkspaceHarness(config: Record<string, unknown> = {}, options: Pick<ProviderHostFixturCODE
LOW…ts/helpers/providers/opencode/OpencodeKernelFixture.ts6export function createOpencodeKernelLease(databasePath: string | null = null) {CODE
LOW…elpers/providers/opencode/FakeOpencodeHistoryServer.ts18export function writeFakeOpencodeHistoryCLI(directory: string): string {CODE
LOW…ers/providers/opencode/OpencodeHTTPExecutionFixture.ts33function releaseSteeringEventsOnAdmission(): void {CODE
LOW…s/helpers/features/chat/ProviderRecoveryTestHarness.ts39export function createProviderRecoveryTestHarness(CODE
LOWtests/helpers/features/chat/SessionEventsHarness.ts42function canAcceptTabBackgroundWork(tab: AssembledTabRuntime): boolean {CODE
LOWtests/helpers/features/chat/ProviderForkTestHarness.ts21export async function createForkTestEnvironment() {CODE
LOW…helpers/features/chat/ConversationControllerFixture.ts19export async function createConversationControllerDeps(CODE
LOW…s/helpers/features/inline-edit/InlineEditDOMHarness.ts21export async function disposeInlineEditHarnesses(): Promise<void> {CODE
LOW…s/helpers/features/inline-edit/InlineEditDOMHarness.ts54export function registerFakeInlineEditProvider(CODE
LOWtests/helpers/dom/animationFrames.ts8export function useNextTaskAnimationFrames(target: Window = window): () => void {CODE
LOWscripts/desktopRuntimeAliases.js4function createDesktopRuntimeAliases() {CODE
LOWscripts/rendererSafeUnref.js89function patchRendererUnsafeUnrefSites(contents) {CODE
LOWscripts/rendererSafeUnref.js116function findUnsafeTimerUnrefSites(contents) {CODE
LOWscripts/rendererSafeUnref.js120function findUnsafeTimerUnrefRanges(contents) {CODE
LOWscripts/compressedStaticAssets.js21function createCompressedStaticAssetsPlugin({ root = process.cwd() } = {}) {CODE
LOWsrc/core/tools/toolProviderPayload.ts3export function normalizeToolProviderPayload(value: unknown): ToolProviderPayload | null {CODE
LOWsrc/core/tools/toolInput.ts50function parseAnswersFromJSONObject(resultText: string): AskUserAnswers | undefined {CODE
652 more matches not shown…
Hallucination Indicators25 hits · 275 pts
SeverityFileLineSnippetContext
CRITICAL…/unit/app/conversations/ConversationRepository.test.ts279 const persisted = firstRun.persistence.saveMetadata.mock.calls.at(-1)?.[0];CODE
CRITICAL…/unit/app/conversations/ConversationRepository.test.ts352 const persisted = firstRun.persistence.saveMetadata.mock.calls.at(-1)?.[0];CODE
CRITICAL…atures/chat/execution/ChatExecutionCoordinator.test.ts1726 .toBeLessThan(harness.repository.releaseExecutionBinding.mock.invocationCallOrder.at(-1)!);CODE
CRITICALtests/integration/main.test.ts1811 const writeCall = mockApp.vault.adapter.write.mock.calls.find(CODE
CRITICALtests/integration/main.test.ts2430 expect(mockApp.vault.adapter.write.mock.calls.filter(CODE
CRITICALtests/integration/main.test.ts3745 const listener = mockApp.vault.on.mock.calls.find((call: unknown[]) => call[0] === 'create')![1];CODE
CRITICALtests/integration/main.test.ts3878 const createListener = mockApp.vault.on.mock.calls.find(CODE
CRITICAL…sts/integration/app/startup/ApplicationStartup.test.ts369 const sessionWrite = mockApp.vault.adapter.write.mock.calls.find(CODE
CRITICAL…/integration/features/chat/tabs/TabManager.dom.test.ts247 expect([preview.controllers.drafts.capture('main').content, preview.session.runtime.model.linkedContentController.geCODE
CRITICAL…/integration/features/chat/tabs/TabManager.dom.test.ts254 expect([restored.controllers.drafts.capture('main').content, restored.session.runtime.model.linkedContentController.CODE
CRITICALtests/integration/features/chat/tabs/ViewerSlot.test.ts352 expect(draft.session.runtime.model.linkedContentController.getSnapshot()).toEqual({ mode: 'explicit-draft', path: CODE
CRITICALtests/integration/features/chat/tabs/ViewerSlot.test.ts629 const pending = tab.session.runtime.model.inlinePrompts.requestApproval('waiting', 'Read', {}, 'Read note', undefineCODE
CRITICALtests/integration/features/chat/tabs/TabManager.test.ts773 tab.session.runtime.model.linkedContentController.beginSubmission(), { providerId: 'claude' },CODE
CRITICAL…ures/chat/composer/PromptHistoryNavigation.dom.test.ts614 expect(view.tab.dom.inputWrapper.classList.contains('claudian-input-side-chat-preview')).toBe(true);CODE
CRITICAL…ures/chat/composer/PromptHistoryNavigation.dom.test.ts619 expect(view.tab.dom.inputWrapper.classList.contains('claudian-input-side-chat-preview')).toBe(false);CODE
CRITICAL⚡tests/integration/features/chat/zen/ZenMode.dom.test.ts1734 expect(fixture.workspace.revealLeaf.mock.calls.at(-1)?.[0] === second.leaf).toBe(true);CODE
CRITICAL⚡tests/integration/features/chat/zen/ZenMode.dom.test.ts1742 expect(fixture.workspace.revealLeaf.mock.calls.at(-1)?.[0] === fixture.leaf).toBe(true);CODE
CRITICAL⚡tests/integration/features/chat/zen/ZenMode.dom.test.ts1746 expect(fixture.workspace.revealLeaf.mock.calls.at(-1)?.[0] === fixture.leaf).toBe(true);CODE
CRITICAL⚡tests/integration/features/chat/zen/ZenMode.dom.test.ts1750 expect(fixture.workspace.revealLeaf.mock.calls.at(-1)?.[0] === fixture.leaf).toBe(true);CODE
CRITICAL⚡tests/integration/features/chat/zen/ZenMode.dom.test.ts1760 expect(fixture.workspace.revealLeaf.mock.calls.at(-1)?.[0] === deferredLeaf).toBe(true);CODE
CRITICAL…egration/features/chat/turns/MainTurnExecution.test.ts426 expect(fixture.plugin.updateConversation.mock.calls.at(-1)?.[1].messages).toEqual(fixture.state.messages);CODE
CRITICAL…egration/features/chat/turns/MainTurnExecution.test.ts561 expect(fixture.plugin.updateConversation.mock.calls.at(-1)?.[1].messages).toMatchObject([CODE
CRITICALsrc/features/chat/session-manager/SessionSidebar.ts80 this.themeEvent = this.deps.plugin.app.workspace.on('css-change', () => this.syncThemeBackground());CODE
CRITICALsrc/features/chat/session-manager/SessionSidebar.ts154 this.deps.plugin.app.workspace.offref(this.themeEvent);CODE
CRITICALsrc/features/chat/session-manager/SessionSidebar.ts539 const target = this.deps.plugin.app.vault.getAbstractFileByPath(contentPath);CODE
Fake / Example Data46 hits · 46 pts
SeverityFileLineSnippetContext
LOW…viders/deepseek/ui/DeepSeekSettingsTab.wsl.dom.test.ts55 expect(cli).toHaveProperty('placeholder', '%LOCALAPPDATA%\\Programs\\DeepSeek Harness');CODE
LOW…viders/deepseek/ui/DeepSeekSettingsTab.wsl.dom.test.ts61 expect(cli).toHaveProperty('placeholder', 'dsh');CODE
LOW…res/chat/session-manager/SessionManagerSurface.test.ts237 expect(input.getAttribute('placeholder')).toBe('Search sessions');CODE
LOW…shared/settings/EnvironmentSettingsSection.dom.test.ts224 error: new Error('post-commit apply rejected after persistence for TOKEN=fake-token-value at /fake/private/path'),CODE
LOW…shared/settings/EnvironmentSettingsSection.dom.test.ts262 expect(renderedText).not.toContain('fake-token-value');CODE
LOWsrc/features/chat/interactions/InlineAskUserQuestion.ts342 inputEl.setAttribute('placeholder', q.isSecret ? t('chat.questions.secret') : t('chat.questions.customAnswer'));CODE
LOWsrc/i18n/locales/ja.json69 "placeholder": "サイドチャットで続けて質問",CODE
LOWsrc/i18n/locales/ja.json100 "placeholder": "変更を依頼、@でファイルを指定、/コマンドを実行",CODE
LOWsrc/i18n/locales/ja.json533 "placeholder": "エイリアス",CODE
LOWsrc/i18n/locales/ja.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/de.json69 "placeholder": "Im Nebenchat nachfragen",CODE
LOWsrc/i18n/locales/de.json100 "placeholder": "Änderungen anfragen, Dateien mit @ erwähnen, /Befehle ausführen",CODE
LOWsrc/i18n/locales/de.json533 "placeholder": "Aliasname",CODE
LOWsrc/i18n/locales/de.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/ru.json69 "placeholder": "Задайте уточняющий вопрос в побочном чате",CODE
LOWsrc/i18n/locales/ru.json100 "placeholder": "Запросите изменения, укажите файлы через @, выполните /команды",CODE
LOWsrc/i18n/locales/ru.json533 "placeholder": "Псевдоним",CODE
LOWsrc/i18n/locales/ru.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/zh-CN.json69 "placeholder": "在侧边对话中继续提问",CODE
LOWsrc/i18n/locales/zh-CN.json100 "placeholder": "请求修改、@提及文件、运行 /命令",CODE
LOWsrc/i18n/locales/zh-CN.json533 "placeholder": "别名",CODE
LOWsrc/i18n/locales/zh-CN.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/pt.json69 "placeholder": "Faça uma pergunta na conversa lateral",CODE
LOWsrc/i18n/locales/pt.json100 "placeholder": "Peça alterações, mencione arquivos com @, execute /comandos",CODE
LOWsrc/i18n/locales/pt.json533 "placeholder": "Apelido",CODE
LOWsrc/i18n/locales/pt.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/en.json69 "placeholder": "Ask a follow-up in the side chat",CODE
LOWsrc/i18n/locales/en.json100 "placeholder": "Ask to make changes, @mention files, run /commands",CODE
LOWsrc/i18n/locales/en.json533 "placeholder": "Alias",CODE
LOWsrc/i18n/locales/en.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/fr.json69 "placeholder": "Poser une question dans la conversation annexe",CODE
LOWsrc/i18n/locales/fr.json100 "placeholder": "Demandez des modifications, mentionnez des fichiers avec @, lancez des /commandes",CODE
LOWsrc/i18n/locales/fr.json533 "placeholder": "Alias",CODE
LOWsrc/i18n/locales/fr.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/ko.json69 "placeholder": "사이드 채팅에서 이어서 질문하세요",CODE
LOWsrc/i18n/locales/ko.json100 "placeholder": "변경 요청, @로 파일 언급, /명령 실행",CODE
LOWsrc/i18n/locales/ko.json533 "placeholder": "별칭",CODE
LOWsrc/i18n/locales/ko.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/zh-TW.json69 "placeholder": "在側邊對話中繼續提問",CODE
LOWsrc/i18n/locales/zh-TW.json100 "placeholder": "請求修改、@提及檔案、執行 /命令",CODE
LOWsrc/i18n/locales/zh-TW.json533 "placeholder": "別名",CODE
LOWsrc/i18n/locales/zh-TW.json831 "placeholder": "commit\ncompact\nskill:review"CODE
LOWsrc/i18n/locales/es.json69 "placeholder": "Pregunta algo más en el chat lateral",CODE
LOWsrc/i18n/locales/es.json100 "placeholder": "Pide cambios, menciona archivos con @, ejecuta /comandos",CODE
LOWsrc/i18n/locales/es.json533 "placeholder": "Alias",CODE
LOWsrc/i18n/locales/es.json831 "placeholder": "commit\ncompact\nskill:review"CODE
Cross-Language Confusion (JS/TS)4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHtests/helpers/WSLClaudeFixture.ts5 print('2.1.99 (Claude Code)')CODE
HIGHtests/helpers/WSLClaudeFixture.ts9 print(json.dumps(value), flush=True)CODE
HIGHtests/helpers/WSLClaudeFixture.ts33 elif message.get('type') == 'user':CODE
HIGHtests/helpers/WSLClaudeFixture.ts40 elif message.get('type') == 'control_response' and message['response'].get('request_id') == 'fixture-mcp':CODE
Over-Commented Block4 hits · 4 pts
SeverityFileLineSnippetContext
LOW…codex/runtime/notifications/CodexRawToolCallTracker.ts41 #toolNamesByCallId = new Map<string, string>();COMMENT
LOWsrc/features/chat/side-chat/SideChatController.ts41COMMENT
LOWsrc/features/chat/side-chat/SideChatRuntime.ts81 readonly #prompts: SessionInteractions;COMMENT
LOWsrc/features/chat/execution/ChatExecutionCoordinator.ts221 #conversation: ChatExecutionConversationBinding | null = null;COMMENT