test(dashboard): qualify responsive layout and preview semantics
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# Phase 8 functionality preservation reconciliation
|
||||
|
||||
The exact 57 Phase 7 groups remain: 56 PARTIAL and PRES-C11 DEFERRED. These are retained finite-evidence/qualification statuses, not claims of 56 defects or whole-product acceptance. Original capabilities and remaining obligations are authoritative in [Phase 7](../phase-7/PRESERVATION.md). This table records Phase 8 impact without rewriting historical evidence. Final executed suite outcomes are in [acceptance](p8-05/FINAL_ACCEPTANCE.md).
|
||||
|
||||
| Group and protected capability | Retained status | Phase 8 treatment |
|
||||
|---|---|---|
|
||||
| **PRES-E01** Public product, Free/Pro comparison and honest unavailable billing | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-E02** Local login/register/remember, Turnstile, resend/reset/verify | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-E03** Google/Microsoft sign-in/link/relink, popup state/origin | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-E04** 2FA/recovery/setup/disable/trusted-device revocation | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-E05** Sessions/current-device/revoke/logout | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-E06** Avatar/account identity/email/password | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-E07** Expanded/rail/mobile navigation, active route, commands | PARTIAL | Existing shell/routes retained; draft route/unload warning and acknowledged-save navigation/focus added. |
|
||||
| **PRES-E08** Themes, EN/NB hydration, shared toast/confirm/prompt/errors | PARTIAL | MUI/theme/EN-NB/confirmation/toast preserved; focused keyboard/reflow/axe evidence with human qualifications retained. |
|
||||
| **PRES-E09** Account switch/stale read-write/BFCache/revalidation | PARTIAL | Identity generation/abort and owner-at-submit guards; late acknowledgements/account switch dispose layout state; server owner authorization. |
|
||||
| **PRES-J01** NAV search/filter/sort/source/freshness/details | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J02** Named saved searches/run/delete/alerts/results/dismiss | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J03** Reviewed manual/URL/paste creation/company/tags/dates/duplicates | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J04** Extension/bookmarklet/share capture and optional post-create artifacts | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J05** Search/filter/sort/pages/columns/saved views/row-card actions | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J06** Bulk status/delete/restore, soft-delete/Trash, edit | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J07** Board groups/custom statuses/pointer-keyboard move/cancel/menu | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J08** Company/contact/source/pipeline-date/history editing | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J09** Recorded offer compensation/deadline/notes/source | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-J10** CSV/JSON export/import/conversion/counts | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W01** Full job workspace/legacy links/optional overlay | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W02** Details/status/next action/dates/contact/timeline | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W03** Analysis/match/gaps/strategy/reviewed status suggestions | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W04** Checklist CRUD/completion/order/next action | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W05** Select/attach/create/tailor CV and source context | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W06** Manual/AI letter review/reject/apply/history/dirty guard | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W07** Drafts/frozen package versions/archived binaries | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W08** Upload/drop/category/name/consent/preview/download/delete | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W09** Interview categories/questions/answers/manual removal/AI review | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W10** Debrief/follow-up content/date/readiness | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W11** Reminders/rules/notifications/ICS/Google-Outlook events | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-W12** Async progress/failure/retry/cancel/notifications | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C01** All canonical structured/long-tail/custom career fields | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C02** Overview/completeness/import/raw copy/avatar/history restore | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C03** Upload/extract/reprocess/diff/low-confidence select/accept/discard/retry | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C04** Evidence sources/categories/tags/add/list/delete | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C05** Library CRUD/gallery/share/publication/PDF | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C06** Studio tabs/save states/debounce/pages/fit/mobile panes | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C07** Visibility/order/custom sections/item-document overrides/reset | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C08** Capability-aware typography/color/header/skills/sidebar/photo | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C09** A4/Letter/density/margins/dates/document locale/section layout | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C10** Undo/redo/save queue/dirty/history/conflict/preview lifecycle | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C11** Section/document AI improve/translate/instruction/grammar review | DEFERRED | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-C12** Private PDF/public slug preview-PDF/long searchable output | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-M01** Job manual correspondence log/search/delete/paste | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-M02** Gmail candidates/thread import/sync/unlink/relink/move | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-M03** Global inbox filters/page/provider/link/direction/detail/attachments | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-M04** Compose/reply/draft revisions/confirmed send/uncertain attempt | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-M05** Gmail reviewed job/link/reject/keep/notes/sync/create | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-M06** Gmail/Graph/IMAP connect/status/disconnect | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-S01** Personal counts/activity/funnel/company/skills/stage/salary/next action | PARTIAL | Existing exact Dashboard/Analytics report values, source destinations, independent errors and periods retained; all nine existing sections preserved. |
|
||||
| **PRES-S02** Five owner-local flags/onboarding/bell read-dismiss | PARTIAL | Five local flags migrate to the account layout on explicit Save; onboarding/bell retained; visibility/order/size/reset/cross-session/conflict tested. |
|
||||
| **PRES-S03** Rules/notification/table/theme/language/account preferences | PARTIAL | Narrow account layout fields only; stale Identity writes cannot overwrite them; unrelated language/notification/profile/stamp fields preserved. |
|
||||
| **PRES-S04** Privacy/AI usage/limits/server entitlement/billing availability | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-S05** Account ZIP/encrypted backup/lifecycle/deliberate delete | PARTIAL | No product implementation change in this capability; existing full regression and prior human/provider/output qualifications retained. |
|
||||
| **PRES-A01** Admin users/create/roles/reset/delete/last-admin/self guard | PARTIAL | Administration source unchanged; owner-only layout API cannot select another account and ordinary user cannot read admin statistics. |
|
||||
| **PRES-A02** Audit detail/supported undo/job restore | PARTIAL | Audit source unchanged; existing regression remains required. |
|
||||
| **PRES-A03** System/build/DB/AI/mail/SMTP/probe/benchmark/maintenance | PARTIAL | System/admin dashboard source unchanged; no administrative customisation or production operations. |
|
||||
|
||||
All route patterns in App.tsx match `ef94d57` exactly (including the approved Documents destination); no navigation pattern is removed. No renderer, provider, AI model, analytics aggregation, security permission, admin or production configuration is changed. Layout reset only submits layout metadata.
|
||||
|
||||
Performance boundary: report fetches and calculation owners remain the same; the focused ordering test asserts no report request on reorder. Rendering is bounded by nine catalogue entries. No production load, mobile hardware benchmark or claim of faster large-dataset aggregation is inferred. Existing O(N) Board scaling remains separately owned.
|
||||
@@ -0,0 +1,24 @@
|
||||
# P8-04 — Responsive and accessibility qualification
|
||||
|
||||
The final feature build uses the existing app theme, header measurements and MUI controls. No dependencies were added. The final acceptance report records the succeeding whole-browser run separately from the focused evidence below.
|
||||
|
||||
## Executed focused browser evidence
|
||||
|
||||
`browser-qualification.json` records **13 passed / 0 failed, skipped, flaky or retried** in93.929s: retained two Analytics journeys, retained two Dashboard journeys and nine Phase 8 cases. Actual local API/SQLite/accounts/session cookies/CSRF are used. Explicitly controlled GET/PUT503 and route-abort transport failures exercise recovery without implying a physical network outage. Fresh contexts and real logout/login prove account persistence across browser lifetimes; these are not physically separate devices.
|
||||
|
||||
Viewports320/390/768/1440px cover editor EN/Bokmål and light/dark; retained dashboard journeys also cover1024/1920px. Every measured root page has no horizontal overflow. Native selects keep long translated labels accessible; visual Size labels are short while complete widget-specific accessible names remain. Desktop pointer handle drag, keyboard Earlier/Later with live position/focus, emulated-touch button reordering and readback all pass. Summary stays full width; one logical DOM order becomes a single-column feed on small screens.
|
||||
|
||||
Forty-two initial Dashboard/editor PNGs were inspected through four contact sheets and representative full-size crops. Final desktop/light/English and320px/dark/Bokmål editor crops were separately inspected after the focus repair; final raw qualification contains60 distinct screenshots including Analytics. This does not claim an individual full-size inspection of every image. Exact metric/month/sample/source-link and persisted API assertions supply behavioral evidence beyond screenshots.
|
||||
|
||||
## Reproduced issues and repairs
|
||||
|
||||
- Edit entry focused the panel beneath the fixed app header. A browser geometry check first failed (`focus-red.json`); deliberate preventScroll focus, the existing `--app-shell-header-height` scroll margin and explicit scroll now pass at320/768/1440px. The final reviewed crops show the heading and Save/Cancel controls below the header.
|
||||
- Pending-save route navigation offered a misleading discard promise. A deferred acknowledgement unit regression first failed, then passed; SPA navigation now waits with a localized status while saving. Browser unload warnings do not promise rollback of server writes.
|
||||
- Axe's incomplete triage identified a labelled preview `div` without a valid role. A role-based test failed first (`preview-semantics-red.log`); the preview is now a named region. The new editor browser case explicitly rejects `aria-prohibited-attr` incompletes. Final scan totals are in final acceptance; the earlier ten scans had0 automated violations and68 incomplete nodes (61contrast,6preview semantics,1drawer focus), so those earlier results are not presented as the repaired totals.
|
||||
- The Analytics all-hidden fixture still set only the original five local flags. Its failure remains in the interrupted full run. It now saves all nine hidden flags through the real owner endpoint, preserving the original Analytics exact-value/navigation/isolation assertions. The focused successor passes.
|
||||
- The initial prebuilt browser run pointed to5202 rather than isolated5302; ten startup/data failures are retained. Rebuilt with explicit test API URL; no product default, API assertion or auth guard was weakened.
|
||||
- Lint identified the Playwright fixture callback named `use` as a React hook; renamed the callback to `provide` without changing test behavior.
|
||||
|
||||
## Required manual qualification
|
||||
|
||||
Human screen readers, physical touch/software keyboard, complete actual browser zoom/text enlargement/reflow, other browsers, deployed Linux/fonts/photo/native print, manual layered-contrast review and retained drawer settled-state focus require real operators. Automated axe/emulation/screenshots do not satisfy them. No production or provider test is inferred. Existing vendor strings and Phase 7 accessibility/output conditions remain visible in [Phase 7 acceptance](../../phase-7/p7-12/FINAL_ACCEPTANCE.md).
|
||||
@@ -0,0 +1,48 @@
|
||||
# Phase 8 acceptance scenario mapping
|
||||
|
||||
This matrix maps every requested scenario to its actual test owner. The [final report](FINAL_ACCEPTANCE.md) supplies executed whole-suite results and qualifications; a test reference alone is not an execution claim. Backend tests are `DashboardPreferencesTests.cs`; frontend tests are `dashboardLayout.test.ts`, `hooks/useDashboardLayout.test.tsx`, `dashboard-customisation.test.tsx` and retained Dashboard/Analytics tests. Native cases are `phase8-dashboard-customisation.spec.ts` plus retained Dashboard/Analytics presentation cases.
|
||||
|
||||
| # | Required scenario | Evidence and boundary |
|
||||
|---|---|---|
|
||||
| 1 | Useful defaults for a new user | Catalogue defaults, unsaved GET revision0, actual new-account Dashboard guidance; no fabricated metrics |
|
||||
| 2 | Existing users retain settings | Legacy owner-local five flags migrate only before first Save; real browser case and migration defaults |
|
||||
| 3 | Correct existing statistics | Retained exact monthly/count/denominator/custom-stage/company/source tests and native readback |
|
||||
| 4 | Enter/exit customisation | Explicit editor region, Cancel/Save, Escape and focus restoration; component/native cases |
|
||||
| 5 | Hide a widget | Draft checkbox updates preview; acknowledged-save HTTP readback |
|
||||
| 6 | Restore hidden widget | All-hidden recovery native case restores pipeline without changing job data |
|
||||
| 7 | Change order | Native drag and keyboard/touch buttons, live position, DOM order, real readback |
|
||||
| 8 | Supported size | Native select, mixed full/standard grid, persisted pipeline full-width; cards full only |
|
||||
| 9 | Save configuration | Real PUT acknowledgement and revision increment; disabled controls while pending |
|
||||
| 10 | Reload saved layout | Browser refresh plus actual API GET equals acknowledged widgets |
|
||||
| 11 | Logout/login | Real sign-out/sign-in journey retains server configuration |
|
||||
| 12 | Another session/device | Fresh browser context/login reads the same account layout; no physical second-device claim |
|
||||
| 13 | Cancel draft | Confirmation/no PUT, saved preview restored; reset/cancel server readback unchanged |
|
||||
| 14 | Reset defaults | Confirmed draft replacement, user can cancel before Save; no unrelated account write |
|
||||
| 15 | API error | Controlled503 keeps draft and localized error; retry persists exactly once after acknowledgement |
|
||||
| 16 | Network failure | Controlled route abort simulates transport loss; draft retained and retry works; no physical outage claim |
|
||||
| 17 | Obsolete widget | Actual backend stored-JSON GET ignores unknown IDs; frontend normalisation, no invalid renderer |
|
||||
| 18 | Invalid size | Backend HTTP rejects invalid write, stored read normalises; frontend falls back to catalogue size |
|
||||
| 19 | All hidden | Real nine-hidden saved layout, intentional empty state and accessible edit/restore |
|
||||
| 20 | Two sessions edit | Real session conflict409, explicit reload, reapply and acknowledgement; atomic simultaneous first-save regression |
|
||||
| 21 | Malformed/large payload | Actual Kestrel malformed/duplicate/unknown/oversized/chunked HTTP tests;16KB byte cap and32-entry maximum |
|
||||
| 22 | Statistics failure | Retained independent summary/trends loading/503/retry native cases; no false zeros |
|
||||
| 23 | New widgets/old layouts | Known missing entries appended hidden in saved revisions; future schema is read-only, downgrade denied |
|
||||
| 24 | Historic save failure | WAL held-reader actual layout write plus simultaneous saves and stale Identity replay regression; no permanent contention claim |
|
||||
| 25 | Cross-user access | Principal-derived GET/PUT, attempted query account override ignored, A/B persistence isolated; actual HTTP and cookie cases |
|
||||
| 26 | Anonymous denied | Actual GET/PUT401 in backend and real app auth browser tests |
|
||||
| 27 | Configuration cannot expose restricted data | Strict stable-ID/type/size/version allowlist; owner field never accepted; arbitrary query/HTML not supported |
|
||||
| 28 | Admin data protected | Ordinary cookie-authenticated account receives403; admin source stays unchanged |
|
||||
| 29 | Keyboard-only order | Native Enter on named move controls; live region and focus assertions |
|
||||
| 30 | Predictable focus | Editor entry geometry, row stable keys, first-position alternate-button focus, Cancel return, route keep-editing |
|
||||
| 31 | Responsive | Actual viewport matrices and no root horizontal overflow; preserved readable values tables and fluid chart |
|
||||
| 32 | Touch/scoll | Emulated-touch tap alternative passes; dedicated drag handle avoids ordinary-content drag. Physical device/software keyboard outstanding |
|
||||
| 33 | Bokmål | Localized editor/error/reset/control names; native EN/NB layouts. Human linguistic review remains outstanding |
|
||||
| 34 | Themes | Native light/dark screenshots and computed scheme assertions |
|
||||
| 35 | Reduced motion/focus | No custom motion; retained reduced-motion journeys and3px focus ring checks. Complete true zoom/manual contrast outstanding |
|
||||
| 36 | Dashboard data contracts | Same report endpoints/DTO consumers; exact existing source assertions retained |
|
||||
| 37 | Admin unchanged | No admin source edits; existing admin unit/native regression plus non-admin403 |
|
||||
| 38 | Navigation/other pages | All33 route patterns unchanged; final ordinary browser/backend/frontend suites |
|
||||
| 39 | Preference compatibility | Additive full migration chain/startup defaults, unrelated fields preserved, legacy flags and stale-session protections |
|
||||
| 40 | No protected capability removed | Exact57-group reconciliation with56PARTIAL/C11DEFERRED retained; source/test inventory and final suites |
|
||||
|
||||
Additional regressions cover future-schema overwrite races during a paused request body, exact JavaScript revision limits, delayed acknowledgement after account disposal, malformed stored JSON and Identity's unrelated whole-user save. No production, model, provider grant, migration against live data or destructive operation was performed.
|
||||
Reference in New Issue
Block a user