[1.136.0] — 2026-08-11
Parent career-ops v1.26.x parity (post-v1.26.0 mainline) — one new zero-auth source plus a wave of quality & robustness ports to code web-ui mirrors. Registry now 79 sources = 74 EN + 5 RU (ALL_ADAPTERS 74).
Added
eightfold(Eightfold AI, parent #2684) — talent-acquisition boards via the zero-authhttps://<tenant>.eightfold.ai/api/apply/v2/jobsAPI, host-pinned to*.eightfold.ai(the brandedcareers.<company>.comCNAME is deliberately rejected — the entry must point at the tenant host); paginated with a safety cap, dead-board-throw, url-dedup. Source + adapter + CI-isolated suite; appears in the#/scanSource filter and on the landing.
Fixed
- Unicode-aware dedup & role keys (parent #2569 / #2587 / #2667) — a new shared
server/lib/text-key.mjs::normalizeTextKey(NFKC + lowercase, keeps letters/marks/digits of any script) replaces the ASCII-only keys web-ui mirrored from the core:detect-repostsnow keys the company on it, so width/punctuation/spacing variants ("Acme, Inc."≡"Acme Inc") cluster and a genuine repost is no longer missed, while distinct non-Latin employers («Тинькофф» vs «Яндекс») never collapse to one key.role-matcherfolds full-width titles (SENIOR …≡Senior …) and keeps non-Latin role tokens instead of erasing them to an empty set that could never match.
fetchJsonWithRetryno longer retries a refused redirect (parent #2657) — ourredirect:'error'SSRF guard meeting a 3xx surfaces as a no-statusTypeErrorthat looks transient but is deterministic; it's now classified non-retryable (via undici'serr.cause.message), so it fails fast instead of burning the whole retry budget.title_filter.positiveAND-groups (parent #2552) — a whitespace-delimited+inside a positive entry ("staff + platform") now requires every term to appear in the title, in any order; plain entries andc++-style terms are unaffected (the separator requires surrounding whitespace).oraclecloudaccepts the numbered tenant apexesoraclecloud1.com … oraclecloud99.com(parent #2683) — some tenants live only on a numbered apex (<t>.fa.ocs.oraclecloud26.com); the host pin now enumerates the bounded family (no leading zero, ≤ 2 digits — never a wildcard apex).workablehardened (parent #2675) — the widget request now goes through the shared retry helper with browser-like headers + a per-account referer and process-wide request serialization against the Cloudflare-fronted host.personiofalls back to an HTML scrape when the XML jobs feed is disabled (404) instead of returning nothing — same host-pinning, dead-board contract preserved.statesFALLBACK aliases resynced with the parent'sstates.yml(#2615) —evaluatedgainscondicional/hold/evaluar/verificar,skipgainsgeo blocker/geo_blocker(the live parent file is still read first; this only backstops a fresh clone).
Notes
- Not ported (not mirrored by web-ui, or CLI-only):
reply-matchercorroboration (#2672),jd-similarityseniority gate (#2661),jd-skill-gapheading recognition (#2686) — web-ui has no email-reply / JD-analysis surface;scanenv-path (#2568) /--flag=value(#2589) parsing and the per-run dedup-read perf (#… ) — web-ui runs the scanners in-process; cover-letter / CV-template / doctor / ollama / generate-pdf changes — CLI-only. The webjs-yaml/nanoidHIGH advisories were already patched in web-ui v1.135.0.