fix(a11y): close cross-app interaction gaps
CI and Deploy / test (pull_request) Successful in 4m54s
CI and Deploy / deploy (pull_request) Has been skipped

This commit is contained in:
cesnimda
2026-08-15 17:49:42 +02:00
parent deed948183
commit a7c25499bb
23 changed files with 224 additions and 61 deletions
+10
View File
@@ -709,3 +709,13 @@
- **Consequences:** the dedicated page edits and clears answer/recruiter drafts directly, ordinary notes remain readable, existing rows require no migration, and legacy calls continue to work. A future normalized column/table can migrate behind the same API without another UI change.
- **User approval required:** No; this is compatibility-safe implementation of the requested dedicated workspace.
- **Reversible:** Revert the workspace/API boundary; no schema or stored-data rewrite occurred.
## DEC-072 — Scale the complete public CV, not its document viewport
- **Date:** 2026-08-15
- **Decision:** Keep the anonymous public CV iframe at its physical A4 rendering width, measure the rendered multi-page height, and scale the entire iframe into the available screen width with a sized clipping container.
- **Reason/evidence:** reducing only the iframe width leaves the renderer's fixed 210mm page wider than the embedded viewport, which can create internal clipping even when the outer page no longer scrolls. Chromium now proves both the outer page and embedded document have no horizontal overflow at 375px.
- **Alternatives considered:** hide outer overflow; make server CV pages fluid; shrink typography; duplicate a mobile-only renderer. These conceal clipping, change PDF geometry/readability or fork the authoritative render path.
- **Consequences:** public browser viewing preserves the same A4 layout used by PDF/export while fitting narrow screens; multi-page content reserves its scaled height. PDF output is unchanged.
- **User approval required:** No; this is a requested responsive/accessibility correction without schema, dependency or production change.
- **Reversible:** Revert the `PublicCvPage` frame wrapper; no stored data changed.
+6 -6
View File
@@ -2,17 +2,17 @@
Updated: 2026-08-15
- **Overall programme status:** Active. Seven packages are locally verified; twenty-two are implemented with verification incomplete; UX-002 is in progress. The prioritized admin-only version indicator and the repository/browser JOBS-002 scope are implemented on the release branch; remote and production verification remain.
- **Current work package:** `UX-002`cross-application contrast/accessibility completion (`IN PROGRESS`). JOBS-002 now has application-package parity, dirty-navigation protection, tenant regressions and real-Chromium responsive/theme/history/error evidence.
- **Overall programme status:** Active. Seven packages are locally verified; twenty-three are implemented with verification incomplete; PRODUCT-001 is in progress. The prioritized admin-only version indicator, JOBS-002 workspace and scoped cross-application accessibility pass are implemented on the release branch; remote and production verification remain.
- **Current work package:** `PRODUCT-001`honest Free/Pro homepage and contextual upgrade surfaces (`IN PROGRESS`). The prerequisite claim inventory is next; no price, trial or limit will be invented.
- **Completed work packages:** None are `DONE`; all repository security/AI packages still have applicable browser, provider and/or production gates.
- **Locally verified work:** SEC-001, SEC-002, SEC-003, SEC-005A, CORE-001, PROD-002 and DEP-001 (`VERIFIED LOCALLY`).
- **Implemented, verification incomplete:** SEC-004, SEC-005B, SEC-008, CORE-002, BG-001, OPS-001A/B/C, POL-001/002, AI-001/002/003/004, UX-001/003, QA-001, CAREER-001/002, MAIL-001 and JOBS-001/002 (`IMPLEMENTED — NOT VERIFIED`). JOBS-002 and UX-003 safe local/browser scope is implemented; production/native-device gates remain.
- **Implemented, verification incomplete:** SEC-004, SEC-005B, SEC-008, CORE-002, BG-001, OPS-001A/B/C, POL-001/002, AI-001/002/003/004, UX-001/002/003, QA-001, CAREER-001/002, MAIL-001 and JOBS-001/002 (`IMPLEMENTED — NOT VERIFIED`). JOBS-002, UX-002 and UX-003 safe local/browser scope is implemented; production/native-device gates remain.
- **Production-verified work:** None.
- **Blocked work:** SEC-006 parser upgrades remain outside the scoped frontend advisory permission; PROD-001/003/004 and REL-001 require documented production access and unfinished dependencies. Real provider, SMTP/MariaDB and production environments are unavailable; DEP-001 awaits approved merge/live verification. The in-app browser is available for local UI checks.
- **Deferred work:** None. Conditional multi-replica coordination, model deletion, realtime operation delivery and unrelated production changes remain outside current packages.
- **Immediate order:** cross-app contrast/accessibility; PRODUCT-001; VER-001; tracking/blocker reconciliation. Admin version (`a6cffe0`), Career lossless persistence (`f0b9b22`), CV contact contrast (`3b86ea2`) and JOBS-002 repository/browser scope are locally complete. External-only work remains skipped, not allowed to stall this queue.
- **Status counts:** 7 `VERIFIED LOCALLY`; 22 `IMPLEMENTED — NOT VERIFIED`; 1 `IN PROGRESS`; 4 `NOT STARTED`; 5 `BLOCKED`; 0 `DONE`; 0 `DEFERRED`.
- **Test status:** backend 647/647; frontend 54/54 suites and 227/227 tests; optimized production build/TypeScript pass; Playwright 7/7. The application workspace journey passes keyboard entry, Back/Forward, focus return, unsaved navigation, saved-draft refresh, missing-job handling, long data, and explicit light/dark 375/768/1440 no-overflow checks. CV renderer/settings 25/25, CV Builder/public UI 22/22, AI sidecar 22/22 and npm audit 0 evidence remain current. Historical JT-019 and Jest force-exit/open-handle behavior remain recorded.
- **Immediate order:** PRODUCT-001; VER-001; tracking/blocker reconciliation. Admin version (`a6cffe0`), Career lossless persistence (`f0b9b22`), CV contact contrast (`3b86ea2`), JOBS-002 (`deed948`) and the cross-app accessibility pass are locally complete. External-only work remains skipped, not allowed to stall this queue.
- **Status counts:** 7 `VERIFIED LOCALLY`; 23 `IMPLEMENTED — NOT VERIFIED`; 1 `IN PROGRESS`; 3 `NOT STARTED`; 5 `BLOCKED`; 0 `DONE`; 0 `DEFERRED`.
- **Test status:** backend 647/647; frontend 54/54 suites and 228/228 tests; optimized production build/TypeScript pass; Playwright 7/7 plus final targeted 2/2. The application workspace journey passes keyboard entry, Back/Forward, focus return, unsaved navigation, saved-draft refresh, missing-job handling, long data, explicit light/dark 375/768/1440 no-overflow checks and computed dark-Alert AA contrast. The public CV preserves its full A4 viewport while scaling without inner/outer mobile overflow. CV renderer/settings 25/25, CV Builder/public UI 22/22, AI sidecar 22/22 and npm audit 0 evidence remain current. Historical JT-019 and Jest force-exit/open-handle behavior remain recorded.
- **Deployment status:** Gitea pull-request run 609 passed the complete CI job in 4m20s. Deploy was intentionally skipped because the workflow deploys only a `push` to `main`; live remains unchanged. No merge/deployment was performed directly, no production migrations were run and the AI operation worker remains disabled by default.
- **Production status:** Unchanged and unverified. No provider/model call, model pull, external request or paid API occurred.
- **Known regressions:** None found by automated/local browser checks. Jest still needs `--forceExit` and reports its existing open-handle notice. Email-provider/send tests are fake/local only; real delivery is not claimed. Current MAIL browser evidence is 1280×720 only because the browser surface could not resize or perform native Tab traversal. Interrupted attempts are aged after 15 minutes and notified without retry; the five-minute scan is unmeasured on a large ledger. Direct clean EF-only SQLite migration still hits the pre-existing historical blank-chain defect before later migrations; normal startup owns reconciliation. Cross-feature monthly AI usage accounting remains a rollout gap.
+6 -6
View File
@@ -16,7 +16,7 @@ Allowed statuses are `NOT STARTED`, `IN PROGRESS`, `IMPLEMENTED — NOT VERIFIED
`DONE` requires every applicable acceptance criterion, focused and regression tests, browser/accessibility/theme/mobile checks, tenant and entitlement checks, documentation, migration/rollback evidence, and production verification. Repository-only work that still requires production is at most `VERIFIED LOCALLY`.
Exactly one implementation item may be `IN PROGRESS`. As of this revision it is **UX-002**.
Exactly one implementation item may be `IN PROGRESS`. As of this revision it is **PRODUCT-001**.
## Consolidated dependency order
@@ -58,8 +58,8 @@ This queue records the highest-value work that can proceed without production cr
| 2 | Lossless Career field persistence | CAREER-001 | Implemented and locally verified. Manual website/location/contact/date/language values now use a reviewed-data persistence boundary; extraction heuristics remain isolated to extraction. Full remote/production smoke remains. |
| 3 | CV contact/header/sidebar contrast correction | CAREER-002 | Implemented and locally verified. Header/custom-accent and sidebar palettes own readable foregrounds; real Chromium computed-style/overflow checks and a 17-page A4 PDF proof pass. |
| 4 | Dedicated Job Details parity and JOBS-002 closure | JOBS-002 | Locally complete. Application answers/recruiter drafts now live on the dedicated page, note markers are encapsulated, edits are lossless, dirty navigation is guarded, focus returns to the row, tenant regressions pass, and Chromium covers 375/768/1440 light/dark/history/error/long data. Production smoke remains. |
| 5 | Cross-application contrast/accessibility pass | UX-002, UX-003, VER-001 | In progress. Audit semantic alerts, secondary text, focus, loading/empty/error states and remaining hardcoded colors before documenting larger redesigns. |
| 6 | Honest Free/Pro homepage and upgrade surfaces | PRODUCT-001 | Not started. Inventory existing claims first; do not invent pricing, limits or trial terms before billing configuration is real. |
| 5 | Cross-application contrast/accessibility pass | UX-002, UX-003, VER-001 | Locally complete. All icon controls own programmatic names; CV cards are keyboard links; the A4 public CV scales without inner/outer mobile overflow; dark Alert contrast is measured in Chromium at WCAG AA; full frontend/build/Playwright pass. Native assistive-technology and a general CI crawler remain external/future gates. |
| 6 | Honest Free/Pro homepage and upgrade surfaces | PRODUCT-001 | In progress. Inventory existing claims first; do not invent pricing, limits or trial terms before billing configuration is real. |
| 7 | Complete application action matrix and full regression | VER-001 | Not started. Populate incrementally, then run the complete backend/frontend/sidecar/E2E gates and accurately classify external production/provider checks. |
| 8 | Tracking and blocker reconciliation | All | Keep this plan, progress, handoff, verification log and `BLOCKERS.md` aligned after every logical increment; remove stale CI/dependency statements only when current evidence proves them obsolete. |
@@ -594,7 +594,7 @@ This queue records the highest-value work that can proceed without production cr
- **Required production verification:** normal browser smoke after deploy.
- **Status:** `IMPLEMENTED — NOT VERIFIED`.
- **Blocker:** production and live authenticated multi-user browser environments are unavailable; repository/browser work is complete.
- **Evidence:** `docs/verification/ux-002-deterministic-theme-state.md`; V-111V-113; focused 6/6, full frontend 48/48 suites and 172/172 tests, build, Light/Dark/System/navigation/refresh/two-tab browser checks and 375/768/1440 captures.
- **Evidence:** `docs/verification/ux-002-deterministic-theme-state.md`; V-111V-113 and V-170; deterministic-theme coverage plus full frontend 54/54 suites and 228/228 tests, build, Light/Dark/System/navigation/refresh/two-tab browser checks, computed dark-Alert AA contrast and responsive public-CV proof.
- **Commit:** `11734ee` (`fix(theme): make preference state deterministic`).
- **Remaining work:** live User A/User B preference switching and production browser smoke; retain existing preference keys during rollout.
@@ -736,11 +736,11 @@ This queue records the highest-value work that can proceed without production cr
- **Required tests:** copy/capability consistency, Free/Pro/expired/downgraded locked states, dismissal/no false generation.
- **Required browser verification:** homepage and contextual prompts at three widths/themes/keyboard/accessibility.
- **Required production verification:** configured price text only if actual billing product exists; otherwise no invented values.
- **Status:** `NOT STARTED`.
- **Status:** `IN PROGRESS`.
- **Blocker:** public plan behavior depends on POL-001 compatibility decision; real billing activation is external.
- **Evidence:** source requirement.
- **Commit:** none.
- **Remaining work:** inventory all current contradictory plan claims.
- **Remaining work:** inventory all current contradictory plan claims, then implement only centrally supported honest Free/Pro copy and contextual upgrade surfaces; billing values remain external.
### VER-001 — Complete application action matrix and regression pass
+8 -8
View File
@@ -2,17 +2,17 @@
Updated: 2026-08-15
- **Exact current task:** commit/push JOBS-002 application-package parity and navigation-safety closure, then continue the cross-application contrast/accessibility pass.
- **Last completed step:** moved application-answer/recruiter drafts onto the dedicated workspace, encapsulated legacy note markers, preserved answers through ordinary edits, guarded dirty navigation and restored list focus.
- **Files currently modified:** workspace/draft backend and UI boundaries, route/focus behavior, unit/Chromium regressions, application-workspace architecture and programme evidence.
- **Commands already run:** focused backend 30/30; focused frontend 28/28 plus route/focus 6/6; full backend 647/647; full frontend 54 suites/227 tests; optimized build; full Playwright 7/7; repeated targeted workspace Chromium passes; diff review pending after documentation.
- **Test results:** all repository tests listed above pass. Workspace Chromium covers explicit light/dark at 375/768/1440, keyboard entry, Back/Forward, focus return, refresh, dirty-edit cancel, long data, missing-job handling and zero horizontal overflow. Jest retains the documented force-exit/open-handle notice.
- **Exact current task:** start PRODUCT-001 claim inventory after committing/pushing the completed cross-application accessibility increment.
- **Last completed step:** named all icon controls, made CV cards keyboard-operable, preserved/scaled the full A4 public-CV viewport on mobile and added real dark-Alert contrast proof.
- **Files currently modified:** focused frontend accessibility semantics, public-CV responsive rendering, unit/Chromium regressions and programme evidence.
- **Commands already run:** accessibility-focused frontend 9/9; full frontend 54 suites/228 tests; optimized build; full Playwright 7/7; final targeted workspace/public-CV Chromium 2/2; static icon-control audit and diff review.
- **Test results:** all repository tests listed above pass. Chromium measures dark Alert contrast at WCAG AA, proves the public CV has no inner or outer overflow at 375px, and retains the prior workspace light/dark/history/focus evidence. Jest retains the documented force-exit/open-handle notice.
- **Services currently running:** none on task-owned ports 3000/5202. Playwright stopped its disposable API/Next servers. Pre-existing Docker services were not changed.
- **Temporary files or processes:** no task-owned process is running and the failed disposable migration database was removed. Existing synthetic browser evidence/account and startup-created local backup remain documented. No provider account, real email, private content, paid service or production service was accessed.
- **Production changes currently active:** none. No deployment, migration, provider connection/sync/send or production payload occurred.
- **Rollback status:** downgrade `20260810080858_AddEmailDraftClientRequestId`, then `20260810075206_AddEmailDrafts`, before reverting draft commits; then follow the existing MAIL rollback order (`ee5ef7e`, `449faeb`, `123fc55`/`e9937ac`, ledger downgrade before `653f011`). No production migration/deploy/provider grant occurred.
- **Uncommitted changes:** V-169 JOBS-002 parity/navigation increment; no dependency/schema/config/migration change. V-166/V-167/V-168 are pushed as `a6cffe0`/`f0b9b22`/`3b86ea2`.
- **Uncommitted changes:** V-170 accessibility/responsive-public-CV increment; no dependency/schema/config/migration change. V-166 through V-169 are pushed as `a6cffe0`, `f0b9b22`, `3b86ea2` and `deed948`.
- **Known failures:** live deployment is not verified because PR deploy is intentionally skipped and the active branch is not approved for merge. Draft export/API/UI, full thread/category actions and non-Gmail review remain; existing accounts need re-consent and IMAP stays read-only. A clean full-chain SQLite apply fails in the pre-existing JT-019 migration before the new draft migration. Browser/provider/MariaDB/production unavailable or unverified; recovery scan performance is unmeasured at large ledger scale; Jest open handles; SEC-006 parser dependency work is still separately gated; parser isolation remains SEC-007.
- **Exact next action:** review, commit and push V-169; then execute the scoped cross-application contrast/accessibility inventory and corrections under UX-002/UX-003/VER-001.
- **Work that can continue independently:** cross-app contrast/accessibility, PRODUCT-001, VER-001 and tracking reconciliation. UX/JOBS production, MAIL provider mutations, SEC-006/007 and PROD packages retain their recorded external gates.
- **Exact next action:** commit/push V-170, inventory Free/Pro claims and implement the supported PRODUCT-001 surface without invented commercial terms.
- **Work that can continue independently:** PRODUCT-001, VER-001 and tracking reconciliation. UX/JOBS production, MAIL provider mutations, SEC-006/007 and PROD packages retain their recorded external gates.
- **Decisions still required from the user:** none for synthetic/code-inspected repository work. Any provider connection or send test, internet/package upgrades, private data, external/paid providers and production actions retain explicit approval/safety gates; SEC-009 retention/legal policy remains unresolved.