madslorentzen / ai-job-search
Code health
This codebase scores 8.1 out of 10 for code health, which we rate good. It also scores maintainability 8.8 and static performance 9.6 out of 10. The three are scored separately and never blended into one number. Risk is concentrated, as it usually is: 34 of 211 files are git hotspots, and they average 7.0 — which is where the fixes pay off most.
Do next
2 suggested
2 things worth doing in the week to Oct 17, the last indexed commit, 1 of them now.
Now
- Critical
Simplify
cmd_applyintools/rank_state.pywhile the change is fresh2 commits in the last 7 days added or worsened 2 critical or high findings here, still open. Fixing now costs less than after the next change.
- serious findings
- 2
- critical
- 1
- latest commit
- fix(rank): retry postings that could not be fetched instead of expiring
Small effort
Worth planning
Start breaking up <anonymous@73> (CCN 42, 90 lines): first lift lines 76-125
.agents/skills/jobbank-search/cli/src/commands/search.ts:76
<anonymous@73> has many paths; easier to read and change once split, which also removes a duplicate; function changed in 2 commits; its file is imported by 2 files, changed 3 times in 90 days.
- gain
- up to +1.1 health on this file(inferred)
- finding
- Complex method
- size
- CCN 42, 90 lines, nests 3 deep
- severity
- critical
Medium effort, worth a check
Improve what Repowise can see
Add a test coverage report
Without one, Repowise cannot tell tested code from untested code, so every test-related action says “unknown”.
- line coverage
- Unknown, no report
Small effort
- Lines of code
- 17.6K
Recent activity
All commitsCommits
- 5d9e0977fix(salary): convert the IDA workbook again ("Firmanavn og by" header) and list `unreachable` in the scrape schema (#615)2d ago
- 8123d88ffix(scrape): use the full job_scraper/seen_jobs.json path in every step of the spec (#608)2d ago
- 822d19a2fix(salary): accept BOM-prefixed UTF-8 data files (#602)2d ago
- 1b22a38dfix(upstream-triage): suggest dependent cherry-picks in ancestry order (#574)2d ago
- 2697fa46fix(upskill,notion-sync): join tracker rows to ranked entries on title, the field entries carry (#614)2d ago
- 70933975fix(reset): keep the Languages table header under Identity in the candidate-profile skeleton (#613)2d ago
Decisions
- Scope LinkedIn closed-job detection to top card/description markup and propagate via isActive to /scrapeproposed · 1d ago
- Detect company header using token matcher instead of exact membershipproposed · 1d ago
- Fix count/index pairing when headers are bare (empty derived category)proposed · 1d ago
- Reconvert Danish salary workbook header and extend scrape schema with unreachableproposed · 1d ago
- Decode git diff output as UTF-8 in check_framework_versionproposed · 1d ago
- Redirect LaTeX template compilation intermediates into build/proposed · 1d ago
Everything we found
338 open
Every detector's open count by area, each with its worst example. An inventory, not a to-do list: the actions above are the part worth doing.
- worst item is critical severity. Code health186Nested complexity · tools/convert_salary_excel.py12 findings · 7.5 deducted
- worst item is medium severity. Refactoring25main+1.5 health, M effort · tools/check_upstream_updates.py
- worst item is medium severity. Doc drift2SETUP.mdDocument names .claude/settings.local.json, which no longer exists.
- worst item is medium severity. Decisions69tests/test_rank_state.py35 awaiting review · 34 hotspots ungoverned
- worst item is medium severity. Ownership55.agents/skills/jobdanmark-search/cli/tests/retry-backoff.test.ts100% single-owner concentration, 2 commits in 90d
- worst item is low severity. Dead code1parseHitCountUnreachable function (6 lines)
Composition
Open the graph- typescript59%
- python41%
Explore this codebase
- Docs183 pages across 4 modules
- ChatAsk this codebase a question and get an answer with its sources.
- Files211 files with per-file docs, health and history
- ArchitectureDependency graph, layers, and 6 entry points
- Code healthPer-file scores, 208 open findings, coverage and refactoring targets
- Knowledge graphEntities, communities, and the paths between them
- Change couplingFiles that keep changing together, mined from commit history
- CommitsChange-risk ranked history with agent provenance
- ContributorsBus factor, per-file maintainers, and the human/agent split
- StatsSize class, origin, lifetime churn, rhythm and records
- CostsWhat indexing this snapshot cost, by model and by run.