web-v0.15.0

career-ops-hq/career-opsweb-v0.15.0Oct 16, 2026by career-ops-release[bot]

Upgrading?

AI Summary

This release focuses on enhancing the web dashboard and reporting capabilities. It introduces a generated documents dashboard, interview prep packs, and a CV studio for tailored resumes. Additionally, it improves report views with ATS keyword coverage, company evidence cards, and the ability to compare pipeline rows side-by-side.

Key Highlights

  • Interview prep packs and generated documents dashboard
  • CV studio with edit model and API for tailored CVs
  • ATS keyword coverage and company evidence cards on reports
  • Compare two or three selected pipeline rows side-by-side
  • Expanded analytics and progress tracking features

New Features

  • Assessment lifecycle and follow-up status controls
  • Allow users to turn off follow-ups
  • Test-all improvements: run inline sections alongside discovered suites
  • Upskill: show requirements behind recent skips
  • Add interview prep pack to each report
  • Add generated documents dashboard
  • Add CV studio edit model and API for tailored CVs
  • ATS keyword coverage on the report view
  • Company evidence card on the report
  • Compare two or three selected pipeline rows side-by-side
  • Draft a cover letter from the report page
  • Expand Analytics into progress and search stats
  • Fill modes/_profile.md from the assistant
  • Give each today card the evaluator's call and reason
  • List watched companies on the portals page
  • Rank today's decisions by score with an apply next link
  • Recurring skill gaps on the CV page
  • Set one status on several tracker rows from the pipeline table
  • Show the posting URL in the tracker view

Full Release Notes

## [0.15.0](https://github.com/career-ops-hq/career-ops/compare/web-v0.14.0...web-v0.15.0) (2026-10-15)


### Features

