符合nature论文学术表达和科研绘图的Skill
This report presents the forensic synthetic code analysis of Yuan1z0825/nature-skills, a Python project with 28,552 GitHub stars. SynthScan v2.0 examined 46,277 lines of code across 433 source files, recording 288 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 10.7 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 288 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | …e-academic-search/mcp-server/academic_search_server.py | 645 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …e-academic-search/mcp-server/academic_search_server.py | 647 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …e-academic-search/mcp-server/academic_search_server.py | 36 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …e-academic-search/mcp-server/academic_search_server.py | 38 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …e-academic-search/mcp-server/academic_search_server.py | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …e-academic-search/mcp-server/academic_search_server.py | 85 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …e-academic-search/mcp-server/academic_search_server.py | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …e-academic-search/mcp-server/academic_search_server.py | 161 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 44 | # =================================================================== | COMMENT |
| MEDIUM⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 46 | # =================================================================== | COMMENT |
| MEDIUM⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 221 | # =================================================================== | COMMENT |
| MEDIUM⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 223 | # =================================================================== | COMMENT |
| MEDIUM⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 671 | # =================================================================== | COMMENT |
| MEDIUM⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 673 | # =================================================================== | COMMENT |
| MEDIUM | …ature-academic-search/mcp-server/tests/test_sources.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ature-academic-search/mcp-server/tests/test_sources.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ature-academic-search/mcp-server/tests/test_sources.py | 464 | # =================================================================== | COMMENT |
| MEDIUM | …ature-academic-search/mcp-server/tests/test_sources.py | 466 | # =================================================================== | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 34 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 36 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 114 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 116 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 164 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 166 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 216 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 218 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 294 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 296 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 319 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/mcp-server/sources/arxiv.py | 321 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …/nature-academic-search/mcp-server/sources/crossref.py | 26 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …/nature-academic-search/mcp-server/sources/crossref.py | 28 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …/nature-academic-search/mcp-server/sources/crossref.py | 109 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …/nature-academic-search/mcp-server/sources/crossref.py | 111 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …/nature-academic-search/mcp-server/sources/crossref.py | 137 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …/nature-academic-search/mcp-server/sources/crossref.py | 139 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | …lls/nature-academic-search/scripts/format-converter.py | 48 | # ── PubMed ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …lls/nature-academic-search/scripts/format-converter.py | 121 | # ── CrossRef ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …lls/nature-academic-search/scripts/format-converter.py | 159 | # ── arXiv ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …lls/nature-academic-search/scripts/format-converter.py | 197 | # ── Input parsing ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …lls/nature-academic-search/scripts/format-converter.py | 295 | # ── Main ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 66 | # ── MEDLINE -> RIS ────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 126 | # ── MEDLINE -> BibTeX ──────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 177 | # ── CrossRef JSON -> RIS ───────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 238 | # ── CrossRef JSON -> BibTeX ────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 297 | # ── arXiv XML -> RIS ───────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 352 | # ── arXiv XML -> BibTeX ────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 410 | # ── MEDLINE -> ENW ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 454 | # ── CrossRef JSON -> ENW ────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 505 | # ── arXiv XML -> ENW ────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-academic-search/scripts/converters.py | 556 | # ── Format dispatch ───────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-figure/references/api.md | 135 | # ── MANDATORY: editable SVG text ────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-figure/references/api.md | 139 | # ── Layout & style ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/nature-figure/references/design-theory.md | 337 | # ── PRIMARY ── editable vector, text as <text> nodes ───────────────────────── | COMMENT |
| MEDIUM | skills/nature-figure/references/design-theory.md | 340 | # ── SECONDARY ── raster for quick preview / submission portals ──────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …aper-to-patent/scripts/disclosure/cnipa_epub_search.py | 20 | 需已安装:pip install -r scripts/disclosure/requirements-cnipa.txt && python -m playwright install chromium | STRING |
| HIGH | …aper-to-patent/scripts/disclosure/cnipa_epub_search.py | 110 | "ERROR: pip install -r scripts/disclosure/requirements-cnipa.txt && python -m playwright install chromium", | CODE |
| HIGH | skills/nature-citation/scripts/nature_citation.py | 1720 | let currentDownloadUrl = null; | CODE |
| HIGH | skills/nature-citation/scripts/nature_citation.py | 1748 | currentDownloadUrl = null; | CODE |
| HIGH | skills/nature-citation/scripts/nature_citation.py | 1774 | articles.push(item.zotero_rdf_article); | CODE |
| HIGH | skills/nature-citation/scripts/nature_citation.py | 1776 | if (item.journal_resource && item.zotero_rdf_journal && !journals.has(item.journal_resource)) {{ | CODE |
| HIGH⚡ | skills/nature-citation/scripts/nature_citation.py | 1838 | const fromYear = Number(yearFromInput.value || 0); | CODE |
| HIGH⚡ | skills/nature-citation/scripts/nature_citation.py | 1839 | const toYear = Number(yearToInput.value || 0); | CODE |
| HIGH⚡ | skills/nature-citation/scripts/nature_citation.py | 1840 | const y = Number(year || 0); | CODE |
| HIGH⚡ | skills/nature-citation/scripts/nature_citation.py | 1841 | if (fromYear && (!y || y < fromYear)) return false; | CODE |
| HIGH⚡ | skills/nature-citation/scripts/nature_citation.py | 1842 | if (toYear && (!y || y > toYear)) return false; | CODE |
| HIGH | skills/nature-citation/scripts/nature_citation.py | 1865 | const matches = yearPass(year) && queryPass(searchText) && (!selectedOnlyInput.checked || selectedMap.has(key) | CODE |
| HIGH | skills/nature-citation/scripts/nature_citation.py | 1871 | const matches = !selectedOnlyInput.checked && queryPass(card.dataset.segment || ''); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/nature-paper-to-patent/tests/test_validation.py | 142 | def test_unmapped_claim_fails(self): | CODE |
| LOW | skills/nature-paper-to-patent/tests/test_validation.py | 148 | def test_missing_core_equation_fails(self): | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 58 | def _parse_hidden_image_comment(line: str) -> tuple[str, str] | None: | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 65 | def _try_embed_hidden_comment_line( | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 141 | def _fit_image_display_inches( | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 332 | def _add_rich_content_to_paragraph( | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 667 | def _line_has_embeddable_images(line: str) -> bool: | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 676 | def _add_paragraph_with_inline_images( | CODE |
| LOW | …paper-to-patent/scripts/disclosure/cnipa_epub_parse.py | 39 | def _extract_abstract_from_item_html(item_html: str) -> str | None: | CODE |
| LOW | …paper-to-patent/scripts/disclosure/cnipa_epub_parse.py | 118 | def _parse_overview_card_layout(html: str) -> list[EpubSearchHit]: | CODE |
| LOW | …paper-to-patent/scripts/disclosure/cnipa_epub_parse.py | 195 | def _parse_search_result_fallback_links(html: str) -> list[EpubSearchHit]: | CODE |
| LOW | …e-paper-to-patent/scripts/disclosure/mermaid_render.py | 159 | def _is_mermaid_figure_comment(alt: str, src: str) -> bool: | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/docx_to_md.py | 33 | def _extension_for_content_type(content_type: str) -> str: | CODE |
| LOW⚡ | …per-to-patent/scripts/disclosure/cnipa_epub_crawler.py | 100 | def _wait_result_page_settled(page: Page) -> None: | CODE |
| LOW | …per-to-patent/scripts/disclosure/cnipa_epub_crawler.py | 180 | def search_epub_keyword_with_page( | CODE |
| LOW | …ture-paper-to-patent/scripts/disclosure/math_render.py | 52 | def normalize_latex_for_mathtext(body: str) -> str: | STRING |
| LOW | skills/nature-citation/scripts/nature_citation.py | 411 | def build_zotero_citation_key(item: Candidate) -> str: | CODE |
| LOW | skills/nature-citation/scripts/nature_citation.py | 537 | def fallback_queries_from_segment(text: str) -> list[str]: | CODE |
| LOW | skills/nature-citation/scripts/nature_citation.py | 813 | def build_zotero_rdf_document(candidates: list[Candidate]) -> str: | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 17 | def test_start_asks_for_library_resource_url_first(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 32 | def test_infer_whu_metaersp_portal_from_resource_url(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 48 | def test_infer_cas_login_service_callback_from_resource_url(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 66 | def test_resource_url_flow_can_save_schema_valid_config(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 92 | def test_preset_configuration_uses_temp_config_dir(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 119 | def test_sjtu_preset_does_not_use_parameterless_oauth_login(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 132 | def test_cli_show_reports_missing_config(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 147 | def test_cli_url_configures_from_resource_entry(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 165 | def test_cli_infer_does_not_save_config(self): | CODE |
| LOW | …s/nature-downloader/tests/python/test_config_wizard.py | 183 | def test_cli_cnki_url_updates_existing_config(self): | CODE |
| LOW | skills/nature-downloader/src/schools_loader.py | 42 | def _load_schools_without_yaml(text: str) -> list[dict[str, Any]]: | CODE |
| LOW | skills/nature-downloader/src/wizard.py | 521 | def configure_from_resource_url(self, resource_url: str) -> dict[str, Any]: | CODE |
| LOW⚡ | …e-academic-search/mcp-server/academic_search_server.py | 320 | def search_scopus_affiliations(query: str, rows: int = 5) -> str: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 263 | def get_scopus_citation_overview( | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 346 | def search_scopus_serial_titles( | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 437 | def get_sciencedirect_article_metadata( | CODE |
| LOW | …ure-academic-search/mcp-server/tests/test_mcp_tools.py | 16 | def test_search_papers_mcp_dispatch_uses_default_sources(monkeypatch): | CODE |
| LOW | …ure-academic-search/mcp-server/tests/test_mcp_tools.py | 50 | def test_search_papers_mcp_dispatch_accepts_elsevier_sources(monkeypatch): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 54 | def test_search_returns_unified_format(self, mock_get, mock_config): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 231 | def test_search_esearch_efetch_flow(self, mock_get, mock_config): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 641 | def test_normalize_id_strips_url_prefix_and_version(self): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 651 | def test_build_date_filter_syntax(self): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 657 | def test_build_date_filter_only_from(self): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 665 | def test_build_date_filter_empty(self): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 699 | def test_detect_doi_with_whitespace(self): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 704 | def test_detect_unknown_raises(self): | CODE |
| LOW⚡ | …ature-academic-search/mcp-server/tests/test_sources.py | 710 | def test_detect_short_number_raises(self): | CODE |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 101 | def test_search_with_type_filter(self, mock_get, mock_config): | CODE |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 382 | def test_search_empty_query_raises(self, mock_config): | CODE |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 393 | def test_search_no_email_raises(self, mock_config): | CODE |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 407 | def test_search_multiple_articles(self, mock_get, mock_config): | CODE |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 518 | def test_search_returns_unified_format(self, mock_request, mock_config): | CODE |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 556 | def test_search_with_date_filter(self, mock_request, mock_config): | CODE |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 577 | def test_search_with_categories(self, mock_request, mock_config): | CODE |
| LOW⚡ | …academic-search/mcp-server/tests/test_elsevier_live.py | 35 | def test_scopus_live_search_exact_doi(): | CODE |
| LOW⚡ | …academic-search/mcp-server/tests/test_elsevier_live.py | 44 | def test_sciencedirect_live_search_title_query(): | CODE |
| LOW⚡ | …academic-search/mcp-server/tests/test_elsevier_live.py | 53 | def test_sciencedirect_live_article_metadata_doi_query(): | CODE |
| LOW | …academic-search/mcp-server/tests/test_elsevier_live.py | 65 | def test_default_search_papers_uses_free_sources_only(): | CODE |
| LOW | …academic-search/mcp-server/tests/test_elsevier_live.py | 76 | def test_explicit_search_papers_includes_elsevier_sources(): | CODE |
| LOW | …ls/nature-academic-search/mcp-server/sources/scopus.py | 401 | def _normalize_affiliation_entry(data: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | …ls/nature-academic-search/mcp-server/sources/scopus.py | 443 | def _normalize_citation_overview(overview: Any) -> dict[str, Any]: | CODE |
| 2 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/generate-star-history.py | 4 | CODE | |
| LOW | skills/nature-paper-to-patent/tests/test_validation.py | 2 | CODE | |
| LOW | skills/nature-paper-to-patent/tests/test_validation.py | 4 | CODE | |
| LOW | …nature-paper-to-patent/scripts/render_flowchart_svg.py | 366 | CODE | |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 22 | CODE | |
| LOW | …paper-to-patent/scripts/disclosure/cnipa_epub_parse.py | 7 | CODE | |
| LOW | …r-to-patent/scripts/disclosure/iteration_dialog_log.py | 5 | CODE | |
| LOW | …e-paper-to-patent/scripts/disclosure/mermaid_render.py | 27 | CODE | |
| LOW | …ature-paper-to-patent/scripts/disclosure/docx_to_md.py | 14 | CODE | |
| LOW | …ature-paper-to-patent/scripts/disclosure/pptx_to_md.py | 14 | CODE | |
| LOW | …aper-to-patent/scripts/disclosure/cnipa_epub_search.py | 35 | CODE | |
| LOW | …aper-to-patent/scripts/disclosure/cnipa_epub_search.py | 107 | CODE | |
| LOW | …per-to-patent/scripts/disclosure/cnipa_epub_crawler.py | 41 | CODE | |
| LOW | …ture-paper-to-patent/scripts/disclosure/math_render.py | 18 | CODE | |
| LOW | skills/nature-paper2ppt/scripts/audit_pptx_quality.py | 9 | CODE | |
| LOW | skills/nature-paper2ppt/scripts/audit_pptx_quality.py | 14 | CODE | |
| LOW | skills/nature-citation/scripts/nature_citation.py | 9 | CODE | |
| LOW | skills/nature-downloader/scripts/configure_school.py | 4 | CODE | |
| LOW | skills/nature-downloader/scripts/configure_school.py | 16 | CODE | |
| LOW | skills/nature-downloader/src/config.py | 7 | CODE | |
| LOW | skills/nature-downloader/src/validators.py | 11 | CODE | |
| LOW | skills/nature-downloader/src/schools_loader.py | 3 | CODE | |
| LOW | skills/nature-downloader/src/wizard.py | 20 | CODE | |
| LOW | skills/nature-downloader/src/wizard.py | 26 | CODE | |
| LOW | skills/nature-downloader/src/wizard.py | 27 | CODE | |
| LOW | skills/nature-downloader/src/health_check.py | 7 | CODE | |
| LOW | skills/nature-downloader/src/health_check.py | 11 | CODE | |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 7 | CODE | |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 23 | CODE | |
| LOW | …ure-academic-search/mcp-server/tests/test_mcp_tools.py | 3 | CODE | |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 6 | CODE | |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 9 | CODE | |
| LOW | …ature-academic-search/mcp-server/tests/test_sources.py | 10 | CODE | |
| LOW | …academic-search/mcp-server/tests/test_elsevier_live.py | 7 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/utils/__init__.py | 3 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/utils/__init__.py | 3 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/utils/__init__.py | 4 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/utils/__init__.py | 4 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/utils/__init__.py | 4 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/utils/__init__.py | 4 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/utils/__init__.py | 5 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/sources/pubmed.py | 3 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/sources/scopus.py | 3 | CODE | |
| LOW | …-academic-search/mcp-server/sources/elsevier_common.py | 3 | CODE | |
| LOW | …/nature-academic-search/mcp-server/sources/__init__.py | 3 | CODE | |
| LOW | …/nature-academic-search/mcp-server/sources/__init__.py | 4 | CODE | |
| LOW | …/nature-academic-search/mcp-server/sources/__init__.py | 5 | CODE | |
| LOW | …/nature-academic-search/mcp-server/sources/__init__.py | 6 | CODE | |
| LOW | …/nature-academic-search/mcp-server/sources/__init__.py | 7 | CODE | |
| LOW | …re-academic-search/mcp-server/sources/sciencedirect.py | 3 | CODE | |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 27 | CODE | |
| LOW | skills/nature-figure/scripts/nature_figure_backend.py | 4 | CODE | |
| LOW | skills/nature-figure/scripts/nature_figure_backend.py | 9 | CODE | |
| LOW | …nature-figure/scripts/generate_openrouter_schematic.py | 4 | CODE | |
| LOW | …nature-figure/scripts/generate_openrouter_schematic.py | 11 | CODE | |
| LOW | …re/assets/figures4papers/figure_VIGIL/plot_ablation.py | 4 | CODE | |
| LOW | …ssets/figures4papers/figure_VIGIL/plot_posttraining.py | 4 | CODE | |
| LOW | …s/figures4papers/figure_CellSpliceNet/plot_ablation.py | 4 | CODE | |
| LOW | …assets/figures4papers/figure_RNAGenScape/plot_sweep.py | 2 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/generate-star-history.py | 137 | except Exception: | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 303 | except Exception: | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 328 | except Exception: | CODE |
| LOW | …e-paper-to-patent/scripts/disclosure/mermaid_render.py | 238 | except Exception as e: | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/docx_to_md.py | 74 | except Exception as e: | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/pptx_to_md.py | 86 | except Exception as e: | CODE |
| LOW | …ature-paper-to-patent/scripts/disclosure/pptx_to_md.py | 111 | except Exception as e: | CODE |
| MEDIUM | …ature-paper-to-patent/scripts/disclosure/pptx_to_md.py | 21 | def _require_pptx(): | CODE |
| LOW | …aper-to-patent/scripts/disclosure/cnipa_epub_search.py | 127 | except Exception as e: | CODE |
| LOW⚡ | …per-to-patent/scripts/disclosure/cnipa_epub_crawler.py | 103 | except Exception: | CODE |
| LOW⚡ | …per-to-patent/scripts/disclosure/cnipa_epub_crawler.py | 107 | except Exception: | CODE |
| LOW | …per-to-patent/scripts/disclosure/cnipa_epub_crawler.py | 124 | except Exception: | CODE |
| LOW | …per-to-patent/scripts/disclosure/cnipa_epub_crawler.py | 233 | except Exception as e: | CODE |
| LOW | …ture-paper-to-patent/scripts/disclosure/math_render.py | 123 | except Exception as e: | CODE |
| LOW | skills/nature-citation/scripts/nature_citation.py | 346 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | skills/nature-citation/scripts/nature_citation.py | 653 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | skills/nature-citation/scripts/nature_citation.py | 911 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | skills/nature-citation/scripts/nature_citation.py | 1031 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | skills/nature-downloader/scripts/extract_pdf_text.py | 15 | except Exception: | CODE |
| LOW | skills/nature-downloader/scripts/extract_pdf_text.py | 61 | except Exception: | CODE |
| LOW | skills/nature-downloader/src/validators.py | 100 | except Exception as e: | CODE |
| LOW | skills/nature-downloader/src/validators.py | 138 | except Exception as e: | CODE |
| LOW⚡ | …e-academic-search/mcp-server/academic_search_server.py | 314 | except Exception as exc: | CODE |
| LOW⚡ | …e-academic-search/mcp-server/academic_search_server.py | 327 | except Exception as exc: | CODE |
| LOW⚡ | …e-academic-search/mcp-server/academic_search_server.py | 638 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 207 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 234 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 257 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 288 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 301 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 340 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 384 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 401 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 414 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 431 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 449 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 494 | except Exception as exc: | CODE |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 551 | except Exception as exc: | CODE |
| LOW | …ls/nature-academic-search/mcp-server/sources/scopus.py | 340 | except Exception as exc: | CODE |
| LOW | …re-academic-search/mcp-server/sources/sciencedirect.py | 94 | except Exception as exc: | CODE |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 61 | except Exception as e: | CODE |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 73 | except Exception as e: | CODE |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 137 | except Exception as e: | CODE |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 176 | except Exception as e: | CODE |
| MEDIUM | …lls/nature-academic-search/scripts/format-converter.py | 249 | print(f"Error: Input file not found: {input_file}") | CODE |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 306 | except Exception as e: | CODE |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 327 | except Exception as e: | CODE |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 347 | except Exception as e: | CODE |
| LOW | skills/nature-academic-search/scripts/preflight.py | 52 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/generate-star-history.py | 71 | CODE | |
| LOW | …s/nature-paper-to-patent/scripts/render_patent_docx.py | 249 | CODE | |
| LOW | …nature-paper-to-patent/scripts/render_flowchart_svg.py | 30 | CODE | |
| LOW | skills/nature-paper-to-patent/scripts/math_to_omml.py | 60 | CODE | |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 90 | CODE | |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 527 | CODE | |
| LOW | …ature-paper-to-patent/scripts/disclosure/md_to_docx.py | 700 | CODE | |
| LOW | …e-paper-to-patent/scripts/disclosure/mermaid_render.py | 167 | CODE | |
| LOW | …e-paper-to-patent/scripts/disclosure/mermaid_render.py | 341 | CODE | |
| LOW | …ature-paper-to-patent/scripts/disclosure/pptx_to_md.py | 65 | CODE | |
| LOW | …ture-paper-to-patent/scripts/disclosure/math_render.py | 166 | CODE | |
| LOW | skills/nature-downloader/src/validators.py | 19 | CODE | |
| LOW | skills/nature-downloader/src/wizard.py | 38 | CODE | |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 455 | CODE | |
| LOW | …ls/nature-academic-search/mcp-server/sources/pubmed.py | 67 | CODE | |
| LOW | …lls/nature-academic-search/scripts/format-converter.py | 224 | CODE | |
| LOW | …ills/nature-academic-search/scripts/academic_search.py | 210 | CODE | |
| LOW | …ills/nature-academic-search/scripts/academic_search.py | 304 | CODE | |
| LOW | skills/nature-academic-search/scripts/converters.py | 19 | CODE | |
| LOW | skills/nature-academic-search/scripts/preflight.py | 41 | CODE | |
| LOW | …nature-figure/scripts/generate_openrouter_schematic.py | 169 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/nature-ref-verifier/SKILL.md | 24 | ### Step 1: 解析输入 | COMMENT |
| LOW | skills/nature-ref-verifier/SKILL.md | 39 | ### Step 2: 多源并行查询 | COMMENT |
| LOW | skills/nature-ref-verifier/SKILL.md | 53 | ### Step 3: 字段级对比 | COMMENT |
| LOW | skills/nature-ref-verifier/SKILL.md | 84 | ### Step 4: 置信度评估 | COMMENT |
| LOW | skills/nature-ref-verifier/SKILL.md | 95 | ### Step 5: 输出报告 | COMMENT |
| LOW | …/nature-literature-pipeline/references/gap-analysis.md | 12 | ### Step 1: Multi-source search | COMMENT |
| LOW | …/nature-literature-pipeline/references/gap-analysis.md | 21 | ### Step 2: Decompose and classify | COMMENT |
| LOW | …/nature-literature-pipeline/references/gap-analysis.md | 37 | ### Step 3: Extract edge papers | COMMENT |
| LOW | …/nature-literature-pipeline/references/gap-analysis.md | 46 | ### Step 4: Output gap report | COMMENT |
| LOW | …ls/nature-academic-search/mcp-server/sources/pubmed.py | 192 | # Step 1: esearch to get WebEnv + query_key | COMMENT |
| LOW | …ls/nature-academic-search/mcp-server/sources/pubmed.py | 217 | # Step 2: efetch to get article details | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/nature-figure/references/figure-legend-conventions.md | 59 | ## Length & title limits (consistency with style-guardrails) | COMMENT |
| MEDIUM | skills/nature-figure/references/r-workflow.md | 31 | ## Contract scaffold | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ls/nature-academic-search/mcp-server/sources/pubmed.py | 240 | Fetch a single article by PMID. Args: pmid: PubMed ID (numeric string). Returns: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/nature-paper-to-patent/scripts/render_patent_docx.py | 18 | def set_run_font(run, name: str, size: float, bold: bool = False) -> None: | CODE |
| LOW | …ls/nature-academic-search/mcp-server/utils/__init__.py | 7 | __all__ = [ | CODE |
| LOW | …/nature-academic-search/mcp-server/sources/__init__.py | 9 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ls/nature-academic-search/mcp-server/sources/pubmed.py | 192 | # Step 1: esearch to get WebEnv + query_key | COMMENT |
| LOW | …ls/nature-academic-search/mcp-server/sources/pubmed.py | 217 | # Step 2: efetch to get article details | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/figures4papers/figure_Dispersion/plot_illustration.py | 46 | # normalize (robust against tiny numerical drift) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ets/figures4papers/figure_RNAGenScape/plot_manifold.py | 23 | # Define a multi-well "energy" function (inverted to form valleys) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ture-paper-to-patent/scripts/disclosure/math_render.py | 70 | CODE | |
| LOW | …e-academic-search/mcp-server/academic_search_server.py | 346 | CODE | |
| LOW | …/figures4papers/figure_Dispersion/plot_illustration.py | 65 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/update-codex-skills.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | skills/nature-downloader/data/schools.yaml | 1 | # 预设学校库 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/update-codex-skills.sh | 18 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/nature-academic-search/install.sh | 76 | # Check if academic-search already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …/nature-academic-search/mcp-server/sources/crossref.py | 20 | mailto = config.crossref_mailto or "user@example.com" | CODE |