[1.7.2] — 2026-05-04
Help center, in-UI App settings, mobile sidebar, single Scan button, and a "Show result" shortcut on every prompt-builder.
✨ New features
feat(help): in-app user guide(/#/help) — long-form Markdown documentation accessible from a new sidebar entry. Covers every page step-by-step: quick start, CV editor, Profile, Scan filters, Pipeline preview, Evaluate, Deep research, Apply, Tracker, Reports, all 7 modes, Activity log, Health, setup hints. Auto-built sticky table of contents from<h2>headings, synchronous DOM build (no race). Localized for all 8 supported locales.feat(config): in-UI App settings page(/#/config) — editANTHROPIC_API_KEY,ANTHROPIC_MODEL,GEMINI_API_KEY,GEMINI_MODEL,HH_USER_AGENT,PORT,HOSTfrom the browser. Writes to the parent project's.envfile so career-ops Node scripts AND web-ui's dotenv loader pick up the same source. Secret keys masked on read (first/last 4 chars). Model fields are dropdowns with curated lists (claude-sonnet-4-6 / claude-opus-4-7 / claude-haiku-4-5 / gemini-2.0-flash / etc.). Empty value deletes the key. Values applied to running process.env immediately — no restart for most settings.feat(modes): "⚡ Show result" button alongside "Copy prompt"— when a prompt is generated in manual mode, users no longer have to retype their inputs to get the LLM result. The new button re-submits the same form withrun: true, falling through to a clear toast (Set ANTHROPIC_API_KEY or GEMINI_API_KEY in .env first) when no key is configured. Works on/#/deep,/#/project,/#/training,/#/followup,/#/batch,/#/contacto,/#/interview-prep,/#/patterns.
🐛 UX + UI fixes
fix(scan): single Scan button replaces three (Scan all + EN + RU)— overwhelming choice, identical default in 99% of cases. The unified🌐 Scanbutton runs every enabled source. Help docs updated across 8 locales.fix(ui): mobile sidebar drawer— viewport <900px now gets a hamburger button (☰) in the topbar;body.sidebar-opentoggles a CSS transform that slides the sidebar in. Backdrop dim + click-anywhere closes it. Anchor click + hashchange auto-close so the user lands on the new page with the drawer tucked away. Larger viewports unaffected.fix(server): footer version reflects web-ui, not the parent VERSION—/api/healthnow reads web-ui's ownpackage.json. The footer no longer leaks a stale1.6.0from the parent's version file. Parent's VERSION is still surfaced separately asparentVersion.
📦 New REST endpoints
| Method | Path | Purpose |
|---|---|---|
GET
| /api/help/:lang
| Returns the Markdown user guide for the requested locale, falling back to en.md. Path-traversal-safe.
|
GET
| /api/config
| Returns current values for all known env keys; secrets masked. |
POST
| /api/config
| Writes the given keys into the parent project's .env, validates each value, applies live to process.env.
|
🌐 i18n
- 30+ new keys across
nav.help,nav.config,help.*,config.*,deep.showResult,deep.needKey,scan.btnRun. All 8 locales populated.
🧪 Tests
tests/help.test.mjs(12 cases) — every supported locale returns substantive markdown, EN spot-checks every page slug, unknown lang → EN fallback, path-traversal sanitized, every locale referencescv.md/profile.yml/.env.tests/help-ui.test.mjs(9 cases) — view file registration, sidebar entry, i18n keys present in every locale, docs files exist for every locale, EN/RU help has 14 canonical sections, every #/foo route covered, Show-result wiring on deep + mode-page.tests/env-config.test.mjs(18 cases) — pure-function tests forparseEnv,maskSecret,validateConfig,updateEnvFile(bootstrap, in-place rewrite preserving comments, empty-value delete, quote-when-needed).tests/config-endpoint.test.mjs(8 cases) — GET masks secrets / returns env path; POST writes to parent .env; live process.env application; empty-value unsets; rejects unknown keys + malformed Anthropic keys with 400.
📊 Stats
- Tests: 233 → 277 (+44 across 4 new test files).
- E2E: 20 smoke + 23 comprehensive = 43 Playwright steps, all green.
- Coverage: 93.5% line / 82.6% branch / 93.7% funcs (unchanged — new code is fully tested).