fix(workspace): clear native package and navigation readiness gates
@@ -4,6 +4,8 @@ Application source is unchanged from `2d0f131`. No defect below was fixed as par
|
||||
|
||||
## P2-D01 — SQLite tailoring and submitted-package capture fail
|
||||
|
||||
**Successor evidence:** [P5-08b readiness](../phase-5/p5-08b-readiness/README.md#native-preservation-invariants-and-proof) repairs the two native SQLite ordering paths and executes the formerly unreachable frozen-content, exact-file, ownership and native ZIP readback assertions. Its final validation records the expected-to-actual browser transition. The reproduction below is historical Phase 2 evidence and is preserved unchanged.
|
||||
|
||||
**Confirmed in the disposable running local API, not production.** The new [browser regression](../../../job-tracker-ui/e2e/redesign-preservation.spec.ts) creates a real non-admin account, canonical profile, company/job, attached CV, cover letter and UTF-8 attachment. It opens the existing legacy job URL, then clicks **Freeze current package** in the **CV section** (not the cover-letter section).
|
||||
|
||||
Observed:
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Redesign traceability
|
||||
|
||||
Job workspace readiness: [P5-08b native/navigation/accessibility proof](../phase-5/p5-08b-readiness/README.md#preservation-traceability-and-changed-files) supplements W01/W04–W08, C01/C05/C07/C10 and E07–E09 with real SQLite/ZIP and four native locale/theme navigation cases. Historical P2-D01 rows below retain the original expected-failure evidence; the successor owns the repair/results. Connor explicitly deferred absent `followMode` UI to the mail phase while preserving metadata; manual screen-reader acceptance remains open.
|
||||
|
||||
Job header/Overview: [P5-08a scoped inventory, preservation and evidence](../phase-5/p5-08a/README.md#preservation-impact-before-implementation) maps PRES-W01/W02/W03 entry, W04/W08/W11 links, J05/J06/J07/J09 entry and E07–E09 to the existing owner, semantic header/summary, progress keyboard access, five new unit cases and two local-browser cases. Deeper W05–W10/W12 owners remain regression dependencies; native package proof, incomplete accordion/contrast checks and manual screen-reader acceptance remain open.
|
||||
|
||||
Existing reports destination: [P5-07 inventory, scoped trace and evidence](../phase-5/p5-07/README.md#preservation-and-implementation-decision) maps PRES-S01/S02, E07–E09 and J05/J09 to the shared report owner, authenticated Analytics entry, period/query preservation and existing drill-downs. Dashboard flags/reports remain available; new routes do not imply new metric/provider/production acceptance.
|
||||
|
||||
@@ -55,6 +55,8 @@ These routes are not introduced in Phase 4 foundations. No /cvs rename, /account
|
||||
|
||||
## Job section compatibility
|
||||
|
||||
Successor clarification, explicitly approved by Connor on 2026-10-07: [P5-08b readiness](../phase-5/p5-08b-readiness/README.md#acceptance-decision) preserves `followMode` as compatibility metadata and defers mode-specific UI to the mail phase. The original compose-mode assumption below is not present in the current frontend and is not a P5-08b prerequisite. Numeric helper outputs and existing section/query compatibility remain protected.
|
||||
|
||||
Current accepted keys are overview, analysis, cv, cover-letter, interview. Current legacy keys collapse to analysis or overview in applicationWorkspace.ts. Future mappings must reveal the intended content more precisely without losing current capabilities.
|
||||
|
||||
| Incoming key | Current resolution | Future destination |
|
||||
|
||||
@@ -13,14 +13,16 @@ Reconciled against [P4-06](../phase-4/p4-06/README.md#opendeferred-issue-reconci
|
||||
| P5-00-D02 browser Back loses Jobs row focus | **Closed for Jobs in [P5-03](p5-03/README.md)**: originating list history entry retains only the numeric row focus target; all four locale/theme real-browser cases return after workspace load and focus the row. Explicit workspace Back remains protected | P5-03 Jobs navigation gate met. Revalidate the same contract if P5-08 changes workspace navigation or route behavior |
|
||||
| P3-O02 command error→empty / late query results | **Addressed in P5-02**: failed search has Retry, aborted/late results are discarded after a newer query or close; focused and real-browser regressions pass | Search-state gate closed locally; manual screen-reader acceptance is separately open below |
|
||||
| P5-02-D01 utility screen-reader operation | Automated axe and keyboard checks and command/notification semantic regressions pass; spoken names and live/state announcements have not been manually verified | **Open mandatory P5-15 accessibility acceptance item**. It does not block independent P5-03 Jobs work under Connor's explicit scope clarification. Operator steps and evidence request are in [P5-02](p5-02/README.md) |
|
||||
| P3-O02 workspace search replacement loses `followMode` | Source-confirmed `setParams({section})` | **Blocks later slice P5-08b** adapter migration until retained-query proof |
|
||||
| P3-O02 workspace search replacement loses `followMode` | Addressed by [P5-08b readiness](p5-08b-readiness/README.md): only the section key changes; native history/reload retains query metadata | Query-retention prerequisite met; actual mode activation is the separate contradiction below |
|
||||
| P5-08b-R01 documented follow-up mode has no consumer | Connor explicitly decided on 2026-10-07: preserve `followMode` metadata and defer mode-specific UI; current absent consumer is not presented as implemented | **Deferred to mail phase; does not block P5-08b.** Preserve query compatibility without inventing send/generation; see readiness decision |
|
||||
| P5-08b readiness rendered-capture limits and deeper presentation debt | Full-page fixed-header stitching and entry/tab transitions limit settled visual claims; existing narrow attachment table/empty-message clipping and backend-generated English text in Bokmål remain | Does not block the scoped native/query/ARIA readiness proof; later workspace presentation/localisation and existing shared-dialog acceptance owners retain the gaps. [Review limits](p5-08b-readiness/README.md#rendered-review-and-evidence-limits) |
|
||||
| P4-02-D03 mobile progress scroll not focusable | **Closed for the targeted strip in [P5-08a](p5-08a/README.md)**: named keyboard region, native arrow scrolling, visible shared focus and current-step semantics | Scoped G-WORKSPACE 08a gate met; does not certify deeper accordions or full screen-reader acceptance |
|
||||
| P4-02-D04 literal AI context `{name}` | Open both locales | **Blocks P5-08b affected application AI labels**; correct interpolation without changing context/API |
|
||||
| P4-02-D04 literal AI context `{name}` | Addressed by P5-08b readiness using the existing interpolation argument; focused AI review regression protects the actual source name | Source/context/API unchanged; live-provider grounding certification remains separate |
|
||||
| P4-02-D02 company-save error outside accessible modal | Open; draft retained, transient toast hidden by modal isolation | **Does not block Phase 5 shell/navigation**. Company form/Phase 7 owner; direct company-form restructuring requires durable in-modal error. P5-00 toast position does not close this |
|
||||
| P4-04-O02 concurrent SQLite notification save | Open, earlier 2/10 native attempts HTTP 500 / database locked | **Separate backend reliability**; no shell/visual blocker with unchanged calls, but any increased polling/write concurrency waits for proof. Sequential passing test does not close it |
|
||||
| P2-O01 isolated rules-save 500 | Historical unconfirmed, cause not established | **Separate reliability triage** if recurrent; keep successful native oracle, no generic retry mask |
|
||||
| P4-05-O01 English status actions/browser-locale dates | **Closed for Jobs/Trash in [P5-03](p5-03/README.md)**: standard status display uses existing translations, custom status text and raw API keys remain stable, and applied/deadline display follows UI language | P5-03 localized table gate met in English/Bokmål; stored date/time semantics are unchanged |
|
||||
| P2-D01 native SQLite tailoring/capture | Open expected browser failure; archived-binary assertions unreached | **Blocks P5-08b and package/tailoring relationship changes**, future Documents; separate provider-compatible repair plus native archive proof. Does not gate independent shell/board/dashboard |
|
||||
| P2-D01 native SQLite tailoring/capture | Repaired and post-capture assertions reached in [P5-08b readiness](p5-08b-readiness/README.md): frozen source/file readback plus real SQLite/account ZIP and copy-failure/retry proof | Native-package prerequisite addressed; successor final validation owns the expected-to-actual browser transition. CV revision/geometry and production restore remain separate |
|
||||
| F01 / audit D01 stale CV revision (related profile/job revisions distinct) | Open version increments without expected revision guard | **Blocks P5-09–14 broad CV**; separately authorized integrity work with cross-client proof. Profile/job persistence changes likewise gated, but their unchanged page links are safe. No automatic B07 |
|
||||
| Creation-intent idempotency | Open independent contract; not B02 identity or stale revision | **Separate backend/product work**; no Add/import/POST-on-mount expansion in Phase 5. Existing create review/no-write navigation must remain |
|
||||
| CV margins/templates/preview/pagination | Open, user concern reiterated during P4; current preview has extra pagination/cropping logic | **Blocks P5-09–14** via dedicated G-CV-RENDER corpus/repair checkpoint; keyboard passing does not prove geometry. No broad renderer replacement inside UI slice |
|
||||
@@ -28,9 +30,9 @@ Reconciled against [P4-06](../phase-4/p4-06/README.md#opendeferred-issue-reconci
|
||||
| P3-O01 analytics names/periods/populations | [P5-06](p5-06/README.md) addresses Dashboard labels; [P5-07](p5-07/README.md) reuses and revalidates the same cohorts/snapshots/samples and exact values in Analytics, independent of Dashboard flags | Dashboard/Analytics G-METRICS has scoped regression evidence; current server population/date limitations remain documented and backend metric/timezone repair remains separate |
|
||||
| P5-06-O01 native language preference 500 during reads | One full-run fixture response was generic 500 while Dashboard/setup reads overlapped; exception/root cause not established. Visual setup now writes the native preference before mounting the next fixture, still requiring 204 | **Separate baseline auth/storage investigation**, not resolved by presentation. Concurrent language mutation during loading is not certified; [observation and test sequencing](p5-06/README.md#regression-protection) |
|
||||
| P5-07-O01 attachment confirmation focus observation | Initial full run: unchanged light/English desktop Shift+Tab from Cancel did not retain Delete focus; existing transition `onEntered` also refocuses Cancel. Race explanation remains uninstrumented | Separate shared-dialog accessibility investigation; no provider/test change in Analytics, no closure from a passing rerun. [Evidence](p5-07/README.md#validation-observations-retained) |
|
||||
| P5-08a-O01 next-task destination adapter | Existing `complete-career-profile` falls back to `checklist`, which maps to Overview without opening Profile/expanding checklist; other unsupported task aliases remain | **P5-08b navigation/entry prerequisite**. Supported prepare-CV entry is preserved/tested; do not invent a new workflow in the header slice. [Record](p5-08a/README.md#deferred-observations-and-p5-08b-boundary) |
|
||||
| P5-08a-O01 next-task destination adapter | Addressed in P5-08b readiness: canonical-profile task opens existing Career Profile; legacy documents/checklist/timeline/communication entries reveal/focus their existing disclosures | Scoped adapter prerequisite met, with query/history and dirty-navigation regression evidence; no new workflow |
|
||||
| P5-08a-O02 menu entry contrast scan | Two complete runs caught unchanged dark Dashboard menu text during entry; direct inspection found opacity 0.0111545 before settling to 1. The original scan now waits for settled opacity and passes unchanged rules | Validation fixture synchronization only; no Dashboard styling repair or transition-wide/manual certification. Both failed summaries and scan targets remain [recorded](p5-08a/README.md#validation-observations-retained) |
|
||||
| P5-08a-O03 deeper accordion duplicate ARIA IDs | Both scans have six incomplete duplicate-id-aria nodes; source confirms unchanged AccordionDetails IDs duplicate MUI-generated region IDs | **P5-08b affected deeper composition/accessibility gate**. Not a detected violation pass, not newly introduced by header/summary work; [evidence](p5-08a/README.md#accessibility-localization-and-responsive-validation) |
|
||||
| P5-08a-O03 deeper accordion duplicate ARIA IDs | P5-08b readiness removes redundant Details IDs and scopes summary/region names; focused tests prove one linked region and native section navigation | Scoped structural prerequisite addressed; incomplete scans/manual screen-reader acceptance are not universal passes |
|
||||
| F04/B06 production ingress | **Open**; repository/local checks are not deployed proof. Historical DNS/HTTPS observations do not prove actual peer/firewall boundary or current topology | **Production gate; does not block local P5 slices**. Operator evidence for actual Traefik peer, nginx trust, listeners/ports, direct/spoofed access, B04 client IP, firewall/NAT/IPv6, DNS/TLS/redirect and restart needed; no closure or credentials accessed here |
|
||||
| Protected-main CI/browser runner and deployment | Unresolved remote-runner evidence; local tests pass | **Separate release gate**; feature-branch docs/UI push is not production deployment approval |
|
||||
| F19 missing provider/config falls back to SQLite | Open source carryover | **Separate startup/deployment safety**, not a UI redesign dependency; no backend provider change here |
|
||||
|
||||
@@ -34,6 +34,8 @@ P5-04a can restyle the board at `/kanban` using its existing data. P5-04b is blo
|
||||
|
||||
## G-PACKAGE — native preservation before package/tailoring restructuring
|
||||
|
||||
Successor: [P5-08b readiness native proof](p5-08b-readiness/README.md#native-preservation-invariants-and-proof). Real SQLite capture, post-source-mutation frozen read/download, native account ZIP extraction/manifest, ownership denial and partial-copy failure/retry are now exercised. The paragraphs below retain the original failed prerequisite; final results and the intentional P2-D01 transition are owned by the successor record. This proof does not close CV revision or PDF geometry gates.
|
||||
|
||||
P2-D01 is reproduced SQLite `DateTimeOffset` ordering failure in `ApplicationAssetsService.GetTailoringPlanAsync` and `SubmittedApplicationPackageService.CaptureAsync`. Existing service tests do not prove native success. The browser expected-failure branch is entered only for the observed capture 500; its historical archive checks have not run successfully.
|
||||
|
||||
Required separately authorized repair/proof:
|
||||
@@ -72,7 +74,7 @@ This is where the reported incorrect margins/templates must be understood and co
|
||||
| Gate | Entry condition / scope | Does not block |
|
||||
|---|---|---|
|
||||
| G-METRICS | Before P5-06/07: exact source/population/period/sample labels from Phase 3; browser tests for transformations, all five owner visibility flags and error vs zero. [P5-06](p5-06/README.md) supplies Dashboard presentation proof; [P5-07](p5-07/README.md) supplies native Analytics values, period/Back, supported query links and independent error evidence | Shell, Jobs |
|
||||
| G-WORKSPACE | P5-08a's targeted progress-scroll gate is satisfied by [named-region/native arrow/focus evidence](p5-08a/README.md#accessibility-localization-and-responsive-validation). Before 08b: section/query/`followMode` retention, next-task aliases, draft/AI review guards, deeper accordion ARIA IDs and all legacy mappings; G-PACKAGE also required | Table, independent charts |
|
||||
| G-WORKSPACE | [P5-08b readiness](p5-08b-readiness/README.md) proves retained queries/history, existing next-task/disclosure destinations, labelled tab/panel relationships and unique accordion IDs; inherited draft/AI guards remain. **Connor's 2026-10-07 decision:** preserve `followMode` as compatibility metadata and defer its absent mode-specific UI to the mail phase. Mode activation is not claimed or a P5-08b prerequisite | Table, independent charts |
|
||||
| G-CV-BEHAVIOR | Before each CV slice: source/reset/item override, browser history restore, reorder alternatives, save failure and AI accept/reject regression required by its PRES rows, in addition to G-CV-REV/RENDER | Non-editor pages; planning/fixture specification may proceed |
|
||||
| G-RELEASE | F04 deployed peer/listeners/ports/firewall/NAT/IPv6/DNS/TLS/restarts; production CI/browser runner, providers, backup/restore/rollback and relevant billing/configuration evidence | Local feature-branch UI planning/testing; never grants production approval |
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Phase 5 — Representative screens / major UI redesign plan
|
||||
|
||||
**Current successor: [P5-08a Job header and Overview](p5-08a/README.md).** The existing workspace owner now uses shared heading/section/state foundations, recorded date summary, named actions and keyboard-scrollable progress. Five sections, six deeper disclosures, routes and domain owners remain. P4-02-D03 closes for the targeted strip; native package proof still blocks P5-08b. [P5-07 Analytics](p5-07/README.md), [P5-06 Dashboard](p5-06/README.md) and [P5-04b Jobs integration](p5-04b/README.md) remain authoritative for their areas. P5-02 manual screen-reader acceptance remains mandatory for P5-15. P2-D01, F04, incomplete accessibility checks, native touch, Board scaling and recorded timing/preference-save observations remain open. P5-08b, Phase 8 and B07 have not started.
|
||||
**Current successor: [P5-08b readiness](p5-08b-readiness/README.md).** Native package/ZIP readback and scoped navigation/accessibility regression evidence supplement the unchanged [P5-08a header/Overview](p5-08a/README.md). Five sections, six deeper disclosures, routes and domain owners remain. Connor explicitly reconciled the absent follow-up consumer: preserve compatibility metadata and defer mode-specific UI to the mail phase. Readiness evidence now governs scoped P5-08b GO. [P5-07 Analytics](p5-07/README.md), [P5-06 Dashboard](p5-06/README.md) and [P5-04b Jobs integration](p5-04b/README.md) remain authoritative for their areas. P5-02 manual screen-reader acceptance remains mandatory for P5-15. F04, incomplete accessibility checks, native touch, Board scaling and recorded timing/preference-save observations remain open. P5-08b visual migration, Phase 8 and B07 have not started.
|
||||
|
||||
Historical planning checkpoint: source `2a2f9e48052c562ef599825458d0d3a6f9f9fc61`, inspected on 2026-09-13 on `codex/ui-redesign-phase4`. That checkpoint was documentation-only; the successor record above owns implementation/validation status.
|
||||
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
# P5-08b readiness — native packages and workspace boundaries
|
||||
|
||||
Source checkpoint: `fadf99a3f55f7cb8bcd85fe489c46259f525f3ef`, branch `codex/ui-redesign-phase4`. This is a readiness checkpoint, **not P5-08b's seven-section visual migration**. No schema, provider, authentication, rendering, mail-send, B07 or CV revision change.
|
||||
|
||||
## Acceptance decision
|
||||
|
||||
**GO for the bounded P5-08b presentation migration.** Native package preservation, navigation and the scoped accessibility prerequisites have passed the final validation below. Existing links, section history and `followMode` retention are protected. The [Phase 3 route plan](../../phase-3/ROUTE_PLAN.md#job-section-compatibility) additionally required opening the actual compose/follow-up mode. Current source has producers of `followMode` and a backend follow-up-draft endpoint, but **no frontend consumer of that parameter or that endpoint**. `Correspondence` logs messages/imports threads; `ApplicationFollowUp` edits dates/actions. Neither is a mode-specific reviewed email composer.
|
||||
|
||||
**Connor's explicit decision, 2026-10-07: “Preserve metadata; defer mode-specific UI.”** This supersedes the assumed compose-mode activation requirement for this readiness gate and P5-08b. Preserve `followMode` without interpreting it as send, generation or submission; mode-specific reviewed UI remains mail-phase work. No functionality is claimed for the absent consumer, and the historical route-plan assumption remains visible. This checkpoint does not implement messaging or the deeper redesign.
|
||||
|
||||
## Actual native package model
|
||||
|
||||
| Concept | Existing owner and contract |
|
||||
|---|---|
|
||||
| Live/draft application | `JobApplication`: `CoverLetterText`, `TailoredCvText`, `RecruiterMessageDraft`, status/dates/source/job metadata and Notes. Application answers occupy the existing delimited Notes block; human notes remain separate through the existing helper. A generated draft is not a submitted package. |
|
||||
| Canonical profile and CV | `CareerProfileService` owns canonical data/history; `CvVariantService` owns settings, versions, rendering and current single-job association. `ApplicationAssetsService.AttachVariantAsync` attaches/reassigns one variant or detaches without deletion. No many-to-many association is introduced. |
|
||||
| Frozen package | `SubmittedApplicationPackage`, explicitly captured through `ApplicationAssetsController`: append-only version per owner/job, scalar source CV ID/name/version/theme/settings, canonical profile JSON, rendered HTML, exact cover letter and application material JSON. Capture does not prove external delivery or change job status. |
|
||||
| Frozen files | `SubmittedPackageAttachment`: copied bytes, original display filename/type/purpose, length and SHA-256. Native `AttachmentStorage` stores copies below the existing job `submitted/<version>` directory. Live deletion cannot delete that independent snapshot. |
|
||||
| Review/download | Owner/job/package-qualified list/detail and attachment download endpoints. `SubmittedPackagesSection` reopens frozen HTML/letter/material; physical-file download uses the preserved filename/type. There is no package-update endpoint. |
|
||||
| Archive | Existing account export `jobtracker.user-export.v1` ZIP: `data/application-workspace.json` contains frozen package metadata/content; `files/submitted-packages/<packageId>/<attachmentId>/<safe filename>` contains bytes; `manifest.json` records paths/lengths/hashes. This is an account archive, not a newly introduced package ZIP format. |
|
||||
| Restore/import | Existing cover-letter restore appends a new history version. Package reopening/readback is supported; no submitted-package import/restore-to-live operation exists. ZIP readback uses native `ZipArchive`/`ZipFile`, not an invented import workflow. Existing whole-database restore/deployment proof is separate. |
|
||||
| Ownership | Controllers derive the user from authenticated identity; services qualify owner plus job/variant/package/attachment. EF tenant filters supplement these explicit predicates. Account export bypasses filters only with its existing explicit owner qualification. |
|
||||
|
||||
Frozen CV ID is a scalar historical identifier, not a new mutable FK to the current CV. Job/package attachment cascades and the unique owner/job/package-version index are unchanged. Deleting the entire account/job follows existing retention/deletion policy; this proof concerns preserving a package while its live sources change.
|
||||
|
||||
## Reproductions and smallest fixes
|
||||
|
||||
- **P2-D01:** the original native browser case reproduced capture HTTP 500 with expected status `failed`; later archive assertions were unreachable. A new real-SQLite regression failed with `NotSupportedException: SQLite does not support expressions of type 'DateTimeOffset' in ORDER BY clauses` at `GetTailoringPlanAsync`. Capture had the same unsupported variant ordering. Reuse the already established provider branch in `BuildCvAsync`: filter by authenticated owner/job in SQL, order materialized owner-filtered values only on SQLite; retain SQL ordering for other providers. No timestamp conversion, schema or package-content change.
|
||||
- **P3-O02:** `setParams({section})` dropped `followMode` and unrelated existing query metadata. Clone the current query and replace only `section`, retain router state and push genuine section navigation so browser Back/Forward can traverse it. Compatibility aliases remain replace redirects in their existing route owner.
|
||||
- **P5-08a-O01:** legacy Overview aliases previously selected Overview without revealing their deeper content. Existing accordions now open/focus their matching disclosure for job-details/checklist/documents/portfolio/timeline/communication. `notes` resolves to the existing answer/letter owner. The `complete-career-profile` system task opens the existing `/career?section=profile`; no new wizard or client progression engine. Unknown/prototype keys fall back safely.
|
||||
- **P5-08a-O03:** `AccordionDetails` repeated the region ID MUI already generated. Remove that redundant ID and scope summary/region identities with React `useId`. Add explicit selected-tab/panel relationships around the existing five sections; retain MUI's manual-activation keyboard behavior.
|
||||
- **P4-02-D04:** supply the existing `coverAiUsing` interpolation parameter instead of showing literal `{name}` and an appended duplicate name. No AI context/prompt/API change.
|
||||
- **Keyboard checklist prerequisite:** desktop move/dismiss controls were transparent until pointer hover. The existing row also reveals them on `focus-within`; names/actions/data are unchanged. Native browser tests verify the focused move control is actually visible.
|
||||
|
||||
## Native preservation invariants and proof
|
||||
|
||||
1. The real disposable API/browser fixture creates an ordinary account, canonical profile with Åse/Nordlys/Norsk data, two CVs, one job, reviewed letter, answer/recruiter drafts and UTF-8 attachment. Tailoring returns 200; capture through the existing UI returns 200.
|
||||
2. Record package ID/version, source CV ID/version and file metadata. Mutate current CV settings/name, canonical profile, letter and answers; delete the live file and detach the CV. Frozen detail is exactly equal before/after; the sibling CV is unchanged and detached CV remains readable.
|
||||
3. Download the preserved attachment after live deletion and compare **exact bytes**. Reopen the package dialog after reload. Restore letter version 1 as new version 3; the frozen detail remains unchanged.
|
||||
4. A second real account receives 404 for package list/detail/file, capture of the first account's job and crafted foreign-CV association, including attaching A's variant to B's own job.
|
||||
5. The new backend native test uses SQLite, real `CareerProfileService`, `CvVariantService`, `ThemedCvRenderer`, `AttachmentStorage`, `AccountOwnedFileInventory` and `AccountDataExportService`. Reopen the real ZIP; compare frozen HTML/letter/material/source identity/profile/purpose and exact attachment bytes. Match the manifest SHA-256. Only current-user/host setup is mocked; packaging/rendering/storage are not.
|
||||
6. A second native backend fixture captures a sparse package with no CV/letter/files. A later capture copies one available file, then encounters a missing second source: it throws, publishes no partial package and purges the already copied file. Restoring the missing source allows explicit retry as version 2 with both files.
|
||||
|
||||
Dynamic creation timestamps, generated IDs and ZIP compression/container bytes are not compared across independently created archives. Meaningful content, relationships, source identity, metadata and original file bytes are compared. No real AI/provider, external send or PDF geometry claim follows from HTML/package proof.
|
||||
|
||||
## Navigation and accessibility evidence
|
||||
|
||||
- Four native browser cases exercise EN/NB × light/dark, all ten `buildJobWorkspacePath` numeric inputs, existing direct sections, reload, manual keyboard tab selection and Back/Forward, retaining `followMode=waiting-update` throughout. Numeric inputs are helper arguments, not a newly supported `section=3` URL convention.
|
||||
- Named legacy disclosures become reachable on direct entry; keyboard focus moves to their summary. Tabs retain native Arrow/Home/End focus movement and Enter/Space activation rather than pretending pointer buttons are tabs. The labelled panel is the next keyboard stop; section changes do not trigger sends/generation.
|
||||
- Component tests prove selected-tab/panel association, a unique named accordion region, document disclosure focus, query retention, canonical-profile next action and the existing dirty Cancel/Discard/list-return guards.
|
||||
- Existing full-suite fixtures retain Jobs → Job → browser Back row focus, missing/foreign jobs, account-switch disposal, attachment consent, application answer versus human Notes, AI edited acceptance/rejection and provider-unavailable behavior. These are distinct test layers; provider mocks do not prove live AI/mail.
|
||||
- Scoped navigation axe scans and rendered screenshots are recorded separately. A scoped scan is not whole-workspace certification. Manual screen-reader spoken names/live announcements remain **open for P5-15**; physical touch/zoom and previously incomplete checks remain explicit gaps.
|
||||
|
||||
No permission-restricted section is newly exposed: existing five purposes remain visible, their original controls/backend enforce entitlement/ownership. No disabled feature is turned into a functional control, and no new seven-section navigation is introduced.
|
||||
|
||||
## Preservation traceability and changed files
|
||||
|
||||
| PRES contracts | Existing requirement → readiness change | Proof |
|
||||
|---|---|---|
|
||||
| W01, E07/E08/E09 | Existing routes/section/query/return context → retain query/history, reveal existing aliases and label existing panels | `application-workspace-overlay.test.tsx`, `applicationWorkspace.test.ts`, four native navigation cases and existing Jobs/auth browser suites |
|
||||
| W04/W08/W11 entry | Existing checklist/documents/history/calendar → focus their existing disclosures; keyboard checklist actions remain visible | Native numeric-helper/disclosure/reload/keyboard cases; unchanged domain regression suites |
|
||||
| W05/W06/W07, C01/C05/C07/C10 relationships | Canonical versus variant, letter/answer and frozen evidence → provider-compatible native capture; no domain redesign | Native SQLite/archive/failure-retry tests and expanded real browser immutable-package case |
|
||||
| W03/W06, C11/S04 dependency | Known AI source/review → correctly interpolate existing source label | Existing AI accept/reject tests plus label assertion; no provider factual certification |
|
||||
| M01/M02, W09/W10/W12 dependency | Mail/interview/operations owners retained | Complete inherited suites; absent `followMode` UI explicitly deferred to mail phase by Connor, metadata retained |
|
||||
|
||||
Production changes are confined to `ApplicationAssetsService.cs`, `SubmittedApplicationPackageService.cs`, `applicationWorkspace.ts`, `ApplicationWorkspacePage.tsx`, one source-label line in `ApplicationAssets.tsx`, and one focus selector in `ApplicationChecklist.tsx`. Tests: native compatibility file, existing workspace/helper/assets Jest files and `redesign-preservation.spec.ts`. No component extraction, page restyling, route/provider-tree change, dependency or CI change.
|
||||
|
||||
## Final validation
|
||||
|
||||
Inherited baseline: 934 backend / 408 frontend / 83 actual browser passes plus P2-D01 expected failure; security 9/6/1 and configuration 3. Commands below use the repository's `rtk proxy` prefix; npm commands run in `job-tracker-ui`, other commands at repository root. Browser suites share the disposable API port and run sequentially.
|
||||
|
||||
| Final command | Result |
|
||||
|---|---|
|
||||
| `C:/Users/Connor/.dotnet/dotnet.exe test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj -c Release --no-restore --logger 'console;verbosity=minimal'` | **936 passed**, 0 failed/skipped; +2 native SQLite/package/ZIP and sparse/failure/retry cases |
|
||||
| `npm.cmd test -- --runInBand --silent` | **412 passed**, 80 suites; +4 workspace query/panel/disclosure/canonical-entry cases; existing helper and AI-review cases strengthened without extra case count |
|
||||
| `npm.cmd run test:e2e -- --reporter=line,json` with `PLAYWRIGHT_STATIC_EXPORT=true`, `PLAYWRIGHT_PREBUILT_EXPORT=true`, `PLAYWRIGHT_JSON_OUTPUT_NAME=test-results/p5-08b-readiness-final.json` | **88 actual passes**, zero expected failures/unexpected outcomes, 14.7 minutes; four new cases plus P2-D01's expected-to-actual transition |
|
||||
| `npm.cmd run test:rate-limits -- --reporter=line` | **9 passed** |
|
||||
| `npm.cmd exec playwright test -- --config=playwright.ingress.config.ts --reporter=line` | **6 passed** |
|
||||
| `npm.cmd run test:pdf-admission -- --reporter=line` | **1 passed** |
|
||||
| `npm.cmd run typecheck` / `npm.cmd run lint` | Both passed |
|
||||
| `npm.cmd run build` with `NEXT_PUBLIC_API_BASE_URL=http://localhost:5302/api` | Production static export passed |
|
||||
| `C:/Users/Connor/.dotnet/dotnet.exe build JobTrackerApi/JobTrackerApi.csproj -c Release --no-restore -warnaserror` | Passed, zero warnings/errors |
|
||||
| `npm.cmd exec tsc -- --project ../.artifacts/p5-08b-readiness-e2e-tsconfig.json --noEmit --incremental false` | Edited browser fixture TypeScript passed, using existing Node/Jest types; no dependency/CI change |
|
||||
| `python scripts/test-ingress.py` | 3 configuration tests passed |
|
||||
| `python scripts/test-supply-chain.py` | 3 passed |
|
||||
| `python scripts/test-ollama-evaluation.py` / `node browser-extension/tests/capture-url.test.mjs` | 5 / 3 passed; these local checks do not certify live providers |
|
||||
| `python scripts/supply-chain.py scan-secrets` | Passed on staged candidate, no high-confidence credential patterns |
|
||||
| `git diff --check` / `git diff --cached --check` | Passed |
|
||||
| `python .artifacts/p4-04-check-doc-links.py` | 142 current/root Markdown documents, zero missing local targets; historical archive excluded |
|
||||
|
||||
The two added backend tests are `Tailoring_and_submission_capture_work_on_native_sqlite` and `Native_sparse_capture_and_missing_attachment_retry_never_publish_partial_packages`. Four new browser cases cover EN/NB × light/dark. The original P2-D01 case is retained by name with ordinary capture/readback assertions; its old expected-failure branch is removed only after the initial native 500 was reproduced and successful post-fix preservation was observed. **P2-D01 is closed for the reproduced local SQLite failure.** Counts change from 83 actual + one expected to 88 actual: +4 new cases, +1 genuinely passing original case. No skipped/expected branch masks capture, frozen readback or archive failures.
|
||||
|
||||
Raw disposable-browser traces/authentication outputs remain ignored. The [safe final browser summary](evidence/final-browser-summary.json), [native invariant summary](evidence/native-preservation-invariants.json), [scoped axe results](evidence/navigation-axe-summary.json) and [reviewed screenshot manifest](evidence/visual-manifest.json) preserve the useful evidence. Four tablist scans each have zero violations and zero incomplete findings **within that scope only**. Unrelated/full-page incomplete checks and human screen-reader acceptance remain open.
|
||||
|
||||
## Rendered review and evidence limits
|
||||
|
||||
Reviewed all 13 native screenshots: desktop 1280×720 and phone 390×844, EN/NB × light/dark, focused checklist move, directly opened Documents disclosure, selected Analysis content and reopened frozen package. Existing theme surfaces, readable labels and visible disclosure/checklist focus remain. No section layout or styling redesign was performed.
|
||||
|
||||
The [manifest](evidence/visual-manifest.json) records these limits explicitly:
|
||||
|
||||
- Full-page images taken after programmatic focus scrolling show fixed shell elements at the current scroll position in the stitched capture. This is not evidence that the shell was moved or proof of viewport-level overlay clearance.
|
||||
- The immediate post-Forward screenshots catch the tab indicator in transition; automated selected-tab/content/query assertions pass, but those PNGs do not certify settled animated indicator alignment.
|
||||
- The native package-dialog image catches its entry transition. It is **not accepted as settled modal contrast/readability proof**; native immutable content and ZIP assertions are separate. The existing shared-dialog/manual accessibility debt stays open.
|
||||
- The existing narrow attachment table/empty-message clipping and backend-generated English analysis/event text in Bokmål remain domain/presentation debt for the later workspace/localisation owners. Readiness makes their existing entries reachable; it does not redesign them.
|
||||
|
||||
No whole-workspace axe, spoken screen-reader, production MariaDB or PDF geometry acceptance is inferred from these focused fixtures. Manual review here means inspection of actual rendered captures; keyboard proof is automated native browser interaction, not a human assistive-technology session.
|
||||
|
||||
Validation observations: initial NB navigation fixtures failed because local language setup was overwritten by native account preference hydration. The fixture now saves the existing authenticated language preference (requires 204) before app mount; no language/provider behavior was changed. The first local browser-only TypeScript configuration could not resolve Node types from `.artifacts`; the ignored configuration now points at existing frontend type roots. Neither is an application repair or weakened assertion. Historical P2-D01 and unrelated failures remain in their original records.
|
||||
|
||||
## Remaining limitations and stop boundary
|
||||
|
||||
`followMode` compose-mode activation is not demonstrated and is explicitly deferred by Connor to the mail phase. Package version/revision concurrency is not redesigned here; source lost-update guards and CV geometry remain separate gates. SQLite evidence ordering materializes the same owner-filtered set already used by subsequent relevance filtering; no global/unscoped load is introduced. MariaDB query translation is tested, not a live production database.
|
||||
|
||||
Keep F04, P5-02 manual screen-reader acceptance, incomplete/manual accessibility checks, preference-save 500/SQLite contention, Board scaling/native touch, shared-dialog focus observations and CV revision/rendering debt open. P2-D01 closes with the successful native post-capture proof and final ordinary browser case, not by hiding its old expected failure. Historical audit/Phase 2/P4 records remain untouched except for explicit successor links; the Phase 3 route plan has an explicit successor clarification for Connor's approved metadata deferral.
|
||||
|
||||
Stop before P5-08b, P5-09 and B07. A subsequent instruction may authorize the bounded P5-08b presentation migration under these preservation contracts; the GO does not authorize CV revision/rendering changes, new messaging or production release.
|
||||
@@ -0,0 +1,807 @@
|
||||
{
|
||||
"statistics": {
|
||||
"startTime": "2026-10-06T22:11:48.000Z",
|
||||
"duration": 882787.0700000001,
|
||||
"expected": 88,
|
||||
"skipped": 0,
|
||||
"unexpected": 0,
|
||||
"flaky": 0
|
||||
},
|
||||
"actualPasses": 88,
|
||||
"expectedFailures": 0,
|
||||
"unexpected": [],
|
||||
"cases": [
|
||||
{
|
||||
"file": "accessibility.spec.ts",
|
||||
"title": "public entry points meet automated WCAG A and AA checks",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "accessibility.spec.ts",
|
||||
"title": "primary authenticated workspaces meet automated WCAG A and AA checks",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "account-isolation.spec.ts",
|
||||
"title": "retained profile request from A cannot write using B cookies and fresh B CSRF",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "account-isolation.spec.ts",
|
||||
"title": "missing and forged session contexts fail closed while same-account profile saves work",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "account-isolation.spec.ts",
|
||||
"title": "crafted CV identifiers cannot cross read update delete or job-association ownership",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "account-isolation.spec.ts",
|
||||
"title": "[P5-00 PRES-E05 E07 E08] account switch disposes open command, account and notification surfaces",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "account-isolation.spec.ts",
|
||||
"title": "two tabs discard A's private form before B can use it, including Back navigation",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "analytics-presentation.spec.ts",
|
||||
"title": "[PRES-S01 S02 E07 E08 E09 J05 J09] Analytics native reports, direct entry, period, drill-down and owner isolation",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "analytics-presentation.spec.ts",
|
||||
"title": "[PRES-S01 E08] Analytics independent loading and failure states never masquerade as empty reports",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "board-presentation.spec.ts",
|
||||
"title": "[PRES-J07 J05 W01 W02 E07 E08 E09] Board query membership matches Table and preserves moves, focus and route",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "board-presentation.spec.ts",
|
||||
"title": "[PRES-J05 J07 E07 W01] legacy Board replaces history and preserves query, hash and route state; default Jobs stays Table",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "board-presentation.spec.ts",
|
||||
"title": "[PRES-J07 E08] Board loading, retryable error and fully empty columns",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "builder-preview-keyboard.spec.ts",
|
||||
"title": "[PRES-C06 PRES-C07 PRES-C10 PRES-E08] light/en preview keyboard, pagination and responsive state",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "builder-preview-keyboard.spec.ts",
|
||||
"title": "[PRES-C06 PRES-C07 PRES-C10 PRES-E08] dark/nb preview keyboard, pagination and responsive state",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "builder-preview-keyboard.spec.ts",
|
||||
"title": "[PRES-C06 PRES-C07 PRES-C10 PRES-E08] light/nb preview keyboard, pagination and responsive state",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "builder-preview-keyboard.spec.ts",
|
||||
"title": "[PRES-C06 PRES-C07 PRES-C10 PRES-E08] dark/en preview keyboard, pagination and responsive state",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "csv-export.spec.ts",
|
||||
"title": "CSV export has safe cells and headers, and browser download preserves its UTF-8 bytes",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "dashboard-presentation.spec.ts",
|
||||
"title": "[PRES-S01 S02 E07 E08 E09] Dashboard native data, visibility and responsive presentation",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "dashboard-presentation.spec.ts",
|
||||
"title": "[PRES-S01 E08] Dashboard loading and independent failed resources retain retry and exact values",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "job-discovery.spec.ts",
|
||||
"title": "discovery remains usable across widths and opens the reviewed import",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "job-overview-presentation.spec.ts",
|
||||
"title": "[PRES-W01 W02 W03 J05 E08 E09] native Job header/Overview retains actions, custom status, aliases and mobile progress keyboard access",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "job-overview-presentation.spec.ts",
|
||||
"title": "[PRES-W01 W02 E08] Job Overview loading, failed read, retry and unavailable resource remain explicit",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "kanban-theme.spec.ts",
|
||||
"title": "kanban columns use dark theme surfaces",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "named-controls-modal-state.spec.ts",
|
||||
"title": "[PRES-E07 PRES-E08 PRES-J08 PRES-C08 PRES-C09 PRES-W06 PRES-W08] light/en/1440 named controls, modal keyboard and retained draft",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "named-controls-modal-state.spec.ts",
|
||||
"title": "[PRES-E07 PRES-E08 PRES-J08 PRES-C08 PRES-C09 PRES-W06 PRES-W08] dark/nb/1440 named controls, modal keyboard and retained draft",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "named-controls-modal-state.spec.ts",
|
||||
"title": "[PRES-E07 PRES-E08 PRES-J08 PRES-C08 PRES-C09 PRES-W06 PRES-W08] light/nb/390 named controls, modal keyboard and retained draft",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "named-controls-modal-state.spec.ts",
|
||||
"title": "[PRES-E07 PRES-E08 PRES-J08 PRES-C08 PRES-C09 PRES-W06 PRES-W08] dark/en/390 named controls, modal keyboard and retained draft",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-C01 PRES-C06 PRES-C07 PRES-C10] mobile CV override persists without changing the canonical profile or sibling CV",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-W01 PRES-W05 PRES-W06 PRES-W07 PRES-W08] legacy workspace preserves frozen documents after current sources change",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-W01 PRES-W04 PRES-W08 PRES-E08 PRES-E09] native workspace aliases, keyboard sections and history retain context (en, light)",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-W01 PRES-W04 PRES-W08 PRES-E08 PRES-E09] native workspace aliases, keyboard sections and history retain context (en, dark)",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-W01 PRES-W04 PRES-W08 PRES-E08 PRES-E09] native workspace aliases, keyboard sections and history retain context (nb, light)",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-W01 PRES-W04 PRES-W08 PRES-E08 PRES-E09] native workspace aliases, keyboard sections and history retain context (nb, dark)",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-S03 PRES-W11] responsive settings navigation keeps rule edits and persists notification preferences",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-S03] rule changes persist through the real API",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-E07 PRES-W01 PRES-J04] keyboard command navigation and legacy workspace entry preserve the selected job",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "redesign-preservation.spec.ts",
|
||||
"title": "[PRES-A01 PRES-S04 PRES-E07] non-admin navigation cannot grant API privileges or unlock CV AI",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-J08] light/en/1440 loading → error → retry → empty → populated",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-J08] light/en/390 loading → error → retry → empty → populated",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-J08] light/nb/1440 loading → error → retry → empty → populated",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-J08] light/nb/390 loading → error → retry → empty → populated",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E07 PRES-E08 PRES-J05 PRES-J07] light loaded status semantics, navigation and command focus",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-C06 PRES-C07 PRES-C08 PRES-C09 PRES-C11 PRES-S03] light loaded CV tabs, selects and settings",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-J08] dark/en/1440 loading → error → retry → empty → populated",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-J08] dark/en/390 loading → error → retry → empty → populated",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-J08] dark/nb/1440 loading → error → retry → empty → populated",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-J08] dark/nb/390 loading → error → retry → empty → populated",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E07 PRES-E08 PRES-J05 PRES-J07] dark loaded status semantics, navigation and command focus",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "semantic-foundations.spec.ts",
|
||||
"title": "[PRES-E08 PRES-C06 PRES-C07 PRES-C08 PRES-C09 PRES-C11 PRES-S03] dark loaded CV tabs, selects and settings",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "settings-page-layout.spec.ts",
|
||||
"title": "[PRES-E07 E08 E09 S03 S04 S05 J05 J10 M06 W11] light/en Settings headings, reflow and retained actions",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "settings-page-layout.spec.ts",
|
||||
"title": "[PRES-E07 E08 E09 S03 S04 S05 J05 J10 M06 W11] light/nb Settings headings, reflow and retained actions",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "settings-page-layout.spec.ts",
|
||||
"title": "[PRES-E07 E08 E09 S03 S04 S05 J05 J10 M06 W11] dark/en Settings headings, reflow and retained actions",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "settings-page-layout.spec.ts",
|
||||
"title": "[PRES-E07 E08 E09 S03 S04 S05 J05 J10 M06 W11] dark/nb Settings headings, reflow and retained actions",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 E08 A03] light-en mobile labels, focus and admin reflow",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 J03 J08] light-en command list, keyboard and no-write actions",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-02 PRES-E07 E08 E09 S02] light-en utility search and notification states",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E08 C06 S05] light-en real Tooltip contrast and open-toast action access",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-01 PRES-E07 E08 A03] light-en grouped shell, rail menu and route focus",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 E09 C06 S02 S03] light-en dirty editor survives shell utilities and cancel",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 E08 A03] light-nb mobile labels, focus and admin reflow",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 J03 J08] light-nb command list, keyboard and no-write actions",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-02 PRES-E07 E08 E09 S02] light-nb utility search and notification states",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E08 C06 S05] light-nb real Tooltip contrast and open-toast action access",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-01 PRES-E07 E08 A03] light-nb grouped shell, rail menu and route focus",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 E08 A03] dark-en mobile labels, focus and admin reflow",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 J03 J08] dark-en command list, keyboard and no-write actions",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-02 PRES-E07 E08 E09 S02] dark-en utility search and notification states",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E08 C06 S05] dark-en real Tooltip contrast and open-toast action access",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-01 PRES-E07 E08 A03] dark-en grouped shell, rail menu and route focus",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 E08 A03] dark-nb mobile labels, focus and admin reflow",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 J03 J08] dark-nb command list, keyboard and no-write actions",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-02 PRES-E07 E08 E09 S02] dark-nb utility search and notification states",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E08 C06 S05] dark-nb real Tooltip contrast and open-toast action access",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-01 PRES-E07 E08 A03] dark-nb grouped shell, rail menu and route focus",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "shell-readiness.spec.ts",
|
||||
"title": "[P5-00 PRES-E07 E09 C06 S02 S03] dark-nb dirty editor survives shell utilities and cancel",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "API liveness and database readiness are separate public probes",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "public plans stay honest, responsive and keyboard accessible",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "login establishes an authenticated session",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "a Free account keeps manual work available while AI actions stay honestly locked",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "a saved job can be created through the reviewed UI flow",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "the dedicated application workspace survives deep links, long data and unsaved navigation",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "Career Workspace loads from the authenticated application shell",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "a public CV renders anonymously and downloads as PDF",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "smoke.spec.ts",
|
||||
"title": "the Code template exports a long structured CV as searchable multi-page PDF",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "table-density.spec.ts",
|
||||
"title": "[PRES-J05 J06 W01 W02 S03 E08 E09] light/en table and cards preserve behavior at both densities",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "table-density.spec.ts",
|
||||
"title": "[PRES-J05 J06 W01 W02 S03 E08 E09] light/nb table and cards preserve behavior at both densities",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "table-density.spec.ts",
|
||||
"title": "[PRES-J05 J06 W01 W02 S03 E08 E09] dark/en table and cards preserve behavior at both densities",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "table-density.spec.ts",
|
||||
"title": "[PRES-J05 J06 W01 W02 S03 E08 E09] dark/nb table and cards preserve behavior at both densities",
|
||||
"expectedStatus": "passed",
|
||||
"outcome": "expected",
|
||||
"actualStatuses": [
|
||||
"passed"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 123 KiB |
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"packageId": 1,
|
||||
"version": 1,
|
||||
"cvVariantId": 16,
|
||||
"cvVariantVersion": 1,
|
||||
"attachment": {
|
||||
"name": "evidence.txt",
|
||||
"sha256": "4a89d7c5a8430781d00cb8a09550fe69c5dac43f571a8a83843347a5d69d9366",
|
||||
"bytes": 31
|
||||
},
|
||||
"immutableReadback": true,
|
||||
"canonicalAndVariantAndLetterAndAnswerMutated": true,
|
||||
"liveAttachmentDeleted": true,
|
||||
"siblingUnchanged": true,
|
||||
"detachPreservedVariant": true
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"manualScreenReaderAcceptance": "open for P5-15",
|
||||
"scans": [
|
||||
{
|
||||
"case": "[PRES-W01 PRES-W04 PRES-W08 PRES-E08 PRES-E09] native workspace aliases, keyboard sections and history retain context (en, light)",
|
||||
"scope": "workspace tablist only",
|
||||
"violations": [],
|
||||
"incomplete": []
|
||||
},
|
||||
{
|
||||
"case": "[PRES-W01 PRES-W04 PRES-W08 PRES-E08 PRES-E09] native workspace aliases, keyboard sections and history retain context (en, dark)",
|
||||
"scope": "workspace tablist only",
|
||||
"violations": [],
|
||||
"incomplete": []
|
||||
},
|
||||
{
|
||||
"case": "[PRES-W01 PRES-W04 PRES-W08 PRES-E08 PRES-E09] native workspace aliases, keyboard sections and history retain context (nb, light)",
|
||||
"scope": "workspace tablist only",
|
||||
"violations": [],
|
||||
"incomplete": []
|
||||
},
|
||||
{
|
||||
"case": "[PRES-W01 PRES-W04 PRES-W08 PRES-E08 PRES-E09] native workspace aliases, keyboard sections and history retain context (nb, dark)",
|
||||
"scope": "workspace tablist only",
|
||||
"violations": [],
|
||||
"incomplete": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,259 @@
|
||||
{
|
||||
"sourceBase": "fadf99a3f55f7cb8bcd85fe489c46259f525f3ef",
|
||||
"runtime": "Chromium production export and disposable local SQLite API, 2026-10-07",
|
||||
"screenshots": [
|
||||
{
|
||||
"file": "native-frozen-package.png",
|
||||
"sha256": "acedc044ca94692914e59676f5a09bc08983206d95b2ac264be000cae557fbf1",
|
||||
"imageSize": [
|
||||
1280,
|
||||
1412
|
||||
],
|
||||
"viewport": [
|
||||
1280,
|
||||
720
|
||||
],
|
||||
"theme": "light",
|
||||
"language": "en",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=cv",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "frozen package review during transition"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-desktop-en-light.png",
|
||||
"sha256": "3858e250c0d353bbefb39bf45667153bca1521985c186548e7fd2f2333290661",
|
||||
"imageSize": [
|
||||
1280,
|
||||
2695
|
||||
],
|
||||
"viewport": [
|
||||
1280,
|
||||
720
|
||||
],
|
||||
"theme": "light",
|
||||
"language": "en",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=checklist&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "keyboard-focused checklist move"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-disclosure-en-light.png",
|
||||
"sha256": "0bd0b79234ed9c9bf550f25cd16e0de4de9232dbd97109a432be2863aa857273",
|
||||
"imageSize": [
|
||||
390,
|
||||
2537
|
||||
],
|
||||
"viewport": [
|
||||
390,
|
||||
844
|
||||
],
|
||||
"theme": "light",
|
||||
"language": "en",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=documents&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "directly opened and focused documents disclosure"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-navigation-en-light.png",
|
||||
"sha256": "0d615f3005cf79fc46995628ded5073a1509c01bc74247e12896b2b8d13a9008",
|
||||
"imageSize": [
|
||||
390,
|
||||
1844
|
||||
],
|
||||
"viewport": [
|
||||
390,
|
||||
844
|
||||
],
|
||||
"theme": "light",
|
||||
"language": "en",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=analysis&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "post-Forward selected analysis content"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-desktop-en-dark.png",
|
||||
"sha256": "3c7dd23daec906474fb8bdd73ca66282425a146eb2fa33db0bbd86b8b776a0b8",
|
||||
"imageSize": [
|
||||
1280,
|
||||
2695
|
||||
],
|
||||
"viewport": [
|
||||
1280,
|
||||
720
|
||||
],
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=checklist&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "keyboard-focused checklist move"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-disclosure-en-dark.png",
|
||||
"sha256": "f307ac36ba83151046a61a90e407c4243e334fd16ffaa148810cf0b6004796d3",
|
||||
"imageSize": [
|
||||
390,
|
||||
2537
|
||||
],
|
||||
"viewport": [
|
||||
390,
|
||||
844
|
||||
],
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=documents&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "directly opened and focused documents disclosure"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-navigation-en-dark.png",
|
||||
"sha256": "4244b0ae0403176c111f96f3d47c5965be9751779f0985d5f32ca037b36c680c",
|
||||
"imageSize": [
|
||||
390,
|
||||
1844
|
||||
],
|
||||
"viewport": [
|
||||
390,
|
||||
844
|
||||
],
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=analysis&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "post-Forward selected analysis content"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-desktop-nb-light.png",
|
||||
"sha256": "24f7f367b7dccf29c72d1e6c51060aec3e5dc284856c254ae9a241caf8ba3886",
|
||||
"imageSize": [
|
||||
1280,
|
||||
2714
|
||||
],
|
||||
"viewport": [
|
||||
1280,
|
||||
720
|
||||
],
|
||||
"theme": "light",
|
||||
"language": "nb",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=checklist&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "keyboard-focused checklist move"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-disclosure-nb-light.png",
|
||||
"sha256": "82d1f3acac402db307e4b5535555b8cdb70365652bf5c94f279f34ddd4036b61",
|
||||
"imageSize": [
|
||||
390,
|
||||
2555
|
||||
],
|
||||
"viewport": [
|
||||
390,
|
||||
844
|
||||
],
|
||||
"theme": "light",
|
||||
"language": "nb",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=documents&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "directly opened and focused documents disclosure"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-navigation-nb-light.png",
|
||||
"sha256": "3fce73a80d62aaaca1416b544b2a9b42575da8158e4d87041352e0f8aabfb34f",
|
||||
"imageSize": [
|
||||
390,
|
||||
1844
|
||||
],
|
||||
"viewport": [
|
||||
390,
|
||||
844
|
||||
],
|
||||
"theme": "light",
|
||||
"language": "nb",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=analysis&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "post-Forward selected analysis content"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-desktop-nb-dark.png",
|
||||
"sha256": "f4740d76247bec25a927829834870282e754442b4b78d82fdf941350fb0841d5",
|
||||
"imageSize": [
|
||||
1280,
|
||||
2714
|
||||
],
|
||||
"viewport": [
|
||||
1280,
|
||||
720
|
||||
],
|
||||
"theme": "dark",
|
||||
"language": "nb",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=checklist&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "keyboard-focused checklist move"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-disclosure-nb-dark.png",
|
||||
"sha256": "ffde29f14795c4b1bc22a82c177344054cb76d737ed301c50e159e23ff3fafa3",
|
||||
"imageSize": [
|
||||
390,
|
||||
2555
|
||||
],
|
||||
"viewport": [
|
||||
390,
|
||||
844
|
||||
],
|
||||
"theme": "dark",
|
||||
"language": "nb",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=documents&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "directly opened and focused documents disclosure"
|
||||
},
|
||||
{
|
||||
"file": "workspace-native-navigation-nb-dark.png",
|
||||
"sha256": "bb4626bc8494e8d899480c42b6dbd550677a522ecc5e4ac321ae2f7c885fe54e",
|
||||
"imageSize": [
|
||||
390,
|
||||
1844
|
||||
],
|
||||
"viewport": [
|
||||
390,
|
||||
844
|
||||
],
|
||||
"theme": "dark",
|
||||
"language": "nb",
|
||||
"renderedReview": true,
|
||||
"reviewScope": "Focus, disclosure reachability, labels and theme/localisation; not full visual redesign acceptance",
|
||||
"routePattern": "/jobs/:id?section=analysis&followMode=waiting-update",
|
||||
"fixture": "native synthetic owned account and application",
|
||||
"state": "post-Forward selected analysis content"
|
||||
}
|
||||
],
|
||||
"limitations": [
|
||||
"Full-page captures after focus scrolling reposition fixed shell elements within stitched images; do not infer a changed shell layout.",
|
||||
"Navigation captures occur immediately after browser Forward; settled animated indicator alignment is not proven by these images.",
|
||||
"Frozen-package dialog capture occurs during its transition and is not accepted as proof of settled modal contrast/readability. Native content/readback/ownership assertions remain independent.",
|
||||
"Inherited narrow attachment table/empty-message clipping and backend-generated English strings in Bokmal remain deferred to their existing workspace/domain owners."
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 195 KiB |
|
After Width: | Height: | Size: 195 KiB |
|
After Width: | Height: | Size: 198 KiB |
|
After Width: | Height: | Size: 198 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 74 KiB |