career-ops: v1.24.0
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:
- 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 searchPlus: 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 (2026-07-30)
Features
- compliance: check-table-freshness.mjs — staleness validator for jurisdiction tables (closes #2036) (1e83f67)
- contacts: company-history.mjs, employer silence and repost facts (#1712) (af21577), closes #1711
- contacts: job-search phonebook with vCard export (#1719) (8bba0ee)
- cv: block unsupported employer, title, and tool claims in cover letters (10a2e75)
- cv: recommend CV reuse for similar JDs — deterministic jd-similarity helper (07a7d9f)
- doctor: CLI-aware Playwright MCP detection + OpenCode config support (#2247) (960d00b)
- interview-prep: detect call platform (phone/Zoom/Teams/Meet) from invite text (9acfec1)
- interview-redflag: protected-grounds question detection with jurisdiction table (#2030) (6b25cdd)
- interview/debrief: correct contradicted facts in the prep file in place (e8e912b)
- interview/plan: wire in interview-prep's sourced-question research before Block 4 (3ceb404)
- interview: debrief directly from an existing transcript (#2122) (5cb7f0a)
- ledger: set-status transition log + mode wiring (#1695) (2af59e6)
- oferta/apply: immigration-status requirement overreach — jurisdiction table + posting signal + form warning (2a681d1)
- oferta/apply: jurisdiction-prohibited content signal — table + Block G + apply-form warning (d8dac75)
- oferta: agency licensing check — jurisdiction table + registry pointer for agency-mediated postings (closes #2037) (10bf77f)
- offer-prep: jurisdiction-aware restrictive-covenant notes (#2029) (6eb7778)
- outcome: outcome recording and application archiving, phase 1 (#2248) (6d60073)
- portals: standalone fix-slugs.mjs — auto-write ATS slug fixes to portals.yml (7ab1a1d)
- providers: a16z speedrun talent network board-wide feed (#2231) (1b785a9)
- providers: add iCIMS to the reverse-ATS full sweep (#2141) (b9cd65e), closes #2137
- providers: cryptocurrencyjobs — Web3 job board via public RSS, zero-auth (3310855)
- radancy: support legacy TalentBrew markup and the JSON results fragment (a3e6df9)
- scan-history: additive normalized-company column for reliable repost keying (#2243) (a4575a6)
- scan: add Playwright scanner for Interamt.de (2a132d0)
- scan: country-eligibility filter for remote postings (#2095) (79ba55d), closes #2093
- scan: negative-cache resolver refusals and stop the sweep on a resolver outage (#2266) (ebaed15)
- scan: pace DNS lookups so a full sweep can't trip a resolver's rate limit (e03719b)
- stats: wire followup-cadence's cold classification into activeApps (52a2be8)
- test: seed-fixture.mjs + era-appropriate install fixtures (#2032) (0c5d146)
- triage: standalone two-pass triage mode to cut evaluation tokens (#1550) (7f281d8)
- versioned application CV artifact schema — bundles with flat-path coexistence (1c7a7cb)
Bug Fixes
- analyze-patterns: use symbol-safe lookarounds so C++, C# and .NET stop vanishing from tech gaps (#2227) (85cb018)
- batch: don't mark a worker-reported failure as completed (c7b9519)
- ci: a fork signature's valid check must not go red when the ack comment can't post (5d7b625)
- cover: prevent double comma in achievement bullets (#2254) (31ddafb)
- dashboard: pin the row's own status to the top of the status picker (f214d03)
- dashboard: stop reading funding and valuation figures as Pay (#2139) (581374f)
- dashboard: the 'hired' status renders with no colour in the pipeline list (8465462)
- echojobs: keep hybrid roles distinguishable from remote (#2258) (0ef7c23)
- followup-seed: age out an orphaned recover guard so it can't permanently disable stale-lock recovery (799b3f8)
- followup: accept an estimated apply date and report which date the age came from (14a4003)
- followup: recognise name-only outreach so an empty contact list means no contact (6d32f33)
- jd-skill-gap: canonicalize CV and JD tokens through skill-extract (#2226) (dbaa761)
- merge-tracker: stop sibling-req clobber when the qualifier is a slashed acronym (#2166) (4910e73)
- pipeline-lock: floor the ownerless stale check, harden the timeout tests (4720e20)
- role-matcher: fold accented Latin letters before tokenizing role titles (#2209) (830fe51), closes #2207
- scaffolder: materialize the Kimi skill entrypoint on symlink-less filesystems (#2259) (06da05c)
- scan: a title-stated remote role survives a city-only location (8c3e806)
- scan: ignore StepStone's volatile rltr param when deduping posting URLs (#1982) (b1ae044)
- scan: portal-health cross-process lock + resolve PORTAL_HEALTH_PATH from cwd (96c578b)
- scan: record auth, server and unknown fetch errors in portal-health instead of reachable (#2236) (2328f46)
- test: accept a materialized skill entrypoint, not just a symlink (#2273) (741fadf)
- tracker-utils, followup-seed: floor the ownerless stale-lock check so a just-created lock can't be stolen (cfc791d)
- tracker: a data row containing --- is invisible to merge-tracker dedup (#2267) (2333a0f)
- web: add Hired to the states.ts FALLBACK so the degraded path accepts it (#2282) (fd112c9)
- web: label-aware pipeline.md reader — posted:/trust:/note: never misread as columns (6c75d9a)
- web: propagate the Hired terminal-success state across the whole dashboard (#2250) (29503dc)