[1.135.0] — 2026-08-11
Parent career-ops v1.26.0 parity — five new zero-auth scan sources plus correctness fixes to four boards web-ui already carries. Registry now 78 sources = 73 EN + 5 RU (ALL_ADAPTERS 73).
Added
- Five new scan sources (parent #825 / #2527 / #2464), each a self-registering source + adapter + CI-isolated suite, appearing in the
#/scanSource filter (FALLBACK + live registry) and on the cvstart.org landing:join(JOIN, parent #2527) — reads a company's JOIN board from the Next.js__NEXT_DATA__embedded injoin.com/companies/<slug>(host-pinned, page-capped,redirect:'error'); detected from ajoin.comcareers URL.getro(Getro, parent #825) — VC "talent-network" portfolio boards (b2venture, Point Nine, Speedinvest, …) via the publicapi.getro.com/api/v2/collections/{id}/search/jobsPOST API, paginated newest-first with an age-bounded early stop; the numeric board id is set explicitly (getro_collection:), and each job is attributed to the portfolio employer, not the fund.consider(Consider, parent #825) — getconsider.com VC portfolio boards (Founderful, Creandum, Balderton, …) via the same-origin/api-boards/search-jobsPOST; the POST host is config-driven from the board's careers URL and pinned by a structural SSRF guard (public HTTPS host only — rejects IP-literals, loopback,*.internal).joinup(JOINUP, parent #825) — the Swiss startup board joinup.ch, reading the SSR'd newest page ofjoinup.ch/browse/jobs(__NEXT_DATA__); fail-closed on a scraper break.remotli(Remotli, parent #2464) — remotli.ch, a curated board of remote roles at Swiss companies (salaries in CHF), via the publicremotli.ch/api/jobs?remote=allJSON API; emits the employer's own ATSapplyUrlas the canonical link (so cross-listings dedup) and the real employer as the company.
Fixed
- a16z Speedrun no longer aborts the whole board on a transient blip (parent #2506) — the feed paginates into the hundreds of pages, so a single mid-sweep 429/5xx/timeout used to abort the provider and return nothing. Page fetches now go through a new shared
fetchJsonWithRetry(bounded retries on transient failures only — a permanent 4xx is never retried), and the page budget is re-sized for the 50-job page (DEFAULT_MAX_PAGES3→6,MAX_PAGES_CAP120→1000, parent #36d0c44). web-ui's page-0-throw / later-page-keep-partials dead-board contract is preserved. - arbeitsagentur moved to the v6 Jobsuche API (parent #2494) — the old
/pc/v4/jobsendpoint 404s; v6 (/pc/v6/jobs) renames the response shape (ergebnisliste,referenznummer,stellenangebotsTitel,stellenlokationen[]) and drops the detail-endpoint remote verification (v6's detail endpoint 403s to the public key), soremoteMatch:'filter'now narrows server-side withhomeoffice=nv_true+ the same title check. - The Hub moved to the v2
jobsandfeaturedAPI (parent #6b33fc4) — fromapi/jobstoapi/v2/jobsandfeatured(json.jobs.docs/.pagesenvelope), posting URLs rebuilt from the job id,countryCode=EUsent by default; The Hub rows carry no posted date and are exempt from the age filter (emitdate: ''). - hackernews finds the monthly "Who is hiring?" thread reliably (parent #3aa5e15) — the Algolia lookup filters by the
whoishiringaccount tag (tags=story,author_whoishiring) instead of a free-text query that could rank an unrelated recent story above the real thread once enough time had passed since it posted.
Notes
- Not ported (web-ui already safe, relay-absorbed, or CLI-only):
- The Unicode-aware role-dedup / company-matching keys (parent #2569 / #2587 / #2429 family): web-ui's repost grouping already keys company on a plain lowercase (
detect-reposts.mjs), so distinct non-Latin employers never collapse to one key — the exact bug those fixed.trust-validator's ASCII company/hostname heuristic degrades gracefully (returns "no flag" for a non-Latin name, never a silent merge), and role-token matching mirrors the parent's deliberate "non-Latin role distinction out of scope" decision. - The
followuprejection-latency signal (parent #2014) + newrejection-latency.mjs, and thecompany-fundedtouch-ups: web-ui relays these read-only, and the fail-soft relay absorbs the shape change with no code edit. scanenv-overridable pipeline/history paths (#2568) and--flag=valueparsing (#2589): web-ui runs the scanners in-process with its ownpaths.mjsand has no CLI arg surface.- The UA-consolidation refactor (
oraclecloud/vdab/jobspresso→ shared_http.mjs, #2536): a no-op for web-ui, which already centralizesBROWSER_LIKE_USER_AGENTinhttp-json.mjs. - CLI-only / non-mirrored: the untrusted-content coverage roster (#2521),
oferta/offer-preplawyer routing,doctorsubscription warnings, cover-letter signature block + unresolved-token guard, CV empty-section trimming, YC-seed paging,.gitattributes/.npmignore, and the parent's own Next.jsweb/changes.
- The Unicode-aware role-dedup / company-matching keys (parent #2569 / #2587 / #2429 family): web-ui's repost grouping already keys company on a plain lowercase (