AI Slop Code Risk Monitor

dyad-sh/dyad

SlopCodeMonitor badge for dyad-sh/dyad Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Local, open-source AI app builder for power users ✨ v0 / Lovable / Replit / Bolt alternative 🌟 Star if you like it!

3.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for dyad-sh/dyad, a TypeScript project with 22,132 GitHub stars. SynthScan examined 912,724 lines of code across 3531 source files, recording 1973 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 3.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.

3.1
Adjusted Signal
3.1
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
22.1K
Stars
TypeScript
Language
912.7K
Lines of Code
3.5K
Files
2.0K
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 9.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.5/100 · LOW

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

Agent Over-Engineering Ratio 12.1/100 · LOW

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

PR Review Velocity Impact 14.1/100 · LOW

Which changes need focused human review? 1973 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 3HIGH 10MEDIUM 363LOW 1597

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 1973 distinct pattern matches across 17 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 Identifiers1315 hits · 1331 pts
SeverityFileLineSnippetContext
LOWplans/supabase-finegrained-redeploy.md116export async function getSupabaseFunctionsAffectedBySharedModules({CODE
LOWplans/supabase-finegrained-redeploy.md273export async function deployAllSupabaseFunctions(args) {CODE
LOWplans/version-preview-state-machine.md414function useVersionPreviewRecovery(): RecoverySnapshot[];CODE
LOWplans/hybrid-harness-improvements.md64 export function setModelClientFetchForTesting(f: typeof fetch | undefined) {CODE
LOWplans/search-chats-tool.md148function projectChatMessageForSearch(CODE
LOW.claude/hooks/gh-permission-hook.py242def neutralize_code_spans_in_double_quotes(match: re.Match) -> str:STRING
LOW.claude/hooks/tests/test_permission_request_hook.py48 def test_invalid_json_passthrough(self):CODE
LOW.claude/hooks/tests/test_permission_request_hook.py59 def test_non_dict_tool_input_passthrough(self):CODE
LOW.claude/hooks/tests/test_permission_request_hook.py73 def test_bash_commands_analyzed(self):CODE
LOW.claude/hooks/tests/test_permission_request_hook.py83 def test_no_claude_cli_passthrough(self, monkeypatch):CODE
LOW.claude/hooks/tests/test_permission_request_hook.py96 def test_response_format_documented(self):CODE
LOW⚡.claude/hooks/tests/test_permission_request_hook.py114 def test_policy_has_green_section(self):CODE
LOW⚡.claude/hooks/tests/test_permission_request_hook.py120 def test_policy_has_yellow_section(self):CODE
LOW⚡.claude/hooks/tests/test_permission_request_hook.py126 def test_policy_has_red_section(self):CODE
LOW⚡.claude/hooks/tests/test_permission_request_hook.py137 def test_policy_covers_git_force_push(self):CODE
LOW⚡.claude/hooks/tests/test_permission_request_hook.py142 def test_policy_covers_shell_patterns(self):CODE
LOW⚡.claude/hooks/tests/test_permission_request_hook.py148 def test_policy_covers_curl_pipe_sh(self):CODE
LOW⚡.claude/hooks/tests/test_permission_request_hook.py153 def test_policy_covers_safe_commands(self):CODE
LOW.claude/hooks/tests/test_python_permission_hook.py105def test_passthrough_commands() -> tuple[int, int, list[str]]:CODE
LOW.claude/hooks/tests/test_python_permission_hook.py124def test_security_blocked_commands() -> tuple[int, int, list[str]]:CODE
LOW⚡.claude/hooks/tests/test_stop_hook.py95 def test_analyze_returns_none_when_no_cli(self, tmp_path, monkeypatch):CODE
LOW⚡.claude/hooks/tests/test_stop_hook.py104 def test_no_claude_cli_allows_stop(self, tmp_path):CODE
LOW.claude/hooks/tests/test_stop_hook.py48 def test_invalid_json_allows_stop(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py59 def test_stop_hook_active_allows_stop(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py70 def test_missing_transcript_allows_stop(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py80 def test_nonexistent_transcript_allows_stop(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py123 def test_parses_valid_json_response(self, tmp_path, monkeypatch):CODE
LOW.claude/hooks/tests/test_stop_hook.py141 def test_parses_json_in_markdown_code_fence(self, tmp_path, monkeypatch):CODE
LOW.claude/hooks/tests/test_stop_hook.py158 def test_returns_none_for_no_json(self, tmp_path, monkeypatch):CODE
LOW.claude/hooks/tests/test_stop_hook.py174 def test_returns_none_for_malformed_json(self, tmp_path, monkeypatch):CODE
LOW.claude/hooks/tests/test_stop_hook.py190 def test_returns_none_on_nonzero_returncode(self, tmp_path, monkeypatch):CODE
LOW.claude/hooks/tests/test_stop_hook.py206 def test_returns_none_on_subprocess_error(self, tmp_path, monkeypatch):CODE
LOW.claude/hooks/tests/test_stop_hook.py219 def test_returns_none_for_empty_transcript(self, tmp_path, monkeypatch):CODE
LOW.claude/hooks/tests/test_stop_hook.py231 def test_response_format_documented(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py238 def test_hook_checks_stop_hook_active(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py258 def test_extracts_incomplete_tasks(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py290 def test_extracts_completed_tasks(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py299 def test_handles_nonexistent_file(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py322 def test_blocks_with_remaining_tasks(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py347 def test_allows_stop_with_all_tasks_completed(self, monkeypatch):CODE
LOW.claude/hooks/tests/test_stop_hook.py369 def test_reads_incomplete_tasks_fixture(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py397 def test_reads_completed_tasks_fixture(self):CODE
LOW.claude/hooks/tests/test_stop_hook.py426 def test_reads_assistant_messages(self, tmp_path):CODE
LOW.claude/hooks/tests/test_stop_hook.py438 def test_truncates_large_transcripts(self, tmp_path):CODE
LOW…ills/fix-issue/scripts/test_sanitize_issue_markdown.py49 def test_excessive_whitespace(self):CODE
LOW…ills/fix-issue/scripts/test_sanitize_issue_markdown.py70 def test_preserves_code_blocks(self):CODE
LOW…ills/fix-issue/scripts/test_sanitize_issue_markdown.py85 def test_preserves_inline_code(self):CODE
LOW…ills/fix-issue/scripts/test_sanitize_issue_markdown.py111 def test_removes_control_characters(self):CODE
LOWshared/ports.ts91export function getProxyFallbackPortStart(): number {CODE
LOWshared/node_module_resolution.ts43export async function resolveNodeModulePackageJsonPath(CODE
LOWshared/node_module_resolution.ts62export function resolveNodeModulePackageJsonPathSync(CODE
LOWshared/node_module_resolution.ts81export function resolveTypeScriptPackageJsonPath(CODE
LOWshared/node_module_resolution.ts87export function resolveTypeScriptPackageJsonPathSync(appPath: string): string {CODE
LOWshared/node_module_resolution.ts124export function getTypeScriptCompilerPath(packageJsonPath: string): string {CODE
LOW⚡shared/preview_hostname.ts23export function getPreviewCookieNamespace(appId: number): string {CODE
LOW⚡shared/preview_hostname.ts30export function isPreviewNamespacedCookie(name: string): boolean {CODE
LOW⚡shared/preview_hostname.ts35export function getCookiePreviewNamespace(name: string): string | undefined {CODE
LOWe2e-tests/package_manager.spec.ts28async function configurePackageManagerCache(CODE
LOWe2e-tests/package_manager.spec.ts71async function createUpgradeablePnpmShim(userDataDir: string) {CODE
LOWe2e-tests/package_manager.spec.ts115async function createBlockedFirewallShim(userDataDir: string) {CODE
1255 more matches not shown…
Decorative Section Separators331 hits · 1014 pts
SeverityFileLineSnippetContext
MEDIUM.claude/hooks/tests/python_good_commands.txt5# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/python_good_commands.txt7# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt21# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt23# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt32# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt34# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt43# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt45# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt54# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt56# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt63# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt65# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt72# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt74# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt82# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt84# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt92# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt94# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt100# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/python_good_commands.txt102# =============================================================================COMMENT
MEDIUM…laude/hooks/tests/python_security_blocked_commands.txt5# =============================================================================COMMENT
MEDIUM…laude/hooks/tests/python_security_blocked_commands.txt7# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt50# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt52# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt62# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt64# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt73# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt75# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt80# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt82# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt89# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt91# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt98# =============================================================================COMMENT
MEDIUM⚡…laude/hooks/tests/python_security_blocked_commands.txt100# =============================================================================COMMENT
MEDIUM…laude/hooks/tests/python_security_blocked_commands.txt113# =============================================================================COMMENT
MEDIUM…laude/hooks/tests/python_security_blocked_commands.txt115# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt75# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt77# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt87# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt89# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt297# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt299# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt308# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt310# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt694# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt696# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt704# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt706# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt767# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt769# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt777# =============================================================================COMMENT
MEDIUM⚡.claude/hooks/tests/good_commands.txt779# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/good_commands.txt4# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/good_commands.txt6# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/good_commands.txt60# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/good_commands.txt62# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/good_commands.txt146# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/good_commands.txt148# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/good_commands.txt161# =============================================================================COMMENT
MEDIUM.claude/hooks/tests/good_commands.txt163# =============================================================================COMMENT
271 more matches not shown…
Over-Commented Block176 hits · 176 pts
SeverityFileLineSnippetContext
LOWtsconfig.node.json21COMMENT
LOWplans/web-fetch-local-agent.md141### Key Implementation DetailsCOMMENT
LOWplans/web-fetch-local-agent.md181 // 1. Validate URL scheme (http/https only)COMMENT
LOWplans/neondb-integration.md421NEON_AUTH_COOKIE_SECRET=your-cookie-secret-here # Secret for session cookiesCOMMENT
LOW.claude/hooks/gh-permission-hook.py141)COMMENT
LOW.claude/hooks/gh-permission-hook.py201 # - Zero or more VAR=value assignments (no spaces in value, or quoted)COMMENT
LOW.claude/hooks/gh-permission-hook.py281COMMENT
LOW.claude/hooks/gh-permission-hook.py521 """COMMENT
LOW.claude/hooks/tests/good_commands.txt761gh api repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)/pulls/2524/comments --paginate 2>/dev/null | jq -r 'COMMENT
LOW.claude/skills/run-benchmark/scripts/run-arm.sh1#!/bin/bashCOMMENT
LOWe2e-tests/safe_storage_keychain_identity.spec.ts121 // SecItemCopyMatching searches the search list, not the default keychain,COMMENT
LOWe2e-tests/safe_storage_keychain_identity.spec.ts361 // the same ciphertext — unless the session derived its key from a differentCOMMENT
LOWe2e-tests/safe_storage_keychain_identity.spec.ts461 // "survives the pre-ready identity flip" test above.COMMENT
LOW…sts/snapshots/capacitor.spec.ts_upgraded-capacitor.txt221COMMENT
LOW…sts/snapshots/capacitor.spec.ts_upgraded-capacitor.txt1101# you may not use this file except in compliance with the License.COMMENT
LOW…sts/snapshots/capacitor.spec.ts_upgraded-capacitor.txt1121# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh isCOMMENT
LOW…sts/snapshots/capacitor.spec.ts_upgraded-capacitor.txt1141# The "traditional" practice of packing multiple parameters into aCOMMENT
LOW…sts/snapshots/capacitor.spec.ts_upgraded-capacitor.txt1321#COMMENT
LOWe2e-tests/helpers/test-ports.ts1// Base port for fake LLM servers - each worker gets its own portCOMMENT
LOWbenchmarks/app-builder/record-tours.sh1#!/bin/bashCOMMENT
LOWbenchmarks/app-builder/run-cell.sh41# The cell now runs the app's dev server, so `pnpm install` executes inside theCOMMENT
LOWbenchmarks/app-builder/run-cell.sh61# ("openrouter/deepseek/deepseek-v4-flash-0731"). Rather than encode that rule,COMMENT
LOWbenchmarks/app-builder/cuj-tests/score-checkpoint.sh1#!/bin/bashCOMMENT
LOW…lder/cuj-tests/tours/checkpoint-tour-relay-crm.spec.ts1// Relay CRM — video tour of the checkpoint-3 app.COMMENT
LOWbenchmarks/app-builder/cuj-tests/portalis/fixtures.ts1import { openOptions } from "../interactions";COMMENT
LOW…ks/app-builder/cuj-tests/portalis/checkpoint-3.spec.ts1import { clickMenuItem } from "../interactions";COMMENT
LOWbenchmarks/app-builder/cuj-tests/ledgerly/fixtures.ts1// Shared Ledgerly suite helpers (design/app-4-ledgerly.md, "Test fixtures &COMMENT
LOW…ks/app-builder/cuj-tests/ledgerly/checkpoint-3.spec.ts1// Ledgerly — checkpoint 3 CUJ suite (design/app-4-ledgerly.md, M3 CUJ table +COMMENT
LOW…ks/app-builder/cuj-tests/ledgerly/checkpoint-3.spec.ts1361 maxRedirects: 0,COMMENT
LOW…ks/app-builder/cuj-tests/ledgerly/checkpoint-2.spec.ts1// Ledgerly — checkpoint 2 CUJ suite (design/app-4-ledgerly.md, M2 CUJ table +COMMENT
LOW…ks/app-builder/cuj-tests/ledgerly/checkpoint-1.spec.ts1// Ledgerly — checkpoint 1 CUJ suite (design/app-4-ledgerly.md, M1 CUJ table +COMMENT
LOWbenchmarks/app-builder/cuj-tests/slotline/fixtures.ts1// Shared Slotline suite helpers (design/app-5-slotline.md, "Test fixtures &COMMENT
LOW…ks/app-builder/cuj-tests/slotline/checkpoint-3.spec.ts1// Slotline — checkpoint 3 CUJ suite (design/app-5-slotline.md, M3 CUJ table +COMMENT
LOW…ks/app-builder/cuj-tests/slotline/checkpoint-2.spec.ts1// Slotline — checkpoint 2 CUJ suite (design/app-5-slotline.md, M2 CUJ table +COMMENT
LOW…ks/app-builder/cuj-tests/slotline/checkpoint-1.spec.ts1// Slotline — checkpoint 1 CUJ suite (design/app-5-slotline.md, M1 CUJ table +COMMENT
LOWbenchmarks/app-builder/cuj-tests/curbside/fixtures.ts1// Shared Curbside suite helpers (design/app-6-curbside.md, "Test fixtures &COMMENT
LOW…ks/app-builder/cuj-tests/curbside/checkpoint-3.spec.ts1// Curbside — checkpoint 3 CUJ suite (design/app-6-curbside.md, M3 CUJ table +COMMENT
LOW…ks/app-builder/cuj-tests/curbside/checkpoint-2.spec.ts1// Curbside — checkpoint 2 CUJ suite (design/app-6-curbside.md, M2 CUJ table +COMMENT
LOW…ks/app-builder/cuj-tests/curbside/checkpoint-1.spec.ts1// Curbside — checkpoint 1 CUJ suite (design/app-6-curbside.md, M1 CUJ table +COMMENT
LOWbenchmarks/app-builder/cuj-tests/deskhero/fixtures.ts1// Shared Deskhero suite helpers (design/app-2-deskhero.md, "Suite mechanics").COMMENT
LOWbenchmarks/app-builder/cuj-tests/deskhero/fixtures.ts41// Unique token for one test's data (identities, subjects, markers). Tests shareCOMMENT
LOW…s/app-builder/cuj-tests/relay-crm/checkpoint-1.spec.ts1// Relay CRM — checkpoint 1 CUJ suite (design/app-1-relay-crm.md, "CUJ suiteCOMMENT
LOWbenchmarks/app-builder/oracle/preflight.sh1#!/bin/bashCOMMENT
LOWbenchmarks/app-builder/oracle/run-suite.sh41[[ -f "$APP_DIR/schema.sql" ]] || { echo "[oracle] $APP_DIR/schema.sql missing"; exit 1; }COMMENT
LOWscripts/ci-cleanup-macos.sh1#!/usr/bin/env bashCOMMENT
LOW.github/workflows/claude-rules-review.yml1# Weekly review of AGENTS.md and rules/ to ensure documentation staysCOMMENT
LOW.github/workflows/cla.yml41 #custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'COMMENT
LOW.github/workflows/ci.yml121COMMENT
LOWworker/dyad-auth-bootstrap.js41 // Best effort: the value is already snapshotted above either way.COMMENT
LOWworker/dyad-sw.js21self.addEventListener("fetch", (event) => {COMMENT
LOWworker/dyad-recorder-client.js41 // The vm/happy-dom unit test sets this before the script runs so it can driveCOMMENT
LOWworker/dyad-recorder-client.js81 // conservative — a false positive costs one placeholder to replace, a falseCOMMENT
LOWsrc/main.ts521 await encryptStoredMcpSecrets();COMMENT
LOW…c/handlers/local_agent/tools/json_schema_to_ts.spec.ts1041 // contentMediaType, contentSchemaCOMMENT
LOW…c/handlers/local_agent/tools/json_schema_to_ts.spec.ts1061 // 7. Remote `$ref` (http://, file://, relative file paths) renders asCOMMENT
LOW…c/handlers/local_agent/tools/json_schema_to_ts.spec.ts1081 // signature (from `additionalProperties`, `unevaluatedProperties`, orCOMMENT
LOW…c/handlers/local_agent/tools/json_schema_to_ts.spec.ts1101 // `maxItems: 10000` from blowing up the rendered declaration.COMMENT
LOW…c/handlers/local_agent/tools/json_schema_to_ts.spec.ts1121 // have (deviation #3).COMMENT
LOW…in/ipc/handlers/local_agent/tools/json_schema_to_ts.ts581 const required: string[] = Array.isArray(schema.required)COMMENT
LOWsrc/utils/minidump_summary.ts21 ptype?: string; // crashing process type: "browser" (main) / "renderer" / "gpu-process" / …COMMENT
116 more matches not shown…
Structural Annotation Overuse43 hits · 76 pts
SeverityFileLineSnippetContext
LOW.claude/skills/multi-pr-review/SKILL.md26### Step 1: Determine PR Number and RepoCOMMENT
LOW.claude/skills/multi-pr-review/SKILL.md39### Step 2: Fetch PR Diff and ContextCOMMENT
LOW.claude/skills/multi-pr-review/SKILL.md57### Step 3: Spawn Review Agents in ParallelCOMMENT
LOW.claude/skills/multi-pr-review/SKILL.md132### Step 4: Collect and Parse ResultsCOMMENT
LOW.claude/skills/multi-pr-review/SKILL.md136### Step 5: Validate Issues with Reasoned AnalysisCOMMENT
LOW⚡.claude/skills/multi-pr-review/SKILL.md158### Step 6: Determine Merge VerdictCOMMENT
LOW⚡.claude/skills/multi-pr-review/SKILL.md166### Step 7: Deduplicate Against Existing CommentsCOMMENT
LOW⚡.claude/skills/multi-pr-review/SKILL.md174### Step 8: Post GitHub CommentsCOMMENT
LOW.claude/skills/swarm-to-plan/SKILL.md25### Step 1: Set Up ContextCOMMENT
LOW⚡.claude/skills/swarm-to-plan/SKILL.md37### Step 2: Create the Planning TeamCOMMENT
LOW⚡.claude/skills/swarm-to-plan/SKILL.md47### Step 3: Create TasksCOMMENT
LOW⚡.claude/skills/swarm-to-plan/SKILL.md56### Step 4: Spawn TeammatesCOMMENT
LOW.claude/skills/swarm-to-plan/SKILL.md101### Step 5: Collect Initial AnalysesCOMMENT
LOW.claude/skills/swarm-to-plan/SKILL.md105### Step 6: Facilitate Cross-Role DebateCOMMENT
LOW.claude/skills/swarm-to-plan/SKILL.md137### Step 7: Synthesize Questions for the HumanCOMMENT
LOW⚡.claude/skills/swarm-to-plan/SKILL.md150### Step 8: Share Clarifications and Gather Final InputCOMMENT
LOW⚡.claude/skills/swarm-to-plan/SKILL.md154### Step 9: Compile the Final PlanCOMMENT
LOW⚡.claude/skills/swarm-to-plan/SKILL.md158### Step 10: Write the PlanCOMMENT
LOW.claude/skills/swarm-to-plan/SKILL.md273### Step 11: Shutdown TeamCOMMENT
LOW⚡.claude/skills/deep-review/SKILL.md10## Step 1: Determine the diff to reviewCOMMENT
LOW⚡.claude/skills/deep-review/SKILL.md17## Step 2: Gather shared contextCOMMENT
LOW⚡.claude/skills/deep-review/SKILL.md25## Step 3: Launch the review workflowCOMMENT
LOW.claude/skills/deep-review/SKILL.md48## Step 4: ReportCOMMENT
LOW.claude/skills/deep-review/SKILL.md52## Step 5: False positives — exclude these (give this list to every finder and verifier)COMMENT
LOW.claude/skills/swarm-pr-review/SKILL.md29### Step 1: Determine PR Number and RepoCOMMENT
LOW.claude/skills/swarm-pr-review/SKILL.md42### Step 2: Fetch PR Diff and ContextCOMMENT
LOW⚡.claude/skills/swarm-pr-review/SKILL.md60### Step 3: Create the Review TeamCOMMENT
LOW⚡.claude/skills/swarm-pr-review/SKILL.md70### Step 4: Create Review TasksCOMMENT
LOW⚡.claude/skills/swarm-pr-review/SKILL.md79### Step 5: Spawn TeammatesCOMMENT
LOW.claude/skills/swarm-pr-review/SKILL.md154### Step 6: Collect Initial ReviewsCOMMENT
LOW.claude/skills/swarm-pr-review/SKILL.md158### Step 7: Facilitate DiscussionCOMMENT
LOW.claude/skills/swarm-pr-review/SKILL.md194### Step 8: Compile ConsensusCOMMENT
LOW.claude/skills/swarm-pr-review/SKILL.md205### Step 9: Determine Merge VerdictCOMMENT
LOW.claude/skills/swarm-pr-review/SKILL.md213### Step 10: Post GitHub CommentsCOMMENT
LOW.claude/skills/swarm-pr-review/SKILL.md281### Step 11: Shutdown TeamCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts422 // Step 1: Add first pending messageCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts438 // Step 2: AI added a new message, add another pending messageCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts515 // Step 1: User sends initial promptCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts526 // Step 2: AI responds with tool call, tool adds screenshotCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts581 // Step 3: AI continues, tool adds another screenshotCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts1083 // Step 0: web_crawl + list_filesCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts1106 // Step 1: model generates a search_replace tool callCOMMENT
LOWsrc/prompts/neon_prompt.ts135## Step 0: Inspect the App Before ScaffoldingCOMMENT
Synthetic Comment Markers8 hits · 50 pts
SeverityFileLineSnippetContext
HIGH.claude/skills/pr-fix-comments/SKILL.md225 🤖 Generated by Claude CodeCODE
HIGHe2e-tests/ai_e2e_testing.spec.ts4// End-to-end coverage for the AI-generated E2E testing feature (the TestsCOMMENT
HIGHtesting/fake-llm-server/chatCompletionHandler.ts312 "## Key Decisions Made\n- Completed initial task as requested\n\n## Current Task State\nConversation was compactCODE
HIGHtesting/fake-llm-server/anthropicMessagesHandler.ts334 "## Key Decisions Made\n- Completed initial task as requested\n\n## Current Task State\nConversation was compactCODE
HIGHtesting/fake-llm-server/responsesHandler.ts299 "## Key Decisions Made\n- Completed initial task as requested\n\n## Current Task State\nConversation was compactCODE
HIGHworker/dyad-recorder-client.js57 // in an AI-generated app — to lift with one `querySelector`.COMMENT
HIGHsrc/__tests__/dyad_recorder_client.test.ts161 // AI-generated app — to lift with one `querySelector`.COMMENT
HIGHsrc/ipc/handlers/shell_handler.ts94 // The dyad-apps tree contains AI-generated code, so opening arbitrary filesCOMMENT
Modern AI Meta-Vocabulary16 hits · 45 pts
SeverityFileLineSnippetContext
MEDIUMplans/version-preview-state-machine.md518### Phase 6: remove legacy orchestrationCOMMENT
MEDIUMplans/subagent.md333### Model-facing orchestration toolsCOMMENT
MEDIUMplans/subagent.md426### Phase 2: Manager, durability, and orchestrationCOMMENT
MEDIUMplans/machine-followup.md388## Accepted backlog and guardrailsCOMMENT
MEDIUMplans/better-e2e.md136### 7. Scrub scaffold/template versions from app-file snapshotsCOMMENT
MEDIUMplans/better-e2e.md185| Weeks 3–4 | #5 vitest harness + payload cluster (~18 specs), #7 scaffold scrubbing | suite shrinks; payload tests CODE
MEDIUMplans/better-e2e.md186| Ongoing | #6 migrate-on-touch, #8 smoke consolidation, #10 guardrails | e2e converges on the 36 specsCODE
MEDIUMplans/sandboxed-e2e-test-runtime.md278### 5. Lifecycle orchestration and coordinationCOMMENT
MEDIUMdocs/architecture.md36### Why isn't Dyad more agentic?COMMENT
MEDIUMdocs/architecture.md52One approach that we don't use is a more agentic-style like what Claude Code and Cursor does where it iteratively searchCODE
MEDIUMe2e-tests/local_agent_run_build.spec.ts62 // Build mode creates an app from the actual bundled Vite scaffold.COMMENT
MEDIUMbenchmarks/app-builder/design/runner-scoring.md126### 3. Run orchestration (build phase)COMMENT
MEDIUMrules/e2e-testing.md202## CI scaffold dependency installsCOMMENT
MEDIUMsrc/ipc/handlers/proposal_handlers.ts157 // created before agentic messages were eagerly marked approved.COMMENT
MEDIUMsrc/ipc/handlers/__tests__/undo.integration.test.ts154 // scaffold's "Welcome to Your Blank App" page; in the minimal fixture theCOMMENT
MEDIUMsrc/coolify_deploy/build_config.test.ts50 // Railpack detects it and every scaffold carries `next start`.COMMENT
Fake / Example Data40 hits · 42 pts
SeverityFileLineSnippetContext
LOW…/snapshots/engine.spec.ts_send-message-to-engine-1.txt507 "placeholder": {CODE
LOW…gent_advanced.spec.ts_local-agent---mention-apps-1.txt949 "placeholder": {CODE
LOW…spec.ts_smart-auto-should-send-message-to-engine-1.txt483 "placeholder": {CODE
LOW…apshots/mention_app.spec.ts_mention-app-with-pro-1.txt483 "placeholder": {CODE
LOW…nd-message-to-engine---anthropic-claude-sonnet-4-1.txt490 "placeholder": {CODE
LOW…ocal_agent_auto.spec.ts_local-agent---auto-model-1.txt960 "placeholder": {CODE
LOW…ne.spec.ts_send-message-to-engine---openai-gpt-5-1.txt482 "placeholder": {CODE
LOW…sts/helpers/page-objects/components/GitLabConnector.ts12export const FAKE_GITLAB_TOKEN = "glpat-fake-token";CODE
LOWtesting/fake-llm-server/cloudflare.ts123 ok(res, { id: "fake-token-id", status: "active" });CODE
LOWtesting/fake-llm-server/gitlab.ts23export const FAKE_GITLAB_TOKEN = "glpat-fake-token";CODE
LOW…s/app-builder/cuj-tests/relay-crm/checkpoint-1.spec.ts32const ADA_PHONE = "555-0100";CODE
LOWworker/dyad-recorder-client.js847 case "placeholder":CODE
LOWworker/dyad-recorder-client.js849 (e) => e.getAttribute("placeholder") === descriptor.value,CODE
LOWworker/dyad-recorder-client.js893 const placeholder = el.getAttribute && el.getAttribute("placeholder");CODE
LOWworker/dyad-recorder-client.js895 candidates.push({ kind: "placeholder", value: placeholder, exact: true });CODE
LOWsrc/supabase_admin/supabase_management_client.ts604 userId: "fake-user-id",CODE
LOW…n/ipc/handlers/local_agent/local_agent_handler.test.ts699 row(5, "placeholder"),CODE
LOW…n/ipc/handlers/local_agent/local_agent_handler.test.ts709 expect(serialized).not.toContain("placeholder");CODE
LOW…c/pro/main/ipc/handlers/local_agent/tools/web_crawl.ts57- Replace all \`<img src="...">\` with: \`<img src="/assets/placeholder.svg" alt="placeholder" />\`CODE
LOW…c/pro/main/ipc/handlers/local_agent/tools/web_crawl.ts58- If using Next.js Image component: \`<Image src="/assets/placeholder.svg" alt="placeholder" width={400} height={300} />CODE
LOW…c/pro/main/ipc/handlers/local_agent/tools/web_crawl.ts81- Replace all \`<img src="...">\` with: \`<img src="/assets/placeholder.svg" alt="placeholder" />\`CODE
LOW…c/pro/main/ipc/handlers/local_agent/tools/web_crawl.ts82- If using Next.js Image component: \`<Image src="/assets/placeholder.svg" alt="placeholder" width={400} height={300} />CODE
LOW…c/handlers/local_agent/tools/planning_questionnaire.ts80- "placeholder" (string, optional): Placeholder for text inputsCODE
LOWsrc/shared/coolify_admin_email.test.ts21 ["admin@example.com", false, "reserved for documentation"],CODE
LOWsrc/shared/coolify_admin_email.test.ts87 expect(adminEmailRefusal("admin@example.com")).toBe(undeliverable);CODE
LOWsrc/__tests__/dyad_recorder_client.test.ts491 locator: { kind: "placeholder", value: "Email", exact: true },CODE
LOWsrc/__tests__/dyad_recorder_client.test.ts496 locator: { kind: "placeholder", value: "Email", exact: true },CODE
LOWsrc/__tests__/dyad_recorder_client.test.ts547 locator: { kind: "placeholder", value: "API key", exact: true },CODE
LOWsrc/__tests__/dyad_recorder_client.test.ts562 locator: { kind: "placeholder", value: "Email address", exact: true },CODE
LOWsrc/lib/test_recorder/codegen.test.ts54 expect(locatorToCode({ kind: "placeholder", value: "Email" })).toBe(CODE
LOWsrc/lib/test_recorder/codegen.test.ts102 locatorToCode({ kind: "placeholder", value: "Email", exact: true }),CODE
LOWsrc/lib/test_recorder/codegen.test.ts205 locator: { kind: "placeholder", value: "Bio" },CODE
LOWsrc/lib/test_recorder/codegen.test.ts251 locator: { kind: "placeholder", value: "Email" },CODE
LOWsrc/lib/test_recorder/codegen.ts31 case "placeholder":CODE
LOWsrc/lib/test_recorder/merge.test.ts7 ({ kind: "placeholder", value }) as const;CODE
LOWsrc/lib/test_recorder/types.ts13 "placeholder",CODE
LOW⚡src/prompts/supabase_prompt.test.ts46 "user@example.com",CODE
LOW⚡src/prompts/supabase_prompt.test.ts54 email: "user@example.com",CODE
LOW⚡src/prompts/supabase_prompt.test.ts59 email: "user@example.com",CODE
LOW⚡src/prompts/supabase_prompt.test.ts63 "user@example.com",CODE
AI Slop Vocabulary12 hits · 40 pts
SeverityFileLineSnippetContext
MEDIUM.claude/hooks/python-permission-hook.py338 # Use shlex for robust argument parsingCOMMENT
MEDIUMbenchmarks/app-builder/run-cell.sh3# patched headless harness against neon-sim + the engine recording proxy.COMMENT
MEDIUMbenchmarks/app-builder/run-cell.sh151# app = base + appId%1000 (the harness always creates app id 1), proxy =COMMENT
MEDIUMbenchmarks/app-builder/cuj-tests/score-checkpoint.sh166# harness, so detect it and mark the checkpoint unscored instead.COMMENT
MEDIUM⚡benchmarks/app-builder/oracle/preflight.sh2# Pre-flight gate: prove the harness is sane BEFORE any model cell is scored.COMMENT
MEDIUM⚡benchmarks/app-builder/oracle/preflight.sh7# A benchmark with no controls cannot tell "the model is bad" from "the harnessCOMMENT
MEDIUM⚡benchmarks/app-builder/oracle/preflight.sh8# is broken" — this session produced five distinct harness defects that eachCOMMENT
MEDIUM.github/workflows/claude-pr-review.yml3# https://github.com/anthropics/claude-code-action/blob/main/examples/pr-review-comprehensive.ymlCOMMENT
MEDIUM.github/workflows/ci.yml332 # harness imports the fake-llm-server in-process, so its ownCOMMENT
MEDIUMsrc/ipc/utils/git_utils.ts1698 // -z gives NUL-delimited output for robust parsing of paths with spaces.COMMENT
MEDIUMsrc/ipc/utils/playwright_report.ts307 // Normalize all separators to POSIX. A global replace is more robust thanCOMMENT
MEDIUMsrc/ipc/handlers/app_collection_handlers.ts184 // but we null out explicitly first so the operation is robust regardlessCOMMENT
Hallucination Indicators3 hits · 30 pts
SeverityFileLineSnippetContext
CRITICAL…/components/preview_panel/dyadScreenshotClient.test.ts194 client.parent.postMessage.mock.calls.map(([message]) => message),CODE
CRITICAL…onents/preview_panel/DeployDialog.integration.test.tsx526 vercel.projects.createProjectEnv.mock.invocationCallOrder.at(-1)!,CODE
CRITICAL…onents/preview_panel/DeployDialog.integration.test.tsx745 vercel.projects.createProjectEnv.mock.invocationCallOrder.at(-1)!,CODE
Redundant / Tautological Comments11 hits · 14 pts
SeverityFileLineSnippetContext
LOWtools/add-macos-cert.sh9# Check if the variable is setCOMMENT
LOW.claude/hooks/python-permission-hook.py221 # Check if the path is inside the project directoryCOMMENT
LOW.claude/hooks/python-permission-hook.py252 # Check if this is a python/python3 commandCOMMENT
LOW.claude/hooks/python-permission-hook.py272 # Check if the script is inside .claude directoryCOMMENT
LOW.claude/hooks/python-permission-hook.py302 # Check if this even looks like a python command before denyingCOMMENT
LOW.claude/hooks/python-permission-hook.py318 # Check if command starts with python or python3COMMENT
LOW.claude/hooks/python-permission-hook.py363 # Check if next argument is an allowed moduleCOMMENT
LOW.claude/hooks/python-permission-hook.py443 # Check if the script is inside the .claude directoryCOMMENT
LOW.claude/hooks/gh-permission-hook.py351 # Check if this is a gh api commandSTRING
LOW.claude/hooks/gh-permission-hook.py455 # Check if command has input data (implies write operation)STRING
LOW.github/workflows/ci.yml88 # Check if all changed files are in config-only directories (.claude, rules)COMMENT
Verbosity Indicators8 hits · 12 pts
SeverityFileLineSnippetContext
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts422 // Step 1: Add first pending messageCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts438 // Step 2: AI added a new message, add another pending messageCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts515 // Step 1: User sends initial promptCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts526 // Step 2: AI responds with tool call, tool adds screenshotCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts581 // Step 3: AI continues, tool adds another screenshotCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts1083 // Step 0: web_crawl + list_filesCOMMENT
LOW…in/ipc/handlers/local_agent/prepare_step_utils.test.ts1106 // Step 1: model generates a search_replace tool callCOMMENT
LOWsrc/prompts/neon_prompt.ts135## Step 0: Inspect the App Before ScaffoldingCOMMENT
Self-Referential Comments3 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMtools/add-macos-cert.sh24# Create a keychainCOMMENT
MEDIUM⚡.claude/hooks/tests/test_stop_hook.py106 # Create a minimal transcriptCOMMENT
MEDIUM.claude/hooks/tests/test_stop_hook.py442 # Create a large transcript with many messagesCOMMENT
Cross-Language Confusion2 hits · 10 pts
SeverityFileLineSnippetContext
HIGH.claude/hooks/python-permission-hook.py96 # Replace safe redirect patterns (2>&1, >/dev/null) before checkingCOMMENT
HIGH.claude/hooks/gh-permission-hook.py299 # Replace safe redirect patterns (like 2>&1, 2>/dev/null) before checkingSTRING
Deep Nesting2 hits · 2 pts
SeverityFileLineSnippetContext
LOW.claude/hooks/python-permission-hook.py123CODE
LOW.claude/hooks/python-permission-hook.py288CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUM…t_web_fetch.spec.ts_local-agent---web-fetch-1.aria.yml13- paragraph: Here's a summary of the page content. The getting started guide covers three main items. Let me know if youCODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOW.claude/skills/run-benchmark/scripts/run-arm.sh8# Usage:COMMENT
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…de/skills/fix-issue/scripts/sanitize_issue_markdown.py65CODE