Skip to content

v1.96.0

Choose a tag to compare

@github-actions github-actions released this 04 Jul 21:11
f655fb6

[1.96.0] — 2026-07-04

Career orientation (Epic 27). A new #/orientation page answers "which directions actually fit me?" — the read you'd get from a vocational test, but inferred from your own CV and profile instead of a questionnaire. Click Generate profile and the model returns your best-fit career vectors (which of the eight archetypes — Functionalist, Administrator, Communicator, Specialist, Analyst, Innovator, Manager, Entrepreneur — fit, with evidence), a career-type leaning, recommended roles, professional strengths tied to your CV, working-style tendencies, and development recommendations. It is an AI reflection of how your CV reads — not a psychometric test: it never invents achievements and never reports numeric scores as if measured. Export it to Markdown or PDF; nothing is written to disk.

  • New route server/lib/routes/orientation.mjs (24th route module) — POST /api/orientation/generate builds the profile prompt from CV+profile+two-pager+memory via the shared provider cascade, with a copy-paste manual fallback and no file writes.
  • Reuses report-export.js for Markdown/PDF/copy, under the Growth nav group.
  • Tests: tests/orientation-routes.test.mjs (reflection framing / no fabricated scores, CV/profile-seeded manual mode). 7 new i18n keys ×16 locales, Help §28 ×16.

New: #/orientation; server/lib/routes/orientation.mjs.

Also in this release — review-driven fixes & hardening. A sweep of the AI-review logs across recent PRs surfaced several real defects, all fixed here:

  • Duplicate i18n keys removed (30 CodeQL js/duplicate-property alerts). The v1.94.0 statistics fan-out had inserted the stats.*/export.* block twice in five locale dicts (ar, ja, ko, zh-CN, zh-TW) — last-wins silently shadowed the first copy. Each doubled block is removed; snapshot regenerated; parity green.
  • cv-diagnostics.js dead code (CodeQL js/useless-comparison). The words === 0 length branch was unreachable after the words < 20 early-return guard — removed.
  • cv-privacy.js false redactions. PHONE_RE now skips date-like runs (a 2018-2022 year range, a 2026-07-04 ISO date) that its ≥7-digit guard would otherwise mask; ADDRESS_RE now requires a real address boundary (comma / ZIP / end-of-line) so a mid-sentence "…Full Stack Dev St building…" isn't redacted. New tests cover both.
  • i18n-dict.fr.js shipped-bundle noise. Stripped the trailing English // gloss comment from every French entry — consistent with the other 15 locales.
  • AI-review workflow. ai-review.yml's rubric now names all 16 locales (was a stale 8), and the reviewer diff is ordered code-first (server/, public/, tests/) so the 200 KB cap truncates bulky localized CHANGELOG/README churn rather than the security-relevant code it kept reporting as "not in the diff."
  • Doc drift. Refreshed stale counts in docs/sdd/CONVENTIONS.md (test total, H3 parity number), CLAUDE.md, and .claude/PROJECT-CONTEXT.md.