AI Slop Code RIsk Monitor

white0dew/XiaohongshuSkills

支持小红书自动发布、自动评论、自动检索的 Skill。支持 OpenClaw、Codex、CC 等

78.1 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for white0dew/XiaohongshuSkills, a Python project with 3,491 GitHub stars. SynthScan examined 8,458 lines of code across 16 source files, recording 251 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 78.1 (High 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.

78.1
Adjusted Signal
78.1
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
3.5K
Stars
Python
Language
8.5K
Lines of Code
16
Files
251
Pattern Hits
2026-10-12
Scan Date
7.69
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 17.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 94.5/100 · CRITICAL

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

Agent Over-Engineering Ratio 59.5/100 · HIGH

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

PR Review Velocity Impact 99.6/100 · CRITICAL

Which changes need focused human review? 251 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 123MEDIUM 40LOW 88

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 251 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Cross-Language Confusion107 hits · 489 pts
SeverityFileLineSnippetContext
HIGH⚡scripts/cdp_publish.py1962 if (!obj || typeof obj !== "object") {CODE
HIGH⚡scripts/cdp_publish.py1963 return null;CODE
HIGH⚡scripts/cdp_publish.py1967 if (value !== undefined && value !== null && String(value).trim()) {CODE
HIGH⚡scripts/cdp_publish.py1971 return null;CODE
HIGH⚡scripts/cdp_publish.py1976 let userNode = null;CODE
HIGH⚡scripts/cdp_publish.py1979 while (queue.length && scanCount < 2400) {CODE
HIGH⚡scripts/cdp_publish.py1982 if (!node || typeof node !== "object") {CODE
HIGH⚡scripts/cdp_publish.py2000 if (nameVal && (idVal || avatarVal)) {CODE
HIGH⚡scripts/cdp_publish.py2008 if (item && typeof item === "object") {CODE
HIGH⚡scripts/cdp_publish.py2009 queue.push(item);CODE
HIGH⚡scripts/cdp_publish.py2017 if (value && typeof value === "object") {CODE
HIGH⚡scripts/cdp_publish.py2018 queue.push(value);CODE
HIGH⚡scripts/cdp_publish.py2037 if (!(node instanceof HTMLElement) || node.offsetParent === null) {CODE
HIGH⚡scripts/cdp_publish.py2040 const text = normalize(node.innerText || node.textContent);CODE
HIGH⚡scripts/cdp_publish.py2041 if (text && text.length <= 40) {CODE
HIGH⚡scripts/cdp_publish.py2042 statTexts.push(text);CODE
HIGH⚡scripts/cdp_publish.py2097 return null;CODE
HIGH⚡scripts/cdp_publish.py2103 return null;CODE
HIGH⚡scripts/cdp_publish.py2109 return null;CODE
HIGH⚡scripts/cdp_publish.py2114 url: parsed.toString(),CODE
HIGH⚡scripts/cdp_publish.py2316 containers.push(node);CODE
HIGH⚡scripts/cdp_publish.py2323 let best = null;CODE
HIGH⚡scripts/cdp_publish.py2331 const text = normalize(container.innerText || container.textContent);CODE
HIGH⚡scripts/cdp_publish.py2336 if (targetId && id && id === targetId) {CODE
HIGH⚡scripts/cdp_publish.py2339 if (targetAuthor && author && author.includes(targetAuthor)) {CODE
HIGH⚡scripts/cdp_publish.py2342 if (targetSnippet && text && text.includes(targetSnippet)) {CODE
HIGH⚡scripts/cdp_publish.py2345 if (!best || score > best.score) {CODE
HIGH⚡scripts/cdp_publish.py2451 if (!(el instanceof HTMLButtonElement) || el.offsetParent === null) {CODE
HIGH⚡scripts/cdp_publish.py2458 if (r.width < 8 || r.height < 8) {CODE
HIGH⚡scripts/cdp_publish.py2466 if (!(button instanceof HTMLButtonElement) || button.offsetParent === null) {CODE
HIGH⚡scripts/cdp_publish.py2926 if (!(el instanceof HTMLElement) || el.offsetParent === null) {CODE
HIGH⚡scripts/cdp_publish.py2930 if (r.width < 8 || r.height < 8) {CODE
HIGH⚡scripts/cdp_publish.py2935 return null;CODE
HIGH⚡scripts/cdp_publish.py2961 if (!(el instanceof HTMLButtonElement) || el.offsetParent === null) {CODE
HIGH⚡scripts/cdp_publish.py2968 if (r.width < 8 || r.height < 8) {CODE
HIGH⚡scripts/cdp_publish.py2976 if (!(button instanceof HTMLButtonElement) || button.offsetParent === null) {CODE
HIGH⚡scripts/cdp_publish.py3035 if (node.offsetParent === null) {CODE
HIGH⚡scripts/cdp_publish.py3042 candidates.push(node);CODE
HIGH⚡scripts/cdp_publish.py3047 const text = (node.innerText || node.textContent || "")CODE
HIGH⚡scripts/cdp_publish.py3511 fuzzyKeywords.push('图文', '上传图文');CODE
HIGH⚡scripts/cdp_publish.py3514 fuzzyKeywords.push('视频', '上传视频');CODE
HIGH⚡scripts/cdp_publish.py3523 if (keyword && t.indexOf(keyword) !== -1) {{CODE
HIGH⚡scripts/cdp_publish.py4010 return null;CODE
HIGHscripts/cdp_publish.py919 if (node.offsetParent === null) {{CODE
HIGHscripts/cdp_publish.py928 if (document.body && containsKeyword(document.body.innerText)) {{CODE
HIGHscripts/cdp_publish.py1080 const src = node instanceof HTMLImageElement ? (node.currentSrc || node.src || "") : "";CODE
HIGHscripts/cdp_publish.py1083 node.parentElement ? (node.parentElement.innerText || node.parentElement.textContent) : ""CODE
HIGHscripts/cdp_publish.py1182 if (node.offsetParent === null) {{CODE
HIGHscripts/cdp_publish.py1186 return rect.width >= 8 && rect.height >= 8;CODE
HIGHscripts/cdp_publish.py1197 let inputEl = null;CODE
HIGHscripts/cdp_publish.py1201 if (!(node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement)) {{CODE
HIGHscripts/cdp_publish.py1224 if (descriptor && typeof descriptor.set === "function") {{CODE
HIGHscripts/cdp_publish.py1564 const text = normalize(node.innerText || node.textContent);CODE
HIGHscripts/cdp_publish.py1584 const text = normalize(node.innerText || node.textContent);CODE
HIGHscripts/cdp_publish.py1607 const text = normalize(node.innerText || node.textContent).toUpperCase();CODE
HIGHscripts/cdp_publish.py1625 scroll_top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0CODE
HIGHscripts/cdp_publish.py1736 const text = normalize(node.textContent || node.innerText);CODE
HIGHscripts/cdp_publish.py1755 if ({threshold} > 0 && match && Number.parseInt(match[1], 10) > {threshold}) {{CODE
HIGHscripts/cdp_publish.py2153 notes.push({CODE
HIGHscripts/cdp_publish.py2254 if (value && normalize(value)) {CODE
47 more matches not shown…
Empty Error Handlers16 hits · 72 pts
SeverityFileLineSnippetContext
HIGHscripts/chrome_launcher.py209except Exception:CODE
HIGHscripts/chrome_launcher.py244except Exception:CODE
HIGHscripts/chrome_launcher.py205except Exception:CODE
HIGHscripts/chrome_launcher.py224except Exception:CODE
HIGHscripts/image_downloader.py176except OSError:CODE
HIGHscripts/run_lock.py44except Exception:CODE
HIGHscripts/run_lock.py64except FileNotFoundError:CODE
HIGHscripts/run_lock.py121except FileNotFoundError:CODE
HIGHscripts/run_lock.py123except OSError:CODE
HIGHscripts/account_manager.py47except (json.JSONDecodeError, IOError):CODE
HIGHscripts/account_manager.py196except Exception:CODE
HIGHscripts/cdp_publish.py73except Exception:CODE
HIGHscripts/cdp_publish.py188except Exception:CODE
HIGHscripts/feed_explorer.py147except Exception:CODE
HIGHscripts/publish_pipeline.py61except Exception:CODE
HIGHscripts/publish_pipeline.py97except Exception:CODE
Excessive Try-Catch Wrapping39 hits · 37 pts
SeverityFileLineSnippetContext
LOWscripts/chrome_launcher.py205 except Exception:CODE
LOWscripts/chrome_launcher.py209 except Exception:CODE
LOWscripts/chrome_launcher.py221 except Exception:CODE
LOWscripts/chrome_launcher.py224 except Exception:CODE
LOWscripts/chrome_launcher.py244 except Exception:CODE
LOWscripts/image_downloader.py163 except Exception as e:CODE
LOWscripts/run_lock.py44 except Exception:CODE
LOWscripts/account_manager.py196 except Exception:CODE
MEDIUMscripts/account_manager.py275 print(f"Error: Account '{args.name}' already exists.", file=sys.stderr)CODE
MEDIUMscripts/account_manager.py282 print(f"Error: Cannot remove account '{args.name}'.", file=sys.stderr)CODE
MEDIUMscripts/account_manager.py294 print(f"Error: Account '{args.name}' not found.", file=sys.stderr)CODE
MEDIUMscripts/account_manager.py301 print(f"Error: Account '{args.name}' not found.", file=sys.stderr)CODE
MEDIUM⚡scripts/cdp_publish.py4469 print(f"Error: Account '{args.name}' already exists.", file=sys.stderr)STRING
MEDIUM⚡scripts/cdp_publish.py4478 print(f"Error: Cannot remove account '{args.name}'.", file=sys.stderr)STRING
MEDIUM⚡scripts/cdp_publish.py4487 print(f"Error: Account '{args.name}' not found.", file=sys.stderr)STRING
LOWscripts/cdp_publish.py73 except Exception:CODE
LOWscripts/cdp_publish.py188 except Exception:CODE
LOWscripts/cdp_publish.py212 except Exception:CODE
LOWscripts/cdp_publish.py388 except Exception:CODE
LOWscripts/cdp_publish.py502 except Exception as e:CODE
LOWscripts/cdp_publish.py624 except Exception as exc:CODE
LOWscripts/cdp_publish.py1400 except Exception:CODE
MEDIUMscripts/cdp_publish.py4540 print("Error: --content or --content-file required.", file=sys.stderr)STRING
MEDIUMscripts/cdp_publish.py4632 print("Error: --content or --content-file required.", file=sys.stderr)STRING
MEDIUMscripts/cdp_publish.py4654 print("Error: --content or --content-file required.", file=sys.stderr)STRING
MEDIUMscripts/cdp_publish.py4820 print(f"Error: {e}", file=sys.stderr)STRING
LOWscripts/feed_explorer.py147 except Exception:CODE
LOWscripts/publish_pipeline.py61 except Exception:CODE
LOWscripts/publish_pipeline.py97 except Exception:CODE
MEDIUMscripts/publish_pipeline.py174 print(f"Error: {media_label} file not found: {file_path}", file=sys.stderr)CODE
MEDIUMscripts/publish_pipeline.py461 print("Error: title is empty.", file=sys.stderr)STRING
MEDIUMscripts/publish_pipeline.py472 print("Error: content is empty.", file=sys.stderr)STRING
MEDIUMscripts/publish_pipeline.py494 print("Error: Failed to start Chrome.", file=sys.stderr)STRING
MEDIUMscripts/publish_pipeline.py533 print(f"Error: {e}", file=sys.stderr)STRING
MEDIUMscripts/publish_pipeline.py550 print("Error: Video download failed.", file=sys.stderr)STRING
MEDIUMscripts/publish_pipeline.py565 print("Error: All image downloads failed.", file=sys.stderr)STRING
MEDIUMscripts/publish_pipeline.py590 print(f"Error during form fill: {e}", file=sys.stderr)STRING
MEDIUMscripts/publish_pipeline.py610 print(f"Error clicking publish: {e}", file=sys.stderr)STRING
MEDIUMscripts/publish_pipeline.py628 print(f"Error: {e}", file=sys.stderr)STRING
Decorative Section Separators18 hits · 26 pts
SeverityFileLineSnippetContext
MEDIUMscripts/account_manager.py219# ---------------------------------------------------------------------------COMMENT
MEDIUMscripts/account_manager.py221# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/cdp_publish.py1166 # ------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/cdp_publish.py1168 # ------------------------------------------------------------------COMMENT
MEDIUMscripts/cdp_publish.py93# ---------------------------------------------------------------------------COMMENT
MEDIUMscripts/cdp_publish.py95# ---------------------------------------------------------------------------COMMENT
MEDIUMscripts/cdp_publish.py486 # ------------------------------------------------------------------COMMENT
MEDIUMscripts/cdp_publish.py488 # ------------------------------------------------------------------COMMENT
MEDIUMscripts/cdp_publish.py584 # ------------------------------------------------------------------COMMENT
MEDIUMscripts/cdp_publish.py586 # ------------------------------------------------------------------COMMENT
MEDIUMscripts/cdp_publish.py858 # ------------------------------------------------------------------COMMENT
MEDIUMscripts/cdp_publish.py860 # ------------------------------------------------------------------COMMENT
MEDIUM⚡scripts/cdp_publish.py4016 # ------------------------------------------------------------------STRING
MEDIUM⚡scripts/cdp_publish.py4018 # ------------------------------------------------------------------STRING
MEDIUM⚡scripts/cdp_publish.py4126# ---------------------------------------------------------------------------STRING
MEDIUM⚡scripts/cdp_publish.py4128# ---------------------------------------------------------------------------STRING
MEDIUMscripts/cdp_publish.py3298 # ------------------------------------------------------------------STRING
MEDIUMscripts/cdp_publish.py3300 # ------------------------------------------------------------------STRING
Hyper-Verbose Identifiers35 hits · 16 pts
SeverityFileLineSnippetContext
LOW⚡scripts/cdp_publish.py343 def _prepare_upload_file_path(self, file_path: str) -> str:CODE
LOW⚡scripts/cdp_publish.py349 def _looks_like_windows_drive_path(self, file_path: str) -> bool:CODE
LOW⚡scripts/cdp_publish.py357 def _looks_like_windows_backslash_path(self, file_path: str) -> bool:CODE
LOW⚡scripts/cdp_publish.py366 def _should_preserve_upload_path(self, file_path: str) -> bool:CODE
LOW⚡scripts/cdp_publish.py1170 def _prepare_search_input_keyword(self, keyword: str) -> dict[str, Any]:CODE
LOWscripts/cdp_publish.py193def _build_search_filters_from_args(args) -> SearchFilters | None:CODE
LOWscripts/cdp_publish.py215def validate_schedule_post_time(dt_str: str | None) -> bool:CODE
LOWscripts/cdp_publish.py261def _map_note_infos_to_content_rows(note_infos: list[dict[str, Any]]) -> list[dict[str, Any]]:CODE
LOWscripts/cdp_publish.py640 def _build_content_data_result(CODE
LOWscripts/cdp_publish.py679 def _fetch_content_data_via_page_fetch(CODE
LOWscripts/cdp_publish.py896 def _home_login_prompt_visible(self, keyword: str) -> bool:CODE
LOWscripts/cdp_publish.py1334 def _capture_search_recommendations_via_network(CODE
LOWscripts/cdp_publish.py1518 def _extract_feed_comments_state(self) -> dict[str, Any]:CODE
LOWscripts/cdp_publish.py2219 def _activate_reply_target_for_comment(CODE
LOWscripts/cdp_publish.py2753 def _check_feed_page_accessible(self):CODE
LOWscripts/cdp_publish.py3355 def _find_content_editor_selector(self) -> str | None:CODE
LOWscripts/cdp_publish.py754 def _capture_content_data_from_page_request(STRING
LOWscripts/cdp_publish.py1256 def _extract_recommend_keywords_from_payload(STRING
LOWscripts/cdp_publish.py1638 def _scroll_feed_comments_area(STRING
LOWscripts/cdp_publish.py1695 def _click_more_reply_buttons(STRING
LOWscripts/cdp_publish.py1777 def _load_feed_detail_comments(STRING
LOWscripts/cdp_publish.py2080 def _extract_note_cards_from_profile_dom(self, limit: int) -> dict[str, Any]:STRING
LOWscripts/cdp_publish.py2499 def _inspect_note_toggle_state(STRING
LOWscripts/cdp_publish.py3006 def _schedule_click_notification_mentions_tab(self) -> str:STRING
LOWscripts/cdp_publish.py3080 def _fetch_notification_mentions_via_page(self) -> dict[str, Any] | None:STRING
LOWscripts/cdp_publish.py3144 def get_notification_mentions(self, wait_seconds: float = 18.0) -> dict[str, Any]:STRING
LOWscripts/cdp_publish.py3334 def _wait_for_uploaded_images(self, expected_count: int, timeout_seconds: float = 60.0):STRING
LOWscripts/cdp_publish.py3473 def _wait_for_publish_button_ready(self, timeout_seconds: float = VIDEO_PROCESS_TIMEOUT):STRING
LOWscripts/feed_explorer.py196 def _wait_for_home_feeds_state(self):CODE
LOWscripts/feed_explorer.py356 def _apply_filters_in_single_panel(self, option_values: list[str]) -> tuple[bool, str]:CODE
LOWscripts/feed_explorer.py403 def _try_apply_filter_via_hover_mouse(self, filter_value: str) -> tuple[bool, str]:CODE
LOWscripts/feed_explorer.py450 def _apply_single_filter_js_fallback(self, filter_value: str) -> dict[str, Any]:CODE
LOWscripts/feed_explorer.py321 def _open_filter_panel_via_hover_mouse(self) -> tuple[bool, str]:STRING
LOWscripts/publish_pipeline.py130def _extract_topic_tags_from_last_line(content: str) -> tuple[str, list[str]]:CODE
LOWscripts/publish_pipeline.py159def _verify_local_files_exist(CODE
Deep Nesting9 hits · 6 pts
SeverityFileLineSnippetContext
LOWscripts/chrome_launcher.py182CODE
LOWscripts/account_manager.py223CODE
LOWscripts/cdp_publish.py4130CODE
LOWscripts/cdp_publish.py490CODE
LOWscripts/cdp_publish.py1256CODE
LOWscripts/cdp_publish.py1777CODE
LOWscripts/feed_explorer.py356CODE
LOWscripts/feed_explorer.py699CODE
LOWscripts/publish_pipeline.py307CODE
Verbosity Indicators11 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡scripts/cdp_publish.py4054 # Step 1: Navigate to publish pageSTRING
LOW⚡scripts/cdp_publish.py4058 # Step 2: Click '上传图文' tabSTRING
LOW⚡scripts/cdp_publish.py4061 # Step 3: Upload images (editor appears after upload)STRING
LOW⚡scripts/cdp_publish.py4064 # Step 4: Fill titleSTRING
LOW⚡scripts/cdp_publish.py4067 # Step 5: Fill contentSTRING
LOW⚡scripts/cdp_publish.py4070 # Step 6: Set schedule publish time (if provided)STRING
LOW⚡scripts/cdp_publish.py4103 # Step 1: Navigate to publish pageSTRING
LOW⚡scripts/cdp_publish.py4107 # Step 2: Click '上传视频' tabSTRING
LOW⚡scripts/cdp_publish.py4110 # Step 3: Upload video and wait for processingSTRING
LOW⚡scripts/cdp_publish.py4114 # Step 4: Fill titleSTRING
LOW⚡scripts/cdp_publish.py4117 # Step 5: Fill contentSTRING
Structural Annotation Overuse11 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡scripts/cdp_publish.py4054 # Step 1: Navigate to publish pageSTRING
LOW⚡scripts/cdp_publish.py4058 # Step 2: Click '上传图文' tabSTRING
LOW⚡scripts/cdp_publish.py4061 # Step 3: Upload images (editor appears after upload)STRING
LOW⚡scripts/cdp_publish.py4064 # Step 4: Fill titleSTRING
LOW⚡scripts/cdp_publish.py4067 # Step 5: Fill contentSTRING
LOW⚡scripts/cdp_publish.py4070 # Step 6: Set schedule publish time (if provided)STRING
LOW⚡scripts/cdp_publish.py4103 # Step 1: Navigate to publish pageSTRING
LOW⚡scripts/cdp_publish.py4107 # Step 2: Click '上传视频' tabSTRING
LOW⚡scripts/cdp_publish.py4110 # Step 3: Upload video and wait for processingSTRING
LOW⚡scripts/cdp_publish.py4114 # Step 4: Fill titleSTRING
LOW⚡scripts/cdp_publish.py4117 # Step 5: Fill contentSTRING
Unused Imports3 hits · 2 pts
SeverityFileLineSnippetContext
LOWscripts/generate_star_history.py4CODE
LOWscripts/run_lock.py3CODE
LOWscripts/feed_explorer.py8CODE
Self-Referential Comments1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMscripts/cdp_publish.py548 # Create a new tabCOMMENT
Redundant / Tautological Comments1 hit · 1 pts
SeverityFileLineSnippetContext
LOWscripts/cdp_publish.py879 # Check if we got redirected to a login pageCOMMENT