Skip to content

Roadmap 2026 10

Sergey Emelyanov edited this page Oct 17, 2026 · 26 revisions

Roadmap — October 2026 (mirror of the Linear project)

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).

Shipped

  • 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.mjs page-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.

Open phases (Linear → concern)

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 —

Standing process (every release, no exceptions)

  1. Gates: npm run test:ci + npm run test:e2e:browser + node evals/workflow/run.mjs — all green before the PR.
  2. 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.
  3. Full regression after every release — both stands: local 127.0.0.1:4317 and prod (resumecraft.ru), all views, ×17 locales, LLM providers (live via remote-qa.yml -f live=true), scanner (-f scan=true), plus an adversarial Playwright pass (creds via env, never committed).
  4. A qa/QA-REGRESSION-PROMPT-vX.Y.Z.md is written per release (previous one archived to qa/archive/).
  5. 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-integrity grader green).
  6. A spec per phase/release in docs/sdd/specs/ (template _TEMPLATE.md), Verification filled with real output before merge.
  7. Wiki refreshed in the same release: Home ×17 banners, Scanner-Providers, Testing-and-QA / Release-Process counts, this Roadmap page.
  8. cvstart.org rebuilt after all 17 changelogs are final (cd site && npm run build; grep -L 'X.Y.Z' site/src/content/changelog/*.md prints nothing).
  9. 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.
  10. Every PR is merged into main once CI is green — squash-merge, branch deleted, work continues from fresh main. 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.

Clone this wiki locally