[1.243.0] — 2026-10-08
The browser layer keeps your work safe and speaks your language: no unsaved-edit losses, no silent failures, no silent English in a translated UI, AA contrast everywhere.
Fixed
- Unsaved edits survive re-renders. The CV editor keeps a dirty buffer and restores it on every render — Cancel, a language switch, or navigating to CV Studio now prompts instead of discarding; the career plan keeps its generated text the same way. Load failures in Config/CV Studio/career-plan/memory/two-pager surface an error and disable Save instead of quietly overwriting the file with blanks.
- The "Record outcome" modal no longer survives navigation. Opening it on
#/trackerand clicking another view left it blocking the whole page (found in the v1.242.1 two-stand regression) — it now closes on route change; its scan-view siblings stop their SSE streams and detach listeners on navigation too. - Salary and keyword parsing reads every script. Keyword chips use Unicode word boundaries (Cyrillic,
c++,.netfilter correctly instead of to zero rows); one shared salary parser fixes$182.9K - $240K,от 100 000 руб,100 тыс. руб.,50 000 Kč(was 50M USD) and range semantics ($100-150K); must-have "Germany or Netherlands" no longer counts as both matched and violated. - Streams settle exactly once. A dropped SSE connection delivered the error twice and could leave Generate disabled forever; every terminal state (done/error/close/throw, including a killed child) settles one path and re-enables the button. The auto-pipeline flushes its final buffered frame instead of dropping it.
- Privacy and correctness in the little paths. The bug-report body no longer carries the evaluated job URL or report slugs; CV privacy masks bare
linkedin.com/in/…links, ALL-CAPS names, and stops mangling EU dates; country resolution takes the longest match and refuses to guess when two countries are named ("Cambridge, MA" no longer → UK); filename downloads keep Cyrillic names. - Router and a11y. The skip link no longer 404s into
ontent; the active nav item carriesaria-current="page"; one<main>/one<nav>; Escape closes the mobile drawer (which is now truly out of the tab order when closed);scroll-padding-topkeeps focus visible past sticky bars; the sticky banner no longer covers the topbar. - Contrast is AA in both themes — dark toasts were white-on-white (1.10:1): toasts, buttons, banners and links on
--rauschnow resolve through theme-invariant tokens, guarded by computed WCAG contract tests (≥ 4.5:1). - Everything else from the round: evaluate renders the truncation warning; memory/config/two-pager refuse to Save over a failed load; scan stops orphaning its SSE; scan results classify API-backed boards from the server registry instead of a drifted regex; the tracker's "Proceed with Caution" is a warning, not a badge-red; stats fold localized statuses; bar charts read correctly in RTL; the docs FAB no longer covers content on phones;
GET /app.jsanswers 404 instead of the index shell;GET /api/runnerslists its actions.
Added
- Danish joins auto-detection — a
da-DKbrowser now gets the Danish UI (the dict was complete, detection was missing it);zh-Hant*maps to Traditional Chinese.cv-diagnostics— the résumé checklist — is fully localized (28diag.*keys × 17). 26 field-spec labels added; 31 dead keys removed; provider lists no longer claim Hermes is "last in the auto order"; the docs-fab/menu aria-labels are localized.
Notes
- Tests 4812 → 5036 unit, browser 118 + new navigation/contrast contracts, coverage mean 98.15 % line / 89.34 % branch (floor 96/86).
- Not in this release: the
#/scanredesign (Phase 4 — v1.244.0, spec drafted); a dedicatedexport.docxFaileddict key (the failure reusescommon.error);5 lakhs INRstill parses as 5 (pre-existing).