Roadmap 2026 10 - Fighter90/career-ops-ui GitHub Wiki
The live task board is the Linear workspace carrer-ops-ui → project «Дорожная карта career-ops-ui (октябрь 2026)» (issues CAR-1…). This page mirrors its structure so a reader on GitHub sees the same plan. Issue texts are in Russian on Linear; this page is the English summary.
Plan source: docs/sdd/PLAN.md (order) · docs/sdd/BACKLOG.md (items) ·
docs/sdd/HANDOFF.md (rules + ship train).
-
v1.240.0 — parent parity @
62905981(109 sources) + pipeline checklist (#380). - v1.241.0 — review hardening (security, crash, data-loss) + job map (#381), 28-agent code review closure.
- v1.241.1 — evaluations end to end in every locale (192 KB context budget, 300 s timeout, hi/ja language lock), job map long locations, deploy vs the hourly scan (timers hold/resume), job map on cvstart.org ×17.
-
v1.243.0/1/2 — client fixes (Phase 3): unsaved-edit buffers (cv/career-plan), outcome modal closes on navigation, Unicode salary/keyword parsing, cv-diagnostics i18n ×17, detect(da/da-DK), CSS AA contrast contracts, SPA-fallback 404. Tests 4812 → 5036 (+ hotfixes → 5045). Spec:
docs/sdd/specs/2026-10-08-client-fixes-v1.243.0.md. - v1.244.0 — #/scan redesign (Phase 4): two-line row anatomy, boost/fit/score icons with localized aria-labels, title hygiene (country split), pagination (50/page, DOM budget), layout contracts. Tests → 5036. PR #409.
- v1.244.1 — regression hotfix: icon aria-label interpolation ({band}/{by}/{score}), 4-segment title country guard, ISO datetime meta dates. CAR-36 modal fix verified on prod. PR #411.
- v1.244.2 — scan chrome polish (CAR-46) + results-table hardening (CAR-47): launcher card, terminal status bar (state dot, reduced-motion), capped reposts disclosure (sticky header), filters grid; salary-head clamp (blurb → tooltip), empty-title fallback, seniority nowrap, muted «◎ —» for unscored rows, aux layout contract on the content element. Tests 5045 → 5068. PR #413. Prod verified (15/15 smoke + targeted chrome checks).
-
v1.245.0 — Tamil (தமிழ்) as the 18th UI locale (Phase 5, CAR-59): 1449-key dict full parity, docs/help/ta.md (33 H2/125 H3), detect(ta/ta-IN/ta-LK), gates 17→18 (incl. the missing CI
hi). Tests 5068 → 5075. PR #414. Prod verified 15/15. - v1.246.0 — design-QA top-10 fixes (CAR-48…58): apply-dark callout blocker (≈1.0:1 → ≈7.4:1), RTL bidi isolation, CV markdown LTR, reports DATE nowrap, sidebar/HUD + FAB clearance, mobile scan wrap, map controls dark, activity slugs ×18, assessments labels. Tests 5075 → 5090. PRs #415/#416. Prod verified 15/15 + targeted checks.
- v1.247.0 — design sweep tail (CAR-49…58 minors): dark map tiles (CSS-inverted OSM + keyed Carto preset, CSP img-src extended, live theme remount), .callout--warn dark variants, unified icon systems, designed empty states, UI.pageMeta meta pattern, config displayPath, form-label hygiene ×18. Tests 5090 → 5116. PRs #415-tail #418. Prod verified 15/15 + map-filter check. cvstart.org: Tamil landing (PR #419) — site now 18 locales, /ta/ live.
- v1.248.0 — parent parity (6290598 → fbdf7004, 44 commits): gupy API → portal.gupy.io + real filter names + confidencial exact-drop + max_pages 100; workable multi-country fold by URL; liveness banner line-awareness; radancy sibling job-location; smartrecruiters configured-slug fallback. No-ports documented; follow-up CAR-60 (location-filter always_allow). Tests 5116 → 5130. PR #423. Prod 15/15.
- v1.248.1 — location_filter tiers (CAR-60): always_allow beats block (workable merged-cell consumer case in the parent form), block_hard beats always_allow, strict counts block_hard; README language lines ×18 gained the missing Tamil entry. Tests 5130 → 5136. PR #424. Prod 15/15.
- v1.248.2 — regression round (CAR-61…68): auto-pipeline empty-JD gate 200 chars (no more t-role junk reports; 42 on prod), post-qa-cleanup dry-run/apply + backups (prod cleanup awaits explicit yes), lang-check ta, SCORE parser real formats + SCORE-only logging, tracker statuses ×18, honest ETA ~2–4 min + A–G, a11y contrast/chip, UI polish ×7. Tests 5136 → 5170. PR #426. Prod 15/15; remote-qa ar/ja re-run green.
-
v1.242.0 — sources correctness (Phase 2):
_shape.mjspage-1 throws across ~40 sources, justjoin/nofluffjobs/himalayas/jobicy alive again, exact-host adapter pins (SSRF), workday/telegram/tencent pagination, remote-RE tightening. Tests 4419 → 4812; coverage 98.15 % line / 89.36 % branch. Spec:docs/sdd/specs/2026-10-07-sources-correctness-v1.242.0.md.
| Linear | Concern | Phase |
|---|---|---|
| CAR-8…CAR-16 |
v1.242.0 — sources correctness: dead sources (justjoin, nofluffjobs), himalayas/jobicy pagination, _shape.mjs guards (malformed 200 throws), adapter host pins (lever/greenhouse/ashby/smartrecruiters SSRF), workday pagination, workingnomads SSRF |
2 |
| CAR-18…CAR-24, CAR-36…CAR-43 ✅ | v1.243.0/1/2 — client — SHIPPED (see Shipped) | 3 |
| CAR-25 ✅ (v1.244.0/v1.244.1) | v1.244.0 — #/scan redesign — SHIPPED (see Shipped) | 4 |
| CAR-25 |
v1.244.0 — #/scan redesign (spec: docs/sdd/specs/2026-10-06-scan-page-redesign.md) |
4 |
| CAR-26 | v1.245.0 — Tamil locale (ta), the 18th language | 5 |
| CAR-27 | v1.246.0 — upstream ports (liveness, inline tracker status, Anthropic model ids, fix-report-links runner, Gem isoCountry) | 6 |
| CAR-28 | Operator actions (secrets → production environment, tags on the server) | — |
| CAR-29 | UI redesign pass (Higgsfield MCP) — senior-level visual quality on top of the a11y fixes | — |
| CAR-31…CAR-35 | Documentation: in-app help ×17 actualization, system-prompt docs review, whole-project docs review, cvstart.org review, cvstart.org help actualization | — |
- Gates:
npm run test:ci+npm run test:e2e:browser+node evals/workflow/run.mjs— all green before the PR. - Ship train per
docs/sdd/HANDOFF.md: PR → CI → squash-merge → tag → Release → publish-package → Pages → resumecraft.ru deploy (mode=deploy) →mode=verify→ Playwright pass on prod → wiki refresh →PROGRESS.md. -
Full regression after every release — both stands: local
127.0.0.1:4317and prod (resumecraft.ru), all views, ×17 locales, LLM providers (live viaremote-qa.yml -f live=true), scanner (-f scan=true), plus an adversarial Playwright pass (creds via env, never committed). - A
qa/QA-REGRESSION-PROMPT-vX.Y.Z.mdis written per release (previous one archived toqa/archive/). -
CHANGELOG.md+CHANGELOG.<locale>.md×17 updated in the same release (one agent per locale; English is the source of truth; changelog parity +locale-fanout-integritygrader green). -
A spec per phase/release in
docs/sdd/specs/(template_TEMPLATE.md), Verification filled with real output before merge. - Wiki refreshed in the same release: Home ×17 banners, Scanner-Providers, Testing-and-QA / Release-Process counts, this Roadmap page.
- cvstart.org rebuilt after all 17 changelogs are final (
cd site && npm run build;grep -L 'X.Y.Z' site/src/content/changelog/*.mdprints nothing). - Linear statuses move with the work: In Progress when an agent starts, In Review when the PR is up, Done only when deployed and verified — with an evidence comment (counts, run links). Bugs found in regression become Linear issues immediately and are executed until done.
-
Every PR is merged into
mainonce CI is green — squash-merge, branch deleted, work continues from freshmain. No PR lingers open across sessions; a later finding is a new commit/PR on top of main, never a stranded branch.
The canonical rules block lives in docs/sdd/HANDOFF.md → Post-release standing rules (user-mandated 2026-10-07).
- v1.251.0 — specialization filter from the settings (owner correction) (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.
- v1.252.1 (2026-10-17) — FIX-PROMPT v1.252.0: wiki-banner gate (scripts/wiki-banner-check.mjs: banner == package.json + live registry counters, language-agnostic by shape); locale directive overrides the profile's language.output and the JD language; ta FORM looping watch.
- v1.252.0 (2026-10-17) — parent parity: fork synced with career-ops-hq (264 commits, parent 1.37.0, base 139efe1b); SPA code unchanged — docs train + parent re-pin; vi market mode, Tech in Asia board, 8 Block G signals ride the base.
- v1.251.1 — specialization tokens, remote-qa shape/language split, toolbar 50/50 (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.
- v1.250.0 — map job locator + text search (owner request) (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.
- v1.249.0 — relevance-first commute map (@bullitt186) + parent parity (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.
- v1.248.8 — parent parity 115 commits (pageup, extractCellUrl, Assessment), ta/ja language work (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.
- v1.248.7 — header role per the parent H1 convention, language warning, chatter strip (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.
- v1.248.6 — Telegram line structure, header role in tracker, Rejected dedup, recon/cleanup honesty (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.
- v1.248.5 — t.me embed fetch, pipeline skip contract, uk ordinals, offline tests (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.
- v1.248.4 — t.me role chain (CAR-61 continuation): RU+EN role keywords, report-header role via parseReportHeader, identity gate BEFORE the LLM call (rejected:true at fetch, provider stub never called), t.me/s/ preview prefix skipped, «Компания: X» honoured; README translations block regenerated ×18 from one canonical list + CI parity test (17 links, no self); deploy.yml recon: eval-timer honours rejected. Tests 5177 → 5181. PR #430. Prod 15/15 + attribution/chip checks.