Changelog
GitHubHver væsentlig ændring, udgivelse for udgivelse. Samme fil findes i repository'et og er oversat til alle 19 sprog.
[1.267.1] — 2026-11-04
Rettet
- Release-togs-reparation (v1.267.0’s CI-porte) — testtællekæden i PROJECT-CONTEXT knækker ikke længere ved v1.267.0-hovedet (pileformatet, som eval graderen matcher), QA-prompterne reorganiseres (én live prompt pr. release, v1.266.0 arkiveret), og dækningen pr. fil løftes over ratchet 98/90: applicantpros salary-renderer mister en uopnåelig fallthrough (salaryRangeOf giver dokumenteret undefined, {min}, {max} eller {min,max}), med de ensidede ≥/≤-grene nu pindet gennem fetch-flowet, og board-response-cache-suitten pinner no-store-bypass, den kalder-leverede 304 mod et ikke-gemt board og MAX_ENTRIES-evictionen.
- Test: det levende tal er 7395 (suiterne fra v1.266.0/1.267.0-bølgen bærer flere specs end de tidligere noter fulgte — kæden genforankres på det målte gulv: 7392 efter bølgen, + 3 gate-test i denne rettelse); dækning 98.51 linje / 90.35 gren.
Noter
-
Tagget v1.267.0 efterlades pegende på den røde merge-commit — peges ikke om (serveren afviser ompeggede tags); v1.267.1 er udrulningskøretøjet.
-
Patch-reparation af toget v1.267.0: CI-portene er grønne, kodetræet ændrede sig ikke væsentligt.
[1.267.0] — 2026-11-04
Tilføjet
- Fire nye scan-kilder — GermanTechJobs, Darwinbox, Keka, ApplicantPro/isolved (registret 125 → 129 = 124 EN + 5 RU · 124 adapters) — den anden parent-sync-bølge mod career-ops @
7d8feb6d(87 upstream-commits). GermanTechJobs (#6346): board-dækkende RSS pågermantechjobs.de/rss(~626 poster i én request); arbejdsgiveren er det sidste" @ "-segment i titlen — en titel uden sådan et segment droppes og bogføres aldrig under boardet; kun eksplicitprovider:-valg. Darwinbox (#6416): zero-authalljobs-JSON bag<tenant>.darwinbox.in, company-id’en kommer fra careers-URL’en, pagineret POST-gennemløb (50/side,max_pages20/200), hvor stop-ved-kort-side aflæses af kildens eget antal rækker. Keka (#6199): to requests — enredirect:'manual'-careers-shell, hvis script navngiver feed-UUID’en (en ukendt tenant 302’er tilTenantNotFound.htmlog læses som en navngiven 404), og derefter hele det åbne stillingslager i ét embed-jobs-array. ApplicantPro / isolved (#6252): den numeriskedomainIdfra bootstrap’et, derefter{success, data:{jobs, jobCount}};jobCount > rowsadvarer om, at listen er ufuldstændig; opt-inapplicantpro: { fetchDetails: true }beriger fra JSON-LD med 250 ms pacing. - Genbrug af board-svar via ETag (#6105) — inden for én scan genbruges et board-svar, der er hentet inden for de seneste 15 minutter, som det er, og ældre revalideres med
If-None-Match(304 beholder body’en); cache-nøglen dækker metode + URL + credential-headere + body, overlappende læsninger kollapser på det igangværende promise, ogCAREER_OPS_HTTP_CACHE=0/_TTL_MStilsidesætter den. In-memory pr. scan-kørsel (web-ui har ingen on-disk-cache-kontrakt) — en afvigelse er noteret.
Rettet
- Datoer på fire boards (#6274) — remoteok, remotive, workingnomads og IBM udsender nu en publiceringsdato, så «Posted within»-filteret virker der; remotives naive timestamp normaliseres til UTC (buggen med maskinafhængig alder var live), og IBMs
_sourceforespørger faktiskdcdate. - Et portals.yml-nøgle med stavefejl afvises (#6107) — EN-scannen kaster nu en navngiven fejl (fil + nøgle + forslag til den nærmeste nøgle, Levenshtein ≤ 2), før nogen fetch, i stedet for at ignorere
titel_filter:lydløst. - getro fortsætter gennemløbet forbi en gammel featured-pin (#6406) — et fastnålet, forældet posting droppes stadig, men afslutter ikke længere pagination’en; gennemløbet slutter på en ægte kort side.
Noter
- Bevidst ikke gjort: RU-scannerens seen-filter er ikke sprogbevidst, og dens portals-parsesti kører ikke misspelled-key-porten (hand-offs er noteret i bølgespec’en — intet RU-board udsender endnu rækker pr. sprog); remoteok beholder sin offset-bærende datostreng i stedet for at normalisere til UTC (dens live-shape er deterministisk). Tests 7096 → 7243; Playwright 173 pass / 0 fail / 1 opt-in skip; registret 129 = 124 EN + 5 RU · 124 adapters (alle tælleporte regenereret fra det levende register).
[1.266.0] — 2026-11-01
Tilføjet
- Personios sprogversioner overskriver ikke længere hinanden (CAR-223: parent #4789 + #5044 + #5285) — den udskudte stak, udført som sin egen udgivelse. Scan-siden (#4789):
scan_history.dedup_include_language: true(streng opt-in — OFF er byte-identisk) får sprogversioner af ét posting til at overleve dedup’en via seen-history-variantmekanikken (languageFormsFromUrl/recordUrlVariant/isUnseenLanguageVersion); den kanoniske nøgle fjernerlanguage/lang/locale-parametrene. preferred_languages (#5285): sorterer et postings versionsrækker med den foretrukne først (stabilt, provider-rækkefølge ved ligestilling) — uafhængig af kontakten (OFF beholder den foretrukne version, ON beholder hver version i den rækkefølge), med envalidatePreferredLanguages-port af validate-portals. personio fan-out (#5044): careers-siden hentes uden?language=en-tvangen (en tenants egen?language=xxrespekteres) og udsender én række pr. sprogversion medlanguage+?language=<code>-URL’er;dedupIncludeLanguagetilføjer fetches pr. sprog (loft 5, paced); /xml- og job-link-fallbacks uændrede. recruitee får sammelanguage-udsendelse +preferred_languages(opts eller entry). De fælles hjælpere ligger iserver/lib/language-preferences.mjs.
Noter
- Hand-offs noteret, bevidst ikke gjort: RU-scannerens seen-filter er ikke sprogbevidst, og intet RU-board udsender endnu rækker pr. sprog; client-spejlet
url-key.jsog koblingen af portals-route-valideringen forbliver åbne. Tests 7096 → 7203; registret uændret: 125 = 120 EN + 5 RU · 120 adapters.
[1.265.0] — 2026-11-01
Tilføjet
- To nye scan-kilder — Apple og Bulldogjob (registret 123 → 125 = 120 EN + 5 RU · 120 adapters) — parent-sync-bølge mod career-ops @
fe857ecf. Apple (jobs.apple.com, #5496 + #6196): sitet er en React Router SSR-app uden en brugbar JSON-API, så kilden læser hydration-blob’en fra den almindelige søgerute (window.__staticRouterHydrationData); opdagelsen styres af entry’en (apple.queriesmed relevans-sortering +apple.teams-slug-akser, ingen standarder — en entry uden nogen af dem kaster), siderne afgrænses afmax_pages(standard 2, loft 50) med 200 ms pacing, hvert URL-segment kodernes surrogate-sikkert, og en stilling Apple mærker PIPE bærer i sit snippet noten «kan være et talent pipeline» — der filtreres ikke på den. Bulldogjob (bulldogjob.pl, #6253): det polske tech-board har heller ingen JSON-API — listesiderne bærer__NEXT_DATA__(50/side,totalCount); entry’enscareers_urler den søgning brugeren byggede på sitet (filtrene bor i stien), hver request medtager en eksplicit/page,N, og gåturen stopper ved en kort side, det rapporterede total ellermax_pages(standard 25, loft 100) med et afkortningsmærke på delvise boards. - IBM-paginationens rework (#6273) — det faste 600-record-gennemløb bliver
max_pages(standard 20, loft 300, override pr. entry) med 200 ms pause mellem sider og pr.-side-retry viafetchJsonWithRetry; en fejlende første side kaster, en fejlende senere side beholder det indsamlede og navngiver siden, og kun en fuld side ved entry’ens eget loft advarer «raise max_pages».
Rettet
- justjoin daterer job efter
lastPublishedAt(#6254) — kandidat-API’enspublishedAtrykker sig ved hver opdatering fra arbejdsgiveren, så størstedelen af boardet bar dagens dato og `max_posting_age_days lod ugers gamle job slippe igennem; nu vinder den tidligere publiceringsdato, med fallback når den mangler eller ikke kan parses. - jobvite folder rækker der deler ét posting URL (#6127) — et offentligt feed returnerer én
<job>-række pr. by for ét detail URL; parseren beholdt den første by og lod scanneren tælle resten som dubletter. Nu bidrager søskende kun med lokationer, sammenføjet med·i feed-rækkefølge, første titel/dato består, og remote revurderes på den sammenfattede lokation. - Liveness: et UltiPro-rung (#6090) — UKG har ingen per-posting JSON-endpoint og svarer 200 på lukkede, så alle 57 lukkede UltiPro-stillinger blev læst uncertain. Detaljesiden indlejrer rekorden:
OpportunityIsClosedtrue/false → expired/active, boardets «opportunity unavailable»-notice → expired, alt andet overlades til browseren. Built Ins banner «Sorry, this job was removed» bliver hard-expired (#6336) — siden beholder den fulde JD og APPLY-kontrollen; nu vinder banneret, og et søskende-«Job removed»-badge uden «sorry» matcher ikke.
Noter
- Bevidst ikke gjort: parent-siden af jobvite-fixen om scan.mjs’s lokations-kompilator (web-ui dokumenterer USPS-kompilatoren som no-port) og forælderens
note-felt til Apples PIPE-hint (web-uis job-shape har ingennote; den rejser isnippet). Tests 7096 → 7135 (+39); Playwright 173 pass / 0 fail / 1 opt-in skip; coverage gate ≥ 98/89; registret 125 = 120 EN + 5 RU · 120 adapters (alle tælleporte regenereret fra det levende register).
[1.264.3] — 2026-11-01
Rettet
- Rate-limit-hærdningsbølge (review LOW nr. 1–3 fra
REVIEW-2026-10-31-v1.264.1) —writeRateLimit()(express-rate-limit@7.5.1, 60 req/min route×IP, 429 JSON + Retry-After) dækker nu alle 47 muterende endpoints (var 2): 9 forkert scopedllmRateLimit-guards erstattet (/api/config—.env-omskrivningen!,PUT /api/batch,/api/batch/merge, outcome, followup/seed, assessments, stats/snapshot, mock-interview/save, networking/save), 3 stablet foran LLM-bucketen på de dyre stier (/api/evaluate,/api/deep,/api/auto-pipeline) og 33 nøgne registreringer koblet på (CV/profil/modes-editorer, alle tracker-skrivninger, pipeline POST/restore/DELETE, jds, de 7/api/run/*via én loop-ændring, posting-guard, Playwright-PDF inline, portals toggle/health/track, discover, reports, export/docx, two-pager, career-plan, memory og de tre DELETE-routes)./api/apply-helperforbliver allowlistet bare (ren lokal beregning, pinnet); 16 rene LLM-routes beholder den betingede LLM-bucket med vilje. En fuldstændighedstripwire (tests/rate-limit-coverage.test.mjs, red-first ved 27 nøgne) fejler CI ved enhver fremtidig muterende registrering uden throttle. TRUST_PROXYopt-in + genaktiverede valideringer (review LOW nr. 1–2) —app.set('trust proxy', N)respekterer enTRUST_PROXY-env antal hop (aldrig booleantrue— det ville nøgles på den angriberstyrede venstre XFF-ende); ikke sat som standard, så loopback beholder sin dokumenterede socket-nøglede per-route-degeneration.validate: falsebliver til en målrettetwriteValidateConfig(): kunxForwardedForHeaderer opted out (Caddys XFF ignoreres med vilje uden trust proxy), alle andre valideringer — inklusivetrustProxy— er højlydte igen, så en fremtidigtrust proxy: true-fejlkonfiguration dukker op somERR_ERL_PERMISSIVE_TRUST_PROXYi stedet for at forblive lydløs. Den brugerdefineredekeyGeneratorblev fjernet med vilje: express-rate-limit kobler sine proxy-valideringer til standard key-generatoren, og per-route-isoleringen er uændret (énMemoryStorepr. factory-kald).- cvstart.org copy-feedback nulstilles efter 2 s (CAR-141) — «Скопировано ✓»-tilstanden holder nu acceptanskriteriets 2 sekunder (var 1,5 s), red-first pinnet i
tests/site-copy-feedback.test.mjs. Dette lukker det sidste CAR-141-kriterium, som agenten kan fikse; demovideo-opfriskningen forbliver udskudt af ejeren (beslutning 2026-11-01).
Ændret
- Help-bundterne siger 19 sprog (×19) — §19 “Localizing the app”- og §32 “Run it from OpenWorker”-sætningerne halter ikke længere to lokaler bagefter: hvert bundt siger nu 19 med தமிழ் og Tiếng Việt i sin egen opremsningsstil (ar bruger den udelte «التسع عشرة»), og
vi.md§32’s egen «cả-17»-rest er også fixet. Struktur-gates (33 H2 / 125+ H3) byte-stabile. - State-hygiejne —
AGENTS.mdangiver v1.264.2 / 7082 tests (var v1.86.x / 1566);PLAN.mdmarkerer udgivelser 1–7 som Shipped, og dets ship-train-afsnit siger docs ×19;StatsBar.astro-kommentaren beskriver nu, hvadfacts.adaptersreelt indeholder (123 = sources-total, det historiske nøglenavn bevaret for forbrugere);i18n.js-headeren siger 19 sprog; v1.264.2 QA-prompten bærer den reelle dækning (98.45/90.05) og Playwright-regnestykket (176 = 174 harness + 1 opt-in skip + 2 suiter på script-niveau).
Noter
- Bevidst ikke gjort: parent-sync-bølgen ifølge den noterede port-liste forbliver i BACKLOG — fork’en skal synkroniseres forbi upstream
a9476866først (7 af de 10 port-liste-commits er endnu ikke i det lokale forælder-træ; IBM/UltiPro/Bulldogjob/apple scoupet S–M, personio language-dedup udskudt til sin egen udgivelse). CAR-141’s genindspilning af demovideoen er bevidst udskudt af ejeren («видео не надо пока», 2026-11-01). - Tests 7082 → 7096 (+9 coverage-tripwire + 5 trust-proxy); Playwright 173 bestået / 0 fejlet / 1 opt-in skip (+2 chevron-pins inde i eksisterende cases); dækning 98.46 linje / 90.10 gren; evals 14/0/1skip; registry uændret: 123 = 118 EN + 5 RU · 118 adapters.
[1.264.2] — 2026-11-01
Rettet
- Sidebar-gruppeoverskrifter følger nu afkortningskontrakten (CAR-219) — gruppens toggle-labels (
.nav-v2-toggle > span) afkortes nu med en ellipsis og bærer en lokaliseret tooltip via sammesyncLabelTitles()-mekanisme som CAR-203-nav-elementerne; chevronen skrumper aldrig, togglen forbliver klikbar, og RTL holder. Red-first-pin itests/nav-v2.test.mjs(+1 → 7082 tests).
Ændret
- cvstart.org-teksten udkommer på alle 19 sprog (CAR-220) —
meta.helpDesc,helpTeaser.c1.descogfaq.a2er oversat til alle site-lokaler (de var EN-only i v1.264.1 med vilje); GitHub Pages leverede den opgraderede tekst live på cvstart.org. - Backlog- og review-hygiejne (CAR-221/222) — de seks «port when merged upstream»-punkter er lukket: alle syv upstream-PR’er er merget, fire punkter var allerede porteret, to ligger hos forælderen.
docs/reviews/REVIEW-2026-10-31-v1.264.1.mdlander (0 HIGH / 0 MED, tre LOW-opfølgninger noteret i BACKLOG), og parent-sync-port-listen er noteret (6 PORT / 3 VERIFY / apple-kildehullet; upstream-hale 118 commits @ VERSION 1.38.0).
Noter
- Changelog-spejl-stempel-fixet (
92a05fcf) følger med i dette tag: alle paginerede spejle på cvstart.org bærer nu den genererende udgivelsesversion, såsite-build-after-fanout-graderen endelig øver sin reelle logik i stedet for at skippe. - Bevidst ikke gjort: throttle af de resterende muterende POST’er (review LOW nr. 3) og trust-proxy-bucket-koblingen — noteret i BACKLOG til den næste hærdningsbølge. CAR-141 (demovideo) forbliver ejerens.
- Tests 7081 → 7082 (+1 CAR-219-pin); Playwright 176; registry uændret: 123 = 118 EN + 5 RU · 118 adapters.
[1.264.1] — 2026-10-31
Rettet
- Sidebar-piller afkorter lange lokaliserede labels elegant (CAR-203) — nav-label-spanen er nu et ordentligt flex-element (
min-width: 0+overflow: hidden+text-overflow: ellipsis+nowrapiv2-nav.css), ogsyncLabelTitles()inav-v2.jsspejler den lokaliserede label over i tooltippen via sammedata-i18n-nøgle (nul nye i18n-nøgler) — den lange «Профинансированные компании» kan igen læses ved hover i stedet for at blive hårdt klippet af rækkensoverflow: hidden. Touch-målet på 44 px, den aktive maling og RTL-spejlingen er urørte; red-first-pin itests/nav-v2.test.mjs. - Ét evalueringsloft på 480 s for alle lokaler (CAR-218) — remote-QA v1.264.0 afdækkede forbigående
502 · 300 s · 0 ch-evalueringer påesogzh-CN(punkt-genkørslen bestod, men muren var reel).EVAL_TIMEOUT_MSer nu480_000, ogevalTimeoutMs(lang)returnerer den ubetinget —GEMINI_EVAL_TIMEOUT_MSog auto-pipeline arver den. Det locale-bevidste token-budget fra CAR-174 (16384 / 32768) forbliver den eneste per-locale-opdeling.
Ændret
- cvstart.org-FAQ’en bærer eksakte kildeantal (CAR-217) —
{sources} job-board sources: {sourcesEn} international boards plus {sourcesRu} Russian onessubstitueres frafacts.json, som genereres fra det levende registry (123 = 118 EN + 5 RU), så tallene aldrig kan drive; lokaler, der stadig er på den ældre~{adapters}-formulering, fortsætter med afrunding viaadaptersRounded. EN-tekstopgraderinger følger med (meta.helpDesc,helpTeaser.c1.descogfaq.a2nævner kommandomenuen, den grupperede pipeline med undo og kanban-trackeren).
Noter
- Bevidst ikke gjort: site-i18n-tekstopgraderingerne (
meta.helpDesc/helpTeaser.c1.desc/faq.a2) forbliver EN-only i denne udgivelse — andre lokaler beholder korrekt, men rundere formulering indtil den næste docs-bølge (deresfaq.a7får pladsholderne med de eksakte tal, hvor de er oversat). CAR-141 (demovideo) forbliver ejerens; den afløstecar136/m141-gren blev slettet med sine idéer noteret på Linear-opgaven (kan gendannes via taggetarchive/car136-m141). - Tests 7041 → 7081 (CAR-203-pin + CAR-218-pin-omskrivninger); Playwright 176; registry uændret: 123 sources = 118 EN + 5 RU · 118 adapters.
[1.264.0] — 2026-10-31
Tilføjet
- Inline-redigering af tracker-status — hver rækkes status-badge i
#/trackerer en kompakt<select>med de kanoniske stadier (fraGET /api/tracker/stages, aldrig en hardkodet whiteliste).POST /api/tracker/statusvideresender til forælderens kanoniskeset-status.mjsunderapplications.md-låsen (status-whiteliste viastates.mjs,--dry-run/--note-gennemgivelse, fail-soft 502 med saniteret detalje, argv-array-spawn). Succes opdaterer rækken på stedet (tone-klasse + fanetællinger, fokus bevaret); fejl tilbagefører og viser en toast. Rækker, som videresendelsen ikke kan ramme — en håndredigeret ukendt status, en backfill-sentinel#— beholder det skrivebeskyttede badge (route-review LOW-fixes; reviewer: ingen HIGH/MED-fund). - Serveradvarsler vises på alle AI-sider —
evaluate,deep,auto-pipeline(både side og modal),career-plan,marketogcv-studio(humanize + tailor) renderer nu serverenswarnings-array (output-token-forkortelse, sprogdrift, datokorrektioner) som etbadge-warn-bånd (role="status"); auto-pipeline-modalen taber ikke længere done-frame-advarslerne. Ny nøglellm.truncatedNotice×19. - Dækningsbølge (+111 tests) —
routes/map.mjs100/94.9,geocode.mjs96.3/92.9,content.mjs99/84.9,networking.mjs96.4/89.1,sources/habr.mjs100/98.2 (nyetests/cov-*-routes.test.mjs×3,tests/sources-habr.test.mjs); gren-gulvet holdt på ≥ 90 %. - Linear CAR-191…216-lukningsbundt (
docs/reviews/2026-10-30-linear-car191-216-closure-bundle.md) — ejers afslutningstekst klar til at indsætte, med commit-SHA’er pr. CAR og beviskommentarer.
Rettet
- Trudvsem-scan-kilden — en tom side (
results: {}, også «forbi enden») dræber ikke længere hele scan’en (rene nul rækker); API-fejlkonvolutter (HTTP-200 medstatus: 500) kaster med API’ets egen tekst; pagineringen går i post-offsets (var side-indeks — sider blev stille duplikeret, ~52 stillinger i stedet for hundredvis); gennemgangen stopper før API’ets deep-offset-fejlzone (offset × limit ≥ 10000). Verificeret live end-to-end. - habr — titler/firmaer tag-strippes efter entity-decoding (hh.mjs-paritet):
<script>i en kort-titel kan ikke længere nå scan-rækkerne som levende markup; legitime>>i titler overlever. - PUT /api/profile (rå sti) — en
candidate:-blok uden en ikke-tomfull_nameafvises, samme linje som fields-merge-stien (den gemte tidligerefull_name: null). - Ærlige hints —
.docfjernet fra CV-uploadens acceptliste og fracv.uploadHint×19 (parseren understøttede det aldrig);config.openaiModelHint×19 nævnergpt-5(serveren kortlægger ethvert*-codex-id til det);config.anthropicModelHint×19 og Anthropic-standard spejler nu forælderens tier — standardclaude-sonnet-5-5, premiumclaude-opus-5-5. - Claude Code-doklink →
code.claude.com(den gamledocs.anthropic.com/en/docs/claude-code-URL giver TypeError i links-gaten). - help ×19: Row-density-bulleten er væk (togglen forlod UI’en i v1.263.0), og 18 ødelagte
**fed**-span-familier er repareret — plus renderer-leak-klassen fixet ×19 (anden tom linje efter hver tabel-før-afsnit; pipe-tegnet ud af fed-celler): 0 bogstavelige**i rendering på tværs af alle 19 help-bundter.
Noter
- Anthropic-standardmodellen er skiftet til
claude-sonnet-5-5(forælderens standard-tier). Deploys, der stolede på den gamle stille standard (claude-sonnet-4-6), opgraderer automatisk — pinANTHROPIC_MODELi.envfor at fravælge. - Bevidst ikke gjort: de to LOW-review-prikker, der med vilje er ladt åbne (inline-select spejler ikke kanbanens
movesReady-nedgradering — ærlig toast ved enhver fejl er den valgte adfærd;code: 'timeout'-grenen forbliver dækket af fake-writer-kontrakten, ikke af en >30 s-test). CAR-141 (demovideo) forbliver ejerens. - help ×19 fik efter udgivelsen en prosa-omgang (density-bullet ud, renderer-leak-klassen fixet) på
main, efter at v1.263.0 blev udgivet — denne udgivelse er det første tag, der bærer den. - Også i dette tag: evidence-chip-plumbing (rapport-parsers + visnings-badges), fix-report-links-runneren (
POST /api/runners/report-links, kortet «Reparer» på#/health) og batchomkostningsestimat/-bekræftelse med usage-optagelse — landet på main mellem branch-klippet og tagget.
Tests 6905 → 7041 (+136) · Playwright 176 (173 bestået / 1 opt-in skip) · dækning 98.5 % linje / 90.1 % gren · registry uændret: 123 sources = 118 EN + 5 RU · 118 adapters.
[1.263.0] — 2026-10-30
Tilføjet
- Motion-polish-lag — ny
motion.css(sidste app-ark): modal/popover-indgange (scale .97 + fade, 130–180 ms), toast spring-in + blød leaving-tilstand, theme-toggle tryk-fjeder, chip/tab tryk scale(.97), stagger-infrastruktur (50 ms-trin, loft 12),.page-enterruteskifte-fade (router), focus-halo-overgange på chips/tabs. Hver regel erprefers-reduced-motion-sikker (bevægelse falder til none, opacity/farve består). - Touch-korrekthed — 68 hover-lift-regler var ubeskyttede: touch-enheder fik hængende et “løftet” kort efter et tryk. Alle transform-hovers er nu
@media (hover:hover)-gated (motion.css-neutraliseren), og kort-liftet gælder kun reelt interaktive kort (.card:has(a),a.card,button.card,[role=button].card) — ikke flere falske affordances på statiske kort. - A11y: alle kontroller har et programmatisk navn. Ny
A11yDump-hjælper navngiver alle 16 readonly LLM-output-dumps; 12 placeholder-only-felter (CV Studio ×6, config ×2, scan-søgning, tracker-score-vælger, outcome-note, plan-editor, auto-URL, bug report) fikaria-labels;a11y-form-wires-gaten håndhæver det nu klasse-dækkende (var 26 unavngivne steder, nu 0 + allowlist med dokumenterede begrundelser).
Rettet
- #/scan: den sticky tabel-header tegner ikke længere oven på topbar-søgningen, når den scroller under den (z var lig med topbarens, den senere DOM vandt — nu token-afledt under den); «Зарплата от/до»-inputfelterne er normal-store igen (en
.v2-scan-bar .input-flexregel lækkede ind i popoverens kolonneflex og satte flex-basis 200 px som HØJDE — nu>-scopet + popover-guard); density-toggle-knappen er fjernet ved ejerbeslutning (plumbing beholdt, i18n-nøgler fjernet ×19). - Deploy-workflow-hærdning (F1–F6):
provider-input charset-valideret før enhver shell-sammenføjning; hermes-diagnostik redigerer værdier (case-insensitivt nøglefilter + værdimaske + 80-tegns-klip på alle tre sinks,?token=maskeret også); hermes-trinnet respektererinputs.app_dir; public_url https-gated; anti-downgrade-guarden har 6 eksekverbare pins (ingen defaults, guard-før-Deploy-rækkefølge, strict refs-regex). - Review-hale, red-first: CSV-import backslash round-trip (re-import deduplikerede igen), cv-voice head-strip 4827 ms → 13 ms,
statedYearsMinberegnes dovent, posting-guard capture TOCTOU, MiniMax CN-wildcard, deel token-skip, import-vælger size-guards før læsning. Import-modal: nav-guard aktiveret, file-input fjernet ved annullering, bevogtede dubletlæsninger,numvia reduce. - Owner UX-batch: dashboard-heroens lodrette rytme (inline-level børn limet sammen i én linjeboks); help TOC −8 px forskudt aktiv række (per-række inline-gutter + talkolonne); mobil drawer (synlig ✕-lukning, scrollTop-nulstilling, den fantom-
--paper-fade gated til.has-hud); docs-assistant-siden overflyder ikke længere med en lang URL i et svar (gridmin-width-kæde +overflow-wrap: anywhere); «Недавние» forklaret (hint) + kan ryddes; career-plan Save genarmes efter en fejlet indlæsning; evaluate URL-prefill brænder ikke længere et LLM-kald på indsæt-pladsholderen; auto-pipeline Enter respekterer IME-komposition. - Kontrast (WCAG-audit, 296 par): docs-fab-gradient 2.43 → 6.4:1, toast.success → ok-soft-parret (1.75 → AA dark), banner btn-dark →
--ink-flip, scan-logbtn/reposts-badge/fab-chip/close lyse varianter, og formular kontrolrammer til 3:1 (--cv3-input-line, WCAG 1.4.11 — var 1.2:1). - Visuel omgang: trackerens tomme tilstand er et fuldbreddes-kort (var klippet inde i 760 px-tabellen ved 390); scan-konsollinjen ellipser i stedet for at klippe halvt; den flydende chat-FAB dækker ikke længere indhold ved 390 (44 px-mål, inset 12); dashboardens «Application statuses»-tomme tilstand følger v2-empty-mønsteret; stats «?»-hintet får en divider + 44 px-mål; career-plan Input-fanen forklarer, hvor resultatet lander; help §1 markdown (18 ødelagte bold-spans).
Ændret
- Accent blå → karmosinrød (ejerønske, logo-koherent, hue 15) — 5 cv3-tokens × 3 tema-blokke;
docs-assistant-chatboble-tekst rider på--accent-ink(var bogstavelig #fff, 2.39:1 i dark); funded-wash rider på--accent-soft. Danger forbliver hue 25 med sine egne behandlinger. - Docs: README testing-tabel-tælling ×17 (en drift fra v1.248-tiden), help §1 + 18 markdown-spans, help fr/it/ta «118», leverandørpriser CHECKED_ON 2026-10-30, HANDOFF/CONTEXT/TRACEABILITY-fakta.
Noter
- Bevidst ikke gjort: skeleton sweep-omarbejdningen holdes ude (car112-kontrakten pinner den nuværende fade ordret); theme-toggle-ikonets crossfade forbliver en
display-swap (theme-toggle Playwright-kontrakten observerer den);.btn:active-scale blev ikke duplikeret (app.css ejer den); motion stagger er kun infrastruktur — dashboard-tiles adopterer den senere; help ×19-prosa (density-omtale, §1 markdown, «118») kommer med den næste fan-out. - Fuld remote-QA-dokumentation: ja punkt-genkørsel grøn (376 s / A–G ✓) på v1.262.4; en/it grønne tidligere i token-dense-æraen.
Tests 6869 → 6905 (+36) · Playwright 176 · dækning 98.4 % linje / 89.9 % gren · registry uændret: 123 sources = 118 EN + 5 RU · 118 adapters.
[1.262.4] — 2026-10-30
Rettet
jatilslutter sig de token-dense evaluerings-sprog (ja→ 32768-token-loftet + 480 s-uret). 5-locale-punkt-genkørslen på prod v1.262.3 adskilte nattens fire502 · 300 s · 0 ch-timeouts i forbigående og deterministiske: ar (250 s), ko (291 s) og zh-CN (259 s) bestod deres genkørsler, ru’s engangs-sproglige afvigelse gentog sig ikke — menjaramte standardloftet to gange med nul output (den fulde ×19-kørsel 40981578549 og punktkørslen 41012725839). Samme formklasse som it/pl. Red-first-pin:evalMaxTokens('ja') = 32768,evalTimeoutMs('ja') = 480_000, de andre locales beholder 300 s.
Noter
- Bevidst en patch med ét formål:
ja-rettelsen er den eneste ændring, denne udgivelse sejler med — den medfølger ikke noget andet. ar/ko/zh-CN bliver på standardloftet på nattens belæg (de består; nattens fejl var forbigående provider-belastning), og ru’s afvigelse var en engangs-genereringsfejl.
Tests 6868 → 6869 (+1) · Playwright 176 · registry uændret: 123 sources = 118 EN + 5 RU · 118 adapters.
[1.262.3] — 2026-10-30
Rettet
pltilslutter sig de token-dense evaluerings-sprog (pl→ 32768-token-loftet + 480 s-uret). Den fulde remote-QA på prod v1.262.1 greb den polske evaluering i at dø ved standardloftet —502 · openrouter · 300 s · 0 ch— og punkt-genkørslen afsendt med v1.262.2 gengav den præcist (kørslerne 40960568766 og 40968958062): 18/19 locales bestod A–G,itsluttede på 302 s inden for token-dense-uret på 480 s, ogplramte muren to gange med nul output. En deterministisk timeout, ikke en fejl — samme formklasse, der flyttedeiti v1.262.1. Red-first-pin:evalMaxTokens('pl') = 32768,evalTimeoutMs('pl') = 480_000, de 18 standard-locales beholder 300 s.
Noter
- Bevidst en patch med ét formål:
pl-rettelsen er den eneste ændring, denne udgivelse sejler med — den sejler ikke noget andet med; gennemgangs-hale-indholdet fra v1.262.2 udkom separat.
Tests 6867 → 6868 (+1) · Playwright 176 · registry uændret: 123 sources = 118 EN + 5 RU · 118 adapters.
[1.262.2] — 2026-10-30
Rettet
- Gennemgangsbølgens hale — 7 fund med lav alvorlighed, hvert red-first. CSV-importens backslash-rundtur: en
\i en celle blev skrevet fordoblet og læst tilbage fordoblet, så re-import af den samme CSV overså company+role-dedup’en og kunne skabe en dubletrække — læseren unescaper nu\\efter splittet (write→read-rundturen er tabsfri, re-import deduper). cv-voice<head>-fjernelsen var kvadratisk på uafsluttede tags — 4827 ms → 13 ms på det 64 KB-input, ruten loftes ved.statedYearsMinkørte den fulde years-parser for hvert job fra hver kilde, selv nåryears_minikke var konfigureret — nu dovent, de sekunders CPU-tid pr. stor scan er væk. En capture, der blev slettet mellem readdir og statSync, fik posting-guard-listingen til at crashe (TOCTOU — forsvundne filer springes over). MiniMax’ CN-standard matchede kunapi.minimax.cnhelt præcist — enhver*.minimax.cnbase-URL får nu CN-modellen. Deel$-tokens, der ikke er hex-referencer, lækker ikke længere ud i snippet’en som literaler. Import-vælgeren tjekkerfile.sizeFØRfile.text()— serverens 512 KB-grænse svarede 413 først, efter browseren havde parset en muligvis kæmpestor fil — med et lokaliseretimport.tooLarge-toast ×19. - Deploy-workflow-hærdning (workflows-gennemgangen F1–F6).
providervar det eneste input, der interpoleredes ind i den fjerne shell uden tegnsætvalidering — en'i værdien brød ud af citationerne og kunne køre vilkårlig kode på prod; nu whitelisted^[A-Za-z0-9_-]+$før enhver sammenføjning, og nøgle-vagtens grep kan ikke længere bestå fejlaktigt. Hermes-diagnostiktrinnet udskrev rå journalctl- og unit-dumps til den offentlige log; dets filter overså versale*_API_KEY=og maskerede intet — nu en delt case-insensitiv redaktion + værdimaskering + 80-tegns-afkortning på alle tre sinks,?token=-querystrenge maskeres også. Hermes-trinnet ignoreredeinputs.app_dirog hardkodede/opt/career-ops/src/.env.public_urlnåede curl uden et https-tjek (option-injektion via en indledende-). Og anti-nedgraderings-vagten — v1.238.0-incidentens rettelse — havde ingen eksekverbar gate: seks nye pins i ci-workflows (refs har ingen defaults, vagten kører før Deploy, striks refs-regex). - Import-modalens hale (SPA-gennemgangen). Modalen aktiverer den samme nav-vagt som outcome-modalen — navigation væk efterlader den ikke længere forældreløs oven på en anden visning. Det skjulte file-input fjernes ved
cancel, ikke kun vedchange— gentagne afbrydelser lækker ikke længere inputs ind i document.body.plan.duplicateslæses gennem den bevogtede form i previewet. Trackerensnum-allokering brugerreducei stedet forMath.max(...spread)— spread’et rammer argumentgrænsen ved ~100k rækker.
Ændret
- Docs: hjælpeguidens «118 EN adapters»-punkt bærer nu tallet i fr/it/ta (de andre 15 locales havde det allerede). Leverandørpriserne på cvstart.org genverificeret mod de officielle prissider — alle fire uændrede, CHECKED_ON → 2026-10-30. En post-release drift-sweep rettede 42 forældede antals-/versionslinjer på tværs af README ×19, CONTEXT.md, CLAUDE.md og SDD-manualerne (rester fra 109/104-æraen og v1.262.0-æraen).
Noter
- Bevidst undladelse: cv-studios native
window.confirm(CAR-179-æraen) forbliver — konverteringen tilUI.confirmer en opfølgning, ikke et patch-punkt;<mark title>-tooltippen for slidte fraser forbliver tooltip-kun (acceptabelt a11y-gulv);remote-qa.ymlbeholdercancel-in-progress: true— re-dispatch oversprøjter bevidst en kørende regression. - Fuld remote-QA på prod v1.262.1: ruter ×19 ✓ · site ×19 ✓ · links ✓ · live LLM 18/19 locales A–G ✓ —
plramte en enkelt502 · 300 s · 0 chprovider-timeout (ikke token-dense-territorium; punkt-genkørslen følger med denne udgivelse).
Tests 6867 (6864 pass / 0 fail / 3 skip, +26 vs v1.262.1) · Playwright 176 · dækning 98.42 % linje / 89.94 % gren · registry uændret: 123 sources = 118 EN + 5 RU · 118 adapters.
[1.262.1] — 2026-10-29
Den italienske evaluerings-patch: it tilslutter sig de token-dense sprog (32768-token-loftet + 480 s-uret), efter at OpenRouter-æren greb den i at skære rapporten lige før SCORE_SUMMARY-blokken — og provider-skift-værktøjet, der gjorde diagnosen mulig, lander i deploy-workflowet.
Rettet
it-evaluering skåret før SCORE_SUMMARY (CAR-190-halen): remote-QA 40928864980 (første kørsel på de genopfyldte kreditter) — enit-evaluering løb 264 s og kom tilbage med 15 045 tegn vedtok ~15635ved loftet 16 384: blok A–G intakt,---SCORE_SUMMARY---væk. Samme formklasse, som gavtasit loft i v1.261.1 (CAR-174).ittilslutter sigTOKEN_DENSE_EVAL_LOCALES(ta,hi→ta,hi,it): både 32 768-token-budgettet og 480 s-uret gælder nu, og/api/evaluate+ auto-pipeline forbliver på den ene sandhedskilde illm.mjs.- en-rapport uden blokke — en engangs-generationsfejl: samme kørsel så en enkelt
en-evaluering komme tilbage sprogkorrekt uden nogen af A–G-blokkene; en målrettet genkørsel bestod rent (21 091 tegn, A–G ✓). Ikke tilføjet til token-dense-sættet — én fejl er ikke en historie.
Tilføjet
- Deploy-workflow:
mode=hermesogmode=provider(CAR-190 ops-halen):mode=hermesgenstarter Hermes-gatewayen og udskriver en fuld diagnose (unit-fil med hemmeligheder strippet af, listeners før/efter, sudo-journal, pr.-port-prober, appens egenHERMES_BASE_URL-visning, OpenRouter-kreditsaldo);mode=providerskifterLLM_PROVIDERmed en nøgle-tilstedeværelsesvagt (nægter, når målprovidereens*_API_KEYmangler) og genstarter appen — sådan flyttede prod tilopenrouter, da Hermes-kreditterne løb tør midt i det. Deploy-modes ref-vagt valideres kun formode=deploy, så recon/verify-dispatches virker igen (required-inputs-ændringen fra v1.261.3-æren havde tavsgjort dem).
Noter
- Bevidst undladelse:
entilføjes ikke til token-dense-sættet — én blokløs rapport er en generationsfejl, ikke en volumenhistorie. - Bevidst undladelse: ta’s forstærkede sprogdirektiv udvides ikke til
it— ingen sprogdrift blev observeret for italiensk. - Bevidst undladelse: optagelsen af den nye UI-v2-demo-video forbliver hos ejeren (CAR-141) — landingssiden indlejrer nu alligevel via
youtube-nocookie.com. - Tests 6841 → 6841 på release-branchen.
[1.262.0] — 2026-10-29
Upstream-funktions-minoren: Deel-jobbrættet tilslutter sig scanneren (registry 123), en anden trackers CSV importeres direkte i #/tracker, posting-guard-integritetstjekket og CV-voice-tjekket lander som relays/lints, scanneren lærer et years-of-experience-filter, og Apply-knapper på syv flere sprog læses ikke længere som manglende — plus MiniMax’ pensionerede standardmodel erstattet og reposts ikke længere fabikeret på tværs af kilder.
Tilføjet
- Deel-jobbræt-kilden (CAR-184): registry 123 sources = 118 EN + 5 RU · 118 adaptere — auto-detekterer
jobs.deel.com/<slug>-tenant-brætter (Klarna og andre); Next.js flight-payloaden bærer hele lageret i én anmodning (titler, lokationer, arrangement, datoer, beskrivelse), den forbudte/api/-sti røres aldrig, en tenant, der serverer karriere et andet sted, svarer med en redirect, som kilden nægter ved navn, og kompensation er bevidst ikke mappet (beløb uden betalingsinterval ville være et gæt); count-gates ×5 + help §17 ×19. - Tracker-CSV-import (CAR-181):
POST /api/tracker/import-csvmed dry-run-preview og en låst commit — RFC-4180-citation, datoer i ISO / dag-først / månedsnavn-former, fremmede tracker-stadier foldet gennem de kanoniske tilstande (et ukendt stadie lander som Evaluated med en note, aldrig smidt væk), dedup på normaliseret posting-URL læst fra markdown-link-cellen eller Notes-kolonnen, grænser 512 KB / 2000 rækker;#/trackerfår en Import CSV-knap med en preview-modal, i18n ×19. - Posting guard-relay (CAR-182):
POST /api/runners/posting-guard— parentens deterministiske zero-LLM JD-integritetsgate, opløst ved rapportnummer gennemjds/-capture-præfiksreglen (padret eller ej, sammenlignet som heltal) eller en eksplicit saniteret sti; barnet får kun argv, et loft på 30 s og en fail-soft-kontrakt; en «Posting guard»-handling på#/reports/:slugrenderer fundene, i18n ×19. - CV voice-tjek (CAR-188): 27 slidte cv-fraser (
passionate about,proven track record,leveraged,spearheaded,delve…) plus bindestreg-heuristik (et årsinterval som 2022–2024 er ikke et tell;20–30%er det) som en read-onlyPOST /api/cv-studio/voice-checkog et#/cv-studio-kort, der fremhæver de præcise match; Tailor-tjeklisten vokser til seks invarianter; i18n ×19. - Years-of-experience-scanfilter (CAR-180): jd-years-parseren (65 formuleringer, dropper aldrig i tvivl) læser det oplyste minimum fra postingsbeskrivelserne, en ny
years_min:-portals-indstilling springer underkvalificerede postings over somskipped_experience(en observationel historikstatus, der aldrig pinner en URL), ogyearsMinrider med i scan-snapshotet til fremtidig UI. - Apply-kontroller på syv flere sprog (CAR-185/189): vietnamesisk
Nộp đơn ứng tuyển, bulgarskКандидатствай/Кандидатстване/Външно кандидатстване(substantivet forankret i labelens start — rådgivningsartikel-links er ikke Apply), nederlandskSolliciteer/Solliciteren, spansk¡Apúntame!/Postularse(labels, ikke verbet — FAQ-links betyder ikke længere noget), kinesisk申请职位/投递(forankret i hele kontrollen) — levende postings på de brætter læses ikke længere somno_apply_control.
Rettet
- MiniMax-standardmodel (CAR-187): den pensionerede standard
MiniMax-Text-01erstattes afMiniMax-M3.1-Flashpåapi.minimax.ioogMiniMax-M3påapi.minimax.cn; base-URL’en er vendor-pinned (en ikke-vendor-vært afvises ved runtime, og nøglen når den aldrig); indstillings-hintet ×19 nævner de nye standarder. - Reposts kræver samme kilde (CAR-186): en rolle listet på LinkedIn og på arbejdsgiverens Greenhouse rapporteres ikke længere som repost — klynger opdeles nu efter
sourceHost(), som kun folder regionale subdomæner på kendte sider (de.linkedin.com≡www.linkedin.com, menca.example.comholdes adskilt), folder Greenhouse-værtsaliasserne til én kilde og stripper et afsluttende punktum. - Tamilsk evaluerings-sprogdrift (CAR-183): et forstærket tamilsk-direktiv sidder nu i den flygtige prompt-hale ved siden af volumenbudgettet (CAR-174-pladsen) — remote-QA-rapporter lander igen på tamilsk efter den intermitterende drift set i v1.261.2.
Noter
- Bevidst undladelse: posting-guard-relayet udsendes fail-soft — forkken bærer ikke parentens
posting-guard.mjsendnu (upstream PR #6146 er stadig åben), så endpointet svarer{available:false, reason:"script-not-found"}, indtil en parent-sync leverer det. - Bevidst undladelse:
yearsMiner ikke eksponeret som en#/scan-UI-chip i denne release — feltet følger med snapshotet, og filteret er kun portals-config. - Bevidst undladelse: upstream modes/reports Machine Summary-ændringerne (#6161/#6160/#6157) er ikke portet — de ankommer med den deployede parent, ikke som web-ui-spejle.
- Tests 6734 → 6841 på release-branchen; scannerens dedup-nøgle er uberørt (URL-normaliseringsadfærden ændrede sig ikke).
[1.261.3] — 2026-10-28
Design-færdiggørelsespatchen: Lovable-design fase 3 (density + fuld coral-pensionering), scan host-pool (32 virksomheder, 10 pr. host), seks upstream provider-lokationsrettelser, Trakstar Hire-kilden (registry 122), CV Studio undo + unsaved-guard — plus final-regression P3-rettelserne og docs-paritet.
Rettet
- Kortklynge-«related»-label 3.16:1 → 4.68:1 (begge temaer): den lyse
--map-score-midformørket til#567b75(det foreslåede#5f7f7amålte kun 4.37 — ét trin mørkere var nødvendigt); den mørke side allerede 4.98:1, uberørt. Red-first-pin imap-cluster-visual. - Skip-link-fokusring: den sidste bogstavelige
#ff385c-outline →var(--accent-c)— alle 78 fokusringe følger nu accent-tokenet. .tab-btn.is-active-accent-topologi (#584, fase 3): kontrollen blandede tre farvefamilier (coral wash + danger-tekst + blå kant); nu et enkelt accent-soft-par.- Upstream provider-lokationsrettelser ×5 (#580, CAR-176): workday
Fully Remote-flag (ikke et sted), workable telecommuting-fan-out + state kun når byen mangler, successfactors afsluttende komma, lever remote-ordgrænse, icimsLocation-præfikserede labels. - http-json: intet retry på en brugt timeout (#580) — et deadline-abort er ikke-transient i begge retry-hjælpere (upstream målte ~94 s på ét Ashby-board ved 30 s × retries).
- Docs-paritet (#587): de sidste tællere fra 17/18-æraen i HANDOFF/CONVENTIONS/README (uk fik sin manglende Локалізація-sektion; §-historikken udvidet til §32/§33 — 33 H2-aritmetikken verificeret).
Tilføjet
- Lovable-design fase 3 (#584): density-tokens er live — tabelrækker ≈32px, kontroller 30px, chips 24px (WCAG 2.5.8 spacing-undtagelse); alle coral-rgba-rester flyttet til cv3-par (
.dash-hero,.badge-bad, haloer,.tab-btn.is-active);--ease-outerklæret, TOKEN_HANDOFF tom;.callout--ok/--danger-kontrakten. - Trakstar Hire-kilden (#583, CAR-177): registry 122 sources = 117 EN + 5 RU · 117 adaptere — host-pinned jsapi.recruiterbox.com, offset-gennemløb med korte/tomme/gentagne stop, partials bevaret,
trakstarTruncated-mærkning; count-gates ×5 + help §17 ×19. - Scan host-pool (#579, CAR-178): op til 32 virksomheder samtidig, begrænset til 10 pr. host (upstream keyed-limiter-mønsteret) — snapshot byte-identisk med den sekventielle kørsel (red-first timing-mock-gate).
- CV Studio undo + unsaved-guard (#582, CAR-179): afgrænset undo-stack (30) over AI-kørselsresultater med ikke-QWERTY-sikker
Cmd/Ctrl+Z, unsaved-changes-guard ved ruteafgang (live-probe dirty, confirm/rewind/beforeunload), i18n ×19. - Upstream provider-rettelser testet ×17 (del af CAR-176); remote-QA-opsummeringen navngiver fejlende scan-kilder +
tok ~Npr. eval (#567, allerede i v1.261.2 — observabiliteten brugt til denne releases triage).
Noter
- Accenten er nu blå (Lovable-konceptet): primære handlinger/aktive tilstande/fokusringe følger
--cv3-accent; rød er reserveret til danger (.btn-danger,toast.error, danger-tekst). Coral overlever kun i logo-PNG-assetet (ejerens valg). - Density: tabelrækker ≈32px / kontroller 30px / chips 24px — WCAG 2.5.8 spacing-undtagelsen dokumenteret; v1.26.1-44px-canaryen blev omskrevet til token-kontrakten.
- CodeQL: alle 10 åbne alarmer lukket (4 FP-afvist med begrundelse: llmRateLimit/atomicWrite-dokumenterede klasser; 6 rettet i kilden).
- Tests 6655 → 6734 på release-branchen; ingen scannerkilde-adfærd ændret ud over den nye Trakstar-kilde.
[1.261.2] — 2026-10-28
Stabilitets- og poleringspatchen: geocode-cachen overlever et crash midt i en skrivning (CAR-173), UI.md renderer punktfortsættelser og indlejrede lister, nøglelækagerne i hjælpebundles’ renderede tekst er lukket ×17, evaluate får et token-loft pr. locale for ta (CAR-174), RTL-chromen spejles via logiske properties (85 fund), kort-captures genindrammes ×19, og kortklyngerne består kontrasten i mørkt tema — plus fase 1 af Lovable-designintegrationen (det passive tokens-v3.css-ark), docs-backfill (release-gennemgang + specs) og CI-node-coverage-undtagelser.
Rettet
- Geocode-cache-tab ved torn-write (CAR-173, #562): begge flush-stier (debounced insert-flush, exit-flush) skrev
.cache/geocode.jsonmed en barwriteFileSync— truncate-then-write — så et crash, OOM eller SIGKILL midt i en skrivning efterlod en revnet fil, og næste bootsJSON.parsekastede en fejl og smed stiltiende hele den persistente cache (uger af Nominatim-budget), ikke kun dagens. Begge skrivesteder går nu gennemfile-lock.mjs::atomicWrite(temp-fil i samme mappe → rename → unlink ved fejl) — samme kontrakt som FULL-R1/FULL-M1 anvendte påpipeline.md,cv.md,profile.yml,career-plan, batch-input og memory. CAR-142-flush-maskineriet i sig selv (debounced insert-flush, exit-flush, bounded shutdown) er verificeret intakt red-first: tests (a)/(b) låser, at inserts når filen inden forGEOCODE_SAVE_MS-vinduet og at den forbliver gyldig JSON; (c) er en mekanisme-gate plus adfærdsmæssige kørsler af begge flush-stier, der påstår intet temp-snip og en parserbar fil. - UI.md punktfortsættelse (#563): listehåndtereren læste kun sammenhængende
-/*-linjer, så en indrykket fortsættelseslinje efter et punkt faldt ud af den udsendte<ul>, og afsnit-passet sprang chunk’en over — fortsættelsen lækkede som rå prosa med bogstavelige**-/backtick-markører (~95 hængende forløb pr. locale på tværs af hjælpebundles; en.md 95, ru.md 104). En fortsættelseslinje — indledende whitespace, ikke en ny blok (overskrift, punkt, NUL-wrapped fence-placeholder, blank) — føjes nu til den foregående<li>som<br/>-sammenføjet tekst, medinline()kørt pr. linje, så fremhævelsesmarkører aldrig parrer sig hen over sammenføjningen; fence-placeholder-vagten styres på NUL-første-tegn, ikke et bare token-match. Indlejrede--punkter, nummererede lister, fences inde i lister og overskrifter inde i lister forbliver et dokumenteret separat hul (næste docs-bølge). - Nøglelækager i hjælpens renderede tekst ×17 (#561): remote-QA fandt 85 rå i18n-nøgler synlige i den renderede hjælp (rodårsagen er bevist ved repro: det samme UI.md enkeltlinje-punktforbrug — en ombrydt fortsættelse udsendt som rå tekst beholdt sine backticks bogstaveligt; v1.260/261-hjælpesektionerne skrev flerlinjede punkter). 163 punkter foldet ud til én linje på tværs af 17 locales — kun whitespace, ikke ét oversat ord rørt (gammel-vs-ny verificeret). Den nye gate
tests/help-rendered-keys.test.mjsrenderer hver bundle gennem den ægte kæde (stripGithubOnlyBlocks+ vm-loadedUI.md) og fejler, hvis nogen af 1,711 nøgler optræder i teksten; red-first 17 locales → grøn. Repro-værktøjet følger med i repoet:scripts/remote-qa/help-render-scan.mjs(vm) +help-render-crosscheck.mjs(rigtig DOM). - Remote-QA Ctrl+K påstår CAR-122-palettekontrakten (#561):
prod-regression.mjsforventer nu kommandopaletten efter Ctrl+K (.nav-v2-palette[role=dialog]+ fokus inav-v2-input) ELLER legacy-søgefokus som fallback, i stedet for stiltiende at acceptere begge; unit-testentests/remote-qa-ctrl-k.test.mjslåser 6 scenarier på en mock-DOM, red-first 0/6 → 6/6. - Kort-capture-framing ×19 (#560): ejer-rapport om
images/job-map-en.png— halvdelen af topbar-søgningen + en skåret h1 i toppen, en grå skærv af sidelisten ved højre kant, en markørklynge skåret af rammen nær London og en hvid vandret linje hen over kortet ved ca. 2/3 højde.capture-map-screenshots.mjsventer nu på, at geocode-køen tømmes (located + noLoc === total, ikke N/N-tælleren — Remote-rækker er strukturelt uden lokation, så den gamle venten kunne aldrig fuldføres), skjulerheader.topbarog#notif-drawertil skuddet, clipper den præcise.job-map-page-boks (intet panel skåret af kant-rammen), zoomer to trin ud, så ingen klynge sidder halvskåret, pinner karthøjden og tager et almindeligt viewport-skærmbillede (captureBeyondViewportresampler det kompositterede tile-lag og maler hvide striber ved tile-rækkegrænser) og justerer kortcontaineren til heltal. Alle 19 job-map-captures genskudt. - Kortklynge-bobler — mørk-tema-kontrast + label-fit (#572): ejer-sweep P2/P3 — de mørk-tema-klyngeringe sad på en fast hvid fyld (1.83:1); ringene bruger nu
var(--paper)med cifre i score-paletten (målt 4.98:1+, fyldt 9.53:1; det laveste bånd er matematisk umuligt at farve på mørkt og holder 6.1:1 via en ærligdata-dim-sti), ogrelated-labelen passer til sin boble (rAF font-fit, tal formindskes aldrig). - #/scan sprogskift — skelet-genaktivering (#534-follow-up, agent undervejs, lander før tag): opfølgning på v1.261.0-ejer-rettelsen (#534) — de genaktiverede skeletter ved en sprogskift-genmaling overlever ikke længere en fuldført genhentning.
- Docs-drift (CAR-139, agent undervejs, lander før tag): README ×19-tællere, HANDOFF ×19 og CONVENTIONS-fakta resynkroniseret med live-registry- og test-tilstanden.
Tilføjet
- Release-gennemgang + spec-backfill (docs, #559/#558):
docs/reviews/REVIEW-2026-10-28-v1.261.1.md(v1.261.0/v1.261.1-bølgen gennemgået mod sine specs) og SDD-spec-backfill for samme bølge — BACKLOG-halen navngiver nu det resterende hul (dedikerede tests forsources/habr.mjs). - RTL deep-sweep (#571): AR-harness gennemløber 39 ruter × LTR-vs-RTL (X-spejling, overflow, clipping, text-align-signaturer) — 85 fund rettet: fast chrome (toast, sidebar, drawer + dens dismiss-×, docs-FAB, usage-HUD, skip-link) flyttet til
inset-inline-*/border-inline-*, tabeller tiltext-align: start/endpå tværs af 17 view-filer + 2 libs, den generelle[dir=rtl] text-align:rightfjernet (den kæmpede mod scan-stjernekolonnens centrering), og CAR-58-score-kolonneisoleringen flyttet til etltrNum-span. - Tastatur-a11y-harness (#570):
tests/playwright-a11y-keyboard.mjsgennemløber 11 ruter (Tab-rækkefølge/fælder, fokusindikatorer, Escape-overlays, Enter/Space) — 0 produktionsdefekter; regressionsdækningen er ny. - i18n uoversat-sweep (#565): 36 en-identiske værdier oversat ×9 locales (
*.rolePh, config-nøgler, ta-manifesto) + en lukket-allowlist-sweep-guard; site- (cvstart.org) i18n-audit (#568): 20 nøgler × 18 locales oversat (heledemo.*/stats.t.*/showcase.tab*-blokken var engelsk overalt), 1 død nøgle fjernet ×19. - Remote-QA-observabilitet (CAR-175, #567): opsummeringen navngiver fejlende scan-kilder (
stderr samples, redact-før-truncate) og udskrivertok ~Nfra provider-forbruget; logikken ligger i en rensummary-parts.mjsmed en drift-gate. - UI.md indlejrede marker-lister (ét niveau, #564):
--punkter renderes som en indlejret<ul>(fence-placeholder-sikker) — de sidste 2 hængende prosa-forløb pr. locale er væk. - Lovable-designintegration — fase 1 (#566) / fase 2 (branch, lander før tag):
public/css/tokens-v3.cssporter Lovable-konceptet ordret (oklch-overflader 0–3, AA-kommenterede ink-par, accentfamilie, ok/warn/danger/info/neutral soft+ink, score-bånd A–G ×2 temaer, density + fokus + skygger); fase 2 aktiverer det på de eksisterende token-navne (accent delt blå/danger, score-bånd + callouts på cv3-tokens) med kontrast-/rolle-/dark-gates opdateret. - Evaluate-token-loft pr. locale (CAR-174, #569):
evalMaxTokens(lang)— ta/hi beder om 32768 (de tre SDK-klienter re-clampede ved 16384; begge lag rettet), plus et tamilsk volumenbudget i prompten (≤5 sætninger pr. blok, ≤900 ord) — v1.261.1 remote-QA ta-rapporten blev skåret af ved output-token-grænsen (manglende Block B–G + SCORE_SUMMARY). - CodeQL real-fix-opfølgning: det nye QA-render-værktøj erstattede håndrullet entity-håndtering med strukturelle split-passes +
htmlToText({cap: Infinity}); redact-påstande pinner præcis maskeret output; ubrugte konstanter i RTL-harness droppet. - Coverage-undtagelsespolitik for CI-node-varians (habr #558, states #561):
sources/habr.mjs(CI node-matrix-branch 87.23 vs lokalt ≥89) ogstates.mjs(CI 86.49 vs lokalt ≥89) slutter sig til undtagelserne iscripts/coverage-baseline.json— filer, hvis CI-målte branch-coverage er strukturelt under det lokale gulv pga. node-version-varians, undtages i stedet for at skrue hele gaten ned.
Noter
- Ctrl+K-kontrakten (CAR-122): akkorden åbner kommandopaletten — den fokuserer IKKE søgefeltet direkte; søgningen fokuseres fra paletten. Remote-QA-prod-regressionen påstår nu præcis dette (#561).
- CodeQL FP-afvisning ×5:
js/missing-rate-limiting-alarmerne på main venter påsecurity_events-tokenet — operatørsag, ikke en kodeændring. - Landet efter branch-cut: #561/#562/#563/#564/#565/#566/#567/#569/#570/#571/#572 er alle merged til main; #534-skeleton- og CAR-139-agenterne merger før tagget. Indlejrede marker-lister ud over ét niveau og inline-tung view-geometri forbliver dokumenterede huller.
- Tests 6609 på release-branchen (+15 siden v1.261.1; ~13 mere fra #561 ved merge — 2 nye gate-filer); de eneste røde tests før fan-out er CHANGELOG ×19-paritetsgaterne (locale fan-out er orkestratorens næste skridt); ingen scannerkilder rørt (registry 121 = 116 EN + 5 RU · 116 adaptere).
[1.261.1] — 2026-10-28
Prod-QA-klientpatchen: en P1-crashrettelse af #/two-pager, Ctrl+K, der virker på ikke-QWERTY-layouts, 390px-mobilbølgen (docs-assistant-overflow, kortchip-overlap, et 39-rute-harness), CAR-137-fuldførelsen (specifikke fejl, v2empty ×5, hints ×13 + mode-sider) og CAR-140, der lander ægte v2-skærmbilleder overalt.
Rettet
- two-pager TDZ (CAR-170, P1, #554):
Cannot access 'previewTimer' before initialization— editoren for gemte tags udløsteonChangeunder konstruktionen for hver gendannet chip, mens konstruktionsløkken lå leksikalsk overlet previewTimer, så hele#/two-pager-renderingen crashede (ingen h1, ×19 locales). Scheduleren + bindingen ligger nu over løkken; en adfærdstest eksekverer det rigtige view-modul — den præcise prod-fejl før rettelsen, en renderet side efter — plus en drift-gate for leksikalsk rækkefølge. - Ctrl+K på ikke-QWERTY-layouts (CAR-172, #554): begge chord-handlere matchede kun
e.key— på et russisk layout ankommer akkorden somkey='л' code='KeyK'og gjorde ingenting. Matches nu påe.code === 'KeyK'i nav-v2.js og app.js; reproduceret i en rigtig browser med en syntetisk ‘л’/KeyK-akkord. CAR-122-kontrakten er gengivet (se Noter). - docs-assistant 390px-overflow (CAR-172, #554): CAR-136-startchipsene var
.btn(nowrap,flex-shrink: 0) — ét ubrydeligt 418px-element skubbede#/docs-assistant56px forbi en 390px-viewport; CAR-146-skrumpmønstret (i v2-llm.css, de 800-LOC-CSS-gates uberørte) bringer det ned på 0. - Kortchip-overlap @390 (#552): på en 390px-viewport overlappede kortets meta-chips CTA-rækken (map.css).
- CAR-137 — specifikke fejl + v2empty ×5 (#550): fem generiske fejl-fallbacks (‘Error’ / ‘failed’) blev til specifikke handlingsrettede nøgler — evaluate POST-fejl, auto-pipeline-stream uden terminal event, scan→pipeline-tilføjelse, indlæsning af repost-klynger, pipeline-undo; de sidste fem flade tomme tilstande (
#/reports,#/usage,#/portals,#/activity,#/dashboard) slutter sig til CAR-124 v2empty-mønstret (forklaring + mærket aria-hidden-eksempel + forudkoblet handling; 15 nyev2empty.*-nøgler, fire døde ét-linjes-nøgler fjernet) — alt sammen ×19 ordbøger, snapshot regenereret. - CAR-137 — HelpHint ×13 + mode-side-sættet (#550): den kontekstuelle «?»-hint sidder nu på alle resterende side-H1’er (pipeline, reports, dashboard, cv, portals, usage, activity, assessments, map, health, docs-assistant, settings) og på de 8 mode-sider via sættet (hver MODES-cfg bærer en
hintKey, renderet gennemHelpHint.title).
Tilføjet
- Mobile-390-harness (#552): en Playwright-sweep af hver SPA-rute (31 kanoniske + 8 mode-sider = 39 hashes) ved 390×844 med et seeded korpus — per-rute-kontrol af vandret overflow (scrollWidth vs clientWidth, 1px-tolerance, nævner den bredeste synder) plus en CTA-hit-kontrol (ingen sticky bar/drawer/FAB dækker en primær CTA); opt-in, graceful skip uden browser-binær, netværksfri.
- Friske v2-captures ×48 (CAR-140 fase A, #551): ægte v2-UI-skærmbilleder fra et seeded, CI-isoleret fixture — dashboard ×19 + job-map ×19 (job-map-ta første gang, job-map-vi ny) + scan/pipeline/tracker/reports × en/ru — som føder README, hjælpen og landingssiden.
- cvstart.org med ægte skærmbilleder (CAR-140 fase B, #553): CAR-140-pladsholder-pladserne er væk — landingssiden viser de faktiske v2-captures (job-map-showcase + skærmbilled-rækker, ×19 landingsside-locales).
- CAR-137-hints (#550): 21 nye oversatte nøgler ×19 (
help.hint.*×20 + mode-siderneshintKey’er) — hver side forklarer nu sig selv på stedet.
Noter
- Ctrl+K-kontrakten (CAR-122): akkorden åbner kommandopaletten — den fokuserer IKKE søgefeltet direkte; søgningen fokuseres fra paletten. Linjen «Ctrl+K фокусит поиск» i v1.261.0-QA-tjeklisten er erstattet; QA-prompten til v1.261.1 bærer den opdaterede kontrol.
- CodeQL-rigtige rettelser (#547): 4 alerts lukket (content.mjs literal-key-iteration gjort strukturel, lint-sweep) — landet efter udgivelsen på v1.261.0 main før denne patch; nævnt her for fuldstændighedens skyld.
- Tests 6582 (+51); browsersuiten 171–172 bestået / 0 fejlet / 1 opt-in-skip; mobile-390-harnessen kører selvstændigt (
node tests/playwright-mobile-390.mjs). Ingen scannerkilder rørt (registry 121 = 116 EN + 5 RU · 116 adaptere).
[1.261.0] — 2026-10-28
Anmeldelsesbølgen er fuldført (alle HIGH + MEDIUM-fund er landet), den ejer-rapporterede sprogskift-retelse, rettelser af evalueringskvaliteten, hjælp ×18-fan-out, cvstart.org-landingssiden v2 — plus 4 SDD/OpenSpec-specs, der dokumenterer bølgen. Hver rettelse landede gennem en rød→grøn fix-forward og en GLM-5.3-Flash-gennemgang i frisk kontekst.
Sikkerhed
- FULL-R1 — CSRF-gate for acting-GET + låste, atomiske pipeline-skrivninger (#519):
Sec-Fetch-Site-/Origin-/Referer-gate på/api/stream/*,/api/run/*,/api/geocode(eksporteretACTING_GET, statisk coverage-gate); hver read-modify-write afdata/pipeline.md/data/last-scan.jsonunderwithFileLock+ den nyeatomicWrite(temp-fil i samme mappe → rename → unlink ved fejl). - FULL-R2 — SSRF-klynge i kilderne (#514): rss.mjs https + afvisning af private adresser; ~25 kilder med rå
fetchImpl→ transportlag under guard; pinnede mirrors; redirect-validering for habr/hh/geekjob/getmatch; deltdelay(ms, signal). - FULL-R4 — prosakorruption i stripDangerousMarkdown (#513/#518): scheme-fjernelse sker kun i link-/attributkontekst; entities dekodes kun ind i en detektionskopi («JavaScript: React, Node» og «R&D» overlever).
- FULL-M2 — transporthærdning (#520):
safeGetrespekterertimeoutMsmed kalderens signal (bridge-controlleren);guardResolvedHostfejler LUKKET ved DNS-fejl. #525 tilføjer fjernelse af credential-headere ved cross-origin-redirects, detach af transportlytteren på alle afslutningsstier og en rettelse af crasjet med forudafbrudt signal. - FULL-M4 — logo/batch (#523): logoet pinner magic bytes på ALLE stier (et
image/png, der lyver, kan ikke bære SVG), tvinger content-typen tilimage/*ved lagring, privat cache + nosniff; batch:--parallelbegrænset til 1–8,--min-scorevalideret, BATCH_BUSY single-flight,llmRateLimitpå config-/batch-mutationer.
Tilføjet
- CAR-147 — evalueringsloft pr. locale (#524):
evalTimeoutMs(lang)— ta/hi får 480 s i stedet for 300 s (Indic-skrifter tokeniseres til flere tokens per stavelse; den gamle tidsgrænse gav 502 + tom rapport); remote-QA-klienten venter 540 s. - CAR-133 — cvstart.org-landingssiden v2 (#532): parallax-hero bag reduced-motion-gaten, en tydeligt mærket SIMULERET demo af scan→evaluate→tracker-flowet, scroll-reveal-sektioner med live-verificerede tællinger, pladsholdere til CAR-140-skærmbilleder.
- CAR-135 — hjælpen omskrevet til UI v2, fan-out ×18 fuldført (#533, #540, #541, #542): alle 19 hjælpefiler beskriver v2-skallen (sammenklappelig navigation, Cmd/Ctrl+K-palette, skeletter, tomme tilstande med eksempel+handling, scan v2-chrome, pipeline grupperet+undo, rapporter v2, kanban); UI-mærkater citerer deres i18n-nøgler; sætningen om de 121 kilder genereres ud fra registryet.
- Specs (SDD/OpenSpec) (#535): backfill af wave-two fra 27. okt + tre fremadrettede specs (hjælpens fan-out, skrive-hand-offs, sprogskift-invarianter).
Rettet
- Sprogskift tømmer ikke længere #/scan (#534) — rapporteret af ejeren: view-lokal scan-tilstand (resultater, facet-chips) er nu på modulniveau; adfærdsmæssig Playwright-harness med en 4 s forsinket refetch (rød på den gamle form).
- CAR-148/149 — ru-rapporter «mangler Block G» (#530): prompten lærte tre inkonsistente A–G-kortlægninger; skeleton + liste + eksempel stemmer nu med oferta.md (G = Posting Legitimacy); adfærdsmæssig drift-gate.
- CAR-150 — pipeline-undo bevarer comp-metadata (#537): DELETE svarer med
comp, POST accepterer en gated valgfricomp, viewet bærer{token, comp}gennem alle fallback-grene. - FULL-M3 — døde kilder rapporterer ærlige tavler (#522): getro/mycareersfuture/meituan/mokahr/glints kaster på en side 1 med forkert form (en død API læses ikke længere som «sund, 0 jobs»);
pinnedOverridepinner 18 adapterescompany.api-overrides. - FULL-M5 — én udbyderkaskade (#521): routes/llm.mjs gennem
runActiveProvider(+cachePrefix, signal); interception i Gemini-subprocessen; svarkontrakterne byte-identiske. - FULL-M1 — skrivninger til delte filer under lås (#526, #539):
runTrackedScript+TRACKER_MUTATING-rosteren; outcome/followup-spawns holder låsen; tracker.mjs skriver viaatomicWrite; PUT gemmer låst+atomisk. - FULL-M6 — server- og klientkonsolidering (#531, #536, #525): dotenv med null-prototype +
__proto__-afvisning;isPrivateOrLoopbackdækker NAT64/6to4/benchmark/reserverede; mtime-cache i env-config; reel slot-GC i file-lock;safeGettimeout+signal; DNS-guard fail-closed; SSE ×4 →API.postStream; fokus-/mærkat-/status-libs; clipboard-skrivninger afventes; Hired-toning i dashboardet. - R3 — CSS-token-drift (#527):
--accentløst (kortets fokus-ringe var stiltiende døde); 11 varigheder uden for tokens foldet ind; drift-gate. - R4 — indlæsningsefterslæbere (#538): assessments/mode-page/pipeline-preview renderer CAR-112-skeletter.
- CodeQL + CI-batch (#517, rettelse #539): ubrugte imports, ACTING_GET-gaten importerer den rigtige regex, lifecycle-slice genforankret.
Noter
- Bevidst ikke gjort: DNS-pinning ved forbindelsesoprettelse (kræver undici — uden for deps, dokumenteret rest); CAR-140-skærmbilleder (kræver den deployerede v2-UI); CAR-137/138/141 (næste docs-runde);
js/missing-rate-limiting-klassen fra CodeQL er et dokumenteret falsk positivt (den selvbyggede limiter krediteres ikke). - Hjælp ×18-fan-out: es/de wave-1 sprang intro-noten og deltaet på Active Companies-kortet over (de landede selv sin intro; es får en ét-linjes opfølgning).
[1.260.0] — 2026-10-26
Hærdningstoget fra anmeldelsesrunderne — otte merges (#491–#498) fra opus-5-5- og AI-gennemgangene over v1.259.0-flåden: lønsammenligningens normalisering, afgrænsning af rapportdatoer, geokoderobusthed, bundle cache-busting r2+r3 og deep overflow-retelsen — plus to UI-v2’er (pipeline og rapporter). Hver rettelse landede gennem en rød→grøn fix-forward.
Rettet
- Lønsammenligningens normalisering (CAR-143 rev-2): periodemarkører genkendes kun tæt på det tal, de hører til — «6 month contract, $120k» annualiseres ikke længere ×12, og RU/ES-periodeformer, der kun optræder fastgjort til tallet («за месяц» ved tallet), vinder over tilfældige ord;
$/¥-symbolfamilien genkendes, men mappes ikke, medmindre en eksplicit ISO-kode deler linjen (AUD/CA/SG-dollar behandles ikke længere som USD, og en ¥-RMB-form får en eksplicit advarsel i stedet for en ~20×-forkert JPY-konvertering); nøgne 19xx/20xx-tal er altid årstal; intervaltal arver partnerens periode; profilensminimumogtarget_rangesplejses aldrig sammen til ét interval. - fixReportDate-afgrænsning (CAR-144 rev-2): den serverside-pinnede datorettelse gælder kun præamblen før den første
##-overskrift (en rapport med H2-titel får en konservativ no-op — en forældet dato er acceptabel, en opdigtet er det ikke); inden for præamblen: en entydig kandidat rettes, ellers en entydig fed**Date:**, ellers intet (to fede eller to almindelige kandidater omskriver ingen). FIX-5-porten for PDF-mærkater læser nu den reelle samlede ordbog — et manglende locale kaster i stedet for stiltiende at bestå på en engelsk fallback. - Habr-lokalitetschip + geokoderobusthed (CAR-142 rev-2): en Habr-meta-chip bliver kun til en by med strukturel evidens (et byfilter-link eller et lokalitetsikon) — omlokaliseringsnoter («Возможна релокация») og ansættelsestyper udgiver sig aldrig for at være lokaliteter; geocode-cachen overlever nu en genstart (flush ved
beforeExit/exit/SIGTERM+SIGINT med re-raise, dirty-flaget ryddes først, når skrivningen er landet), nedlukningen er afgrænset (exit-loop-latch, generationstæller, recency-LRU), og et opbrugt geocode-budget svarer 503 + Retry-After i stedet for en generisk 502. - Bundle cache-busting (CAR-145 r2+r3): skallen citerer
/js/bundle.js?v=<content-hash>— immutable ved match, no-store ved mismatch — og dræber dermed det 5 minutter lange deploy-vindue, hvor en frisk skal kunne parre sig med en cachet, gammel bundle. Hash og stream deler én file descriptor (ingen splittede læsninger); en kort læsning svarer null frem for en stat-fallback-hash, der kunne forgifte en hel deploy;make-bundleskriver identiteten og .br/.gz-følgefilerne via en dot-præfikset temp-fil + rename, så et dræbt build hverken kan servere halvskrevne bytes eller lække sin temp-fil. - Deep overflow (CAR-146): et gemt research-brief, hvis filnavn alene overstiger en telefons viewport, kan ikke længere skubbe
#/deepud over 390px — kortet capper ved sin række, titlen ombrydes, datoen holder sig på én linje; narrow-viewport-sweepen gennemløber nu#/deepmed en over-lang seedet fixture (de to remote-QA-runders eneste fund — lukket). - Pipeline v2-hærdning (CAR-116-gennemgang): sletninger bekræftes og kan fortrydes (med ærlig undo-tekst), ingen opdigtede host-virksomheder i kortene, FNV-1a-række-id’er, sande bulk-antal og en re-entrancy-guard på bulk-operationer.
Tilføjet
- Pipeline v2 (CAR-116): berigede kort, en grupperet visning og bulk-discard med undo; 17 nye
pipe.*-nøgler leveret oversat i alle 19 ordbøger. - Rapporter v2 (CAR-118): live-søgning med filtre for score-bånd/legitimitet/virksomhed/dato, sortérbare kolonneoverskrifter (
aria-sort), en persisteret kortvisning med handlingsknapper per bånd, et klik-til-filter score-histogram og den forenede «Company — Role»-/«x.x/5»-rendering (window.ReportOps); 31rep2.*-nøgler leveret oversat i alle 19 ordbøger.
Noter
- Hver rettelse kom gennem en anmeldelsesrunde med rød→grøn evidens; de to AI-gennemgangs-HIGH-fund på den første bundle r2 (kort-læsningshashen, følgefilernes atomicitet) er lukket af r3, og CAR-143-/CAR-144-/CAR-142-runderne genverificerede hver især deres forgængers åbne fund.
- Bevidst ikke gjort: kortets klyngevisning forbliver CAR-125 (i køen); serverside-gendannelse af pipeline-metadata er en separat ticket; ingen retrosaktive rettelser af indhold, der blev gemt under v1.259.0 før rev-2.
- Tests 5988 (+165); browsersuiten 152 bestået / 0 fejlet / 1 opt-in-skip. Ingen scannerkilder rørt (registry 121 = 116 EN + 5 RU · 116 adaptere); de 48 nye i18n-nøgler landede med deres ×19-fan-out inde i selve feature-PR’erne.
[1.259.0] — 2026-10-25
Det andet agentflåde-tog, seks rettelser: rapportdatoer pinnet på serversiden, kortgeokoderen cacher og læser russiske byer, hjælpen ×18 citerer lokaliserede knapmærkater, UI-sætninger blander ikke længere sprog, lønsammenligninger beregnes på serversiden — og JS-bundlen leveres prekomprimeret (kold indlæsning 3.1 MB → 598 KB).
Rettet
- Opdigtede rapportdatoer (CAR-101): evalueringsprompten pinner nu dagens dato på serversiden («the Date: field MUST be exactly
— copy verbatim; never invent»), og fixReportDateomskriver en afvigende dato til i dag på hvert acceptsted (Anthropic-grenen, Gemini-subprocessen, den OpenAI-kompatible hale, /api/deep, auto-pipeline) med en advarsel + aktivitetspost — en korrektion, aldrig en afvisning. 349/789 prod-rapporter havde opdigtede datoer; det kan nye ikke blive. - Kortgeokodning (CAR-105): hh.ru/Habr-rækkernes kyrilliske bystrenge når nu frem til geokoderen; en persistent, afgrænset cache (
data/geocode-cache.json, withFileLock) betyder, at en løst by aldrig rammer udbyderen to gange; geokodekald budgetteres pr. anmodning, så kortet fyldes progressivt i stedet for at blokere i 13.9 s. - Blandet sprog i UI’en (CAR-108): 23 nøglebårne lækager rettet på tværs af 17 af 19 ordbøger (85 værdier) — «все matching», «только remote», «Открыть Scan», tragtens «Evaluated → Applied…» og mere blev til fulde, lokaliserede sætninger, der genbruger hvert locales eget produktordforråd.
i18n-no-latin-leakser udvidet med fragmenttabellen + tragtprøven (rød→grøn). - Valuta-domsflip (CAR-109): lønsammenligningen beregnes på serversiden i
comp-compare.mjsog indlejres kanonisk (Candidate minimum: … per YEAR (raw: …)modJD offer: …); månedlige beløb ×12, k/к/тыс/萬 og decimal-komma-former normaliseres før sammenligningen; en usikker konvertering kan aldrig alene flippe dommen (zh-TW-tilfældet «€80–100k ниже минимума» er dødt). Modellen multiplicerer aldrig. - Hjælp ×18 knapmærkater (CAR-107): de lokaliserede hjælpebundles citerede engelske mærkater («⚡ Run live», «Save», «Scan now»), som UI’en ikke længere viser — 263 udskiftninger på tværs af 18 lokaler, kortlagt ud fra view-kilderne; docs-assistenten arver rettelsen.
Tilføjet
- Prekomprimeret bundle + cachebar kold indlæsning (CAR-104):
make-bundle.mjsudsenderbundle.js.br(brotli q11) +.gzved udgivelsen; en bundle-scoped middleware forhandler br > gz medVary: Accept-Encoding,public, max-age=300, must-revalidate+ ETag/304; vogtet af friskhedstjek (en følgefil serveres aldrig ældre end identitets-bundlen), direkte artifact-hentninger svarer 404, CSP byte-identisk. Kold indlæsning: 3.1 MB → ~0.6 MB over kablet (−80%); gentagne besøg inden for 5 min overfører ≈0 bytes.
Noter
- Alle rettelser kom fra agentflåden med rød→grøn evidens (13 + 28 + 1 + 30 + 7 nye cases på tværs af deres suiter) og anmeldelsesrunder (CodeQL #579/#580/#584 rettet i koden — stub-URL’er parset via
new URL().host, en død prompt-streng droppet). - Score-backfill-tallene fra v1.258.0 er nu registreret i CAR-129 (
updated: 22,reportScoreless: 159). - Bevidst ikke gjort: ingen retrosaktiv datorettelse af de 349 historiske rapporter (en backfill ville være ejer-godkendt ops), intet klynge-view på kortet (CAR-125 forbliver i køen bag denne geokoderettelse).
- Tests 5823 (+74). Ingen scannerkilder rørt (registry 121 = 116 EN + 5 RU · 116 adaptere); ingen i18n-nøgler (CAR-108 redigerer kun eksisterende nøglers værdier).
[1.258.0] — 2026-10-25
Seks rettelser fra agentflåden, ét tog: #/scan-virksomhedstælleren blander ikke længere to universer, deep research kræver kilder, formularfejl får feltet til at lyse op, indlæsningstilstande får skeletter og en øjeblikkelig h1, og evalueringer cacher deres 37k-token-præfiks.
Rettet
- #/scan «Aktive virksomheder»-tælleren (CAR-100): tælleren talte forskellige virksomheder på tværs af ALLE resultatrækker (1554 i prod — hh.ru alene bidrager med hundredvis), mens nævneren talte API-baserede sporede virksomheder (~90) — to universer i én brøk. Kobling (a): tælleren tæller nu virksomheder blandt de rækker, som det API-baserede sporede scan selv hentede (matchet via
_entry ?? company; hh.ru/telegram-arbejdsgiverrækker falder ud); pre-scan-fallbacken er flyttet ind i samme univers (den kunne vise «104/90»). - Opdigtede kilder i deep research (CAR-110): deep-prompten bærer nu en hård kontrakt — enhver faktuel påstand slutter med
[source: domain.com](kan du ikke navngive den → skriv den ikke; et opdigtet mærke er værre end at skriveunknown), ukendte fakta skrives somunknown, og rapporten SKAL slutte med en## Data freshness-sektion. Aktualitetsforankringer: dagens UTC-dato + en valgfri virksomheds-urlpåPOST /api/deep(afgrænset, hentes aldrig på serversiden). - Formularfejl fremhæver feltet (CAR-130): et fejlet POST markerer det første formularfelt med
aria-invalid+.is-errorog fokuserer det (WCAG 3.3.1); nulstilles ved redigering. Netværksfejl-hintet skelner nu mellem deployments — loopback beholder dev-kommando-hintet, et deployeret origin får «serveren svarer ikke» i stedet for rådet ombash web-ui/bin/start.md(forbindelsesbanneret havde den samme hardcode). - Indlæsningstilstande (CAR-112): #/map og #/tracker renderer deres h1 øjeblikkeligt (fokusmålet i routeren eksisterede først, efter at dataene ankom), og en delt skeleton-hjælper (
Skeleton.rows, aria-skjulte shimmer-rækker inde i enrole="status"-region, der genbrugercommon.loading) erstatter den blotte «Indlæser…»-tekst på tracker, scan-resultater og kort-skallen;prefers-reduced-motionstopper pulsen. - Prompt-caching til evaluering (CAR-111):
buildEvaluationPromptPartsdeler den ~37k-token lange prompt i et byte-stabilt præfiks (CV + profil + mode-filer + instruktioner) og JD-halen; Anthropic-stien sender[prefix + cache_control: ephemeral] + [JD]— præfikset afregnes til cache-læse-tariffen (≈10× billigere) på hvert kald efter det første. Mangler eller afviger præfikset, falder det åbent tilbage til den byte-identiske gamle anmodning; den OpenAI-kompatible kaskade er urørt (caching sker serverside dér).
Noter
- Alle seks rettelser kom fra agentflåden med rød→grøn evidens (5 + 7 + 7 + 7 + 8 nye cases) og anmeldelsesrunder; de første CAR-111 CodeQL-advarsler (#579/#580) blev rettet i koden — test-stubben parser URL-hosten i stedet for substring-match, og en død fuld-prompt-streng blev droppet.
- Score-backfill’en er kørt på prod (v1.256.0-endpointet, godkendt af ejeren):
updated: 22,missingReport: 0,reportScoreless: 159— 159 rækker uden score peger på rapporter, hvis overskrifter er ældre end maskineblokken eller bærer uparsbare scoreformater; kan kun genvindes ved re-evaluering eller en bredere parsergennemgang (noteret i CAR-129). - Bevidst ikke gjort: ingen nulls-last-ændring af pendlerkolonnen (præeksisterende
Infinity-on-desc-quirk), ingen retrosaktiv omprisering af gamle forbrugsposter, ingen.is-error-agtig fremhævning af scan-filterformularerne (CAR-130 afgrænset til den delte mode-page submit-hjælper + api.js-hintet). - Tests 5749 (+36). Ingen scannerkilder rørt (registry 121 = 116 EN + 5 RU · 116 adaptere); ingen i18n-nøgler (CAR-130-hintet genbruger
conn.down; skeleton-regionen genbrugercommon.loading).
[1.257.0] — 2026-10-25
To rettelser fra agentflåden: den indbyggede hjælpeassistent forstår devanagari og tamil, og forbrugssiden viser, hvad Hermes faktisk koster.
Rettet
- Hjælpeassistentens genfinding for hi/ta (CAR-103): docs-assistentens nøgleords-tokenizer havde ordklassen
[\p{L}\p{N}\u30fc]+— ingen kombinationstegn. Hver devanagari-matra (ा ै ्…) og hvert tamilske vokaltegn (ே ை ்…) klippede et ord op i fragmenter; længdereglen kasserede korte fragmenter (en hindi-forespørgsel matchede 0 sektioner), og længere ord blev halshugget til vrøvl, der kolliderede med urelaterede sektioner. Tegnklassen bevarer nu\p{M}; CJK-bigram-stien er urørt. hi «मैं स्कैन कैसे चलाऊं?» og ta «ஸ்கேன் எப்படி இயக்குவது?» finder nu de rigtige sektioner i de medfølgende bundles. - Forbrugsomkostning for Hermes (CAR-106):
normalizeUsage()sammenfoldede udbyderens forbrug til{in, out}og tabte stiltiende den fra gatewayen rapporteredecost—#/usageviste $0.0000 over 9.5 M Hermes-tokens (dens række i pristabellen er 0/0). Usage-postens form får et valgfrit, bagudkompatibeltcost?-felt; aggregatoren foretrækker den fra udbyderen rapporterede omkostning pr. post og falder først tilbage til pristabelens estimat, når den mangler; vrøvl og negative værdier kasseres, de opdigtes aldrig.
Noter
- Begge rettelser kom fra agentflåden med rød→grøn evidens (3 + 5 nye cases; 14/14 og 10/10 grønne; nabotests 78/78 og 61/61). De første PR’er (#470/#471) bar en forældet worktree-base, der konflikterede med den squash-mergede v1.256.0 — erstattet af rene cherry-picks (#472/#473).
- Bevidst ikke gjort: ingen retrosaktiv omprisering af historiske
data/llm-usage.jsonl-linjer (de bærer intet cost-felt; kun nye poster har gavn af det). - Tests 5713 (+8: docs-assistant ×3, usage ×5). Ingen scannerkilder rørt (registry 121 = 116 EN + 5 RU · 116 adaptere); ingen i18n-nøgler.
[1.256.0] — 2026-10-25
Tracker-datakvalitet: rollen bliver aldrig arkiveret som virksomheden, en jobtavle bliver aldrig arkiveret som arbejdsgiveren, uscorede rækker dukker ikke længere op først — og et one-shot-endpoint udfylder manglende scores fra rapporterne selv.
Tilføjet
- Score-backfill (CAR-129):
POST /api/tracker/backfill-scoresudfylder Score-cellen for de rækker, hvis tilknyttede rapport bærer en parserbar score (181 evaluerede rækker havde en rapport, men ingen score). Scorede rækker, eksplicitte sentinels (N/A), rækker uden rapport og rapporter uden score røres aldrig; kun Score-cellen omskrives, under fillåsen; scorens form valideres ved skrivestedet og normaliseres til trackerensX.X/5-konvention; kørslen er idempotent og returnerer{ok, updated, missingReport, reportScoreless}.
Rettet
- Rollen er aldrig virksomheden (CAR-128):
guessCompanyRolebehandlede VENSTRE side af en overskriftslinje med bindestreg som virksomheden, men tavlerne skriver begge rækkefølger — «Senior Frontend Engineer - Grafana Labs» fik rollen arkiveret SOM virksomheden (13 rækker: Grafana, CircleCI…). En heuristik med ordafgrænsede rolle-nøgleord vælger nu rollsiden, og en ansættelsestype bliver aldrig arbejdsgiveren («Senior Engineer - Remote (EU)» arkiverer intet frem for «Remote (EU)»). - En jobtavle er aldrig arbejdsgiveren (CAR-127): domæne-slug-fallbacken arkiverede hh.ru-rækker som «hh» (120 rækker).
hh/habr-slugs kommer på listen over ikke-arbejdsgivere; arbejdsgiver-inferensen midt i en sætning («в компании X», «X ищет») kører nu også for jobtavle-hosts (hh.ru/kz/uz/by, habr.com) — hvor sideteksten nævner den reelle arbejdsgiver. Rodårsagen, fundet undervejs: ASCII\b/\wi disse inferensmønstre matchede aldrig kyrillisk overhovedet — stiltiende døde siden v1.248.4; Unicode-lookbehinds og\p{L}-klasser erstatter dem. - Uscorede rækker sorteres sidst (CAR-129): trackerens score-sortering brugte en
-1-sentinel, så med den stigende standardsortering dukkede hver uscoret række op før hver scoret. Nuller sorteres nu sidst i begge retninger (score-FILTRET beholder sin-1— “uscoret fejler et ≥4-filter” er korrekt semantik der).
Noter
- Historiske rækker MIGRERES IKKE af denne udgivelse: parserrettelserne gælder nye evalueringer; scores kan genvindes via backfill-endpointet, mens de 120 «hh»-arbejdsgiverceller kræver re-evaluering, ikke en omskrivning.
- En opus-5-5-anmeldelsesrunde er foldet ind: det uforankrede «X ищет»-mønster blev droppet før udgivelsen (ethvert versaliseret forløb før verbet ville være blevet arkiveret som en arbejdsgiver — no-fabrication-invarianten), sætningsinitiale «В…»-forankringer er tilføjet, og backfill-skriveren genkontrollerer målcellen (der findes duplikerede
#-rækker efter manuelle redigeringer), bevarer kolonneantallet for en kort række, der er fejlformateret i hånden, og stopper ved den første ikke-tabel-linje. Punktet inde i et navn med punktum («Сбер. IT») kan for «в компании»-forankringen ikke skelnes fra et sætningspunktum — det konservative præfiks («Сбер») arkiveres; det verbforankrede mønster fanger den fulde form. - Bevidst ikke gjort: ingen komparator-ekstraktion fra
tracker.jstil en enhedstestbar lib (source-static-gaten består; noteret i CAR-129 som opfølgning), ingen nulls-last-ændring af pendlerkolonnen (præeksisterendeInfinity-on-desc-quirk), ingen datamigrering af «hh»-rækkerne. - Tests 5705 (+10: 5 identitetstests i
auto-pipeline-jd-gate, 2 CAR-128, CAR-129-sorteringsgaten, 4 backfill inkl. hostile-path-pinnen — minus de erstattede v1.248.x-cases). Ingen scannerkilder rørt (registry 121 = 116 EN + 5 RU · 116 adaptere); ingen i18n-nøgler.
[1.255.2] — 2026-10-24
Tre brugersynlige rettelser fra live-regressionen og en prod-crash-rapport: #/scan-render-crashet, den blinde vietnamesiske sprogkontrol og det tilbagevendende tab af zh-TW-summary-blokken.
Rettet
- #/scan-crash (CAR-99): count-gate-regenereringen siden v1.253.0 skrev
FALLBACK_SOURCES-literalen med et efterstillet dobbelt komma på hver post — 120 array-elision-huller.new Set(FALLBACK_SOURCES.map((s) => s.value))i scan-viewet holdt derforundefined, og virksomhedsklassifikatorensid.lengthkastedeTypeError: Cannot read properties of undefined (reading 'length')ved hver side-rendering (fanget af logbuf i produktionen). Hullerne er fjernet, og en ny gate (4 specs, rød-verificeret) eksekverer filen og fejler på ethvert hul, ubrugelig post ellerundefinedi adapter-id-Sættet — den tekstbaserede drift-gate kunne ikke se denne klasse. - Blind vi-sprogkontrol (CAR-97): vietnamesisk er latinsk skrift og havde ingen post i live-QA’ens stopordstabel, så “vi stopord” talte engelske træffere, og et vietnamesisk svar blev læst som
report not in vi(live-regression: vi 2, en 2). Vietnamesisk har nu sin egen ti-ords tabel med funktionsord — en ren vietnamesisk rapport består, en engelsk fejler stadig. - zh-TW mistede SCORE_SUMMARY-blokken (CAR-98): slut-sprogpåmindelsen sagde kun, at maskineformatet ikke må oversættes, aldrig at summary-blokken skal findes — en kort zh-TW-rapport (5983 tegn) bar A–G-blokkene men udelod blokken helt (et v1.239.2-klasse-tilbagefald). Åbningsdirektivet og slut-reminderen angiver nu, at blokken er obligatorisk, og at rapporten er ugyldig uden den.
Noter
- Denne udgivelse ændrer bevidst ingen scannerkilde, registry-antal (121 = 116 EN + 5 RU · 116 adaptere) eller provider-kabeltræk — den er kun rettelser, så count-gates er urørte.
- Tests 5695 (+9:
car99-fallback-holes×4,car97-vi-lang-check×4, CAR-98-prompt-invarianten ×1). Browser 143/143. Vi/zh-TW-live-genkontrollen kører med post-deploy-regressionen.
[1.255.1] — 2026-10-24
To rettelsesrunder fra anmeldelser: Opus-gennemgangen af den vietnamesiske locale (9 fund) og andengennemgangen af CAR-91/92-rettelserne (5 must-fixes) — begge lukket med rød→grøn tests.
Rettet
- vi-locale-anmeldelsesrunden (CAR-88-opfølgning): Hangul-glyffen (
신), der lækkede ind iproject.subtitle/project.roleHint, er rettet (độ khớp tín hiệu), med en gate, der fejler enhver CJK/Kana-glyf i en vi-værdi, som EN-ordbogen ikke selv bærer; de seks markdown-URL’er med mellemrum i docs/help/vi.md (what-is career-ops,apply for a job,set up playwrightog tre flere) er forsynet med bindestreger til de rigtige guide-slugs, med en no-spaces-in-URLs-gate. - Overskriftsgrænser i evalueringer (CAR-92 r2 H1):
&,.,/og'er nu ordtegn i blokbogstavets venstre grænse —## Q&A,## Plan B,## Ph.D. requirementog## E-commerceregistreres ikke længere som blokkene A/B/D/E; den blotte linjeslut-terminator accepteres kun efter et blokords-token (Block/блок/블록/…); ASCII-er fjernet fra tegnklasserne for de stavede terminators, så overskrifter somE-commerce/ई-मेलoverlever. - Ukrainsk/russisk nummererede rapporter (CAR-92 r2 H2): sekvensdetektoren for А Б В Г Д Є Ж er nu en delt hjælpefunktion; når den finder 3+ sekvensbogstaver på et overskriftsniveau, bliver det niveauet cutterens referenceniveau — bogstavmerkede
### A.-underafsnit trunkerer ikke længere rapporten ved blok Б. - Livscyklus for overførte rækker (CAR-92 r2 M1): rækker, som en fejlet kilde bærer med ind i den næste scanning, stemples
carriedSince, kasseres efter 30 dage eller 5 på hinanden følgende overførsler og tilføjes efter de friske rækker i stedet for evigt at hobe sig op i stilhed. - Gemini-syntesens nævner + legitimacy (CAR-92 r2 M2) og subprocessens body-score-sti (M3): aflæst fra findings-filen, rettet med røde tests.
- Cold-load bundle-drift-gaten er opdateret til vi-ordbogen (90 script-tags / 87 bundlbare) og dens ubrugte testbinding fjernet (CodeQL 572).
Noter
- Den adapter-antals-formulering i README.vi’s “Seneste”-banner, som anmeldelsen påpegede, ligger i Tidligere-banneret og spejler allerede EN-README’en byte-for-byte — efterladt urørt for at bevare EN↔vi-pariteten (dokumenteret i commit-body’en).
- Tests 5686 (+26:
eval-validate-opus-r2,scanner-carryover-r2, vi-gate-påstande). Registret uændret ved 121 kilder (116 EN + 5 RU) · 116 adaptere.
[1.255.0] — 2026-10-24
Vietnamesisk (Tiếng Việt) tilslutter sig som det 19. brugerfladesprog — en ordbog med 1525 nøgler i fuld paritet med EN, detektion af vi/vi-VN, den fulde hjælpepakke, README- og CHANGELOG-spejle, cvstart.org-landingsside-integration og 🇻🇳 i sprogskifteren.
Tilføjet
- Vietnamesisk (
vi) — 1525/1525 nøgler i fuld paritet meden;detect()acceptererviogvi-VN; vietnamesisk er LTR (kommer aldrig iRTL_LANGS). ‘Pipeline’ forbliver ‘Pipeline’ — standard teknisk låneord, på hvidlisten. - Fuld docs/help/vi.md (33 H2 / 125 H3), plus README.vi.md- og CHANGELOG.vi.md-spejle og de vietnamesiske stilladsstrenge i
prompts.mjs(LOCALE_NAMES+SCAFFOLD_STRINGS) — vietnamesisk LLM-output virker ud af boksen. - cvstart.org-landingsside på vietnamesisk —
site/src/i18n/vi.json, sitemap-locale-indgangen og etdashboard-vi.png-skærmbillede; sprogskifteren får 🇻🇳 (19 positioner). - Opregningsgates 18 → 19 — LANGS, detect-prober, i18n-audit, changelog-paritet, README-oversættelsesblok, locale-sweep — plus red-first
tests/i18n-vi-locale.test.mjs(139 linjer).
Noter
- Landingssiden får vi — en bevidst afvigelse fra ta-præcedensen (den udgivelse holdt landingssiden på 17 med vilje); dokumenteret i udgivelsesspecifikationen.
- vi er latinsk skrift, så no-latin-leaks-gaten gælder ikke (den vogter ikke-latinske locales); latinsk tech-ordforråd er normen her.
- Testgulv: 5634 → 5642 (1 sprunget over = den opt-in browser-test til layout-indfangning, uændret).
[1.254.0] — 2026-10-24
En hærdningsudgivelse fra anmeldelsesrunden med maksimal-modellen: scannerens snapshot mister aldrig igen rækker, elleve invariantovertrædelser i LLM-laget er rettet, treogtyve SPA-must-fixes lander, og Paylocity-ATS’en slutte sig til scanneren — registret leverer nu 121 kilder (115 EN + 5 RU) med 116 adaptere.
Tilføjet
- Paylocity-ATS (forælder #5687): tenant-specifikke
recruiting.paylocity.com-tavler, død tavle 302 → JobNotFound mappet til 404 så karantænen pensionerer indgangen,max_jobs-loft med afkortningsflag. Register: 121 kilder = 116 EN + 5 RU · 116 adaptere; tællegates regenereret.
Rettet
- Scanner-snapshot-sikkerhed (R-12): en scanning, der ikke prøver noget, BEVARER nu snapshotet (
nothing scanned); en fuld-erstatning bærer de fejlede kilders gamle rækker med — stemplet per indgang — gennemaflæst gennem de NUVÆRENDE filtre, landende kun ifiltered. - Elleven invariantovertrædelser i LLM-laget: sprogdirektivet åbner OG lukker deep/mode-prompterne; Gemini-subprocessen videresender
--lang, ikke-nul exit → 502, lækker ikke stderr til klienten, holder 300 s og registrerer usage; manual-fallbacken bærer opslagets URL; trunkering og bundle-advarsler synlige i/api/mode; spend-tier kan ikke længere tilsidesættes af klienten; et klient-frakoblet aborterer det igangværende udbyderkald; den gentagne-overskrifts-cutter ødelægger ikke længere gyldige rapporter; score/legitimacy-ekstraktorerne stemmer med validatoren; ukrainsk sekvens og arabisk wa strammet. - En Opus 5-5-anmeldelsesrunde PÅ selve rettelserne (8 imperativer): cutterens multi-bogstav-registrering, bredere overskriftsterminatorer, Gemini-subprocessens abort-kabelsledning, stempledt carry-over-attribuering, carryede rækker gennemløber de nuværende filtre, referenceoverskriftsniveau efter antal distincte bogstaver.
- Dog og tyve-ish SPA-must-fixes i sourcing- og assist-visningerne (én-sides pager-append, pipeline-række-tastatur, saved-search-filtergendannelse, source-select-nulstillinger, config-standardtilbagevending, listener-lækager, SSE close ved terminal, scanner-runner-teardown, nøgen fetch, fejlede indlæsninger der så tomme ud, global kollision, fokusbevaring; død help deep-link, help-lytterlækager, two-pager blank-overwrite-genarmering, single-flight af betalte kørsler, stille strøm-slutninger, evige spinner-fejlveje, spøgelsesrækker fra fejlede filtre, docs-fab-duplikater + sprog).
Noter
- Hele runden blev anmeldt af Opus 5-5 med maksimal stringens — portene før merge (21 fund, 13 rettet) og rettelserne selv post-hoc (8 imperativer, alle her med rød→grøn tests).
- Testgulv: 5262 → 5634 (372 nye specs på tværs af kilder, scannere, LLM-laget og SPA).
[1.253.1] — 2026-10-24
To HIGH-sikkerhedsfund fra anmeldelsen med maksimal-modellen er rettet: IPv6-literal-URL’er omgår ikke længere scannerens SSRF-vagt, og escape-regex’en i CV-markdown backtracker ikke længere kvadratisk.
Rettet
- IPv6-literaller omgik SSRF-vagten (
http-json.mjs): en bracketed IPv6-literal fikdns.lookuptil at kaste, og vagten fejlede åbent. Nu tages klammerne af og literalet klassificeres viaisIP— uden DNS, uden fail-open. - ReDoS i CV-markdown-escape (
security.mjs): mønsteret backtrackede kvadratisk —<+ ~100k mellemrum kostede ~16 s; nu ~1 ms med en flad afgrænset klasse. Alt der blev eskaperet før eskaperes stadig.
Noter
- Begge rettelser bærer rød→grøn regressionstests (3 nye IPv6-tilfælde + ReDoS med tidsgrænse; 5511 tests, +7).
- Scannerens kildefiler påvirkes ikke — vagten bor i den delte transport.
[1.253.0] — 2026-10-24
Ti nye jobkilder slutte sig til scanneren — Atlassian, BWI, Computrabajo, Dover, Google, Kalibrr, Magneto365, Platsbanken, Tech in Asia og Zoho Recruit — registret leverer nu 120 kilder (115 EN + 5 RU) med 115 adaptere, og role matcher holder titler adskilt når de kun adskiller sig ved en kort kode med store bogstaver.
Tilføjet
- 10 kilder portet fra forælder 1.38.0, hver med sin fetch-walk-adapter og en CI-isoleret suite (fake fetchImpl, nul netværk): Atlassian (én auth-fri JSON-feed, iCIMS-URL’er, https+icims.com-allowlist), BWI (JSON-LD ItemList, JSON.parse først), Computrabajo (LATAM, entitetsafkodning, spansk «remoto» læses som remote), Dover (DRF-paginering per tenant,
Remote (International)-rendering, UUID-validerede tavler), Google Careers (first side pr. frase, kortets arbejdsgiver vinder, dedup på tværs af forespørgsler), Kalibrr (SEA-aggregator, feed-id som række-id), Magneto365 (LATAM, fast sideinterval), Platsbanken (svenske JobTech-API, vinduer pr. nøgleord), Tech in Asia (Algolia-nøgler opdaget fra site-buildet), Zoho Recruit (hidden-input-tavle, begrænset detail-berigelse, kun ISO-4217-valuta). - Registertælling: 120 kilder = 115 EN + 5 RU · 115 adaptere; de fem tælle-gates regenereret fra det levende register;
#/scan-dropdown-fallback, cvstart.org-kilder og help §17 ×18 følger med.
Rettet
- role-matcher (#5688-port): titler der kun adskiller sig ved en kort kode med store bogstaver («HR BP» vs «HR GP», «AWS» vs «GCP», også i blandede skrifter) matches ikke længere fuzz-agtigt som samme opslag; koder læses fra rå titel med støjord-eksklusion, og gardet sidder lige før Jaccard-ratioen.
- Portene overlevede en Opus 5-5-anmeldelse af maksimal stringens (21 fund): throw på stille-tomme tavler ved markup-drift (google/bwi), en forud-aborteret scan kaster i stedet for at returnere
[], decode-then-strip-rækkefølge i LATAM-scraperne (strip-then-decode XSS-formen), https+allowlist på atlassians række-URL’er, værter der afviser porte, sen-sides parse inde i try’et (partialer overlever) og test-ærlighed (budgetter talt præcist, coercionskontrakter ærligt fastgjort). 13 fund rettet; [spec]-halen spores separat.
Noter
- De fem RU forbliver web-ui-only (ingen upstream-adaptere — med vilje); hver EN-kilde har sin adapter.
- Dæknings-skinne: de seks største porte hævet til ≥95 % branch (27 nye tilfælde); den defensive dødkode-rest er dokumenteret pr. fil.
- Nye kilder vælges med
provider: <slug>i portals.yml — intet ændres for eksisterende konfigurationer.
[1.252.1] — 2026-10-17
Wiki’ens udgivelsesbanner verificeres nu af et script i stedet for en manuel omgang — v1.252.0-regressionen fangede den kun i hånden — og locale-direktivet tilsidesætter eksplicit profilens language.output og opslagets eget sprog.
Tilføjet
scripts/wiki-banner-check.mjs— den gate, regressionen bad om: læser hverHome*.mdi en wiki-klon og sammenligner banneret medpackage.jsonog med de LEVENDE tællere fra registret (scanner adapters fra portalregistret — 105, ikke bannerets forældede 109; route modules fraserver/lib/routes/; UI locales fra CHANGELOG-sættet). Banner-regex’et er sproguafhængigt efter FORM: de lokaliserede Home-sider oversætter etiketten og tællerne («Текущий релиз», «Aktuel udgivelse», «адаптеров сканера», «enhedstests»), og deres tal var drevet længere (5177) end EN-siden (5245).--tests Ntager det tal, den frisketest:cinetop udskrev;--check-onlyforbyder den implicitte klon til offline brug. Offline-fixturetest itests/wiki-banner-check.test.mjs.
Rettet
- Wiki’ens Home ×18-banner bringes tilbage i synk (skubbes med denne udgivelse): v1.252.0-omgangen ændrede badges og links men aldrig bannerlinjen, og intet mekanisk flaggede det. Gaten ovenfor gør det til en release-blokerende kontrol.
- Locale-direktivet fastlægger sprogets prioritet (
buildLocaleDirective): «This UI locale overrides the profile’slanguage.outputsetting and the job posting’s own language». Parentens egen regel 6 byder at skrive ilanguage.output— uden prioritetssætningen løste modellen de to modstridende instrukser inkonsistent pr. locale, hvilket var sprogsøjens spredning i v1.252.0. Fastgjort aftests/locale-directive-language-output.test.mjspå direktivteksten (17 ikke-EN-lokaler + tom EN).
Noter
- FORM-observation på ta evaluate (§3, hold øje): den første live-kørsel af v1.252.0 producerede en evaluate på 48 336 tegn uden Block G og uden SCORE_SUMMARY — løkkeformet, ikke sprogformet (CAR-70 er sprog). Gentager det sig ved næste udgivelse, får det sin egen Linear-opgave, adskilt fra CAR-70.
- Efter FIX-PROMPTET: parent forbliver read-only; tilsidesættelsen bor udelukkende i UI-direktivet.
[1.252.0] — 2026-10-17
Parent-forket er synkroniseret med career-ops-hq/career-ops — 264 upstream-commits, parent 1.36.0 → 1.37.0 — begge fork-afvigelser er forsvaret, og udrulningen fastgør den kørende parent til den base igen.
Tilføjet
- Vietnamesisk (vi) markedstilstand fra upstream (
modes/vi/,tuyen-dung/ung-tuyen): BHXH/BHYT/BHTN, thử việc, lương tháng 13, trợ cấp thôi việc — det 21. marked i parentens modetabel. - Tech in Asia-tavleudbyder (upstream): læser det offentlige Algolia-indeks
job_postings, som techinasia.coms job-UI selv forespørger — et SEA-startup-tavle, ~300 levende opslag ved sampling, 273 af dem indonesiske. Nøgler opdages for hver kørsel fra sitets build, arbejdsgiverens egen ansøgningslink vinder over tavlesiden, og løn følger bevidst ikke med (indeksets lønfelter er flag, ikke penge). - Otte nye Block G-dokumenter om opslagslegitimitetssignaler (
modes/oferta-signals/08–17): land i benefitterminologi, tredjepartsplatformens lokationstag, agenturlicensering, overdrevne indvandringskrav, jurisdiktionsforbudt indhold, pay-transparency-intervalbredde, advokatspørgsmål om mindsteløn, AI-screening-offentliggørelse, tidsbegrænset kontrakt-offentliggørelse, købekraft ved relokering.
Ændret
- Hærdninger på parents side, der følger med basen: story-provenance-tjekket arbejder per enhed og sætning og holder
user-cannot-confirm-tal ude af forhandling, ATS og interview-output; CV-fact-gate kører på hver renderer og læser omformulerede og strukturerede påstande; LaTeX afviser forældede udtrukne slots før skrivning; launchd-svinget af follow-ups springes over, når follow-ups er slukket; update-system holder sit lokal-redigerings-scan inden for argv-grænsen. - Forkets afvigelser overlevede fletningen:
providers/telegram.mjs(fork-eksklusiv parser, ADR-0001) og Unicode-lookaroundLOCATIONISH_REitelegram-channel.mjs(ADR-0002). Tavledokumentet lister nu upstreams forbedredetelegram-channel-række, fork-eksklusivtelegram-række, Tech in Asia og Tencentsmax_pages-standard hævet 20 → 100.
Noter
- Ingen SPA-adfærdsændring i denne udgivelse: det er dokumenttoget plus parent-ompinning. Udrulningen kører nu parent 1.37.0; tabellen over kanoniske statusser røres ikke af parent-deltaet — tracker-statusser renderes præcis som før.
- Upstream-fletningen løste to konflikter:
docs/SUPPORTED_JOB_BOARDS.md(begge telegram-rækker bevaret) ogtest-all.mjs(upstreams walkTree-baseredecopyDirSyncsubsumerer forkets håndrullede.git-guard for indlejrede checkouts; importlisten er foreningen).
career-ops-ui v1.267.1 · page 1/9 · mirror of the project changelog for cvstart.org