AI Slop Code RIsk Monitor

jordan-gibbs/hyperresearch

Convert Claude Code or Codex into the most intelligent Deep Research Agent. Collect, search, and synthesize web research into a persistent, searchable wiki that builds on itself. Hosted API + MCP: hyperresearch.ai

45.5 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for jordan-gibbs/hyperresearch, a Python project with 3,831 GitHub stars. SynthScan examined 55,912 lines of code across 244 source files, recording 1667 pattern matches distributed across 20 syntactic categories. The legacy adjusted pattern signal is 45.5 (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.

45.5
Adjusted Signal
45.5
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
3.8K
Stars
Python
Language
55.9K
Lines of Code
244
Files
1.7K
Pattern Hits
2026-10-12
Scan Date
0.25
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 68.9/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 26.2/100 · MEDIUM

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

Agent Over-Engineering Ratio 83.3/100 · CRITICAL

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

PR Review Velocity Impact 88.9/100 · CRITICAL

Which changes need focused human review? 1667 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

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

No multi-scan history yet — run the scanner again to build trend data.

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 60MEDIUM 245LOW 1362

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

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

Hyper-Verbose Identifiers1027 hits · 1095 pts
SeverityFileLineSnippetContext
LOWtests/test_web/test_crawl4ai_stealth.py23def test_make_crawler_uses_undetected_adapter() -> None:CODE
LOWtests/test_web/test_crawl4ai_stealth.py32def test_browser_manager_marked_undetected() -> None:CODE
LOWtests/test_web/test_crawl4ai_stealth.py43def test_undetected_wiring_survives_profile_path() -> None:CODE
LOW⚡tests/test_web/test_builtin_fences.py52 def test_pre_becomes_fenced_block(self):CODE
LOW⚡tests/test_web/test_builtin_fences.py57 def test_inline_code_becomes_backtick_span(self):CODE
LOW⚡tests/test_web/test_builtin_fences.py61 def test_no_wiki_links_survive_the_note_strip(self):CODE
LOW⚡tests/test_web/test_builtin_fences.py67 def test_code_indentation_survives(self):CODE
LOW⚡tests/test_web/test_builtin_fences.py72 def test_fence_outgrows_backticks_inside_code(self):CODE
LOW⚡tests/test_web/test_builtin_fences.py78 def test_odd_backtick_fence_inside_pre_does_not_leak(self):CODE
LOW⚡tests/test_web/test_builtin_fences.py87 def test_inline_code_holding_double_backticks_does_not_leak(self):CODE
LOW⚡tests/test_web/test_builtin_fences.py93 def test_title_and_noise_removal_unchanged(self):CODE
LOWtests/test_web/test_builtin_fences.py143def test_fetch_html_lane_preserves_code(served):CODE
LOWtests/test_web/test_builtin_fences.py154def test_fetch_after_pdf_lane_decline_preserves_code_and_reason(served):CODE
LOW⚡tests/test_web/test_safe_http.py73def test_check_url_allows_public_ip_literals(url):CODE
LOW⚡tests/test_web/test_safe_http.py77def test_check_url_dns_resolved_private_rejected():CODE
LOW⚡tests/test_web/test_safe_http.py86def test_check_url_dns_resolved_mixed_any_private_rejected():CODE
LOW⚡tests/test_web/test_safe_http.py97def test_check_url_dns_failure_raises():CODE
LOW⚡tests/test_web/test_safe_http.py151def test_check_url_uppercase_http_scheme_is_normalized_then_ip_gated():CODE
LOW⚡tests/test_web/test_safe_http.py159def test_check_url_uppercase_disallowed_scheme_still_rejected():CODE
LOW⚡tests/test_web/test_safe_http.py171def test_safe_get_refuses_private_ip_without_network():CODE
LOW⚡tests/test_web/test_safe_http.py178def test_safe_get_refuses_file_scheme():CODE
LOW⚡tests/test_web/test_safe_http.py183def test_safe_get_requires_positive_max_bytes():CODE
LOW⚡tests/test_web/test_safe_http.py277def test_check_url_rejects_cgnat_range(url):CODE
LOW⚡tests/test_web/test_safe_http.py285def test_check_url_allows_cgnat_neighbors(url):CODE
LOW⚡tests/test_web/test_safe_http.py350def test_allowlist_cidr_admits_private_address():CODE
LOW⚡tests/test_web/test_safe_http.py356def test_allowlist_cidr_is_not_a_blanket_waiver():CODE
LOW⚡tests/test_web/test_safe_http.py364def test_allowlist_bare_ip_entry_admits_exactly_one_host():CODE
LOW⚡tests/test_web/test_safe_http.py370def test_allowlist_hostname_admits_by_name_case_insensitively():CODE
LOW⚡tests/test_web/test_safe_http.py376def test_allowlist_hostname_is_exact_not_a_suffix_match():CODE
LOW⚡tests/test_web/test_safe_http.py387def test_allowlist_does_not_bypass_the_scheme_gate():CODE
LOW⚡tests/test_web/test_safe_http.py392def test_allowlist_malformed_cidr_is_a_loud_error():CODE
LOW⚡tests/test_web/test_safe_http.py400def test_safe_get_redirect_to_allowlisted_private_host_is_followed():CODE
LOW⚡tests/test_web/test_safe_http.py420def test_allowlist_entry_with_port_is_a_loud_error(entry):CODE
LOWtests/test_web/test_safe_http.py33def test_check_url_rejects_non_http_schemes(url):CODE
LOWtests/test_web/test_safe_http.py38def test_check_url_rejects_no_hostname():CODE
LOWtests/test_web/test_safe_http.py60def test_check_url_rejects_private_and_loopback_ips(url):CODE
LOWtests/test_web/test_safe_http.py119def test_check_url_rejects_parse_only_loopback_bypasses(url):CODE
LOWtests/test_web/test_safe_http.py138def test_check_url_rejects_resolver_dependent_loopback_bypasses(url):CODE
LOWtests/test_web/test_safe_http.py204def test_redirect_to_private_address_is_refused():CODE
LOWtests/test_web/test_safe_http.py214def test_relative_redirect_is_resolved_and_followed():CODE
LOWtests/test_web/test_safe_http.py225def test_too_many_redirects_refused():CODE
LOWtests/test_web/test_safe_http.py233def test_declared_content_length_over_cap_refused():CODE
LOWtests/test_web/test_safe_http.py244def test_streamed_body_over_cap_refused():CODE
LOWtests/test_web/test_exa_provider.py52def test_provider_registered_via_factory(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py64def test_missing_api_key_raises(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py71def test_integration_header_set(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py83def test_search_returns_web_results(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py105def test_search_passes_num_results_and_contents(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py124def test_content_falls_back_to_highlights(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py141def test_content_falls_back_to_summary(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py157def test_content_handles_all_fields_missing(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py173def test_fetch_uses_get_contents(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py192def test_fetch_raises_when_no_results(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py205def test_unknown_provider_lists_exa_in_error(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_exa_provider.py211def test_provider_disabled_when_module_missing(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOW⚡tests/test_web/test_tavily_provider.py39def test_provider_registered_via_factory(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOW⚡tests/test_web/test_tavily_provider.py49def test_missing_api_key_raises(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOW⚡tests/test_web/test_tavily_provider.py59def test_search_maps_results_to_webresult(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_tavily_provider.py76def test_search_passes_configured_options(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/test_web/test_tavily_provider.py98def test_fetch_uses_extract_and_raw_content(monkeypatch: pytest.MonkeyPatch) -> None:CODE
967 more matches not shown…
Decorative Section Separators209 hits · 682 pts
SeverityFileLineSnippetContext
MEDIUM⚡codex_bench/harness.py51# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡codex_bench/harness.py58# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡codex_bench/harness.py784# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡codex_bench/harness.py786# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py158# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py160# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py240# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py242# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py318# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py320# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py388# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py390# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py510# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py512# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py634# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py636# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py872# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py874# ---------------------------------------------------------------------------COMMENT
MEDIUMcodex_bench/harness.py117# ---------------------------------------------------------------------------STRING
MEDIUMcodex_bench/harness.py119# ---------------------------------------------------------------------------STRING
MEDIUM⚡tests/test_web/test_safe_http.py104# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py108# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py166# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py168# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py188# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py192# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py270# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py273# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py290# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py293# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py345# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py347# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py414# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_safe_http.py416# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_web/test_safe_http.py18# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_web/test_safe_http.py20# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_web/test_safe_http.py318# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_web/test_safe_http.py323# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_final_url_recheck.py103# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_final_url_recheck.py105# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_final_url_recheck.py138# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_final_url_recheck.py140# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_final_url_recheck.py165# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_final_url_recheck.py167# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_crawl4ai_tls.py56# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_crawl4ai_tls.py58# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_crawl4ai_tls.py78# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_crawl4ai_tls.py80# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_crawl4ai_tls.py148# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_web/test_crawl4ai_tls.py150# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_web/test_builtin_cert_refusal.py71# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_web/test_builtin_cert_refusal.py73# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_cli/test_install_codex.py153# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_cli/test_install_codex.py155# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_cli/test_note_ops.py100# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_cli/test_note_ops.py105# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_cli/test_lint.py893# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_cli/test_lint.py895# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_cli/test_lint.py953# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_cli/test_lint.py955# ---------------------------------------------------------------------------COMMENT
149 more matches not shown…
Cross-Language Confusion26 hits · 169 pts
SeverityFileLineSnippetContext
HIGHtests/test_scholar/test_core_provider.py161 # journals[0].title is null, so the publisher is the venue.COMMENT
HIGH⚡tests/test_scholar/test_core_provider.py252 '{"results": null}',CODE
HIGH⚡tests/test_scholar/test_core_provider.py254 '{"results": [null, 3, "x", []]}',CODE
HIGHtests/test_scholar/test_core_provider.py5entry whose title is null, a null `documentType` with the real classificationSTRING
HIGH⚡tests/test_scholar/test_clinicaltrials.py206 pytest.param('{"studies": null}', id="null-studies"),CODE
HIGH⚡tests/test_scholar/test_fred.py247 pytest.param('{"seriess": null}', id="null-seriess"),CODE
HIGH⚡tests/test_scholar/test_doab.py285 # The un-expanded shape: name null, metadata absent. Unusable but mustCOMMENT
HIGH⚡tests/test_scholar/test_edgar.py265 pytest.param('{"hits": null}', id="null-hits"),CODE
HIGH⚡tests/test_scholar/test_edgar.py266 pytest.param('{"hits": {"hits": null}}', id="null-inner-hits"),CODE
HIGH⚡tests/test_scholar/test_edgar.py267 pytest.param('{"hits": {"hits": [1, "two", null]}}', id="junk-rows"),CODE
HIGHsrc/hyperresearch/core/hooks.py3570 let dir = process.env.CLAUDE_PROJECT_DIR || process.cwd();CODE
HIGHsrc/hyperresearch/core/hooks.py3574 if (parent === dir) return null;CODE
HIGHsrc/hyperresearch/serve/server.py175 var hoverNode = null, searchTerm = '';CODE
HIGHsrc/hyperresearch/serve/server.py221 if (si === undefined || ti === undefined) return;CODE
HIGHsrc/hyperresearch/serve/server.py221 if (si === undefined || ti === undefined) return;CODE
HIGH⚡src/hyperresearch/serve/server.py256 if (si === undefined || ti === undefined) return;CODE
HIGH⚡src/hyperresearch/serve/server.py256 if (si === undefined || ti === undefined) return;CODE
HIGH⚡src/hyperresearch/serve/server.py258 var highlight = hoverNode && (s.id === hoverNode.id || t.id === hoverNode.id);CODE
HIGH⚡src/hyperresearch/serve/server.py268 var isHover = hoverNode && n.id === hoverNode.id;CODE
HIGH⚡src/hyperresearch/serve/server.py269 var isConnected = hoverNode && n.connected && n.connected.has(hoverNode.id);CODE
HIGH⚡src/hyperresearch/serve/server.py270 var isSearch = sl && n.title.toLowerCase().includes(sl);CODE
HIGH⚡src/hyperresearch/serve/server.py278 if ((isHover || isSearch) && scale > 0.1) {CODE
HIGHsrc/hyperresearch/serve/server.py296 if (si !== undefined && ti !== undefined) {CODE
HIGHsrc/hyperresearch/serve/server.py296 if (si !== undefined && ti !== undefined) {CODE
HIGHsrc/hyperresearch/serve/server.py323 hoverNode = null;CODE
HIGHsrc/hyperresearch/scholar/providers/core_oa.py245 `journals` is often `[{"title": null, "identifiers": []}]` — present butSTRING
Unused Imports168 hits · 157 pts
SeverityFileLineSnippetContext
LOWcodex_bench/harness.py27CODE
LOWtests/conftest.py3CODE
LOWtests/test_web/test_crawl4ai_stealth.py9CODE
LOWtests/test_web/test_safe_http.py3CODE
LOWtests/test_web/test_exa_provider.py3CODE
LOWtests/test_web/test_tavily_provider.py8CODE
LOWtests/test_web/test_fetch_many_gate.py11CODE
LOWtests/test_web/test_fetch_settings.py3CODE
LOWtests/test_web/test_crawl4ai_running_loop.py11CODE
LOWtests/test_web/test_final_url_recheck.py10CODE
LOWtests/test_web/test_pdf_diagnostics.py14CODE
LOWtests/test_web/test_fetch_many_fallback.py4CODE
LOWtests/test_web/test_builtin_pdf_lane.py14CODE
LOWtests/test_web/test_crawl4ai_tls.py11CODE
LOWtests/test_web/test_builtin_cert_refusal.py17CODE
LOWtests/test_web/test_junk_detection.py14CODE
LOWtests/test_web/test_serply_provider.py3CODE
LOWtests/test_web/test_parallel_provider.py8CODE
LOWtests/test_cli/test_install_profile.py3CODE
LOWtests/test_cli/test_orphan_dedup_call_sites.py15CODE
LOWtests/test_cli/test_install_codex.py3CODE
LOWtests/test_cli/test_vault_tag.py3CODE
LOWtests/test_cli/test_note_ops.py3CODE
LOWtests/test_cli/test_oa_fetch.py9CODE
LOWtests/test_cli/test_archive.py3CODE
LOWtests/test_cli/test_commands.py3CODE
LOWtests/test_cli/test_fetch_batch.py4CODE
LOWtests/test_cli/test_lint.py3CODE
LOWtests/test_cli/test_install_browser.py10CODE
LOWtests/test_mcp/test_update_note.py3CODE
LOWtests/test_core/test_oa_core_resolver.py8CODE
LOWtests/test_core/test_prompt_golden.py115CODE
LOWtests/test_core/test_claims_and_embed.py3CODE
LOWtests/test_core/test_packaging.py3CODE
LOWtests/test_core/test_scholar_enrichment.py3CODE
LOWtests/test_core/test_codex_install.py3CODE
LOWtests/test_core/test_fetcher_orphan_dedup.py5CODE
LOWtests/test_core/test_source_ranking.py3CODE
LOWtests/test_core/test_oa_recovery.py3CODE
LOWtests/test_core/test_run_tag_validation.py11CODE
LOWtests/test_core/test_levers.py8CODE
LOWtests/test_core/test_hooks.py3CODE
LOWtests/test_core/test_codex_skill_templates.py9CODE
LOWtests/test_core/test_profiles.py3CODE
LOWtests/test_core/test_escalation.py3CODE
LOWtests/test_core/test_render.py3CODE
LOWtests/test_core/test_config_sections.py3CODE
LOWtests/test_core/test_dissertation_profile.py3CODE
LOWtests/test_core/test_runs.py3CODE
LOWtests/test_core/test_untrusted.py3CODE
LOWtests/test_core/test_verification.py3CODE
LOWtests/test_scholar/test_dedup.py7CODE
LOWtests/test_scholar/test_repec.py10CODE
LOWtests/test_scholar/test_core_provider.py10CODE
LOWtests/test_scholar/test_clinicaltrials.py9CODE
LOWtests/test_scholar/test_fred.py10CODE
LOWtests/test_scholar/test_crossref.py9CODE
LOWtests/test_scholar/test_cli.py9CODE
LOWtests/test_scholar/test_doab.py13CODE
LOWtests/test_scholar/test_edgar.py10CODE
108 more matches not shown…
Empty Error Handlers21 hits · 105 pts
SeverityFileLineSnippetContext
HIGHsrc/hyperresearch/core/sync.py109except sqlite3.OperationalError:CODE
HIGHsrc/hyperresearch/core/sync.py282except Exception:CODE
HIGHsrc/hyperresearch/core/hooks.py3803except (json.JSONDecodeError, OSError):CODE
HIGHsrc/hyperresearch/core/scholar.py258except json.JSONDecodeError:CODE
HIGHsrc/hyperresearch/core/claims.py382except json.JSONDecodeError:CODE
HIGHsrc/hyperresearch/core/migrations.py50except sqlite3.OperationalError:CODE
HIGHsrc/hyperresearch/core/migrations.py119except sqlite3.OperationalError:CODE
HIGHsrc/hyperresearch/web/safe_http.py124except ValueError:CODE
HIGHsrc/hyperresearch/web/crawl4ai_provider.py43except Exception:CODE
HIGHsrc/hyperresearch/web/crawl4ai_provider.py443except Exception:CODE
HIGHsrc/hyperresearch/web/crawl4ai_provider.py572except Exception:CODE
HIGHsrc/hyperresearch/web/builtin.py267except ImportError:CODE
HIGHsrc/hyperresearch/cli/fetch.py571except OSError:CODE
HIGHsrc/hyperresearch/cli/fetch.py582except OSError:CODE
HIGHsrc/hyperresearch/cli/repair.py140except Exception:CODE
HIGHsrc/hyperresearch/cli/repair.py178except Exception:CODE
HIGHsrc/hyperresearch/cli/repair.py197except Exception:CODE
HIGHsrc/hyperresearch/cli/__init__.py30except Exception:CODE
HIGHsrc/hyperresearch/cli/install.py355except Exception:CODE
HIGHsrc/hyperresearch/cli/note.py690except Exception:CODE
HIGHsrc/hyperresearch/cli/lint.py1267except (json.JSONDecodeError, OSError):CODE
Excessive Try-Catch Wrapping61 hits · 64 pts
SeverityFileLineSnippetContext
LOW⚡codex_bench/harness.py796 except Exception:CODE
LOWcodex_bench/harness.py139 except Exception as e:CODE
LOWcodex_bench/harness.py200 except Exception:CODE
LOWcodex_bench/harness.py656 except Exception as e:CODE
LOWtests/test_web/test_fetch_many_gate.py38 except Exception as exc:CODE
MEDIUMtests/test_web/test_fetch_many_gate.py35def target() -> None:CODE
LOWtests/test_web/test_final_url_recheck.py36 except Exception as exc:CODE
MEDIUMtests/test_web/test_final_url_recheck.py33def target() -> None:CODE
LOWtests/test_web/test_fetch_many_fallback.py34 except Exception as exc:CODE
MEDIUMtests/test_web/test_fetch_many_fallback.py31def target() -> None:CODE
LOWtests/test_web/test_crawl4ai_tls.py45 except Exception as exc:CODE
MEDIUMtests/test_web/test_crawl4ai_tls.py42def target() -> None:CODE
LOW⚡src/hyperresearch/core/sync.py184 except Exception as e:CODE
LOW⚡src/hyperresearch/core/sync.py192 except Exception as e:CODE
LOW⚡src/hyperresearch/core/sync.py200 except Exception as e:CODE
LOWsrc/hyperresearch/core/sync.py212 except Exception:CODE
LOWsrc/hyperresearch/core/sync.py282 except Exception:CODE
LOWsrc/hyperresearch/core/hooks.py4301 except Exception:CODE
LOWsrc/hyperresearch/core/oa.py435 except Exception:CODE
LOWsrc/hyperresearch/core/oa.py542 except Exception:CODE
LOWsrc/hyperresearch/core/oa.py775 except Exception:CODE
LOWsrc/hyperresearch/core/oa.py805 except Exception:CODE
LOWsrc/hyperresearch/core/embed.py92 except Exception as e:CODE
LOWsrc/hyperresearch/core/scholar.py218 except Exception:CODE
LOWsrc/hyperresearch/core/scholar.py237 except Exception:CODE
LOWsrc/hyperresearch/core/runs.py638 except Exception as exc:CODE
LOWsrc/hyperresearch/core/profiles.py496 except Exception as exc:CODE
LOWsrc/hyperresearch/web/pdf.py118 except Exception as exc:CODE
LOWsrc/hyperresearch/web/pdf.py176 except Exception as e:CODE
LOWsrc/hyperresearch/web/pdf.py191 except Exception as e:CODE
LOWsrc/hyperresearch/web/pdf.py269 except Exception as e:CODE
LOWsrc/hyperresearch/web/crawl4ai_provider.py43 except Exception:CODE
LOWsrc/hyperresearch/web/crawl4ai_provider.py443 except Exception:CODE
LOWsrc/hyperresearch/web/crawl4ai_provider.py572 except Exception:CODE
LOWsrc/hyperresearch/web/builtin.py217 except Exception as exc:CODE
LOWsrc/hyperresearch/mcp/server.py321 except Exception as e:CODE
LOWsrc/hyperresearch/cli/fetch.py349 except Exception as e:CODE
LOWsrc/hyperresearch/cli/fetch.py673 except Exception:CODE
LOWsrc/hyperresearch/cli/fetch.py796 except Exception:CODE
LOWsrc/hyperresearch/cli/repair.py72 except Exception as exc:CODE
LOWsrc/hyperresearch/cli/repair.py140 except Exception:CODE
LOWsrc/hyperresearch/cli/repair.py178 except Exception:STRING
LOWsrc/hyperresearch/cli/repair.py197 except Exception:STRING
LOWsrc/hyperresearch/cli/scholar_cmd.py99 except Exception as exc:CODE
LOW⚡src/hyperresearch/cli/research.py129 except Exception:CODE
LOWsrc/hyperresearch/cli/batch.py66 except Exception as e:CODE
LOWsrc/hyperresearch/cli/__init__.py30 except Exception:CODE
LOWsrc/hyperresearch/cli/setup.py272 except Exception as e:STRING
LOWsrc/hyperresearch/cli/setup.py305 except Exception:STRING
MEDIUMsrc/hyperresearch/cli/setup.py278def _check_crawl4ai() -> bool:CODE
LOWsrc/hyperresearch/cli/run_cmd.py102 except Exception:CODE
LOWsrc/hyperresearch/cli/run_cmd.py258 except Exception:CODE
LOWsrc/hyperresearch/cli/install.py355 except Exception:CODE
LOWsrc/hyperresearch/cli/watch.py78 except Exception as e:CODE
LOWsrc/hyperresearch/cli/note.py690 except Exception:CODE
LOWsrc/hyperresearch/cli/fetch_batch.py111 except Exception as exc:CODE
LOWsrc/hyperresearch/cli/fetch_batch.py121 except Exception as e:CODE
LOWsrc/hyperresearch/cli/lint.py132 except Exception:CODE
LOWsrc/hyperresearch/scholar/registry.py48 except Exception:CODE
LOWsrc/hyperresearch/scholar/base.py203 except Exception:CODE
1 more matches not shown…
Modern AI Meta-Vocabulary20 hits · 52 pts
SeverityFileLineSnippetContext
MEDIUMCHANGELOG.md16- **A run tag is a slug (#116).** `Vault.run_dir()` joined the tag onto `research/runs/` unchecked, and pathlib replacesCODE
MEDIUMtests/test_cli/test_lint.py54 # Output should contain no scaffold-prompt issuesCOMMENT
MEDIUMtests/test_cli/test_lint.py126 # A vault with no scaffold-tagged notes should produce no issues for this rule.COMMENT
MEDIUMtests/test_cli/test_lint.py971 # Scaffold artifact so the scaffold check passesCOMMENT
MEDIUM⚡tests/test_core/test_hooks.py311 # Opus: semantic rewrites of scaffold vocabulary + hedge-languageCOMMENT
MEDIUM⚡tests/test_core/test_hooks.py316 # scaffold-only section list must be injectedCOMMENT
MEDIUMexample-reports/rl-exploration-trajectory-planning.md222### 5.6. What transfers, and what is RL-specific scaffoldingCOMMENT
MEDIUMsrc/hyperresearch/core/sync.py77 # Files at the research/ root (e.g. research/scaffold.md,COMMENT
MEDIUMsrc/hyperresearch/core/hooks.py101# NOTE: `## Core tension` is intentionally omitted. The scaffold uses it as aCOMMENT
MEDIUMsrc/hyperresearch/core/hooks.py1644### 1b. Inline scaffold vocabulary strip (reader-facing prose)COMMENT
MEDIUMsrc/hyperresearch/cli/lint.py445 # scaffold-prompt (verbatim prompt gospel rule)COMMENT
MEDIUMsrc/hyperresearch/cli/lint.py508 # workflow (scaffold + comparisons + extract artifacts exist)COMMENT
MEDIUMsrc/hyperresearch/cli/lint.py577 # Enforce the gospel rule: every scaffold-tagged note must open withCOMMENT
MEDIUMsrc/hyperresearch/cli/lint.py583 # scaffold (audit, draft, comparisons) loses its anchor.COMMENT
MEDIUM⚡src/hyperresearch/cli/lint.py719 # but still enforce scaffold-leak hygiene (always wrong regardlessSTRING
MEDIUM⚡src/hyperresearch/cli/lint.py1542 # - research/scaffold.md (Layer 0 planning document)STRING
MEDIUM⚡src/hyperresearch/cli/lint.py1548 # The single-pass /research protocol also produces a scaffold note butSTRING
MEDIUM⚡src/hyperresearch/cli/lint.py1549 # has no loci/interim/comparisons artifacts. This rule checks scaffoldSTRING
MEDIUMsrc/hyperresearch/cli/lint.py675 # (modulo line-ending normalization only). This turns the scaffoldSTRING
MEDIUMsrc/hyperresearch/cli/lint.py1574 # A scaffold note or scaffold.md file satisfies the scaffoldSTRING
Cross-File Repetition9 hits · 45 pts
SeverityFileLineSnippetContext
HIGHtests/test_graph/test_links.py0select n.id, n.path from notes n where n.type not in ('index', 'raw') and n.id not in (select distinct target_id from liSTRING
HIGHsrc/hyperresearch/cli/repair.py0select n.id, n.path from notes n where n.type not in ('index', 'raw') and n.id not in (select distinct target_id from liSTRING
HIGHsrc/hyperresearch/cli/watch.py0select n.id, n.path from notes n where n.type not in ('index', 'raw') and n.id not in (select distinct target_id from liSTRING
HIGHsrc/hyperresearch/cli/main.py0select n.id, n.path from notes n where n.type not in ('index', 'raw') and n.id not in (select distinct target_id from liSTRING
HIGHsrc/hyperresearch/cli/lint.py0select n.id, n.path from notes n where n.type not in ('index', 'raw') and n.id not in (select distinct target_id from liSTRING
HIGHsrc/hyperresearch/cli/fetch.py0insert or ignore into sources (url, note_id, domain, fetched_at, provider, content_hash) values (?, ?, ?, ?, ?, ?)STRING
HIGHsrc/hyperresearch/cli/research.py0insert or ignore into sources (url, note_id, domain, fetched_at, provider, content_hash) values (?, ?, ?, ?, ?, ?)STRING
HIGHsrc/hyperresearch/cli/escalation_cmd.py0insert or ignore into sources (url, note_id, domain, fetched_at, provider, content_hash) values (?, ?, ?, ?, ?, ?)STRING
HIGHsrc/hyperresearch/cli/fetch_batch.py0insert or ignore into sources (url, note_id, domain, fetched_at, provider, content_hash) values (?, ?, ?, ?, ?, ?)STRING
Deep Nesting36 hits · 32 pts
SeverityFileLineSnippetContext
LOWcodex_bench/harness.py650CODE
LOWcodex_bench/harness.py441CODE
LOWcodex_bench/harness.py466CODE
LOWsrc/hyperresearch/core/sync.py70CODE
LOWsrc/hyperresearch/core/sync.py134CODE
LOWsrc/hyperresearch/core/hooks.py3791CODE
LOWsrc/hyperresearch/core/hooks.py4234CODE
LOWsrc/hyperresearch/core/oa.py570CODE
LOWsrc/hyperresearch/core/oa.py753CODE
LOWsrc/hyperresearch/core/oa.py605CODE
LOWsrc/hyperresearch/core/similarity.py49CODE
LOWsrc/hyperresearch/core/scholar.py241CODE
LOWsrc/hyperresearch/core/claims.py342CODE
LOWsrc/hyperresearch/core/citecheck.py43CODE
LOWsrc/hyperresearch/core/citecheck.py78CODE
LOWsrc/hyperresearch/core/citecheck.py114CODE
LOWsrc/hyperresearch/core/runs.py482CODE
LOWsrc/hyperresearch/web/safe_http.py212CODE
LOWsrc/hyperresearch/web/crawl4ai_provider.py462CODE
LOWsrc/hyperresearch/cli/fetch.py203CODE
LOWsrc/hyperresearch/cli/repair.py13CODE
LOWsrc/hyperresearch/cli/research.py17CODE
LOWsrc/hyperresearch/cli/batch.py76CODE
LOWsrc/hyperresearch/cli/search.py11CODE
LOWsrc/hyperresearch/cli/install.py18CODE
LOWsrc/hyperresearch/cli/watch.py12CODE
LOWsrc/hyperresearch/cli/watch.py45CODE
LOWsrc/hyperresearch/cli/note.py160CODE
LOWsrc/hyperresearch/cli/note.py632CODE
LOWsrc/hyperresearch/cli/fetch_batch.py16CODE
LOWsrc/hyperresearch/cli/lint.py236CODE
LOWsrc/hyperresearch/search/fts.py31CODE
LOWsrc/hyperresearch/search/fts.py66CODE
LOWsrc/hyperresearch/serve/server.py365CODE
LOWsrc/hyperresearch/scholar/dedup.py143CODE
LOWsrc/hyperresearch/scholar/providers/crossref.py145CODE
Verbosity Indicators19 hits · 31 pts
SeverityFileLineSnippetContext
LOWsrc/hyperresearch/cli/repair.py35 # Step 1: Force sync — rebuild DB from all filesCOMMENT
LOWsrc/hyperresearch/cli/repair.py51 # Step 2: Stub broken linksCOMMENT
LOWsrc/hyperresearch/cli/repair.py87 # Step 3: Enrich — auto-tag and auto-summarizeCOMMENT
LOWsrc/hyperresearch/cli/repair.py153 # Step 4: Promote notesCOMMENT
LOWsrc/hyperresearch/cli/repair.py210 # Step 4: Rebuild indexesSTRING
LOWsrc/hyperresearch/cli/repair.py239 # Step 5: Update agent docsSTRING
LOWsrc/hyperresearch/cli/research.py51 # Step 1: SearchCOMMENT
LOWsrc/hyperresearch/cli/research.py85 # Step 2: Fetch and save each resultCOMMENT
LOWsrc/hyperresearch/cli/research.py101 # Step 3: Follow links (depth > 0)COMMENT
LOW⚡src/hyperresearch/cli/research.py133 # Step 4: Sync to index everythingCOMMENT
LOW⚡src/hyperresearch/cli/research.py138 # Step 5: Generate synthesis note (map-of-content)COMMENT
LOWsrc/hyperresearch/cli/research.py180 # Step 6: Holistic auto-linking across all new notesCOMMENT
LOWsrc/hyperresearch/cli/research.py194 # Step 7: Surface hub notesCOMMENT
LOWsrc/hyperresearch/cli/install.py216 # Step 1: Init vault (skip if already exists)COMMENT
LOWsrc/hyperresearch/cli/install.py231 # Step 2: Resolve the hyperresearch executable pathCOMMENT
LOW⚡src/hyperresearch/cli/install.py245 # Step 3: Always re-inject the platform's docs file (CLAUDE.md /COMMENT
LOW⚡src/hyperresearch/cli/install.py249 # Step 4: Install the platform's hook + skills + subagents (renderedCOMMENT
LOW⚡src/hyperresearch/cli/install.py255 # Step 3: Auto-configure crawl4ai if installedCOMMENT
LOW⚡src/hyperresearch/cli/install.py258 # Step 5: ReportCOMMENT
Structural Annotation Overuse19 hits · 31 pts
SeverityFileLineSnippetContext
LOWsrc/hyperresearch/cli/repair.py35 # Step 1: Force sync — rebuild DB from all filesCOMMENT
LOWsrc/hyperresearch/cli/repair.py51 # Step 2: Stub broken linksCOMMENT
LOWsrc/hyperresearch/cli/repair.py87 # Step 3: Enrich — auto-tag and auto-summarizeCOMMENT
LOWsrc/hyperresearch/cli/repair.py153 # Step 4: Promote notesCOMMENT
LOWsrc/hyperresearch/cli/repair.py210 # Step 4: Rebuild indexesSTRING
LOWsrc/hyperresearch/cli/repair.py239 # Step 5: Update agent docsSTRING
LOWsrc/hyperresearch/cli/research.py51 # Step 1: SearchCOMMENT
LOWsrc/hyperresearch/cli/research.py85 # Step 2: Fetch and save each resultCOMMENT
LOWsrc/hyperresearch/cli/research.py101 # Step 3: Follow links (depth > 0)COMMENT
LOW⚡src/hyperresearch/cli/research.py133 # Step 4: Sync to index everythingCOMMENT
LOW⚡src/hyperresearch/cli/research.py138 # Step 5: Generate synthesis note (map-of-content)COMMENT
LOWsrc/hyperresearch/cli/research.py180 # Step 6: Holistic auto-linking across all new notesCOMMENT
LOWsrc/hyperresearch/cli/research.py194 # Step 7: Surface hub notesCOMMENT
LOWsrc/hyperresearch/cli/install.py216 # Step 1: Init vault (skip if already exists)COMMENT
LOWsrc/hyperresearch/cli/install.py231 # Step 2: Resolve the hyperresearch executable pathCOMMENT
LOW⚡src/hyperresearch/cli/install.py245 # Step 3: Always re-inject the platform's docs file (CLAUDE.md /COMMENT
LOW⚡src/hyperresearch/cli/install.py249 # Step 4: Install the platform's hook + skills + subagents (renderedCOMMENT
LOW⚡src/hyperresearch/cli/install.py255 # Step 3: Auto-configure crawl4ai if installedCOMMENT
LOW⚡src/hyperresearch/cli/install.py258 # Step 5: ReportCOMMENT
AI Slop Vocabulary8 hits · 22 pts
SeverityFileLineSnippetContext
MEDIUM⚡codex_bench/harness.py52# Prompt. Mirrors bench/harness.py's PIPELINE_RESEARCH_PROMPT (the ClaudeCOMMENT
MEDIUMcodex_bench/harness.py294 # into the run vault, as bench/harness.py does. The install above wasCOMMENT
MEDIUMcodex_bench/harness.py856 # Records without an adherence block predate this harness (April 2026).COMMENT
MEDIUMcodex_bench/harness.py94# Same packaging contract bench/harness.py writes. Step 1 reads it and letsSTRING
MEDIUM⚡tests/test_core/test_hooks.py319 # paragraph already supports with evidence. Highest-leverage polish cut.COMMENT
MEDIUMtests/test_core/test_hooks.py266 # required_section_headings. This is the highest-leverage InstF lever.COMMENT
MEDIUM⚡src/hyperresearch/cli/lint.py711 # The rule activates when either signals a wrapped harness context:STRING
MEDIUM⚡src/hyperresearch/cli/lint.py713 # - research/wrapper_contract.json exists (harness declared packaging)STRING
AI Structural Patterns10 hits · 10 pts
SeverityFileLineSnippetContext
LOWtests/test_web/test_exa_provider.py14CODE
LOWsrc/hyperresearch/core/templates.py209CODE
LOWsrc/hyperresearch/core/note.py85CODE
LOWsrc/hyperresearch/mcp/server.py33CODE
LOWsrc/hyperresearch/cli/fetch.py203CODE
LOWsrc/hyperresearch/cli/research.py17CODE
LOWsrc/hyperresearch/cli/search.py11CODE
LOWsrc/hyperresearch/cli/note.py16CODE
LOWsrc/hyperresearch/cli/note.py292CODE
LOWsrc/hyperresearch/cli/note.py425CODE
Over-Commented Block10 hits · 10 pts
SeverityFileLineSnippetContext
LOWsrc/hyperresearch/core/config.py21 # on; set false only for cert-broken sites you explicitly trust. TheCOMMENT
LOWsrc/hyperresearch/core/patterns.py1"""Shared regex patterns for wiki-link parsing."""COMMENT
LOWsrc/hyperresearch/core/patterns.py21# candidate fail at its first extra bracket, so scanning is linear. A targetCOMMENT
LOWsrc/hyperresearch/core/patterns.py41# would run it to the end, but a prose line that happens to start with ```COMMENT
LOWsrc/hyperresearch/core/patterns.py181# [[table1]], [[figure-4b]], [[eq:7]], [[scheme-3]]. These are cross-COMMENT
LOWsrc/hyperresearch/core/profiles.py181 # word (the built-ins keep the two in lockstep — a gear that raises itsCOMMENT
LOWsrc/hyperresearch/cli/lint.py301 issues.append({COMMENT
LOWsrc/hyperresearch/cli/lint.py821 "Final report is leaking scaffold-only sections into "COMMENT
LOWsrc/hyperresearch/cli/lint.py941 # Under that pattern, 30-50% of sources should carry breadcrumbs.COMMENT
LOWsrc/hyperresearch/cli/lint.py1241 ),COMMENT
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_cli/test_commands.py217 # Create a note with a broken linkCOMMENT
MEDIUMtests/test_cli/test_lint.py454 # Create a raw file whose stem doesn't match any note.COMMENT
MEDIUMsrc/hyperresearch/core/vault.py163 # Create the one visible directoryCOMMENT
Redundant / Tautological Comments6 hits · 9 pts
SeverityFileLineSnippetContext
LOWsrc/hyperresearch/core/enrich.py30 # Check if tag (or hyphenated parts) appear in bodyCOMMENT
LOWsrc/hyperresearch/core/linker.py110 # Check if there's already a ## Related sectionCOMMENT
LOWsrc/hyperresearch/core/fetcher.py76 # Check if URL already fetched (an orphaned row — note deleted — is not a duplicate)COMMENT
LOWsrc/hyperresearch/cli/fetch.py247 # Check if URL already fetched (an orphaned row — note deleted — is not a duplicate,COMMENT
LOWsrc/hyperresearch/cli/research.py113 # Check if already in DB (an orphaned row — note deleted — is not a duplicate)COMMENT
LOWsrc/hyperresearch/cli/install.py340 # Check if the browser is already installed -- against the stack theCOMMENT
Magic Placeholder Names3 hits · 8 pts
SeverityFileLineSnippetContext
HIGHsrc/hyperresearch/web/serply_provider.py9 export SERPLY_API_KEY="your-api-key" # https://serply.ioSTRING
HIGHsrc/hyperresearch/web/tavily_provider.py7 export TAVILY_API_KEY="tvly-your-api-key" # https://app.tavily.comSTRING
HIGHsrc/hyperresearch/web/exa_provider.py8 export EXA_API_KEY="your-api-key" # https://dashboard.exa.ai/api-keysSTRING
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHsrc/hyperresearch/web/pdf.py274# Why the PDF lane last declined each URL, keyed by the URL as requested.COMMENT
Fake / Example Data8 hits · 7 pts
SeverityFileLineSnippetContext
LOWtests/test_web/test_exa_provider.py22 author: str | None = "Jane Doe",CODE
LOWtests/test_web/test_exa_provider.py101 assert results[0].metadata["author"] == "Jane Doe"CODE
LOWtests/test_cli/test_oa_fetch.py84 'contact_email = ""', 'contact_email = "tester@example.org"'CODE
LOW⚡tests/test_core/test_oa_recovery.py684 '[scholar]\ncontact_email = "me@example.org"\noa_min_full_text_chars = 2000\n',CODE
LOW⚡tests/test_core/test_oa_recovery.py688 assert cfg.scholar.contact_email == "me@example.org"CODE
LOW⚡tests/test_scholar/test_crossref.py334 monkeypatch.setenv("HYPERRESEARCH_CONTACT_EMAIL", "someone@example.org")CODE
LOWtests/test_scholar/test_edgar.py20CONTACT = "research@example.org"CODE
LOW⚡tests/test_scholar/test_openalex.py318 monkeypatch.setenv("HYPERRESEARCH_CONTACT_EMAIL", "someone@example.org")CODE
Modern Structural Boilerplate3 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/hyperresearch/cli/batch.py76def _update_file_frontmatter(vault_root: Path, rel_path: str, updates: dict) -> None:CODE
LOWsrc/hyperresearch/scholar/__init__.py11__all__ = ["Paper", "ProviderError", "SearchProvider", "normalize_doi", "title_key"]CODE
LOWsrc/hyperresearch/scholar/dedup.py23__all__ = ["merge_papers"]CODE