1.32.0 (2026-09-03)
Features
- discard: add discard-log analytics and tuning summary (#3443) (8827f40), closes #3392
- oferta: add evidence-tiered requirement importance to Block B (#3596) (14710e2)
- plugin: add h1b-sponsor for DOL sponsorship history on US roles (#2635) (11ae621)
- providers: add Built In aggregator provider (#3645) (291c301)
- providers: add Feishu Jobs and MokaHR scanner providers (#3491) (1696bec)
- providers: add Garena careers provider (#3567) (d88cfe1)
- scan: add a durable machine-readable scan receipt (#3532) (26f47d2)
- scan: remember permanently dead ATS boards (#2869) (bf54f20), closes #2840
- templates: CJK support for the LaTeX/Overleaf CV path via tectonic (#3554) (1b58724), closes #3553
- updater: require confirmation before installation (#2866) (f33b8e2), closes #2865
Bug Fixes
- agent-inbox: lock resolve rewrites so a concurrent add is never dropped (#3479) (e26a8cc), closes #3478
- analyze-patterns: stop counting Applied as positive (#3667) (f4df0c6)
- calibrate: resolve the tracker colmap from the line array, not the header line (#3496) (abaf075), closes #3495
- cv: block delegated authorship escalation (#3657) (08bdb3f)
- cv: reject CV payloads whose section keys the builders never read (#3524) (9f6efb5), closes #3523
- dashboard: match company slugs at hyphen boundaries so Meta cannot open Metabase's CV (#3483) (f5e2753)
- data-root: resolve templates/states.yml from the codebase, not the data root (#3503) (be61f60)
- email: align fit points with the tailored CV via the pdf-index row (#3473) (d08aac2), closes #3460
- fact-gate: count education and training nouns as metrics (#3646) (12b1a4a)
- funnel-velocity: fold status-log history into calibration rates (#3494) (369db53), closes #3493
- gemini: resolve encoding mojibake on Windows and route localized modes (#1443) (3f54486)
- gitignore: the tracker's derived SQLite index is unignored outside data/ (#3468) (bc5771a)
- gmail: skip page assets so logos stop landing as job leads (#3649) (c172fd8)
- harden context budget prompt assembly (#3591) (1be498d)
- invite-match: stop extractReqId backtracking quadratically (#3463) (637e7eb)
- jd-skill-gap: recognize Traditional and Simplified Chinese requirement headings (#3631) (08e8747)
- merge-tracker: a corporate-suffix variant is the same employer (#3666) (a4f5276), closes #3665
- merge-tracker: two '?' rows with no Via silently merge, overwriting one (#3466) (8f22538), closes #3410
- oferta: lead Block B with the decisive columns and freeze their order (#3660) (abc5a89)
- openai-eval: stream the evaluation call instead of a single buffered response (#3501) (ee6e8f6)
- openrouter: write scan-history and pipeline through the shared locked writers (#3462) (81e27c5)
- pdf: accept the canonical modes/pdf.md tailoring order in validateCvSectionOrder (#3642) (a9c957c)
- pdf: run the fact gate before rendering a CV (#3647) (1b299fa)
- plugins: a YAML typo in plugins.yml no longer destroys the whole config (#3593) (00f185d), closes #3592
- portals: sweep and validate job_boards, not only tracked_companies (#3448) (2c5894e)
- reply-matcher: a partial role-word match must be a whole word (#3535) (90d311f)
- reserve-report-num: handle --help/-h explicitly (#3569) (84693b4)
- role-matcher: a level stated on both sides of a title must agree (#3651) (dfeb2fc)
- scaffolder: restore the published npm package name (5e2bf5b)
- scan-ats-full: collapse a Workday requisition served under several sites of one tenant (#3446) (5c26e4a)
- scan-ats-full: send the progress counter to stderr under --json (fa6a84f)
- scan: do not block Dublin OH as Ireland (#3633) (56429bf)
- scan: resolve scanner user data against the data root, not the cwd (#3511) (7d7b0f9), closes #3510
- set-status: a transition into Applied seeds the follow-up from set-status itself (#3470) (9312da7), closes #3459
- skill-extract: recognize marketing/GTM skills and stop reporting tracked employers as gaps (#3537) (f8de04e)
- templates: honor profile font_family in the Traditional Chinese CV block (#3525) (f0d2082), closes #3154
- templates: keep CJK fallback fonts active for ja, zh-CN and ko (#3531) (f3b7c60)
- tests: answer gitignore probes that cross a user-layer symlink (#3598) (aa8832f)
- tests: stop the photo suite writing cv-preview.html into the user's data root (#3599) (f1b7a8e)
- tracker: reject malformed application IDs instead of coercing them (#3485) (c68a7d4)
- tracker: resolve templates/states.yml from the module, not the cwd (#3509) (08b7f31), closes #3508
- tracker: resolve the derived index path at call time, not at import (#3507) (9bd4445)
- tracker: sort the applications table by # ascending on write (#3515) (372cd04)
- triage: fall back to Playwright when WebFetch finds nothing (#3571) (10b93a5)
- update-system: apply() cannot commit when a path it stages is ignored or never tracked (ae6909f)
- update: point the updater at the repository's new home (9063495)
- updater: back up self-bootstrap edits before checkout (#3474) (203c90b)
- updater: scope commits to shipped files (#3688) (455bf37)
- verify-cv-facts: bind a count to the nearest metric noun, not the farthest (#3465) (53620d3)
- web,dashboard: point two user-facing references at the repository's new home (6c0e68d)
- web: a company with no usable slug must not match every tailored CV (#3214) (880c58b)
- web: enable apply from the generated pdf index (ac761fa)
- web: find Grok in its default install dirs, not only on PATH (77657dc)
- web: order the Today action queue before truncating it (3a067ee)
- web: preserve a malformed portals.yml instead of overwriting it with the example (07ed4f3)
- web: rank "Awaiting your decision" by every EVALUATED alias, not an English prefix (d7573e1)
- web: require the cv- prefix so the tailored-CV resolvers stop returning the cover letter (#2156) (414d340)
- web: resolve the tailored CV for THIS application, not the newest for the company (ca11627)
- web: self-host the production fonts so the app starts without Google (a2e46c3)
- web: tell the beta reporter's user when the dupe search could not run (77bf490)
- workday: recover offset-clamped tenants with a facet split (#3310) (e268a5a)
- workday: resolve a CXS-form URL as the endpoint, not as a careers page (#3505) (0dbe4a9)