AI Slop Code RIsk Monitor

MadsLorentzen/ai-job-search

The job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.

28.9 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for MadsLorentzen/ai-job-search, a Python project with 45,958 GitHub stars. SynthScan examined 33,085 lines of code across 206 source files, recording 736 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 28.9 (Elevated pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

28.9
Adjusted Signal
28.9
Raw Pattern Score
100%
Time Factor
2026-10-08
Last Push
46.0K
Stars
Python
Language
33.1K
Lines of Code
206
Files
736
Pattern Hits
2026-10-12
Scan Date
0.10
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 68.5/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 12.0/100 · LOW

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

Agent Over-Engineering Ratio 59.2/100 · HIGH

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

PR Review Velocity Impact 73.3/100 · HIGH

Which changes need focused human review? 736 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 21MEDIUM 17LOW 698

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 736 distinct pattern matches across 17 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 Identifiers455 hits · 485 pts
SeverityFileLineSnippetContext
LOWsalary_lookup.py54def collect_validation_issues(data):CODE
LOWtools/check_upstream_updates.py47def get_framework_version_from_text(text: str) -> str | None:CODE
LOWtools/verify_pdf.py108def find_non_ascii_date_ranges(text):CODE
LOW⚡tests/test_apply_records_application.py155 def test_matched_row_is_never_moved_backwards(self):CODE
LOW⚡tests/test_apply_records_application.py163 def test_redraft_marker_is_undated(self):CODE
LOW⚡tests/test_apply_records_application.py172 def test_seen_jobs_is_left_alone(self):CODE
LOW⚡tests/test_apply_records_application.py179 def test_skill_defers_to_apply_rather_than_restating(self):CODE
LOW⚡tests/test_apply_records_application.py308 def test_posting_is_archived_where_every_reader_looks(self):CODE
LOW⚡tests/test_apply_records_application.py425 def test_both_readers_glob_the_full_stem(self):CODE
LOW⚡tests/test_apply_records_application.py450 def test_the_cv_glob_selects_the_row_s_own_role(self):CODE
LOW⚡tests/test_apply_records_application.py466 def test_the_glob_finds_a_non_tex_template(self):CODE
LOW⚡tests/test_apply_records_application.py534 def test_the_rule_has_one_home_and_every_deriver_cites_it(self):CODE
LOWtests/test_apply_records_application.py60 def test_step_writes_a_drafted_row_with_both_document_paths(self):CODE
LOWtests/test_apply_records_application.py72 def test_tracker_header_matches_outcome(self):CODE
LOWtests/test_apply_records_application.py105 def test_tracker_header_ends_with_deadline(self):CODE
LOWtests/test_apply_records_application.py115 def test_migration_appends_the_headers_own_last_column(self):CODE
LOWtests/test_apply_records_application.py140 def test_step_runs_before_the_optional_offer_that_ends_the_turn(self):CODE
LOWtests/test_apply_records_application.py234 def test_every_reader_handles_drafted(self):CODE
LOWtests/test_apply_records_application.py382 def test_deadline_survives_every_write(self):CODE
LOWtests/test_apply_records_application.py560 def test_documented_rule_yields_a_single_path_component(self):CODE
LOW⚡tests/test_add_template_build_dir.py21 def test_latex_command_redirects_to_build_and_returns_a_fresh_pdf(self):CODE
LOW⚡tests/test_salary_lookup.py30 def test_privacy_footnote_is_omitted_when_no_row_is_suppressed(self):CODE
LOW⚡tests/test_salary_lookup.py123 def test_null_categories_with_sibling_dict_does_not_crash(self):CODE
LOW⚡tests/test_salary_lookup.py160 def test_exact_match_case_insensitive(self):CODE
LOW⚡tests/test_salary_lookup.py163 def test_exact_match_after_suffix_stripping(self):CODE
LOW⚡tests/test_salary_lookup.py166 def test_exact_match_after_dotted_amba_suffix_stripping(self):CODE
LOW⚡tests/test_salary_lookup.py174 def test_query_contained_in_entry_gives_high_score(self):CODE
LOW⚡tests/test_salary_lookup.py178 def test_entry_contained_in_query_gives_high_score(self):CODE
LOW⚡tests/test_salary_lookup.py184 def test_short_query_no_word_overlap_returns_zero(self):CODE
LOW⚡tests/test_salary_lookup.py188 def test_short_query_with_word_overlap_scores(self):CODE
LOW⚡tests/test_salary_lookup.py194 def test_oe_variant_matches_o_with_slash(self):CODE
LOW⚡tests/test_salary_lookup.py198 def test_aa_variant_matches_aa(self):CODE
LOW⚡tests/test_salary_lookup.py201 def test_danish_characters_roundtrip(self):CODE
LOW⚡tests/test_salary_lookup.py207 def test_completely_unrelated_names_return_zero(self):CODE
LOW⚡tests/test_salary_lookup.py210 def test_empty_query_returns_zero(self):CODE
LOW⚡tests/test_salary_lookup.py213 def test_empty_entry_returns_zero(self):CODE
LOW⚡tests/test_salary_lookup.py255 def test_valid_minimal_data_is_returned(self):CODE
LOW⚡tests/test_salary_lookup.py260 def test_top_level_value_must_be_object(self):CODE
LOW⚡tests/test_salary_lookup.py263 def test_companies_must_be_list(self):CODE
LOW⚡tests/test_salary_lookup.py266 def test_metadata_must_be_object_when_provided(self):CODE
LOW⚡tests/test_salary_lookup.py272 def test_load_data_reports_json_parse_errors_without_traceback(self):CODE
LOW⚡tests/test_salary_lookup.py291 def test_company_entry_must_be_object(self):CODE
LOW⚡tests/test_salary_lookup.py294 def test_company_name_is_required(self):CODE
LOW⚡tests/test_salary_lookup.py297 def test_company_name_must_not_be_blank(self):CODE
LOW⚡tests/test_salary_lookup.py300 def test_city_must_be_string_when_provided(self):CODE
LOW⚡tests/test_salary_lookup.py306 def test_categories_must_be_object_when_provided(self):CODE
LOW⚡tests/test_salary_lookup.py316 def test_malformed_category_value_rejected(self):CODE
LOW⚡tests/test_salary_lookup.py320 def test_non_numeric_count_rejected(self):CODE
LOW⚡tests/test_salary_lookup.py328 def test_duplicate_company_name_is_warning(self):CODE
LOW⚡tests/test_salary_lookup.py460 def test_normalize_strips_suffix_and_noise(self):CODE
LOW⚡tests/test_salary_lookup.py466 def test_normalize_strips_dotted_amba_suffix_same_as_undotted(self):CODE
LOW⚡tests/test_salary_lookup.py474 def test_anglicize_replaces_danish_chars(self):CODE
LOW⚡tests/test_salary_lookup.py520 def test_search_with_city_filter(self):CODE
LOW⚡tests/test_salary_lookup.py530 def test_exact_name_returns_match(self):CODE
LOW⚡tests/test_salary_lookup.py536 def test_no_match_returns_empty_list(self):CODE
LOW⚡tests/test_salary_lookup.py541 def test_multiple_candidates_all_returned(self):CODE
LOW⚡tests/test_salary_lookup.py555 def test_matching_city_is_included(self):CODE
LOW⚡tests/test_salary_lookup.py564 def test_non_matching_city_is_excluded(self):CODE
LOW⚡tests/test_salary_lookup.py569 def test_no_city_filter_returns_all_cities(self):CODE
LOW⚡tests/test_salary_lookup.py577 def test_city_filter_case_insensitive(self):CODE
395 more matches not shown…
Structural Annotation Overuse139 hits · 197 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_apply_records_application.py203 (HTML_REPORT, "## Step 2: Compute Summary Stats",CODE
LOW⚡tests/test_apply_records_application.py208 (OUTCOME, "## Step 4: Update the Tracker",CODE
LOW⚡tests/test_apply_records_application.py294 (SKILL, "### Step 1: Research & Evaluate Fit",CODE
LOW⚡tests/test_apply_records_application.py302 (OUTCOME, "## Step 3: Archive the Application Materials",CODE
LOW⚡tests/test_apply_records_application.py326 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOW⚡tests/test_apply_records_application.py329 (APPLY, "## Step 0: Parse Input", "application deadline",CODE
LOW⚡tests/test_apply_records_application.py338 (OUTCOME, "## Step 1: Load State and Identify the Application", "Deadline urgency",CODE
LOW⚡tests/test_apply_records_application.py341 (OUTCOME, "## Step 1: Load State and Identify the Application", "never chased",CODE
LOW⚡tests/test_apply_records_application.py343 (OUTCOME, "## Step 4: Update the Tracker", "preserve every other field of the row",CODE
LOW⚡tests/test_apply_records_application.py362 (OUTCOME, "## Step 1: Load State and Identify the Application", "no data row is touched",CODE
LOW⚡tests/test_apply_records_application.py368 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOW⚡tests/test_apply_records_application.py371 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOW⚡tests/test_apply_records_application.py409 (OUTCOME, "## Step 3: Archive the Application Materials",CODE
LOW⚡tests/test_apply_records_application.py413 (OUTCOME, "## Step 3: Archive the Application Materials",CODE
LOW⚡tests/test_apply_records_application.py417 (INTERVIEW, "## Step 1: Load the Application Context",CODE
LOW⚡tests/test_apply_records_application.py420 (INTERVIEW, "## Step 1: Load the Application Context",CODE
LOW⚡tests/test_apply_records_application.py452 for path, heading in ((OUTCOME, "## Step 3: Archive the Application Materials"),CODE
LOW⚡tests/test_apply_records_application.py453 (INTERVIEW, "## Step 1: Load the Application Context")):CODE
LOW⚡tests/test_apply_records_application.py470 g for g in self.globs(OUTCOME, "## Step 3: Archive the Application Materials")CODE
LOW⚡tests/test_apply_records_application.py502 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOW⚡tests/test_apply_records_application.py511 (SKILL, "### Step 2: Tailor CV",CODE
LOW⚡tests/test_apply_records_application.py515 (GMAIL_SYNC, "## Step 2: Load State",CODE
LOW⚡tests/test_apply_records_application.py519 (INTERVIEW, "## Step 1: Load the Application Context",CODE
LOW⚡tests/test_apply_records_application.py525 (NOTION_SYNC, "## Step 5: Write the Detail Page",CODE
LOWtests/test_apply_records_application.py127 outcome_step_1 = section(OUTCOME, "## Step 1: Load State and Identify the Application")CODE
LOWtests/test_apply_records_application.py219 (GMAIL_SYNC, "## Step 9: Staleness Check", "Skip `drafted` rows here",CODE
LOWtests/test_apply_records_application.py258 (APPLY, "## Step 0: Parse Input",CODE
LOWtests/test_apply_records_application.py274 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOWtests/test_apply_host_check.py130 step1_match = re.search(r"## Step 1: DRAFTER - Evaluate Fit(.*?)(?=## Step 2:)", self.text, re.DOTALL)CODE
LOW⚡tests/test_onboarding_privacy.py70 writes_at = text.index("## Step 3: Generate Profile Files")CODE
LOW⚡tests/test_tracker_notes_csv_safe.py57 "## Step 4: Update the Tracker",CODE
LOW⚡tests/test_tracker_status_vocab.py170 step1 = section(HTML_REPORT, "## Step 1: Collect Data")CODE
LOW⚡tests/test_tracker_status_vocab.py196 step1 = section(HTML_REPORT, "## Step 1: Collect Data")CODE
LOW⚡tests/test_tracker_status_vocab.py216 step1 = section(HTML_REPORT, "## Step 1: Collect Data")CODE
LOW⚡tests/test_tracker_status_vocab.py228 step2_text = section(GMAIL_SYNC, "## Step 2: Load State")CODE
LOW⚡tests/test_tracker_status_vocab.py248 step4_text = section(NOTION_SYNC, "## Step 4: Upsert Database Rows")CODE
LOW⚡tests/test_tracker_status_vocab.py263 step3_text = section(NOTION_SYNC, "## Step 3: Load Sync State and Locate the Database")CODE
LOW⚡tests/test_tracker_status_vocab.py310 "## Step 2: Compute Summary Stats",CODE
LOW⚡tests/test_tracker_status_vocab.py317 "## Step 9: Staleness Check",CODE
LOWtests/test_tracker_status_vocab.py136 step1 = section(OUTCOME, "## Step 1: Load State and Identify the Application")CODE
LOWtests/test_tracker_status_vocab.py147 step4 = section(OUTCOME, "## Step 4: Update the Tracker")CODE
LOWtests/test_tracker_status_vocab.py334 "## Step 0: Parse Input",CODE
LOW⚡.claude/commands/gmail-sync.md11## Step 0: PrerequisitesCOMMENT
LOW⚡.claude/commands/gmail-sync.md17## Step 1: Parse InputCOMMENT
LOW⚡.claude/commands/gmail-sync.md27## Step 2: Load StateCOMMENT
LOW⚡.claude/commands/gmail-sync.md38## Step 3: Build the Search QueryCOMMENT
LOW⚡.claude/commands/gmail-sync.md57## Step 4: Filter to New MessagesCOMMENT
LOW⚡.claude/commands/gmail-sync.md63## Step 5: Classify Each Unprocessed MessageCOMMENT
LOW.claude/commands/gmail-sync.md81## Step 6: Present Proposed UpdatesCOMMENT
LOW.claude/commands/gmail-sync.md113## Step 7: Wait for ApprovalCOMMENT
LOW⚡.claude/commands/gmail-sync.md142## Step 8: Update StateCOMMENT
LOW⚡.claude/commands/gmail-sync.md148## Step 9: Staleness CheckCOMMENT
LOW⚡.claude/commands/gmail-sync.md156## Step 10: Present Closing SummaryCOMMENT
LOW.claude/commands/setup.md9## Step 0: Welcome & Choose PathCOMMENT
LOW.claude/commands/setup.md353## Step 3: Generate Profile FilesCOMMENT
LOW.claude/commands/setup.md400## Step 4: Confirm & Next StepsCOMMENT
LOW.claude/commands/expand.md9## Step 0: Read Existing Profile FilesCOMMENT
LOW.claude/commands/expand.md20## Step 1: Discovery — Scan All SourcesCOMMENT
LOW.claude/commands/expand.md70## Step 2: Web EnrichmentCOMMENT
LOW.claude/commands/expand.md103## Step 3: Build Competency MapCOMMENT
79 more matches not shown…
Cross-Language Confusion8 hits · 55 pts
SeverityFileLineSnippetContext
HIGH⚡tests/test_add_template_build_dir.py15 "rm -f <file>.pdf && mkdir -p build && lualatex -interaction=nonstopmode "CODE
HIGH⚡tests/test_add_template_build_dir.py16 "-output-directory=build <file>.tex && mv build/<file>.pdf ./"CODE
HIGH⚡tests/test_salary_lookup.py124 # --validate accepts "categories": null, so format_entry must not crashCOMMENT
HIGH⚡tests/test_salary_lookup.py126 # explicit null, and the numeric-field fallback then did None[key] = ....COMMENT
HIGHtests/test_salary_lookup.py430 ' "categories": null,'CODE
HIGHtests/test_salary_lookup.py445 '{"metadata": null,'CODE
HIGHtests/test_rank_command.py277 "Step 4 must keep an existing stored deadline when the agent returned null, "CODE
HIGHtests/test_robots_check.py394 Under cp1254 (Turkish) the bytes 0x81 and 0x9e are undefined, so the pipeSTRING
Cross-File Repetition10 hits · 50 pts
SeverityFileLineSnippetContext
HIGHsalary_lookup.py0write utf-8 whatever the host's default encoding is. a piped stdout on windows defaults to the ansi code page (cp1252 onSTRING
HIGHtools/job_key.py0write utf-8 whatever the host's default encoding is. a piped stdout on windows defaults to the ansi code page (cp1252 onSTRING
HIGHtools/convert_salary_excel.py0write utf-8 whatever the host's default encoding is. a piped stdout on windows defaults to the ansi code page (cp1252 onSTRING
HIGHtools/rank_state.py0write utf-8 whatever the host's default encoding is. a piped stdout on windows defaults to the ansi code page (cp1252 onSTRING
HIGHtools/verify_layout.py0write utf-8 whatever the host's default encoding is. a piped stdout on windows defaults to the ansi code page (cp1252 onSTRING
HIGHtools/verify_pdf.py0write utf-8 whatever the host's default encoding is. a piped stdout on windows defaults to the ansi code page (cp1252 onSTRING
HIGHtests/test_apply_records_application.py0body of one markdown section, up to the next heading of any depth.STRING
HIGHtests/test_tracker_notes_csv_safe.py0body of one markdown section, up to the next heading of any depth.STRING
HIGHtests/test_apply_page_count.py0body of one markdown section, up to the next heading of any depth.STRING
HIGHtests/test_tracker_status_vocab.py0body of one markdown section, up to the next heading of any depth.STRING
Verbosity Indicators47 hits · 49 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_apply_records_application.py203 (HTML_REPORT, "## Step 2: Compute Summary Stats",CODE
LOW⚡tests/test_apply_records_application.py208 (OUTCOME, "## Step 4: Update the Tracker",CODE
LOW⚡tests/test_apply_records_application.py294 (SKILL, "### Step 1: Research & Evaluate Fit",CODE
LOW⚡tests/test_apply_records_application.py302 (OUTCOME, "## Step 3: Archive the Application Materials",CODE
LOW⚡tests/test_apply_records_application.py326 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOW⚡tests/test_apply_records_application.py329 (APPLY, "## Step 0: Parse Input", "application deadline",CODE
LOW⚡tests/test_apply_records_application.py338 (OUTCOME, "## Step 1: Load State and Identify the Application", "Deadline urgency",CODE
LOW⚡tests/test_apply_records_application.py341 (OUTCOME, "## Step 1: Load State and Identify the Application", "never chased",CODE
LOW⚡tests/test_apply_records_application.py343 (OUTCOME, "## Step 4: Update the Tracker", "preserve every other field of the row",CODE
LOW⚡tests/test_apply_records_application.py362 (OUTCOME, "## Step 1: Load State and Identify the Application", "no data row is touched",CODE
LOW⚡tests/test_apply_records_application.py368 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOW⚡tests/test_apply_records_application.py371 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOW⚡tests/test_apply_records_application.py409 (OUTCOME, "## Step 3: Archive the Application Materials",CODE
LOW⚡tests/test_apply_records_application.py413 (OUTCOME, "## Step 3: Archive the Application Materials",CODE
LOW⚡tests/test_apply_records_application.py417 (INTERVIEW, "## Step 1: Load the Application Context",CODE
LOW⚡tests/test_apply_records_application.py420 (INTERVIEW, "## Step 1: Load the Application Context",CODE
LOW⚡tests/test_apply_records_application.py452 for path, heading in ((OUTCOME, "## Step 3: Archive the Application Materials"),CODE
LOW⚡tests/test_apply_records_application.py453 (INTERVIEW, "## Step 1: Load the Application Context")):CODE
LOW⚡tests/test_apply_records_application.py470 g for g in self.globs(OUTCOME, "## Step 3: Archive the Application Materials")CODE
LOW⚡tests/test_apply_records_application.py502 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOW⚡tests/test_apply_records_application.py511 (SKILL, "### Step 2: Tailor CV",CODE
LOW⚡tests/test_apply_records_application.py515 (GMAIL_SYNC, "## Step 2: Load State",CODE
LOW⚡tests/test_apply_records_application.py519 (INTERVIEW, "## Step 1: Load the Application Context",CODE
LOW⚡tests/test_apply_records_application.py525 (NOTION_SYNC, "## Step 5: Write the Detail Page",CODE
LOWtests/test_apply_records_application.py127 outcome_step_1 = section(OUTCOME, "## Step 1: Load State and Identify the Application")CODE
LOWtests/test_apply_records_application.py219 (GMAIL_SYNC, "## Step 9: Staleness Check", "Skip `drafted` rows here",CODE
LOWtests/test_apply_records_application.py258 (APPLY, "## Step 0: Parse Input",CODE
LOWtests/test_apply_records_application.py274 (OUTCOME, "## Step 1: Load State and Identify the Application",CODE
LOWtests/test_reset_command.py102 step3 = section(SETUP.read_text(encoding="utf-8"), "## Step 3:", "## Step 4:")CODE
LOWtests/test_apply_host_check.py130 step1_match = re.search(r"## Step 1: DRAFTER - Evaluate Fit(.*?)(?=## Step 2:)", self.text, re.DOTALL)CODE
LOW⚡tests/test_onboarding_privacy.py70 writes_at = text.index("## Step 3: Generate Profile Files")CODE
LOW⚡tests/test_tracker_notes_csv_safe.py57 "## Step 4: Update the Tracker",CODE
LOW⚡tests/test_tracker_status_vocab.py170 step1 = section(HTML_REPORT, "## Step 1: Collect Data")CODE
LOW⚡tests/test_tracker_status_vocab.py196 step1 = section(HTML_REPORT, "## Step 1: Collect Data")CODE
LOW⚡tests/test_tracker_status_vocab.py216 step1 = section(HTML_REPORT, "## Step 1: Collect Data")CODE
LOW⚡tests/test_tracker_status_vocab.py228 step2_text = section(GMAIL_SYNC, "## Step 2: Load State")CODE
LOW⚡tests/test_tracker_status_vocab.py248 step4_text = section(NOTION_SYNC, "## Step 4: Upsert Database Rows")CODE
LOW⚡tests/test_tracker_status_vocab.py263 step3_text = section(NOTION_SYNC, "## Step 3: Load Sync State and Locate the Database")CODE
LOW⚡tests/test_tracker_status_vocab.py310 "## Step 2: Compute Summary Stats",CODE
LOW⚡tests/test_tracker_status_vocab.py317 "## Step 9: Staleness Check",CODE
LOWtests/test_tracker_status_vocab.py136 step1 = section(OUTCOME, "## Step 1: Load State and Identify the Application")CODE
LOWtests/test_tracker_status_vocab.py147 step4 = section(OUTCOME, "## Step 4: Update the Tracker")CODE
LOWtests/test_tracker_status_vocab.py334 "## Step 0: Parse Input",CODE
LOW⚡tests/test_outcome_stale.py37 match = re.search(r"## Step 2c: Stale Sweep Branch(.*?)(?=## Step 3:)", self.text, re.DOTALL)CODE
LOW⚡tests/test_outcome_stale.py44 match = re.search(r"## Step 2c: Stale Sweep Branch(.*?)(?=## Step 3:)", self.text, re.DOTALL)CODE
LOW⚡tests/test_outcome_stale.py50 match = re.search(r"## Step 2c: Stale Sweep Branch(.*?)(?=## Step 3:)", self.text, re.DOTALL)CODE
LOW⚡tests/test_outcome_stale.py58 match = re.search(r"## Step 2c: Stale Sweep Branch(.*?)(?=## Step 3:)", self.text, re.DOTALL)CODE
Decorative Section Separators6 hits · 27 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_salary_lookup.py23# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_salary_lookup.py25# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_salary_lookup.py152# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_salary_lookup.py154# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_salary_lookup.py217# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_salary_lookup.py219# ---------------------------------------------------------------------------COMMENT
Excessive Try-Catch Wrapping12 hits · 21 pts
SeverityFileLineSnippetContext
MEDIUMsalary_lookup.py48 print(f"Error: invalid salary_data.json: {message}", file=sys.stderr)CODE
MEDIUMsalary_lookup.py143 print("Error: salary_data.json not found.", file=sys.stderr)CODE
LOWtools/robots_check.py152 except Exception as e:CODE
MEDIUMtools/convert_salary_excel.py369 print(f"Error: File not found: {excel_path}", file=sys.stderr)CODE
MEDIUMtools/convert_salary_excel.py373 print("Error: openpyxl is required. Install it with: pip install openpyxl", file=sys.stderr)CODE
MEDIUMtools/convert_salary_excel.py391 print("Error: No data could be parsed from the Excel file.", file=sys.stderr)CODE
MEDIUMtools/check_upstream_updates.py83 print("Error: No git remotes found.")CODE
MEDIUMtools/check_upstream_updates.py110 print(f"Error: Ref '{ref}' does not exist. Make sure you fetched and specified the correct branch.")CODE
LOWtools/verify_pdf.py138 except Exception:CODE
MEDIUMtools/verify_pdf.py288 print(f"Error: {args.pdf}: {exc}", file=sys.stderr)CODE
MEDIUMtools/verify_pdf.py31def run_tool(command):CODE
LOWtests/test_apply_host_check.py108 except Exception:CODE
Fake / Example Data15 hits · 18 pts
SeverityFileLineSnippetContext
LOWtools/job_key.py37 python3 tools/job_key.py --company "Acme Corp" --title "SOC Analyst (L2)"STRING
LOW⚡tests/test_job_key.py25 self.assertEqual(slugify("Acme Corp"), "acme-corp")CODE
LOW⚡tests/test_job_key.py39 key = make_key("Acme Corp", "SOC Analyst (L2)")CODE
LOW⚡tests/test_job_key.py195 self.assertEqual(self.key_for("Acme Corp"), "acme-corp_software-engineer")CODE
LOWtests/test_convert_salary_excel_integration.py41 first.append(["Acme Corp", "Copenhagen", 500, 108.5])CODE
LOWtests/test_convert_salary_excel_integration.py61 {"company": "Acme Corp", "city": "Copenhagen", "categories": {CODE
LOWtests/test_placeholder_integrity.py43 .replace("[your.email@example.com]", "jane.doe@example.org")CODE
LOW⚡tests/test_convert_salary_excel.py413 ("Acme Corp", "Copenhagen", 500, 108.5),CODE
LOW⚡tests/test_convert_salary_excel.py426 ("Acme Corp", "Aarhus", 500, 108.5),CODE
LOW⚡tests/test_convert_salary_excel.py442 ("Acme Corp", 500, 30, 112.0, 108.5),CODE
LOWtests/test_convert_salary_excel.py462 ("Acme Corp", "Copenhagen", 500, 108.5),CODE
LOW⚡.claude/commands/gmail-sync.md46 - A quoted-name OR-group of the open applications' company names, e.g. `{"Acme Corp" "BigCo"}`CODE
LOW⚡.claude/commands/gmail-sync.md51Example: `newer_than:30d -in:sent -in:drafts ({"Acme Corp" "BigCo"} OR {from:greenhouse.io from:lever.co from:myworkday.CODE
LOW…/skills/job-application-assistant/04-job-evaluation.md209 "company": "Acme Corp",CODE
LOW…ills/job-application-assistant/08-application-forms.md47**Project name.** Give the project a descriptive name, not the employer's name — "Warehouse Inventory Forecasting PlatfoCODE
Over-Commented Block13 hits · 12 pts
SeverityFileLineSnippetContext
LOWtools/job_key.py141 # whole helper exists to prevent. Portals whose ids carry no runCOMMENT
LOWtools/verify_layout.py81# hole above its footer.COMMENT
LOWtools/security_guards.py101 # them. `**/upskill/*.md` would also ignore the skill's own SKILL.mdCOMMENT
LOWtools/security_guards.py121# ALLOWED_PERMISSIONS, so the widening is explicit and reviewable.COMMENT
LOWtests/test_security_guards.py301 f"{path}: expected ignored={expect_ignored}",COMMENT
LOW.agents/skills/jobbank-search/cli/src/cli.ts21// with a JSON error on stderr; this enforces it for the reference CLIs too.COMMENT
LOW.agents/skills/linkedin-search/cli/src/helpers.ts221COMMENT
LOW.agents/skills/jobindex-search/cli/src/cli.ts21// with a JSON error on stderr; this enforces it for the reference CLIs too.COMMENT
LOW.agents/skills/jobnet-search/cli/src/cli.ts21// (a wrong flag name once returned an entire portal's database as if itCOMMENT
LOW.agents/skills/jobdanmark-search/cli/src/cli.ts21// silently discarded filter changes what the search returns without any errorCOMMENT
LOW.github/upstream-wontport.txt1# Upstream commits this fork has consciously decided never to port.COMMENT
LOW.github/workflows/upstream-watch.yml1# Weekly upstream triage. Reports only - it NEVER merges, pushes, or edits code.COMMENT
LOW.github/workflows/ci.yml1# CI for the framework itself: LaTeX smoke compiles, skill/command lint,COMMENT
Unused Imports12 hits · 12 pts
SeverityFileLineSnippetContext
LOWsalary_lookup.py24CODE
LOWtools/upstream_triage.py32CODE
LOWtools/check_framework_version.py9CODE
LOWtools/verify_layout.py59CODE
LOWtools/check_upstream_updates.py14CODE
LOWtools/check_upstream_updates.py16CODE
LOWtests/test_apply_records_application.py22CODE
LOWtests/test_upskill_skill.py15CODE
LOWtests/test_html_report_command.py15CODE
LOWtests/test_rank_command.py17CODE
LOWtests/test_notion_sync_command.py15CODE
LOWtests/test_outcome_followup.py17CODE
Empty Error Handlers2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHtools/convert_salary_excel.py301except (ValueError, TypeError):CODE
HIGHtools/convert_salary_excel.py306except (ValueError, TypeError):CODE
Deep Nesting11 hits · 10 pts
SeverityFileLineSnippetContext
LOWsalary_lookup.py54CODE
LOWsalary_lookup.py292CODE
LOWtools/robots_check.py93CODE
LOWtools/convert_salary_excel.py60CODE
LOWtools/convert_salary_excel.py131CODE
LOWtools/lint_skills.py35CODE
LOWtools/security_guards.py168CODE
LOWtests/test_salary_lookup.py272CODE
LOWtests/test_salary_lookup.py355CODE
LOWtests/test_salary_lookup.py403CODE
LOWtests/test_apply_host_check.py203CODE
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGH.claude/commands/html-report.md102- **Footer:** "Generated by Claude Code · ai-job-search · {ISO date}"CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWtools/check_framework_version.py40 # Check if origin/base_ref is fetchedCOMMENT
LOWtools/check_framework_version.py105 # Check if it's just frontmatter syntax (e.g. ---)COMMENT
Modern AI Meta-Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMREADME.md193│ │ ├── job-scraper/ # Job search orchestrationCODE
AI Slop Vocabulary1 hit · 1 pts
SeverityFileLineSnippetContext
MEDIUMsalary_lookup.py165 """Normalize string for robust fuzzy matching."""STRING
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtests/test_upstream_triage.py54 def set_upstream_to_head(self) -> None:CODE