AI Slop Code Risk Monitor

alchaincyf/huashu-design

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

Huashu Design 3.0 · 在 agent 里打一句话,拿回能交付的设计:网页 / App 原型 / 可编辑 PPTX / 动画 / 信息图 · 六个候选挑三个方向 · 84 种带样张的风格库 · 越用越懂你的外观账本与设计体检 · HTML-native design skill for Claude Code, Codex, Cursor & any agent

16.0 Elevated pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for alchaincyf/huashu-design, a HTML project with 28,295 GitHub stars. SynthScan examined 58,790 lines of code across 231 source files, recording 270 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 16.0 (Elevated 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.

16.0
Adjusted Signal
16.0
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
28.3K
Stars
HTML
Language
58.8K
Lines of Code
231
Files
270
Pattern Hits
2026-10-31
Scan Date
0.39
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 5.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 36.3/100 · MEDIUM

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

Agent Over-Engineering Ratio 27.5/100 · MEDIUM

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

PR Review Velocity Impact 53.8/100 · HIGH

Which changes need focused human review? 270 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 0HIGH 89MEDIUM 96LOW 85

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 270 distinct pattern matches across 12 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 Confusion80 hits · 515 pts
SeverityFileLineSnippetContext
HIGHscripts/capabilities.py85 print('截图与体检需要:pip install playwright pillow && playwright install chromium')CODE
HIGH⚡scripts/design_lint.py45 if (!s || s === 'transparent') return [0, 0, 0, 0];CODE
HIGH⚡scripts/design_lint.py52 const raw = inner.includes('/') ? parts[parts.length - 1] : (/^(rgba|hsla)\(/.test(s) && parts.length === 4 ? parts[CODE
HIGH⚡scripts/design_lint.py59 if (/^(IMG|VIDEO|CANVAS|PICTURE|IFRAME)$/.test(e.tagName) || e instanceof SVGElement) return null;CODE
HIGH⚡scripts/design_lint.py61 if (cs.backgroundImage && cs.backgroundImage !== 'none') return null;CODE
HIGH⚡scripts/design_lint.py61 if (cs.backgroundImage && cs.backgroundImage !== 'none') return null;CODE
HIGH⚡scripts/design_lint.py62 const c = rgba(cs.backgroundColor); return c[3] > 0.9 ? c : undefined;CODE
HIGH⚡scripts/design_lint.py65 const own = opaqueBg(el); if (own !== undefined) return own; // 按钮、标签自带的底色先算CODE
HIGH⚡scripts/design_lint.py67 if (x >= 0 && y >= 0 && x < innerWidth && y < innerHeight) {CODE
HIGH⚡scripts/design_lint.py69 if (e === el || el.contains(e)) continue;CODE
HIGH⚡scripts/design_lint.py70 const b = opaqueBg(e); if (b !== undefined) return b;CODE
HIGH⚡scripts/design_lint.py74 for (let e = el.parentElement; e && e.nodeType === 1; e = e.parentElement) { const b = opaqueBg(e); if (b !== undefiCODE
HIGH⚡scripts/design_lint.py74 for (let e = el.parentElement; e && e.nodeType === 1; e = e.parentElement) { const b = opaqueBg(e); if (b !== undefiCODE
HIGH⚡scripts/design_lint.py77 const opacityOf = (el) => { let o = 1; for (let e = el; e && e.nodeType === 1; e = e.parentElement) o *= parseFloat(geCODE
HIGH⚡scripts/design_lint.py82 return r.width > 0 && r.height > 0 && cs.visibility !== 'hidden' && cs.display !== 'none' && parseFloat(cs.opacity) CODE
HIGH⚡scripts/design_lint.py88 broken: [], fonts: {}, display: null, body: null, headlineSerif: false, textColors: {}, bg: null,CODE
HIGH⚡scripts/design_lint.py93 let displayEl = null, maxFs = 0; // 标题字体 = 页面上字号最大的那段文字用的字体CODE
HIGH⚡scripts/design_lint.py105 if (fs < (window.__MIN_LABEL || 12)) out.small.push({ text: t.slice(0, 30), px: Math.round(fs) });CODE
HIGH⚡scripts/design_lint.py105 if (fs < (window.__MIN_LABEL || 12)) out.small.push({ text: t.slice(0, 30), px: Math.round(fs) });CODE
HIGH⚡scripts/design_lint.py107 if (t.length >= 28 && !el.closest(CAPTION) && fs < (window.__MIN_BODY || 14)) out.bodySmall.push({ text: t.slice(0CODE
HIGH⚡scripts/design_lint.py107 if (t.length >= 28 && !el.closest(CAPTION) && fs < (window.__MIN_BODY || 14)) out.bodySmall.push({ text: t.slice(0CODE
HIGH⚡scripts/design_lint.py111 const c = contrast(fg, bg); const large = fs >= 24 || (fs >= 18.66 && parseInt(cs.fontWeight) >= 700);CODE
HIGH⚡scripts/design_lint.py112 if (c < (large ? 3 : 4.5)) out.lowContrast.push({ text: t.slice(0, 30), ratio: Math.round(c * 100) / 100, px: fsCODE
HIGH⚡scripts/design_lint.py114 const caps = cs.textTransform === 'uppercase' || (latin.length >= 3 && latin === latin.toUpperCase());CODE
HIGH⚡scripts/design_lint.py116 if (caps && latin.length >= 2 && ls >= 0.06 && fs <= 15) out.eyebrows.push(t.slice(0, 30));CODE
HIGH⚡scripts/design_lint.py116 if (caps && latin.length >= 2 && ls >= 0.06 && fs <= 15) out.eyebrows.push(t.slice(0, 30));CODE
HIGH⚡scripts/design_lint.py120 if (/^0\d([\s./—-]|$)/.test(t) && t.length <= 6) out.numbered.push(t);CODE
HIGH⚡scripts/design_lint.py128 if (r.width > 200 && ['Top', 'Bottom', 'Left', 'Right'].some((s) => cs['border' + s + 'Style'] !== 'none' && parseFlCODE
HIGH⚡scripts/design_lint.py129 if (r.width > 120 && r.height > 60 && (cs.backgroundColor !== 'rgba(0, 0, 0, 0)' || cs.borderStyle !== 'none')) {CODE
HIGH⚡scripts/design_lint.py141 if (n > 0 && n <= total * 0.4 && (cs.color !== hs.color || cs.fontStyle !== hs.fontStyle || cs.fontFamily !== hs.fCODE
HIGH⚡scripts/design_lint.py141 if (n > 0 && n <= total * 0.4 && (cs.color !== hs.color || cs.fontStyle !== hs.fontStyle || cs.fontFamily !== hs.fCODE
HIGH⚡scripts/design_lint.py141 if (n > 0 && n <= total * 0.4 && (cs.color !== hs.color || cs.fontStyle !== hs.fontStyle || cs.fontFamily !== hs.fCODE
HIGH⚡scripts/design_lint.py153 if (img.complete && img.naturalWidth === 0 && visible(img)) out.broken.push(src.slice(0, 80) || '(无 src)');CODE
HIGH⚡scripts/design_lint.py153 if (img.complete && img.naturalWidth === 0 && visible(img)) out.broken.push(src.slice(0, 80) || '(无 src)');CODE
HIGH⚡scripts/design_lint.py154 else if (src && !/^(data:|https?:|blob:)/.test(src)) out.relImgs.push(src.slice(0, 60));CODE
HIGHscripts/design_lint.py250 print('体检跳过:没装 Python 版 playwright。装上后再跑:pip install playwright pillow && playwright install chromium',CODE
HIGHscripts/design_lint.py20依赖:pip install playwright pillow && playwright install chromiumSTRING
HIGH⚡scripts/build_specimens.py78 print('需要 Playwright:pip install playwright && python3 -m playwright install chromium')CODE
HIGH⚡scripts/xhs_render.py47 const rects = [...range.getClientRects()].filter(r => r.width > 1 && r.height > 1);CODE
HIGH⚡scripts/xhs_render.py50 let k = 1, p = el; while (p && p !== sec) { const tf = getComputedStyle(p).transform; if (tf && tf !== 'none') { cCODE
HIGH⚡scripts/xhs_render.py53 items.push({ el, t: t.slice(0, 24), len: t.length, lines, px: Math.round(px * 10) / 10, ok: !!el.closest('[data-ovCODE
HIGH⚡scripts/xhs_render.py58 if (it.px < minLabel) issues.push(['✗', `字号 ${it.px}px < 标签底线 ${minLabel}px`, it.t]);CODE
HIGH⚡scripts/xhs_render.py59 else if (it.lines >= 2 && it.len >= 16 && it.px < minBody) issues.push(['✗', `段落字号 ${it.px}px < 正文底线 ${minBody}px`CODE
HIGH⚡scripts/xhs_render.py59 else if (it.lines >= 2 && it.len >= 16 && it.px < minBody) issues.push(['✗', `段落字号 ${it.px}px < 正文底线 ${minBody}px`CODE
HIGH⚡scripts/xhs_render.py61 if (l < -2 || t < -2 || r > sr.width + 2 || b > sr.height + 2) { issues.push(['✗', '字出了页面', it.t]); break; }CODE
HIGH⚡scripts/xhs_render.py61 if (l < -2 || t < -2 || r > sr.width + 2 || b > sr.height + 2) { issues.push(['✗', '字出了页面', it.t]); break; }CODE
HIGH⚡scripts/xhs_render.py64 const seam = [...Array(n - 1)].map((_, j) => (j + 1) * 1242).find(x => l < x - 4 && r > x + 4);CODE
HIGH⚡scripts/xhs_render.py65 if (seam) { issues.push(['✗', `字跨第 ${seam / 1242} 道缝`, it.t]); break; }CODE
HIGH⚡scripts/xhs_render.py73 if (a.ok || b.ok || a.el.contains(b.el) || b.el.contains(a.el)) continue; // 同一段里的行内片段不算CODE
HIGH⚡scripts/xhs_render.py74 if (a.rects.some(x => b.rects.some(y => hit(x, y)))) issues.push(['✗', '字压字', `${a.t} / ${b.t}`]);CODE
HIGH⚡scripts/xhs_render.py79 let found = null;CODE
HIGH⚡scripts/xhs_render.py87 if (!hitEl || hitEl === it.el || it.el.contains(hitEl) || hitEl.contains(it.el) || hitEl.closest('[data-overlaCODE
HIGH⚡scripts/xhs_render.py90 if (px < hb.left || px > hb.right || py < hb.top || py > hb.bottom) continue;CODE
HIGH⚡scripts/xhs_render.py95 if (found) issues.push(['!', found.tagName === 'IMG' ? '字压在图片框里(透明边也算,看一眼)' : '字被别的元素盖住', it.t]);CODE
HIGH⚡scripts/xhs_render.py100 if (e.closest('[data-overlap-ok]') || e.textContent.trim() || e.children.length || e.closest('svg')) return false;CODE
HIGH⚡scripts/xhs_render.py111 return q.width > 0 && q.height > 0 && it.rects.some(x => hit(x, g));CODE
HIGH⚡scripts/xhs_render.py113 if (hitShape) issues.push(['!', '字和图形挤在一起', it.t]);CODE
HIGH⚡scripts/xhs_render.py115 out.push({ index: si, n, w: Math.round(sr.width), h: Math.round(sr.height), issues });CODE
HIGH⚡scripts/xhs_render.py134 sys.exit('需要 Playwright 和 Pillow:pip install playwright pillow && python3 -m playwright install chromium')CODE
HIGH⚡scripts/pptx_from_rendered.py73 out.push({CODE
20 more matches not shown…
Decorative Section Separators96 hits · 288 pts
SeverityFileLineSnippetContext
MEDIUM⚡references/gsap-recipes.md113// ── 五段 label,比例 15 / 15 / 40 / 20 / 10 ──────────────────COMMENT
MEDIUM⚡references/gsap-recipes.md120// ── S1 触发(节奏慢:单个动作 + 大量留白)─────────────────────COMMENT
MEDIUM⚡references/gsap-recipes.md124// ── S2 生成(一个明确的惊艳点,不堆动作)─────────────────────COMMENT
MEDIUM⚡references/gsap-recipes.md132// ── S4 爆发(镜头级动作:拉远 / rotationX / 多元素涌现)───────COMMENT
MEDIUM⚡references/gsap-recipes.md136// ── S5 落幅(Logo 形变收束,见 §3.6;之后什么都不发生)────────COMMENT
MEDIUMreferences/gsap-recipes.md691// ── 平面模式(纯 zoom + pan,无旋转)──────────────────────────COMMENT
MEDIUMreferences/animation-pitfalls.md222// ━━━━━━ state ━━━━━━COMMENT
MEDIUMreferences/animation-pitfalls.md228// ━━━━━━ tick ━━━━━━COMMENT
MEDIUMreferences/animation-pitfalls.md252// ━━━━━━ boot ━━━━━━COMMENT
MEDIUMreferences/animation-pitfalls.md260// ━━━━━━ seek 接口(供 render-video 防御性矫正用)━━━━━━COMMENT
MEDIUMscripts/render-video.js100 // ── Phase 1: WARMUP (no recording, caches fonts/assets) ─────────────COMMENT
MEDIUMscripts/render-video.js113 // ── Phase 2: RECORD (fresh context, animation from t=0) ─────────────COMMENT
MEDIUMscripts/mix-voiceover.sh94# ── ffmpeg filter graph ─────────────────────────────────────COMMENT
MEDIUMscripts/render-narration.sh111# ── Step 1: 录无声 MP4 ──────────────────────COMMENT
MEDIUMscripts/render-narration.sh133# ── Step 2: 混入人声 ──────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py39# ─────────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py41# ─────────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py292 # ── 文本 ──────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py363 # ── 形状 ──────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py401 # ── 图片 ──────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py440 # ── 装配 ──────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py493# ─────────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py495# ─────────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py534# ─────────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py536# ─────────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py573# ─────────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/pptx_from_rendered.py264# ─────────────────────────────────────────────────────────────STRING
MEDIUMscripts/pptx_from_rendered.py266# ─────────────────────────────────────────────────────────────STRING
MEDIUMscripts/add-music.sh38# ── Parse args ───────────────────────────────────────────────────────COMMENT
MEDIUMscripts/add-music.sh65# ── Resolve music source: --music wins, else --mood ─────────────────COMMENT
MEDIUMscripts/add-music.sh80# ── Resolve output path ─────────────────────────────────────────────COMMENT
MEDIUMscripts/add-music.sh85# ── Measure video duration, compute fade-out start ──────────────────COMMENT
MEDIUMdemos/w1-brand-protocol.html546 // ── Auto-scale stage to viewport ─────────────────COMMENT
MEDIUMdemos/w1-brand-protocol.html557 // ── Easing functions ─────────────────COMMENT
MEDIUMdemos/w1-brand-protocol.html575 // ── Timeline (total 12s) ─────────────────COMMENT
MEDIUMdemos/c1-ios-prototype-en.html814 // ── Scale to viewport (1920×1080 canvas) ─────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype-en.html823 // ── Easing ───────────────────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype-en.html836 // ── Elements ─────────────────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype-en.html899 // ── SFX via WebAudio ─────────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype-en.html947 // ── Timeline ─────────────────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype-en.html975 // ── Beat 1: 0-2s ─────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype-en.html1016 // ── Beat 2: 2-8s ─────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype-en.html1050 // ── Beat 3: 8-10s ────────────────────────────────────────COMMENT
MEDIUMdemos/c5-infographic-en.html631 // ── Beat 1: 0-2s · JSON data appears, types in ─────────COMMENT
MEDIUMdemos/c5-infographic-en.html648 // ── Pipe arrow (1.8 → 2.2) ─────────────────────────────COMMENT
MEDIUMdemos/c5-infographic-en.html654 // ── Beat 2a: 2.0-3.2s · Infographic canvas arrives ─────COMMENT
MEDIUMdemos/c5-infographic-en.html667 // ── Beat 2b: 3.0-4.2s · Display headline appears ──────COMMENT
MEDIUMdemos/c5-infographic-en.html688 // ── Beat 2d: 5.2-6.4s · Comparison bars grow ─────────COMMENT
MEDIUMdemos/c5-infographic-en.html732 // ── Beat 3: 8.2-10s · Brand reveal ───────────────────COMMENT
MEDIUMdemos/c5-infographic.html628 // ── Beat 1: 0-2s · JSON data appears, types in ─────────COMMENT
MEDIUMdemos/c5-infographic.html645 // ── Pipe arrow (1.8 → 2.2) ─────────────────────────────COMMENT
MEDIUMdemos/c5-infographic.html651 // ── Beat 2a: 2.0-3.2s · Infographic canvas arrives ─────COMMENT
MEDIUMdemos/c5-infographic.html664 // ── Beat 2b: 3.0-4.2s · Display headline appears ──────COMMENT
MEDIUMdemos/c5-infographic.html685 // ── Beat 2d: 5.2-6.4s · Comparison bars grow ─────────COMMENT
MEDIUMdemos/c5-infographic.html729 // ── Beat 3: 8.2-10s · Brand reveal ───────────────────COMMENT
MEDIUMdemos/c1-ios-prototype.html811 // ── Scale to viewport (1920×1080 canvas) ─────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype.html820 // ── Easing ───────────────────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype.html833 // ── Elements ─────────────────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype.html896 // ── SFX via WebAudio ─────────────────────────────────────────────COMMENT
MEDIUMdemos/c1-ios-prototype.html944 // ── Timeline ─────────────────────────────────────────────────────COMMENT
36 more matches not shown…
Hyper-Verbose Identifiers28 hits · 39 pts
SeverityFileLineSnippetContext
LOWscripts/tests/test_compare_failures.py28 def test_all_unreadable_directions_are_not_a_success(self):CODE
LOW⚡scripts/tests/test_compare_failures.py39 def test_one_readable_direction_cannot_mask_a_failure(self):CODE
LOW⚡scripts/tests/test_compare_failures.py49 def test_two_distinct_directions_cannot_mask_a_failed_third(self):CODE
LOW⚡scripts/tests/test_compare_failures.py59 def test_complete_distinct_comparison_still_passes(self):CODE
LOW⚡scripts/tests/test_compare_failures.py67 def test_complete_colliding_comparison_still_fails(self):CODE
LOW⚡scripts/tests/test_pptx_from_rendered.py36 def test_bare_text_next_to_svg_kept(self):CODE
LOW⚡scripts/tests/test_pptx_from_rendered.py40 def test_bare_text_after_block_child_kept(self):CODE
LOW⚡scripts/tests/test_pptx_from_rendered.py43 def test_text_transform_applied(self):CODE
LOW⚡scripts/tests/test_pptx_from_rendered.py46 def test_fractional_opacity_reaches_shape_and_text(self):CODE
LOW⚡scripts/tests/test_pptx_from_rendered.py53 def test_default_run_reports_no_loss(self):CODE
LOW⚡scripts/tests/test_pptx_from_rendered.py61 def test_verify_reports_text_on_missing_slides(self):CODE
LOWscripts/tests/test_pptx_from_rendered.py74 def test_verify_reports_text_when_no_slides_remain(self):CODE
LOWscripts/tests/test_pptx_from_rendered.py81 def test_verify_reports_text_missing_from_pptx(self):CODE
LOW⚡scripts/tests/test_design_lint.py39 def test_clean_page_is_not_accused(self):CODE
LOW⚡scripts/tests/test_design_lint.py44 def test_broken_page_goes_red(self):CODE
LOW⚡scripts/tests/test_design_lint.py51 def test_reskin_is_caught_by_layout_not_colour(self):CODE
LOW⚡scripts/tests/test_design_lint.py60 def test_warm_cream_is_classified_warm(self):CODE
LOW⚡scripts/tests/test_design_lint.py70 def test_no_false_red_on_svg_sibling_plate_and_caption(self):CODE
LOW⚡scripts/tests/test_design_lint.py75 def test_deck_div_body_and_ghost_text_go_red(self):CODE
LOW⚡scripts/tests/test_design_lint.py83 def test_unreachable_stylesheet_does_not_kill_the_batch(self):CODE
LOW⚡scripts/tests/test_design_lint.py89 def test_glob_is_expanded_by_the_script(self):CODE
LOW⚡scripts/tests/test_design_lint.py92 def test_brand_mode_only_compares_skeleton(self):CODE
LOWscripts/tests/test_design_lint.py109 def test_add_then_check_flags_the_same_look(self):CODE
LOWscripts/tests/test_design_lint.py129 def test_refuses_entries_nobody_can_check(self):CODE
LOW⚡scripts/tests/test_design_lint.py148 def test_hand_edited_heading_without_trailing_dot_keeps_its_kind(self):CODE
LOW⚡scripts/tests/test_design_lint.py153 def test_topic_named_like_a_subcommand_can_be_recalled(self):CODE
LOW⚡scripts/tests/test_design_lint.py159 def test_blank_screenshot_counts_as_not_seen(self):CODE
LOWscripts/tests/test_design_lint.py173 def test_local_image_goes_on_the_board(self):CODE
Empty Error Handlers8 hits · 35 pts
SeverityFileLineSnippetContext
HIGHscripts/capabilities.py52except Exception:CODE
HIGHscripts/capabilities.py65except Exception:CODE
HIGHscripts/design_lint.py511except Exception:CODE
HIGHscripts/design_lint.py270except Exception:CODE
HIGHscripts/build_specimens.py70except (AttributeError, ValueError):CODE
HIGHscripts/learn.py176except Exception:CODE
HIGHscripts/ref_board.py41except Exception:CODE
HIGHscripts/ref_board.py87except (AttributeError, ValueError):CODE
Excessive Try-Catch Wrapping17 hits · 17 pts
SeverityFileLineSnippetContext
LOWscripts/fetch_images.py45 except Exception as e:CODE
LOWscripts/fetch_images.py68 except Exception as e:CODE
LOWscripts/capabilities.py52 except Exception:CODE
LOWscripts/capabilities.py65 except Exception:CODE
LOW⚡scripts/design_lint.py266 except Exception:CODE
LOW⚡scripts/design_lint.py270 except Exception:CODE
LOW⚡scripts/design_lint.py277 except Exception as e:CODE
LOWscripts/design_lint.py511 except Exception:CODE
LOW⚡scripts/build_specimens.py84 except Exception as e:CODE
LOW⚡scripts/build_specimens.py92 except Exception as e:CODE
LOW⚡scripts/build_specimens.py101 except Exception as e: # 单张失败不拖垮整批CODE
LOW⚡scripts/xhs_render.py141 except Exception as e:CODE
LOW⚡scripts/xhs_render.py148 except Exception: # 多半是字体外链在慢网或断网下没回来;按已加载的样子继续CODE
LOWscripts/learn.py176 except Exception:CODE
LOWscripts/ref_board.py41 except Exception:CODE
LOWscripts/ref_board.py106 except Exception as e:CODE
LOWscripts/ref_board.py125 except Exception as e:CODE
Over-Commented Block13 hits · 13 pts
SeverityFileLineSnippetContext
LOWscripts/mix-voiceover.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/convert-formats.sh1#!/bin/bashCOMMENT
LOWscripts/verify-video.sh1#!/bin/bashCOMMENT
LOWscripts/render-narration.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/render-narration.sh21# --keep-silent 保留中间产物(无声 MP4),便于 debugCOMMENT
LOWscripts/sfx-cues.sh1#!/bin/bashCOMMENT
LOWscripts/add-music.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/add-music.sh21#COMMENT
LOWscripts/design-gate-hook.sh1#!/bin/bashCOMMENT
LOWdemos/c6-expert-review-en.html721 pointsG.appendChild(circle);COMMENT
LOWdemos/w1-brand-protocol-en.html561 }COMMENT
LOWdemos/w2-junior-designer-en.html741 // ────────────────────────────────────COMMENT
LOWdemos/w2-junior-designer.html741 function seg(time, start, end) {COMMENT
Example Usage Blocks5 hits · 8 pts
SeverityFileLineSnippetContext
LOWscripts/mix-voiceover.sh4# Usage:COMMENT
LOWscripts/convert-formats.sh4# Usage:COMMENT
LOWscripts/verify-video.sh7# Usage:COMMENT
LOWscripts/render-narration.sh9# Usage:COMMENT
LOWscripts/add-music.sh4# Usage:COMMENT
Deep Nesting9 hits · 8 pts
SeverityFileLineSnippetContext
LOWscripts/capabilities.py31CODE
LOWscripts/design_lint.py246CODE
LOWscripts/build_specimens.py66CODE
LOWscripts/xhs_render.py121CODE
LOWscripts/pptx_from_rendered.py441CODE
LOWscripts/learn.py172CODE
LOWscripts/ref_board.py83CODE
LOWscripts/verify.py29CODE
LOWscripts/cloud/ai-review-video.py151CODE
Fake / Example Data5 hits · 5 pts
SeverityFileLineSnippetContext
LOWSKILL.md37| **文案** | 每一句话都为设计服务 | 用 Lorem ipsum 或「标题文字」占位交付 |CODE
LOWreferences/launch-film-director-notes.md144「这部片不做的事」清单(紫渐变 / emoji / Lorem ipsum / Inter display / SVG 画人物 / 圆角卡 + 左 border accent)比「这部片做的事」清单更能保护质量。CODE
LOWscripts/html2pptx.js764 if (classAttr.indexOf('placeholder') !== -1) {CODE
LOWassets/director-notes-samples/launch-film-30s-sample.md142| 不用 Lorem ipsum | 每一段假文都用真正能读的内容(含「md is the source. Anything else is product.」这种 hook) |CODE
LOWassets/director-notes-samples/launch-film-30s-sample.md804- ✅ destination card 的「On Markdown」essay 内容是真的可读的英文哲学小段,不是 Lorem ipsumCODE
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHreferences/voiceover-pipeline.md377DOUBAO_TTS_API_KEY=<your_api_key>CODE
Unused Imports5 hits · 4 pts
SeverityFileLineSnippetContext
LOWscripts/pptx_from_rendered.py35CODE
LOWscripts/verify.py19CODE
LOWscripts/verify.py20CODE
LOWscripts/tests/test_pptx_from_rendered.py6CODE
LOWscripts/tests/test_xhs_render.py17CODE
Structural Annotation Overuse3 hits · 4 pts
SeverityFileLineSnippetContext
LOWassets/director-notes-samples/launch-film-30s-sample.md1642# Step 1: 加 BGMCOMMENT
LOWassets/director-notes-samples/launch-film-30s-sample.md1648# Step 2: 加 SFX cues (按 Part II.6 SFX 字典逐 cue 加)COMMENT
LOWassets/director-notes-samples/launch-film-30s-sample.md1659# Step 3: 验证 audio streamCOMMENT