career-ops-v1.31.0

mukul975/cve-mcp-servercareer-ops-v1.31.0Aug 31, 2026by github-actions[bot]

AI Summary

v1.31.0 enhances CV capabilities by adding an ATS-friendliness check and a text-only output format. It also adds external data directory support and improves the dashboard with a 'Back to Top' button.

Key Highlights

  • Added ATS-friendliness check for generated CVs
  • Added 'text' output format (Markdown, no PDF)
  • Added external data directory support via CAREER_OPS_ROOT
  • Added 'Back to Top' button to web dashboard
  • Added JobsDB Hong Kong provider

New Features

  • ATS-friendliness check
  • Text output format
  • External data directory support
  • JobsDB Hong Kong provider

Full Release Notes

## [1.31.0](https://github.com/santifer/career-ops/compare/career-ops-v1.30.0...career-ops-v1.31.0) (2026-08-31)


### Features

* **application-answers:** read the evaluation's Block H draft answers ([778d5bf](https://github.com/santifer/career-ops/commit/778d5bf15ceccbffab13284b7e5752d68aafd44e))
* **cv:** add "text" output_format — tailored markdown CV, no PDF ([#3342](https://github.com/santifer/career-ops/issues/3342)) ([13de717](https://github.com/santifer/career-ops/commit/13de7175b176742573f31ca8221fa46acc3a92da))
* **cv:** ATS-friendliness check — score a generated CV for parseability ([#2064](https://github.com/santifer/career-ops/issues/2064)) ([6d4e4c7](https://github.com/santifer/career-ops/commit/6d4e4c75b1a60a2e907c648e667dea4d4d2b2a9d))
* external data directory via CAREER_OPS_ROOT ([#524](https://github.com/santifer/career-ops/issues/524)) — lands [#1444](https://github.com/santifer/career-ops/issues/1444) ([9159ec6](https://github.com/santifer/career-ops/commit/9159ec6b34cdd1a3226d03c10d6f34c370175e56))
* **hired-wall:** a quiet chevron with the exact remainder says the strip continues ([87e3188](https://github.com/santifer/career-ops/commit/87e3188712ff5dda72013bb6ceffd9ca333d5bd7))
* **hired-wall:** the audit line speaks to the person mid-search ([c74dfc3](https://github.com/santifer/career-ops/commit/c74dfc32a83e1c36aa3e264f887dc97efea6b0be))
* **hired-wall:** the badge is the title — self-identifying label, own share line, tighter audit line ([7280a48](https://github.com/santifer/career-ops/commit/7280a48731f337563435c756e2ec0754b5115d4c))
* **portals:** profession-agnostic examples in portals.example.yml ([b8614f8](https://github.com/santifer/career-ops/commit/b8614f802a67bf6e7d2fcc402435c14464e5c005))
* **providers:** JobsDB Hong Kong via the existing jobstreet provider ([6fa8279](https://github.com/santifer/career-ops/commit/6fa8279797e3b4dc90dfab38dad62359b1d0dc65))
* **web:** add a global "Back to Top" button ([#2821](https://github.com/santifer/career-ops/issues/2821)) ([e5e786b](https://github.com/santifer/career-ops/commit/e5e786b1116e6c5e4c5bd2020f3bc1f6e5dd2058))
* wire reply-watch into status-log.tsv ([#1582](https://github.com/santifer/career-ops/issues/1582)) ([f88df83](https://github.com/santifer/career-ops/commit/f88df83934503418d77a8cbce4dc5942c5e18bb8))


### Bug Fixes

* **coverage:** exclude the local-paths declaration file so a fork can commit it ([280044e](https://github.com/santifer/career-ops/commit/280044e1fe14e9b25f067324bf7a87ba9828649f))
* **cv-sync-check:** resolve prompt paths from CODE_ROOT instead of an undefined projectRoot ([d6df7a2](https://github.com/santifer/career-ops/commit/d6df7a290581d186f46f94969c1b52fa1a68f8aa))
* **cv-sync-check:** stop allowFail from excusing an uncaught crash ([a19da42](https://github.com/santifer/career-ops/commit/a19da42dc6f71c17f52d5b907ea7980429576851))
* **dashboard:** read job URLs from the tracker before the legacy enrichment tiers ([c124fb6](https://github.com/santifer/career-ops/commit/c124fb668e594f92d78d6ff8d178a48ffa90f908))
* **deps:** refresh web lockfile for Next update ([2ca6c00](https://github.com/santifer/career-ops/commit/2ca6c00fa9d18cb45caef99fea0b97b05971bf55))
* **doctor:** survive a null entry in installed_plugins.json ([0a137a1](https://github.com/santifer/career-ops/commit/0a137a14c936d83a81f537661417e04ada2e37a5))
* **harness:** make the syntax gate recursive, shared with npm run lint ([43f846c](https://github.com/santifer/career-ops/commit/43f846ca49587a8507af2db5c8af76d7a11ba7b5))
* **hired-share:** suggest outcome.mjs's real syntax in the no-Hired-row error ([4a69583](https://github.com/santifer/career-ops/commit/4a69583146723b5dd753185ae0d0ca029e03534c))
* **providers/icims:** fill a missing location from the posting's JSON-LD ([20ec88f](https://github.com/santifer/career-ops/commit/20ec88fdacec63a9a3d29ca3b5ed9c07e33dfaea))
* **scan:** Level 1 runs Playwright sequentially, matching the shared-session rule ([77eebc9](https://github.com/santifer/career-ops/commit/77eebc95877d993fddca4c30aeee7eeff439bc65))
* **scan:** opt-in word:/stem: anchoring for content_filter keywords ([ce3ac16](https://github.com/santifer/career-ops/commit/ce3ac16bdd2438f5f4eea05ec8f03f8305e7f36c))
* **tests:** scope the profile pin and move the last hand-registered suites ([0bcd0fa](https://github.com/santifer/career-ops/commit/0bcd0fae30165b8c13d6b7fd6d28eda8e2fe367a))
* **update-system:** refuse to run when the install is not its own git toplevel ([aecae53](https://github.com/santifer/career-ops/commit/aecae537fe7cf52b1da92ff05aaa5976cf85d18f))
* **updater:** parse git status with -z so quoted paths and renames match real files ([79152e7](https://github.com/santifer/career-ops/commit/79152e732ecddf587d6f4011903139b9fd06c612))
* **verify-pipeline:** recover a report number from a link target written with backslashes ([8177808](https://github.com/santifer/career-ops/commit/81778084cff5341a62026a936ccf616821a524de))
* **web:** honour language.modes_dir and language.output on web-triggered runs ([#3253](https://github.com/santifer/career-ops/issues/3253)) ([316906e](https://github.com/santifer/career-ops/commit/316906e64cc779d7580122b1d345c4c06f503a4b))
* **web:** ignore nonfatal CLI stderr on clean run exit ([#1974](https://github.com/santifer/career-ops/issues/1974)) ([7f430ee](https://github.com/santifer/career-ops/commit/7f430eeab07b8bd514295fd02aec571c42699d1e))
* **web:** only surface follow-ups that are actually due ([#2157](https://github.com/santifer/career-ops/issues/2157)) ([82e1055](https://github.com/santifer/career-ops/commit/82e10559beb8c80d8a50bcd456e1a893e8ba76f8))
* **web:** regenerate the nested web/ lockfile on postcss bumps ([dba2a2e](https://github.com/santifer/career-ops/commit/dba2a2ed7e6317e5962be51c2fe680376221e0de))
* **web:** show a cause-specific hint on job failure instead of an always-auth prompt ([#2158](https://github.com/santifer/career-ops/issues/2158)) ([d372908](https://github.com/santifer/career-ops/commit/d37290897f15f5284788c34cafcdabd3bd56f5bf))
* **web:** show Via attribution for confidential employers ([f749939](https://github.com/santifer/career-ops/commit/f7499392ff75bf966693bdae535f785743ad300d))
* **web:** stop evaluation tables collapsing to one word per line ([#3254](https://github.com/santifer/career-ops/issues/3254)) ([b3c1e12](https://github.com/santifer/career-ops/commit/b3c1e127e02c588aeefb8d02d14759706ecf1fc2))
* **web:** stop tracing runtime data paths ([0a9d71f](https://github.com/santifer/career-ops/commit/0a9d71fe94286bfe26cdd99e5d7b3d50b27a948a))
* **web:** tab label spacing and report table word-breaking ([#3160](https://github.com/santifer/career-ops/issues/3160)) ([102560b](https://github.com/santifer/career-ops/commit/102560bb904f5d107338719f8ce3bdce8d9399e5))
* **web:** use next/link for decision-card report link ([#1931](https://github.com/santifer/career-ops/issues/1931)) ([e7b38b3](https://github.com/santifer/career-ops/commit/e7b38b3e086540060f5f5704afd55ea5fa4a4a3c))