* add Assessment lifecycle and follow-up status controls ([#4317](https://github.com/career-ops-hq/career-ops/issues/4317)) ([8cb0161](https://github.com/career-ops-hq/career-ops/commit/8cb0161f73d1e6012976bdf2ba79dee6b91f40d1))
* **followups:** let users turn off follow-ups ([#5164](https://github.com/career-ops-hq/career-ops/issues/5164)) ([0a388c8](https://github.com/career-ops-hq/career-ops/commit/0a388c87ab647140e10fe36a2db0c9ae3956ed97))
* **test-all:** run the inline sections alongside the discovered suites ([#5146](https://github.com/career-ops-hq/career-ops/issues/5146)) ([#5150](https://github.com/career-ops-hq/career-ops/issues/5150)) ([9a2f8d2](https://github.com/career-ops-hq/career-ops/commit/9a2f8d2c5e594cb99f19178adcfa87a4c6994daa))
* **upskill:** show the requirements behind your recent skips ([#5242](https://github.com/career-ops-hq/career-ops/issues/5242)) ([f541063](https://github.com/career-ops-hq/career-ops/commit/f54106321286e0af1331577c6858ed1c57d08065))
* **web:** add an interview prep pack to each report ([#5216](https://github.com/career-ops-hq/career-ops/issues/5216)) ([4c94be4](https://github.com/career-ops-hq/career-ops/commit/4c94be42e63815df71e72df6e0f46e02d8b9a8e0))
* **web:** add generated documents dashboard ([#4856](https://github.com/career-ops-hq/career-ops/issues/4856)) ([#4958](https://github.com/career-ops-hq/career-ops/issues/4958)) ([ca7d047](https://github.com/career-ops-hq/career-ops/commit/ca7d047448aa5bf5b8adffb158315c20e1b66d00))
* **web:** add the cv studio edit model and api for tailored cvs ([#5232](https://github.com/career-ops-hq/career-ops/issues/5232)) ([1fcd8d1](https://github.com/career-ops-hq/career-ops/commit/1fcd8d1586fa506610c3bc6cf3fa4d7f90afb2c6))
* **web:** ATS keyword coverage on the report view ([#4579](https://github.com/career-ops-hq/career-ops/issues/4579)) ([886b834](https://github.com/career-ops-hq/career-ops/commit/886b834a9989e449587cf1ae9ae2ab39e50cab1e))
* **web:** company evidence card on the report (and fix the data root it reads from) ([#4581](https://github.com/career-ops-hq/career-ops/issues/4581)) ([bcfdcdc](https://github.com/career-ops-hq/career-ops/commit/bcfdcdcb37691a921e5c4a3bebb66366d16d3a1e))
* **web:** compare two or three selected pipeline rows side by side ([#5223](https://github.com/career-ops-hq/career-ops/issues/5223)) ([d396b19](https://github.com/career-ops-hq/career-ops/commit/d396b1961c79eb5f59e002fa97abad77b2f3a716))
* **web:** draft a cover letter from the report page ([#5258](https://github.com/career-ops-hq/career-ops/issues/5258)) ([49e14d4](https://github.com/career-ops-hq/career-ops/commit/49e14d4315c0af88b39241687c03a72ff050ea96))
* **web:** expand Analytics into progress and search stats ([#4310](https://github.com/career-ops-hq/career-ops/issues/4310)) ([6e0cd23](https://github.com/career-ops-hq/career-ops/commit/6e0cd23ac6b27faf22e39c16705e1da58316892e))
* **web:** fill modes/_profile.md from the assistant, confirm-gated, with a live onboarding panel ([#4256](https://github.com/career-ops-hq/career-ops/issues/4256)) ([93d1853](https://github.com/career-ops-hq/career-ops/commit/93d1853a971f84465efa00d9b1c83456b35b9d96))
* **web:** give each today card the evaluator's call and reason ([#5215](https://github.com/career-ops-hq/career-ops/issues/5215)) ([4ef7ade](https://github.com/career-ops-hq/career-ops/commit/4ef7adea15392876eea6eda2d5e3f855ba5692ce))
* **web:** list watched companies on the portals page before a health check ([#5220](https://github.com/career-ops-hq/career-ops/issues/5220)) ([b4864ee](https://github.com/career-ops-hq/career-ops/commit/b4864ee4fd5adc15559ca12cebf473e8dfbec82d))
* **web:** rank today's decisions by score with an apply next link ([#5235](https://github.com/career-ops-hq/career-ops/issues/5235)) ([9296142](https://github.com/career-ops-hq/career-ops/commit/92961425af10ab47c55e17a55e4c7113813176f0))
* **web:** recurring skill gaps on the CV page ([#4583](https://github.com/career-ops-hq/career-ops/issues/4583)) ([85fdac2](https://github.com/career-ops-hq/career-ops/commit/85fdac23d93ecb9e2c0246e03ffec5d0a52aeba3))
* **web:** set one status on several tracker rows from the pipeline table ([#5187](https://github.com/career-ops-hq/career-ops/issues/5187)) ([d319b4a](https://github.com/career-ops-hq/career-ops/commit/d319b4a5eeb1c711c64e3a5d85ab108dd1049e7c))
* **web:** show the posting url in the tracker view ([#5130](https://github.com/career-ops-hq/career-ops/issues/5130)) ([d79024c](https://github.com/career-ops-hq/career-ops/commit/d79024c32d7004c88db68d64da52047a3bfca960))


### Bug Fixes

* **analytics:** count only in-flight rows as active applications ([#5186](https://github.com/career-ops-hq/career-ops/issues/5186)) ([ed10c7a](https://github.com/career-ops-hq/career-ops/commit/ed10c7aaa391d8a1784830904515541b50b9d095))
* **scheduler:** preserve the original recurrence anchor ([#5006](https://github.com/career-ops-hq/career-ops/issues/5006)) ([1884acf](https://github.com/career-ops-hq/career-ops/commit/1884acff0162755a2c8d0c69b9f5455f56f04463))
* **test-harness:** link the dependency tree a worktree inherits, in both suites ([#5055](https://github.com/career-ops-hq/career-ops/issues/5055)) ([b528fe5](https://github.com/career-ops-hq/career-ops/commit/b528fe59fc139769d22f537b2dd25012d263ad76))
* **test-harness:** run the suite against a scratch data root and guard the real one ([#5137](https://github.com/career-ops-hq/career-ops/issues/5137)) ([2bebe32](https://github.com/career-ops-hq/career-ops/commit/2bebe32826d6f504652fb473c22e4df7124972a3))
* **web/scheduled:** a lock whose stat fails is not stale ([#5013](https://github.com/career-ops-hq/career-ops/issues/5013)) ([7f30002](https://github.com/career-ops-hq/career-ops/commit/7f300029b4bdcf798a500d953f0114610c600675))
* **web/scheduled:** retry Windows EPERM/EACCES on the lock mkdir instead of crashing ([#4917](https://github.com/career-ops-hq/career-ops/issues/4917)) ([291d53b](https://github.com/career-ops-hq/career-ops/commit/291d53babf306bd8440076447211b8578ecbccef))
* **web:** answer 400, not 500, when a JSON body is not an object ([#5188](https://github.com/career-ops-hq/career-ops/issues/5188)) ([9abcad3](https://github.com/career-ops-hq/career-ops/commit/9abcad356f5bc1e916ab355b39e5032b91bc78a9))
* **web:** attach the tailored cv to localized resume upload fields ([#5162](https://github.com/career-ops-hq/career-ops/issues/5162)) ([e632866](https://github.com/career-ops-hq/career-ops/commit/e632866aacef4ad89198f424663605a45760498d))
* **web:** deny Write/Bash when evaluating untrusted JDs ([#3629](https://github.com/career-ops-hq/career-ops/issues/3629)) ([a98717e](https://github.com/career-ops-hq/career-ops/commit/a98717ebaa75ace696db58cc7e77e94f9c8c856a))
* **web:** keep Assistant keyboard focus through open, send and close ([#5123](https://github.com/career-ops-hq/career-ops/issues/5123)) ([b5b136b](https://github.com/career-ops-hq/career-ops/commit/b5b136b01a9bbefcc9d8a169147f4c7109ae9bb3))
* **web:** keep colon location and pay cells in the inbox ([#5120](https://github.com/career-ops-hq/career-ops/issues/5120)) ([e6ed41e](https://github.com/career-ops-hq/career-ops/commit/e6ed41e8e6d052538fabf442f4d88095fbf86fe1))
* **web:** keep Discover running when the URL updates ([#3628](https://github.com/career-ops-hq/career-ops/issues/3628)) ([c78e14c](https://github.com/career-ops-hq/career-ops/commit/c78e14cdfd52f18a92e4a67694efab7ddef59385))
* **web:** keep failed inbox undo actions retryable ([#5050](https://github.com/career-ops-hq/career-ops/issues/5050)) ([63ec2fc](https://github.com/career-ops-hq/career-ops/commit/63ec2fcacc4becf883adce3eebee7409228db93a))
* **web:** keep places like Idaho Falls in the location breakdown ([#5153](https://github.com/career-ops-hq/career-ops/issues/5153)) ([cf26d04](https://github.com/career-ops-hq/career-ops/commit/cf26d04dd6ce7714566bee00dc418449a2e86af7))
* **web:** label application review fields and confirmation hints ([#4996](https://github.com/career-ops-hq/career-ops/issues/4996)) ([cdcd8c4](https://github.com/career-ops-hq/career-ops/commit/cdcd8c42c318cf8ea234dc98b507a3024877b8fc))
* **web:** label padded application numbers in assistant actions ([#5157](https://github.com/career-ops-hq/career-ops/issues/5157)) ([09f1399](https://github.com/career-ops-hq/career-ops/commit/09f139916433a474e3aaa4b3ce3b928d26b8f8b7))
* **web:** link an unscored inbox row to its posting ([#5122](https://github.com/career-ops-hq/career-ops/issues/5122)) ([662ca5c](https://github.com/career-ops-hq/career-ops/commit/662ca5cf649f22e20fc7004877e87c1ca66159ca))
* **web:** match admin as a word when bucketing archetypes ([#5154](https://github.com/career-ops-hq/career-ops/issues/5154)) ([9174770](https://github.com/career-ops-hq/career-ops/commit/917477029a0e134946190bcfdc4abefd68a268d1))
* **web:** name every explore filter field for screen readers ([#5222](https://github.com/career-ops-hq/career-ops/issues/5222)) ([523a205](https://github.com/career-ops-hq/career-ops/commit/523a205460ed1981a92955a6dfe2323e2a309b52))
* **web:** never inherit a stale console on Windows, and stop the doctor reporting a failed probe as all set up ([#4253](https://github.com/career-ops-hq/career-ops/issues/4253)) ([4e590f2](https://github.com/career-ops-hq/career-ops/commit/4e590f29bb7cec86885803a7bcd18287bd16fe8d)), closes [#3809](https://github.com/career-ops-hq/career-ops/issues/3809)
* **web:** open the inbox score on the saved report ([#2968](https://github.com/career-ops-hq/career-ops/issues/2968)) ([6a45392](https://github.com/career-ops-hq/career-ops/commit/6a45392563755fbd22244e1048afb12df82e0587))
* **web:** persist Today snoozes and confirm status writes ([#4106](https://github.com/career-ops-hq/career-ops/issues/4106)) ([a0bb5f0](https://github.com/career-ops-hq/career-ops/commit/a0bb5f03d5c29f1cf6eb2221cccf38552bbb0792))
* **web:** point an empty inbox at the roles already tracked ([#5171](https://github.com/career-ops-hq/career-ops/issues/5171)) ([4d1d57a](https://github.com/career-ops-hq/career-ops/commit/4d1d57a91e7e2bb464b16d38ac59b3c4a53a9b78))
* **web:** preserve company evidence scope and source certainty ([#5007](https://github.com/career-ops-hq/career-ops/issues/5007)) ([33c927c](https://github.com/career-ops-hq/career-ops/commit/33c927ca63fb4aea1e3f924444a74f0e3c3bc244))
* **web:** preserve context and focus for assistant confirmations ([#5017](https://github.com/career-ops-hq/career-ops/issues/5017)) ([d0a9bb5](https://github.com/career-ops-hq/career-ops/commit/d0a9bb5303348f1ab742ec09d7ea3588ed094f5b))
* **web:** preserve Pipeline filters when returning from a report ([#5049](https://github.com/career-ops-hq/career-ops/issues/5049)) ([4468aac](https://github.com/career-ops-hq/career-ops/commit/4468aacdfa1b49bc8be8a1a6df2ff31a38686b5a))
* **web:** preserve report identity when generating tailored PDFs ([#4104](https://github.com/career-ops-hq/career-ops/issues/4104)) ([a8b3340](https://github.com/career-ops-hq/career-ops/commit/a8b334080677580e813317172080d00d4c56ffbd))
* **web:** preview table-only report sections as fields, not separator residue ([#5218](https://github.com/career-ops-hq/career-ops/issues/5218)) ([5fe9b88](https://github.com/career-ops-hq/career-ops/commit/5fe9b886add73bd4ed9f17a74fbee1eb3fbb9555))
* **web:** recover interrupted application fills without losing answers ([#4109](https://github.com/career-ops-hq/career-ops/issues/4109)) ([2810471](https://github.com/career-ops-hq/career-ops/commit/281047155e8d5932bf24122be3f189776bbc8119))
* **web:** refuse submit buttons labeled in every shipped locale ([#5158](https://github.com/career-ops-hq/career-ops/issues/5158)) ([56867bd](https://github.com/career-ops-hq/career-ops/commit/56867bd59c0739e83898160612319f15a5f493ea))
* **web:** reject private URLs in Apply session ([#3627](https://github.com/career-ops-hq/career-ops/issues/3627)) ([3444fdd](https://github.com/career-ops-hq/career-ops/commit/3444fddf20307e7f7ef15c42493871594a12c719))
* **web:** say where cli evaluations go on the workers page ([#5172](https://github.com/career-ops-hq/career-ops/issues/5172)) ([6bf0667](https://github.com/career-ops-hq/career-ops/commit/6bf06676810013b89d7f291e162dac8defdd3dab))
* **web:** serve cv and cover pdfs whose filenames are not ascii ([#5163](https://github.com/career-ops-hq/career-ops/issues/5163)) ([6b55711](https://github.com/career-ops-hq/career-ops/commit/6b557110c762a38e137b02ae2957de54ed89dd5b))
* **web:** show inbox rows that are only a URL ([#3626](https://github.com/career-ops-hq/career-ops/issues/3626)) ([87ecfa2](https://github.com/career-ops-hq/career-ops/commit/87ecfa248deec495e7effc4ef6c283424aed3f96))
* **web:** show no success rate when no scan has run ([#5121](https://github.com/career-ops-hq/career-ops/issues/5121)) ([0756f03](https://github.com/career-ops-hq/career-ops/commit/0756f0317b443ddf6bfd5d37c64a6524de763fc4))
* **web:** show the "report left on disk" notice when deleting a tracker row ([#5067](https://github.com/career-ops-hq/career-ops/issues/5067)) ([ae9fdeb](https://github.com/career-ops-hq/career-ops/commit/ae9fdeb26f6dc05207b828f61542d6659a17bd4f))
* **web:** show the verdict reason without raw markdown markers ([#5169](https://github.com/career-ops-hq/career-ops/issues/5169)) ([ffebb75](https://github.com/career-ops-hq/career-ops/commit/ffebb7577839dc9ddd2856f130005f9be51ee523))
* **web:** show upcoming follow-ups on the follow-ups page ([#5129](https://github.com/career-ops-hq/career-ops/issues/5129)) ([685221f](https://github.com/career-ops-hq/career-ops/commit/685221faf953e1160f9d56cc5032f1732a0a57fc))
* **web:** show why a tailored cv was not generated next to the button ([#5240](https://github.com/career-ops-hq/career-ops/issues/5240)) ([8680fb7](https://github.com/career-ops-hq/career-ops/commit/8680fb7bc733beee98641a81f196272f01351fef))
* **web:** start each agent message on a new line so the cv envelope parses ([#5239](https://github.com/career-ops-hq/career-ops/issues/5239)) ([cc56d48](https://github.com/career-ops-hq/career-ops/commit/cc56d48faf282da8126982db005f0aeb91d7bded))
* **web:** stop calling a flagged posting recommended in the verdict card ([#5219](https://github.com/career-ops-hq/career-ops/issues/5219)) ([849a8b5](https://github.com/career-ops-hq/career-ops/commit/849a8b528f1c6c6aca457486ba6fe4677939b37f))
* **web:** stop the apply fill clicking a combobox option that only contains the answer ([#5160](https://github.com/career-ops-hq/career-ops/issues/5160)) ([b05b700](https://github.com/career-ops-hq/career-ops/commit/b05b7002cc7efc55513f0e3c42d243b310aa5d42))
* **web:** stop the sankey screen-reader table widening analytics on phones ([#5217](https://github.com/career-ops-hq/career-ops/issues/5217)) ([6899c17](https://github.com/career-ops-hq/career-ops/commit/6899c17f483b790826b260bfc75901961bc112cb))
* **web:** update source-map-js to 1.2.2 ([#5009](https://github.com/career-ops-hq/career-ops/issues/5009)) ([012c782](https://github.com/career-ops-hq/career-ops/commit/012c782b3bad67a1bbc963ba0afe085b3c93da46))

Related Repositories