1.25.0 (2026-08-04)
Features
- add company:funded — review-first funded-company discovery from public RSS sources (#2117) (7ab92ab)
- cv: add optional Awards / Honors section to HTML + LaTeX CV templates (#2220) (59df4bb)
- i18n: add Italian translations for interview modes (#2335) (8127c93)
- pdf: opt-in hiring-manager audit pass — adversarial, research-grounded CV review (#2239) (3024413)
- providers: getManfred board-wide feed (Spanish/EU tech, salaries published) (9474ff1)
- reposts: add --help usage block to detect-reposts (6ec8e15)
- scan: add --since, a relative posted-date bound that also stops paging early (1d9ff63)
- test: dynamic upgrade PR gate — old install applies the commit under test (#2358) (aa57dcb)
- web: Follow-up Tracker page with logging, history, and cadence settings (#1422) (6554de6)
- weekly-digest: weekly interview digest aggregator (#2130) (37a5184)
Bug Fixes
- batch-runner: tab-IFS collapse recorded score "-" for every successful offer (5b312bf)
- cli: --flag=value was silently ignored in five scripts (37055d7)
- company-funded: catch the layoff spellings #2404 left through (aca8b71)
- company-funded: the cuts N% layoff exclusion never matched (#2404) (476b21b)
- company-history: count a hire as a company response (#2297) (c6220bf)
- cv-facts: the anti-fabrication gate saw nothing in five shipped locales (599dd82)
- cv-facts: the employer/title gate only matched lowercase triggers (a05c270)
- cv-latex: single mailto: scheme + escape OT1-unsafe glyphs (#2378) (654dce2)
- dashboard: localize the hired status label and buffer split stream openers (#2295) (8f5d10d)
- dashboard: the progress funnel dropped Hired from every stage (#2406) (aac93e8)
- dedup: use Unicode-aware Via key for blind-employer grouping (#2397) (fe4561b)
- deps: update npm dependencies (+ Dockerfile playwright pins, web lockfile sync) (f154f59)
- doctor: detect Playwright MCP in JSONC OpenCode configs (#2252) (ead7985)
- fingerprint: non-Latin employers no longer collapse to the same company key (#2501) (9326a04)
- git-ignore article-digest.md and guard the user layer against tracking (#2365) (e8a33cf)
- jd-skill-gap: warn when zero skills are classified instead of printing a clean summary (#2341) (9e3586d)
- liveness: classify transient 5xx as uncertain, not expired (#2371) (6958d84)
- merge-tracker: collapse placeholder Notes to the re-eval marker (#2483) (0df8a41)
- merge-tracker: four silent data-loss paths in the merge loop, with Unicode-safe company matching (#2399) (7bcae6b)
- providers: a16z speedrun feed silently truncates to 50 jobs (4abcb32)
- providers: dead boards throw instead of reading as live-but-empty (#2379) (3c331e4)
- resolve the PDF manifest from the tracker, not the install dir (#2471) (bc73c7f)
- scan-ats-full: --since -5 silently scanned nothing and called it a clean run (#2498) (8a10c01)
- scan-ats-full: keep the checkpoint when a resolver outage stops a sweep (#2283) (5764c35)
- set-status: close the report-less-row blind spot and add explicit --row/--report selectors (#2347) (292f55d)
- show actual LinkedIn URL as cover-letter link text, not the word "LinkedIn" (#2338) (f04b40e)
- strip GitHub URL scheme case-insensitively in cover letters (#2340) (0157284)
- sync-pdf: reject unknown options (a9b986b)
- tailor: prompt-cache the openai-tailor.mjs static system prefix (#2432) (1ec3320)
- test-all: the states.yml freeze guarded 6 of 9 ids (#2408) (d3acdad)
- test: forbid finish() in discovered suites — it forges the global verdict (cd346d3)
- test: report the Windows-unobservable lock contention signal instead of failing (d2b4ccd)
- tests: budget harness waits for slow runners and preserve crashed-script diagnostics (#2332) (e439792)
- tests: find Git Bash under Scoop and name the fallback shell in failures (#2366) (bff961c)
- tests: isolate tracker-columns fixtures from the real reports/ directory (0f79901)
- test: stop test-all silently passing when a node:test suite fails (#2463) (7e02444)
- test: use a junction on Windows for the node_modules link (241bcfd)
- tracker: non-Latin company names all keyed to empty string, silently overwriting each other (#2429) (f589ce8)
- tracker: rank Hired in dedup, canonicalize its aliases, stop bare tracker-number merges across roles (#2377) (83cde52)
- verify-cv-facts: stop the modifier count from deciding whether a claim exists (#2279) (11493bf)
- verify-pipeline: orphan check masks and invents orphans (#1425) (b4309a0)
- verify-pipeline: Unicode-aware keys for company/role/Via grouping (00a839f)
- web: render PDFs from the backend instead of the spawned agent (#2182) (fef3ff2)
- weekly-digest: --from=… was silently ignored, digesting the wrong week (#2402) (43af8c6)
- workable: use the public widget API so large accounts are scanned (5ab8425)