AI Slop Code RIsk Monitor

TideDra/zotero-arxiv-daily

Recommend new arxiv papers of your interest daily according to your Zotero libarary.

68.8 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for TideDra/zotero-arxiv-daily, a Python project with 6,030 GitHub stars. SynthScan examined 4,333 lines of code across 52 source files, recording 158 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 68.8 (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.

68.8
Adjusted Signal
68.8
Raw Pattern Score
100%
Time Factor
2026-10-01
Last Push
6.0K
Stars
Python
Language
4.3K
Lines of Code
52
Files
158
Pattern Hits
2026-10-12
Scan Date
0.06
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 79.4/100 · CRITICAL

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

Hallucinated Dependency & Supply Chain Risk 23.3/100 · LOW

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

Agent Over-Engineering Ratio 93.7/100 · CRITICAL

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

PR Review Velocity Impact 95.1/100 · CRITICAL

Which changes need focused human review? 158 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 3MEDIUM 44LOW 111

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 158 distinct pattern matches across 8 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.

Decorative Section Separators34 hits · 123 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_utils.py13# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils.py15# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils.py119# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils.py121# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils.py189# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils.py191# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_protocol.py17# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_protocol.py19# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_protocol.py88# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_protocol.py90# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py9# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py11# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py73# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py75# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py134# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py136# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py169# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py171# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py203# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py205# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py241# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/canned_responses.py243# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_executor.py12# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_executor.py14# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_executor.py48# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_executor.py50# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_executor.py102# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_executor.py104# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_executor.py146# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_executor.py148# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/retriever/test_base_retriever.py13# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/retriever/test_base_retriever.py15# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/retriever/test_base_retriever.py73# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/retriever/test_base_retriever.py75# ---------------------------------------------------------------------------COMMENT
Hyper-Verbose Identifiers84 hits · 102 pts
SeverityFileLineSnippetContext
LOWtests/test_utils.py40 def test_wildcard_question_mark(self):CODE
LOWtests/test_utils.py92 def test_special_glob_characters(self):CODE
LOW⚡tests/test_utils.py124def test_send_email_starttls_success(config, monkeypatch):CODE
LOWtests/test_utils.py136def test_send_email_falls_back_to_ssl(config, monkeypatch):CODE
LOWtests/test_utils.py157def test_send_email_falls_back_to_plain(config, monkeypatch):CODE
LOW⚡tests/test_utils.py213def test_extract_tex_single_file(make_tar):CODE
LOW⚡tests/test_utils.py220def test_extract_tex_with_input_resolution(make_tar):CODE
LOW⚡tests/test_utils.py230def test_extract_tex_no_tex_files(make_tar):CODE
LOW⚡tests/test_utils.py236def test_extract_tex_not_a_tar(tmp_path):CODE
LOW⚡tests/test_utils.py243def test_extract_tex_multiple_tex_no_bbl(make_tar):CODE
LOWtests/test_utils.py264def test_extract_tex_multiple_document_blocks_no_title(make_tar):CODE
LOWtests/test_utils.py287 def test_empty_query_returns_first(self):CODE
LOW⚡tests/test_protocol.py23def test_tldr_returns_response(llm_params, api_mode):CODE
LOW⚡tests/test_protocol.py32def test_tldr_without_abstract_or_fulltext(llm_params):CODE
LOW⚡tests/test_protocol.py39def test_tldr_falls_back_to_abstract_on_error(llm_params):CODE
LOWtests/test_protocol.py54def test_tldr_truncates_long_prompt(llm_params):CODE
LOWtests/test_protocol.py61def test_response_mode_maps_max_tokens(llm_params):CODE
LOW⚡tests/test_protocol.py81def test_invalid_api_mode_falls_back_to_abstract(llm_params):CODE
LOW⚡tests/test_protocol.py94def test_affiliations_returns_parsed_list(llm_params, api_mode):CODE
LOW⚡tests/test_protocol.py104def test_affiliations_none_without_fulltext(llm_params):CODE
LOW⚡tests/test_protocol.py111def test_affiliations_deduplicates(llm_params):CODE
LOW⚡tests/test_protocol.py121def test_affiliations_malformed_llm_output(llm_params):CODE
LOWtests/test_protocol.py145def test_affiliations_error_returns_none(llm_params):CODE
LOW⚡tests/test_construct_email.py7def test_render_email_with_papers():CODE
LOW⚡tests/test_construct_email.py15def test_render_email_empty_list():CODE
LOW⚡tests/test_construct_email.py20def test_render_email_author_truncation():CODE
LOWtests/test_construct_email.py34def test_render_email_affiliation_truncation():CODE
LOWtests/test_construct_email.py44def test_render_email_no_affiliations():CODE
LOWtests/test_construct_email.py55def test_get_stars_high_score():CODE
LOWtests/test_construct_email.py66def test_get_block_html_contains_all_fields():CODE
LOW⚡tests/test_executor.py17def test_normalize_path_patterns_rejects_single_string_for_include_path():CODE
LOW⚡tests/test_executor.py22def test_normalize_path_patterns_accepts_list_config_for_include_path():CODE
LOW⚡tests/test_executor.py30def test_normalize_path_patterns_rejects_single_string_for_ignore_path():CODE
LOW⚡tests/test_executor.py35def test_normalize_path_patterns_accepts_list_config_for_ignore_path():CODE
LOW⚡tests/test_executor.py40def test_normalize_path_patterns_accepts_empty_list():CODE
LOW⚡tests/test_executor.py44def test_normalize_path_patterns_accepts_none():CODE
LOW⚡tests/test_executor.py60def test_filter_corpus_matches_any_path_against_any_pattern():CODE
LOW⚡tests/test_executor.py82def test_filter_corpus_ignore_path_takes_precedence_over_include_path():CODE
LOW⚡tests/test_executor.py92def test_filter_corpus_no_filters_returns_all():CODE
LOWtests/test_executor.py71def test_filter_corpus_excludes_papers_matching_ignore_path():CODE
LOWtests/test_executor.py122def test_fetch_zotero_corpus_paper_with_zero_collections(config, monkeypatch):CODE
LOWtests/test_executor.py212def test_run_no_papers_send_empty_false(config, monkeypatch):CODE
LOWtests/test_executor.py248def test_run_no_papers_send_empty_true(config, monkeypatch):CODE
LOWtests/test_main.py20def test_main_creates_executor_and_runs(config, monkeypatch):CODE
LOWtests/reranker/test_api_reranker.py6def test_api_reranker_similarity_shape(config, patch_openai):CODE
LOWtests/reranker/test_api_reranker.py12def test_api_reranker_batching(config, patch_openai):CODE
LOWtests/reranker/test_base_reranker.py21def test_rerank_scores_and_sorts():CODE
LOWtests/reranker/test_base_reranker.py37def test_rerank_time_decay_weighting():CODE
LOWtests/reranker/test_base_reranker.py58def test_rerank_single_candidate_single_corpus():CODE
LOWtests/reranker/test_base_reranker.py68def test_get_reranker_cls_unknown():CODE
LOWtests/retriever/test_medrxiv_retriever.py8def test_medrxiv_server_attribute(config):CODE
LOW⚡tests/retriever/test_arxiv_retriever.py66def test_run_with_hard_timeout_returns_value():CODE
LOW⚡tests/retriever/test_arxiv_retriever.py73def test_run_with_hard_timeout_returns_none_on_timeout(monkeypatch):CODE
LOW⚡tests/retriever/test_arxiv_retriever.py83def test_run_with_hard_timeout_returns_none_on_failure(monkeypatch):CODE
LOWtests/retriever/test_arxiv_retriever.py153def test_entry_to_arxiv_result():CODE
LOWtests/retriever/test_arxiv_retriever.py214def test_retrieve_raw_papers_cross_list(config, mock_feedparser, monkeypatch):CODE
LOWtests/retriever/test_arxiv_retriever.py226def test_retrieve_raw_papers_debug_mode(config, mock_feedparser, monkeypatch):CODE
LOWtests/retriever/test_arxiv_retriever.py234def test_retrieve_raw_papers_retries_on_http_failure(config, mock_feedparser, monkeypatch):CODE
LOWtests/retriever/test_biorxiv_retriever.py21def test_biorxiv_empty_response(config, monkeypatch):CODE
LOWtests/retriever/test_biorxiv_retriever.py42def test_biorxiv_orders_unpadded_dates_chronologically(config, monkeypatch):CODE
24 more matches not shown…
Modern AI Meta-Vocabulary10 hits · 33 pts
SeverityFileLineSnippetContext
MEDIUM⚡README.md148 model: jinaai/jina-embeddings-v5-text-nano # The Hugging Face model name of the local embedding model. Example: jinaCODE
MEDIUM⚡README.md150 # The kwargs for the encode method of the local embedding model. Details see [here](https://www.sbert.net/docs/packaCOMMENT
MEDIUM⚡README.md154 key: null # API Key of your embedding model API. Example: sk-xxxCODE
MEDIUM⚡README.md155 base_url: null # API URL of your embedding model API. Example: https://api.openai.com/v1CODE
MEDIUM⚡README.md156 model: null # The model name of the embedding model. Example: text-embedding-3-largeCODE
MEDIUM⚡config/base.yaml38 model: jinaai/jina-embeddings-v5-text-nano-retrieval # The Hugging Face model name of the local embedding model. ExaCODE
MEDIUM⚡config/base.yaml40 # The kwargs for the encode method of the local embedding model. Details see [here](https://www.sbert.net/docs/packaCOMMENT
MEDIUM⚡config/base.yaml44 key: null # API Key of your embedding model API. Example: sk-xxxCODE
MEDIUM⚡config/base.yaml45 base_url: null # API URL of your embedding model API. Example: https://api.openai.com/v1CODE
MEDIUM⚡config/base.yaml46 model: null # The model name of the embedding model. Example: text-embedding-3-largeCODE
Unused Imports15 hits · 13 pts
SeverityFileLineSnippetContext
LOWtests/test_executor.py157CODE
LOWtests/test_executor.py185CODE
LOWtests/test_executor.py232CODE
LOWtests/test_executor.py268CODE
LOWtests/retriever/test_base_retriever.py4CODE
LOWsrc/zotero_arxiv_daily/reranker/__init__.py1CODE
LOWsrc/zotero_arxiv_daily/reranker/__init__.py2CODE
LOWsrc/zotero_arxiv_daily/reranker/__init__.py2CODE
LOWsrc/zotero_arxiv_daily/retriever/__init__.py1CODE
LOWsrc/zotero_arxiv_daily/retriever/__init__.py2CODE
LOWsrc/zotero_arxiv_daily/retriever/__init__.py2CODE
LOWsrc/zotero_arxiv_daily/retriever/__init__.py2CODE
LOWsrc/zotero_arxiv_daily/retriever/__init__.py2CODE
LOWsrc/zotero_arxiv_daily/retriever/arxiv_retriever.py13CODE
LOWsrc/zotero_arxiv_daily/retriever/arxiv_retriever.py19CODE
Excessive Try-Catch Wrapping10 hits · 10 pts
SeverityFileLineSnippetContext
LOWsrc/zotero_arxiv_daily/protocol.py92 except Exception as e:CODE
LOWsrc/zotero_arxiv_daily/protocol.py130 except Exception as e:CODE
LOWsrc/zotero_arxiv_daily/utils.py161 except Exception as e:CODE
LOWsrc/zotero_arxiv_daily/utils.py165 except Exception as e:CODE
LOWsrc/zotero_arxiv_daily/retriever/arxiv_retriever.py53 except Exception as exc:CODE
LOWsrc/zotero_arxiv_daily/retriever/arxiv_retriever.py146 except Exception:CODE
LOWsrc/zotero_arxiv_daily/retriever/arxiv_retriever.py305 except Exception as exc:CODE
LOWsrc/zotero_arxiv_daily/retriever/biorxiv_retriever.py28 except Exception as e:CODE
LOWsrc/zotero_arxiv_daily/retriever/chemrxiv_retriever.py56 except Exception as exc:CODE
LOWsrc/zotero_arxiv_daily/retriever/base.py31 except Exception as exc:CODE
Cross-Language Confusion2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHsrc/zotero_arxiv_daily/executor.py22 f"config.zotero.{config_key} must be a list of glob patterns or null, "CODE
HIGHsrc/zotero_arxiv_daily/executor.py47 corpus = zot.everything(zot.items(itemType='conferencePaper || journalArticle || preprint'))CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHsrc/zotero_arxiv_daily/retriever/arxiv_retriever.py146except Exception:CODE
Deep Nesting2 hits · 2 pts
SeverityFileLineSnippetContext
LOWsrc/zotero_arxiv_daily/utils.py56CODE
LOWsrc/zotero_arxiv_daily/retriever/arxiv_retriever.py37CODE