career-ops-v1.24.0
career-ops-hq/career-opscareer-ops-v1.24.0Jul 30, 2026by github-actions[bot]
AI Summary
Expanded job source coverage significantly with five new providers (a16z, CryptoJobs, Radancy, iCIMS, Interamt). Completed the jurisdiction lens with legal signals and added CV reuse recommendations.
Key Highlights
- Added five new or revived job sources including a16z speedrun and CryptoJobs
- Completed the jurisdiction lens with licensing, immigration, and prohibited content signals
- Added CV reuse recommender for similar JDs
- Added outcome recording and application archiving
New Features
- a16z speedrun talent network board-wide feed
- CryptocurrencyJobs zero-auth provider
- Revived Radancy tenants support
- iCIMS reverse-ATS support
- Playwright scanner for Interamt.de
- Jurisdiction compliance signals (licensing, immigration, prohibited content)
- Deterministic JD similarity helper for CV reuse
- Outcome recording and application archiving
Full Release Notes
## Highlights **Five new or revived job sources.** The headline: a provider for the **a16z speedrun talent network** — one feed covering open roles across ~200 portfolio startups (contributed by @justma16ze). Enable it by adding this to your `config/portals.yml`: ```yaml - name: a16z speedrun talent network provider: a16z-speedrun-talent max_pages: 3 # optional page cap (50 jobs/page, default 3) q: machine learning # optional server-side full-text search ``` Plus: CryptocurrencyJobs (Web3, RSS, zero-auth), revived Radancy tenants (UnitedHealth + Kaiser — 8,600 postings that previously parsed to zero), iCIMS in the reverse-ATS sweep, and a Playwright scanner for Interamt.de (German public sector). **The jurisdiction lens is complete.** Three new evaluation signals backed by citable legal data tables — agency licensing (with official registry pointers), immigration-status requirement overreach (the authorization-vs-status line), and jurisdiction-prohibited content (salary-history class) — plus `check-table-freshness.mjs` keeping every table's sources and dates honest in CI. Signals describe patterns and hand you official links; they never assert legal conclusions. **Data integrity, everywhere.** A grace-floor for every lock in the codebase (a just-created lock can no longer be stolen), batch workers can no longer fabricate results (invented scores are now blocked at three layers), outcome recording phase 1, and a transition ledger for status changes. **A smarter CV cycle.** Versioned per-application artifact bundles (flat paths still first-class), a deterministic reuse recommender for similar JDs, and fact gates extended to employer/title/tool claims in cover letters. **Scanning that respects your network.** DNS pacing measured against real resolvers, a breaker for resolver outages, and remote-in-title roles surviving city-only locations. --- ## [1.24.0](https://github.com/santifer/career-ops/compare/career-ops-v1.23.0...career-ops-v1.24.0) (2026-07-30) ### Features * **compliance:** check-table-freshness.mjs — staleness validator for jurisdiction tables (closes [#2036](https://github.com/santifer/career-ops/issues/2036)) ([1e83f67](https://github.com/santifer/career-ops/commit/1e83f6711e5e1587fc1d220b40eb925b8ef73542)) * **contacts:** company-history.mjs, employer silence and repost facts ([#1712](https://github.com/santifer/career-ops/issues/1712)) ([af21577](https://github.com/santifer/career-ops/commit/af2157747b730284e97c99936f2d15d3fa2977f9)), closes [#1711](https://github.com/santifer/career-ops/issues/1711) * **contacts:** job-search phonebook with vCard export ([#1719](https://github.com/santifer/career-ops/issues/1719)) ([8bba0ee](https://github.com/santifer/career-ops/commit/8bba0ee59b2cb584ab06d9379a6a02e537841508)) * **cv:** block unsupported employer, title, and tool claims in cover letters ([10a2e75](https://github.com/santifer/career-ops/commit/10a2e75526feb0db9162994b19ea6ebaba8b587e)) * **cv:** recommend CV reuse for similar JDs — deterministic jd-similarity helper ([07a7d9f](https://github.com/santifer/career-ops/commit/07a7d9f7edae960b274d3c9f9ca2e15af4d86f62)) * **doctor:** CLI-aware Playwright MCP detection + OpenCode config support ([#2247](https://github.com/santifer/career-ops/issues/2247)) ([960d00b](https://github.com/santifer/career-ops/commit/960d00b3a45a8213db9e7279727d9422887329a6)) * **interview-prep:** detect call platform (phone/Zoom/Teams/Meet) from invite text ([9acfec1](https://github.com/santifer/career-ops/commit/9acfec10cac786013826a93d668e732b6595e7d3)) * **interview-redflag:** protected-grounds question detection with jurisdiction table ([#2030](https://github.com/santifer/career-ops/issues/2030)) ([6b25cdd](https://github.com/santifer/career-ops/commit/6b25cddfbddef406b31b9d89d9527b9d2434483c)) * **interview/debrief:** correct contradicted facts in the prep file in place ([e8e912b](https://github.com/santifer/career-ops/commit/e8e912b777bad303f430ffa9e1eb03950157c15b)) * **interview/plan:** wire in interview-prep's sourced-question research before Block 4 ([3ceb404](https://github.com/santifer/career-ops/commit/3ceb404d5ff15edacab2755325b9571f96f045f6)) * **interview:** debrief directly from an existing transcript ([#2122](https://github.com/santifer/career-ops/issues/2122)) ([5cb7f0a](https://github.com/santifer/career-ops/commit/5cb7f0af9c6709505c1b85c0641f46825bc8d02b)) * **ledger:** set-status transition log + mode wiring ([#1695](https://github.com/santifer/career-ops/issues/1695)) ([2af59e6](https://github.com/santifer/career-ops/commit/2af59e6e2f3b734fd7487b8fca62790671c9bb5a)) * **oferta/apply:** immigration-status requirement overreach — jurisdiction table + posting signal + form warning ([2a681d1](https://github.com/santifer/career-ops/commit/2a681d129a5ad2fb1b191072dac74a0a90ea6cb5)) * **oferta/apply:** jurisdiction-prohibited content signal — table + Block G + apply-form warning ([d8dac75](https://github.com/santifer/career-ops/commit/d8dac7589b228051abe79ca3acf4014cf8b9c6fb)) * **oferta:** agency licensing check — jurisdiction table + registry pointer for agency-mediated postings (closes [#2037](https://github.com/santifer/career-ops/issues/2037)) ([10bf77f](https://github.com/santifer/career-ops/commit/10bf77fb7c5c2f8eb6ca1a03ba91736f5bf95ca3)) * **offer-prep:** jurisdiction-aware restrictive-covenant notes ([#2029](https://github.com/santifer/career-ops/issues/2029)) ([6eb7778](https://github.com/santifer/career-ops/commit/6eb7778b68dad59990694f32e86c9527fd222343)) * **outcome:** outcome recording and application archiving, phase 1 ([#2248](https://github.com/santifer/career-ops/issues/2248)) ([6d60073](https://github.com/santifer/career-ops/commit/6d600736ca316182283d3c669d9b4c77f91d0964)) * **portals:** standalone fix-slugs.mjs — auto-write ATS slug fixes to portals.yml ([7ab1a1d](https://github.com/santifer/career-ops/commit/7ab1a1d6e30ccb02a53adde031e6bd6ae648d4c4)) * **providers:** a16z speedrun talent network board-wide feed ([#2231](https://github.com/santifer/career-ops/issues/2231)) ([1b785a9](https://github.com/santifer/career-ops/commit/1b785a93e2082830ea1d73eb1328cb05c93644bd)) * **providers:** add iCIMS to the reverse-ATS full sweep ([#2141](https://github.com/santifer/career-ops/issues/2141)) ([b9cd65e](https://github.com/santifer/career-ops/commit/b9cd65e8ddba9448c9590c25f45288cf61c1c1c7)), closes [#2137](https://github.com/santifer/career-ops/issues/2137) * **providers:** cryptocurrencyjobs — Web3 job board via public RSS, zero-auth ([3310855](https://github.com/santifer/career-ops/commit/331085540ad2330c158619f1e7e3bf4dc40db21e)) * **radancy:** support legacy TalentBrew markup and the JSON results fragment ([a3e6df9](https://github.com/santifer/career-ops/commit/a3e6df971c563405c67deaf63bfcc27d8cb44bbb)) * **scan-history:** additive normalized-company column for reliable repost keying ([#2243](https://github.com/santifer/career-ops/issues/2243)) ([a4575a6](https://github.com/santifer/career-ops/commit/a4575a64a550608ecca3386851f6ad76aa592205)) * **scan:** add Playwright scanner for Interamt.de ([2a132d0](https://github.com/santifer/career-ops/commit/2a132d0348bff2381f75d0aa13a3173391968bfb)) * **scan:** country-eligibility filter for remote postings ([#2095](https://github.com/santifer/career-ops/issues/2095)) ([79ba55d](https://github.com/santifer/career-ops/commit/79ba55d7f66863eb6e7e8ce213fb8dd98b30de49)), closes [#2093](https://github.com/santifer/career-ops/issues/2093) * **scan:** negative-cache resolver refusals and stop the sweep on a resolver outage ([#2266](https://github.com/santifer/career-ops/issues/2266)) ([ebaed15](https://github.com/santifer/career-ops/commit/ebaed15abd5d445bb86ae6e8988abc816cc9b9b2)) * **scan:** pace DNS lookups so a full sweep can't trip a resolver's rate limit ([e03719b](https://github.com/santifer/career-ops/commit/e03719b417b5e5f4de4153e4927a90fbba5ea5a0)) * **stats:** wire followup-cadence's cold classification into activeApps ([52a2be8](https://github.com/santifer/career-ops/commit/52a2be88a567133276cd917323646c2228860579)) * **test:** seed-fixture.mjs + era-appropriate install fixtures ([#2032](https://github.com/santifer/career-ops/issues/2032)) ([0c5d146](https://github.com/santifer/career-ops/commit/0c5d1469e865c0a1720b8e0002469e8a05f874c2)) * **triage:** standalone two-pass triage mode to cut evaluation tokens ([#1550](https://github.com/santifer/career-ops/issues/1550)) ([7f281d8](https://github.com/santifer/career-ops/commit/7f281d829676fadadd7a934376469fea26394f16)) * versioned application CV artifact schema — bundles with flat-path coexistence ([1c7a7cb](https://github.com/santifer/career-ops/commit/1c7a7cbd3dd3a8cbd1e51f38abadfa123a45d7cd)) ### Bug Fixes * **analyze-patterns:** use symbol-safe lookarounds so C++, C# and .NET stop vanishing from tech gaps ([#2227](https://github.com/santifer/career-ops/issues/2227)) ([85cb018](https://github.com/santifer/career-ops/commit/85cb018a4c5ec06a806384e965b77e2374bace6b)) * **batch:** don't mark a worker-reported failure as completed ([c7b9519](https://github.com/santifer/career-ops/commit/c7b951907930a90d3a58888b89aa002f77a3477c)) * **ci:** a fork signature's valid check must not go red when the ack comment can't post ([5d7b625](https://github.com/santifer/career-ops/commit/5d7b62569cab62dbf05e25942bc8d480c8f7056b)) * **cover:** prevent double comma in achievement bullets ([#2254](https://github.com/santifer/career-ops/issues/2254)) ([31ddafb](https://github.com/santifer/career-ops/commit/31ddafb5c52d3ef368469046011a6d3cadc48358)) * **dashboard:** pin the row's own status to the top of the status picker ([f214d03](https://github.com/santifer/career-ops/commit/f214d0355118735939fcf3339b263d7769514f19)) * **dashboard:** stop reading funding and valuation figures as Pay ([#2139](https://github.com/santifer/career-ops/issues/2139)) ([581374f](https://github.com/santifer/career-ops/commit/581374f25ca971d7b8161ca94d34fc9de9236cd5)) * **dashboard:** the 'hired' status renders with no colour in the pipeline list ([8465462](https://github.com/santifer/career-ops/commit/8465462c9dd82ef9ced62395126f2c8455871cb6)) * **echojobs:** keep hybrid roles distinguishable from remote ([#2258](https://github.com/santifer/career-ops/issues/2258)) ([0ef7c23](https://github.com/santifer/career-ops/commit/0ef7c23672a572abc8dc54d53cdefd5f065e086b)) * **followup-seed:** age out an orphaned recover guard so it can't permanently disable stale-lock recovery ([799b3f8](https://github.com/santifer/career-ops/commit/799b3f86c2e40edec980d44704aa92f512312e13)) * **followup:** accept an estimated apply date and report which date the age came from ([14a4003](https://github.com/santifer/career-ops/commit/14a40030f51891e93c5a026ab388a0253aca0250)) * **followup:** recognise name-only outreach so an empty contact list means no contact ([6d32f33](https://github.com/santifer/career-ops/commit/6d32f33589608a7d8e0e95c6a48d6dd8e198b2f8)) * **jd-skill-gap:** canonicalize CV and JD tokens through skill-extract ([#2226](https://github.com/santifer/career-ops/issues/2226)) ([dbaa761](https://github.com/santifer/career-ops/commit/dbaa761d10abaf34e52684e04fb996a0625e70fc)) * **merge-tracker:** stop sibling-req clobber when the qualifier is a slashed acronym ([#2166](https://github.com/santifer/career-ops/issues/2166)) ([4910e73](https://github.com/santifer/career-ops/commit/4910e7398fb16442357db6a1cbe055afb1c28652)) * **pipeline-lock:** floor the ownerless stale check, harden the timeout tests ([4720e20](https://github.com/santifer/career-ops/commit/4720e20f45c34c14d3fff807880ff9e0e23a0ef4)) * **role-matcher:** fold accented Latin letters before tokenizing role titles ([#2209](https://github.com/santifer/career-ops/issues/2209)) ([830fe51](https://github.com/santifer/career-ops/commit/830fe511d04dce244b1ea20941a94b26a9d38d97)), closes [#2207](https://github.com/santifer/career-ops/issues/2207) * **scaffolder:** materialize the Kimi skill entrypoint on symlink-less filesystems ([#2259](https://github.com/santifer/career-ops/issues/2259)) ([06da05c](https://github.com/santifer/career-ops/commit/06da05c67283ce2c18c4c52e25ea7aee2d89d5ea)) * **scan:** a title-stated remote role survives a city-only location ([8c3e806](https://github.com/santifer/career-ops/commit/8c3e806201fa12d7780c4a085c4d8108e5c4b7ad)) * **scan:** ignore StepStone's volatile rltr param when deduping posting URLs ([#1982](https://github.com/santifer/career-ops/issues/1982)) ([b1ae044](https://github.com/santifer/career-ops/commit/b1ae0443d8eec1a1468cc603dc36c3f7e1344fe4)) * **scan:** portal-health cross-process lock + resolve PORTAL_HEALTH_PATH from cwd ([96c578b](https://github.com/santifer/career-ops/commit/96c578b689fc138811dd40ec296ae8c3eca497e7)) * **scan:** record auth, server and unknown fetch errors in portal-health instead of reachable ([#2236](https://github.com/santifer/career-ops/issues/2236)) ([2328f46](https://github.com/santifer/career-ops/commit/2328f469ce6575d1582964f35e6265216e045ff6)) * **test:** accept a materialized skill entrypoint, not just a symlink ([#2273](https://github.com/santifer/career-ops/issues/2273)) ([741fadf](https://github.com/santifer/career-ops/commit/741fadf65e1810645e816fa83d6ffa40ea645e6f)) * **tracker-utils, followup-seed:** floor the ownerless stale-lock check so a just-created lock can't be stolen ([cfc791d](https://github.com/santifer/career-ops/commit/cfc791d53513c8ab96ac29b76f4b705244b56365)) * **tracker:** a data row containing --- is invisible to merge-tracker dedup ([#2267](https://github.com/santifer/career-ops/issues/2267)) ([2333a0f](https://github.com/santifer/career-ops/commit/2333a0fa4221111d975cd0a2d51d498f853f6d1c)) * **web:** add Hired to the states.ts FALLBACK so the degraded path accepts it ([#2282](https://github.com/santifer/career-ops/issues/2282)) ([fd112c9](https://github.com/santifer/career-ops/commit/fd112c972d23cf0028e0411f36f67b1adf5520db)) * **web:** label-aware pipeline.md reader — posted:/trust:/note: never misread as columns ([6c75d9a](https://github.com/santifer/career-ops/commit/6c75d9aa03c919803ffe6939b2ba6f1cf7238db6)) * **web:** propagate the Hired terminal-success state across the whole dashboard ([#2250](https://github.com/santifer/career-ops/issues/2250)) ([29503dc](https://github.com/santifer/career-ops/commit/29503dca07c4f1725675299db48685565f159acb))