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