diff --git a/docs/redesign/phase-7/COMMITS.md b/docs/redesign/phase-7/COMMITS.md
index 0995f9d..2e05e05 100644
--- a/docs/redesign/phase-7/COMMITS.md
+++ b/docs/redesign/phase-7/COMMITS.md
@@ -10,7 +10,9 @@ Entry is the completed Phase6 successor receipt `b5319981ad3d1bd635daff861453d23
| P7-01 public authentication sub-slice | `8ad720da5db5999ecda787575dc45621d18a5498` | [Public report](p7-01/README.md#public-authentication-implementation-and-acceptance), [immutable-source/runtime evidence](p7-01/evidence/public-auth-results.json): affected61/61, native22/22, isolated SMTP2/2, SMTP helper6/6 and unchanged-backend auth subset87/87; final types/lint/build pass. Public slice CONDITIONAL GO with31 contrast incompletes/manual/provider conditions. Normal push verified2026-10-11 18:50:24UTC: localHEAD=origin=live development8ad720d; local/origin/live main27657f3 unchanged. No completed public work remains uncommitted; independent account work in flight. Whole P7-01 remains PENDING |
| P7-01 account identity/security and final checkpoint outcome | `ad7b4196af638f3a8c79e261ffd96507bd002835` | [Account report](p7-01/README.md#account-identity-and-security-implementation), [frozen account source/runtime](p7-01/evidence/account-results.json): full573/89 (+52/+4 from521/85), native account6/public22/auth-boundaries10, types/lint/build all pass; actual eight final PNGs inspected. Implemented P7-01 scope CONDITIONAL GO, account85/public31 incompletes and manual/provider/production gates retained;57/32 statuses unchanged. Final staged secret/whitespace/docs/matrix checks PASS (303 local links,57 groups/32 routes); normal push verified2026-10-11 19:16:15UTC: localHEAD=origin=live developmentad7b419, local/origin/live main27657f3 unchanged, worktree clean at observation. Actual receipt appended by successor; P7-02 entry satisfied. Source/export frozen independently from public8ad720d |
| P7-02 onboarding guidance sub-slice | `d21501aa7e5f9040937fa821d6a77d823b7e08eb` | [Report](p7-02/README.md), [frozen source/runtime](p7-02/evidence/onboarding-results.json): affected32/2 (+23 net over nine inherited subset cases), ordinary native13/regression4, app/browser types/lint/build and actual13-image review pass. BuildbwZtqlczGqVRJ0J01IxVK; thirteen all-enabled scans0/13 incompletes with M11/manual/provider conditions. Retry-focus unit/native RED and earlier12-pass history retained; latest full573/89 inherited,596 derived only. Implemented onboarding CONDITIONAL GO; slice-specific hygiene PASS (four commands0,9docs/329links/0errors,57/32 retained) and normal development push directly verified2026-10-11 23:55:12.614723UTC: localHEAD=origin=live developmentd21501aa; local/origin/live main27657f3 unchanged; clean worktree at observation. Actual receipt appended by successor. Career overview/evidence and whole P7-02 pending;57/32 unchanged/main NO-GO |
-| P7-02 SQLite evidence-list compatibility repair | PENDING actual commit/push | [Separate repair](p7-02/README.md#separate-evidence-list-provider-repair), [frozen backend/HTTP evidence](p7-02/evidence/evidence-list-repair.json): actual SQLite/HTTP RED0/1 each; new SQLite1/1, fresh guards91/91 and Release0warnings/errors plus ordinary HTTP1/1 GREEN. SQL owner filter/other-provider ordering unchanged; no schema/action/payload change, owned list remainsO(N). Fullbackend1,034 derived only from inherited1,033+1. Bounded local repair GO; slice-specific hygiene PASS00:05:02UTC (9docs337links/0errors,57/32 retained), direct normal push pending; Career UI/whole P7-02 pending; in-flight frontend excluded |
+| P7-02 SQLite evidence-list compatibility repair | `01281f52d9279ecdbd3363a11d2e9cb71230bf49` | [Separate repair](p7-02/README.md#separate-evidence-list-provider-repair), [frozen backend/HTTP evidence](p7-02/evidence/evidence-list-repair.json): actual SQLite/HTTP RED0/1 each; new SQLite1/1, fresh guards91/91 and Release0warnings/errors plus ordinary HTTP1/1 GREEN. SQL owner filter/other-provider ordering unchanged; no schema/action/payload change, owned list remainsO(N). Fullbackend1,034 derived only from inherited1,033+1. Bounded local repair GO; slice-specific hygiene PASS00:05:02UTC (9docs337links/0errors,57/32 retained), normal push directly verified2026-10-12 00:06:47.145743UTC: localHEAD=origin=live development01281f52, local/origin/live main27657f3 unchanged; five unfinished Career paths retained/worktree not clean. Actual receipt appended by successor; Career UI/whole P7-02 pending; in-flight frontend excluded |
+
+| P7-02 Career overview/evidence and final implemented checkpoint outcome | PENDING normal commit/push | [Report](p7-02/README.md#career-overviewevidence-commit), [frozen finite evidence](p7-02/evidence/career-results.json): affected46/3 (+14 cases), native14 and fresh ordinary P2-D01/mobile-override2, types/lint/build pass; all22 final PNGs actually inspected. BuildqG82wPnFf-IsAkFvXkmn6,75-file export;0 violations/99 incompletes and M09/M11/manual/provider qualifications retained. Actual Delete-cancel RED/repair and Windows CRLF test correction retained. Implemented P7-02 CONDITIONAL GO; [final Career hygiene](p7-02/evidence/career-static-checks.json) PASS05:48:32UTC (four commands0,9docs347links0errors/57+32 retained); normal push pending. Fullfrontend610/backend1,034 derived only;57/32 unchanged/main NO-GO |
Hashes and remote receipts are appended by a successor to avoid self-referential commit hashes. Each row records actual commands/results, source scope, remaining conditions, normal push and immediate direct remote identity; partial or blocked evidence is recorded without inventing success. Subsequent receipt metadata is a separately reviewable documentation unit, with its own hash reported after push rather than an endless receipt chain.
diff --git a/docs/redesign/phase-7/DEBT.md b/docs/redesign/phase-7/DEBT.md
index 791e965..3dca96e 100644
--- a/docs/redesign/phase-7/DEBT.md
+++ b/docs/redesign/phase-7/DEBT.md
@@ -28,7 +28,7 @@ Production remains **NO-GO**, main unchanged. Independent bounded development ca
| RD18 | Board/CV physical selection/drag/drop/cancel/browser variants NOT VERIFIED | Applicable M03/M06/M12 physical evidence and named keyboard alternatives; no invented cross-section feature |
| RD19 | `followMode` producers/query metadata retained; reviewed consumer remains DEFERRED | P7-06F requires explicit mode→draft/review action/fallback before implementation; no auto-send/resend |
| RD20 | P5-05 optional read-only quick preview remains DEFERRED; unsupported NEW/OD and Phase8 scope remain reserved | No second full editor or early Dashboard order/resize/reset/cross-device widget framework |
-| RD21 | Canonical profile/job stale-save and creation-intent idempotency remain OPEN, separate from verified CV revision | Resolve or explicitly bound concurrency before save/history owner expansion; P7-03 retains current presentation-only behavior |
+| RD21 | Canonical profile/job stale-save and creation-intent idempotency remain OPEN, separate from verified CV revision | Resolve or explicitly bound concurrency before save/history expansion. Separate P7-03 entry: reproduce/repair optional stable source-ID preservation, then dirty-locale and held-PUT/pending-write ownership/recovery proof before structured presentation |
| RD22 | F20 enabled-worker outage recovery/durability remains OPEN | Inspect intended gates; recovery/no-loss/no-duplicate proof before new enabled producers; no worker activation |
| RD23 | F21 calendar offset/DST/date-only semantics remain OPEN | P7-05/06 retains existing links; dedicated contract/provider proof before semantic changes or scheduling claims |
| RD24 | Billing/deletion/retention/tombstone/provider-cleanup policy/configuration UNVERIFIED | P7-09 presentation only; no checkout/deletion/restore activation or guessed policy |
@@ -83,7 +83,7 @@ Copy fixes following actual visual review truthfully describe stored profile CV
## Evidence and production limits
-The [separate P7-02 SQLite evidence-list repair](p7-02/evidence/evidence-list-repair.json) reproduces actual provider/HTTP failures and passes the new ordinary SQLite case,91 affected guards, Release build and HTTP readback after owner-local materialization/sort. It changes no schema, SQL owner filter or other-provider ordering. Fullbackend1,034 is derived only; full regression remains P7-12. The list remains O(N), and HTTP proof does not establish Career presentation/reader/production acceptance. Source/DLL/RED/GREEN/spec/raw traces are frozen with34 references verified; slice-specific hygiene PASS00:05:02UTC (9docs337links/0errors,57/32 retained), normal push pending. No RD production/manual/concurrency/provider closure follows from this bounded compatibility repair.
+The [separate P7-02 SQLite evidence-list repair](p7-02/evidence/evidence-list-repair.json) reproduces actual provider/HTTP failures and passes the new ordinary SQLite case,91 affected guards, Release build and HTTP readback after owner-local materialization/sort. It changes no schema, SQL owner filter or other-provider ordering. Fullbackend1,034 is derived only; full regression remains P7-12. The list remains O(N), and HTTP proof does not establish Career presentation/reader/production acceptance. Source/DLL/RED/GREEN/spec/raw traces are frozen with34 references verified; slice-specific hygiene PASS00:05:02UTC (9docs337links/0errors,57/32 retained), normal push01281f52 directly verified00:06:47UTC/main unchanged, five unfinished Career paths retained. No RD production/manual/concurrency/provider closure follows from this bounded compatibility repair.
### P7-02 onboarding conditional disposition
@@ -91,6 +91,14 @@ The [separate P7-02 SQLite evidence-list repair](p7-02/evidence/evidence-list-re
Actual review demonstrated lost focus when Retry disappeared. Five strengthened existing unit cases and one focused native case reproduced it before the bounded Dismiss-ref/focus correction; final native13 proves retry focus and next action after dismissal/complete recovery. Existing Dashboard summary Retry recovery still captures focus on the shell Skip link with altered scroll; its owner focus restoration remains unqualified. Presentation retry does not diagnose historical Dashboard/Board500 causes or close RD08–RD14. Latest full573/89 is inherited;596/89 is derived573+23 only. Exact source/test/build/export/runner/raw/unit/history are frozen under `.artifacts/phase7/p7-02/onboarding-final/`,154 file-reference hashes verified; initial pre-focus source/export observations are historical identities rather than claimed snapshots. Implemented onboarding CONDITIONAL GO is final hygiene PASS and normal pushd21501aa/direct receipt23:55:12UTC; Career overview/evidence and whole P7-02 remain pending,57/32 statuses unchanged.
+### P7-02 Career conditional disposition and P7-03 dependency
+
+[Career results](p7-02/evidence/career-results.json) retain affected46/3, native14 and fresh existing P2-D01/mobile-override2, types/lint/build and actual22-image review passing. Delete-cancel focus loss was reproduced in native and strengthened unit cases before a minimal state-order correction; the shared confirmation and duplicate guard remain. The separate clipboard failure was native Windows LF→CRLF conversion, with only CRLF→LF test normalization and raw codepoint retention. All prior failures stay in immutable history; no product clipboard or byte-exact OS claim is made.
+
+Twenty-two all-enabled scans retain0 violations/**99 incompletes**: contrast74 `bgOverlap`+22 invisiblebadge `shortTextContent`, plus3 hidden-focus `#menu-` MUI select portals. Actual section/form keyboard and corrected cancel/retry focus pass; M09/M11 contextual contrast/reader and RD06/RD07 human/device/zoom remain open. Error captures retain inherited shell Skip-link/scroll focus qualification and controlled English server-fixture detail. No density/provider/production acceptance is inferred. Source/test/export/runner/raw/unit history is frozen in `.artifacts/phase7/p7-02/career-final/`,152 refs verified; final buildqG82wPnFf-IsAkFvXkmn6. Implemented P7-02 is CONDITIONAL GO; [Career final hygiene](p7-02/evidence/career-static-checks.json) PASS (four commands0,9docs347links0errors), normal push pending. Latest full573/89 remains inherited;610/89 and backend1,034 are derived expectations only.
+
+Two independent read reviews identify the existing normalizer dropping job/education/certification/project stable IDs while overrides reference those IDs. P7-03 must separately reproduce and repair optional-ID preservation before structured presentation, with canonical/sibling native and payload proof. This inherited risk is distinct from RD21 stale-save/idempotency and is neither introduced nor closed by P7-02. No date-loss claim is made. Prove dirty-locale/pending-write draft ownership and recovery, and resolve or explicitly bound RD21 before changing save/history owners. Other manual/provider/production and C11/Phase8 gates remain unchanged.
+
The early Phase6 runner retained exact failure commands/reports/logs but reused result folders, so not all old screenshots/traces/error-context paths remain resolvable. Later runs archive the whole previous output; current successful attachments have exact provenance. Preserve that limit rather than claiming complete old failure-trace retention. Native Windows Chromium/local SQLite/synthetic fixtures and finite PDF oracles do not establish deployed Linux, human semantics, physical devices, real provider quality or production load.
API transferSize0 is unavailable cross-origin timing information, not zero network bytes. CDP document/node/heap snapshots can retain earlier navigation/CV iframe documents and do not prove leak/growth. The existing measured Board/Dashboard candidates require baseline/comparative evidence before a repair or capacity claim.
diff --git a/docs/redesign/phase-7/PRESERVATION.md b/docs/redesign/phase-7/PRESERVATION.md
index a603d0e..6057e10 100644
--- a/docs/redesign/phase-7/PRESERVATION.md
+++ b/docs/redesign/phase-7/PRESERVATION.md
@@ -99,6 +99,20 @@ The22 public native cases and two isolated recovery cases are new separate packs
Full frontend521→573 adds52 cases across four new suites with no removed/renamed cases: public23 and account29 (providers12, card presentation7, flows5, Profile5). Focused subsets and native packs overlap and are not added to that total. Earlier571 frontend and pre-copy native runs remain historical; the exact post-copy build/source identity is in the account manifest. P2-D01/sidecar/backend/rendering execution remains inherited here.
+### P7-02 reconciliation, no full-group upgrade
+
+The [onboarding](p7-02/evidence/onboarding-results.json), [separate provider repair](p7-02/evidence/evidence-list-repair.json) and [Career](p7-02/evidence/career-results.json) records retain distinct executed scopes and failures. All57 remain **56 PARTIAL /1 DEFERRED**, with0 PASS/FAIL, and all32 routes remain retained. Career runtime/actual visual review is conditional; [final slice hygiene](p7-02/evidence/career-static-checks.json) PASS (9docs347links0errors/four commands0); normal push pending.
+
+| Protected groups | Fresh finite P7-02 proof | Remaining boundary |
+|---|---|---|
+| S02/E08/E09 | Onboarding affected32/native13/regression4; four observable steps, nullable unknown, five read-only source facts, existing per-user key and ownerA/B dismiss/reload/settled no-read proof. Existing four destinations/Back, retry and next-action focus pass; no forced guidance | Real grants/human/device/zoom, notification/full flags and historical Dashboard500 causes; Phase8 customization separate |
+| C01/C02/C05/E08/E09 | Career affected46/native14: independent known/unknown/error reads, overview provenance, source/raw-copy/history destinations, three unique existing CV links and canonical/sibling readback/no unintended writes | Structured save/import/history and full library/publication migration remain P7-03/04; Windows clipboard content is LF-normalized with raw codepoints, not exact OS bytes |
+| C04/E08/E09 | Actual evidence create/delete/readback, canceled confirmation/no write, retained draft/row after failures, scoped requests, explicit retry/reconfirm, keyboard and corrected cancel-focus. Twenty-two inspected geometry/axe states retain0 violations/99 incompletes | Full reader/contextual contrast/device/zoom, all metadata/long-tail combinations and production/provider qualification |
+| C04 | Separate real SQLite/HTTP RED→GREEN repair; owner SQL filter/AsNoTracking and foreign-owner denial preserved; differently-offset instants sorted correctly;91 affected guards/Release pass | No live MySQL/production proof; owner-local list remainsO(N), no scaling/schema/payload/auth change |
+| W05/W07/C07/E09 | Existing ordinary P2-D01 frozen-workspace and mobile-override cases freshly pass2/2 on final Career export, without skip/retry/expected failure | Broader frozen/render/CV revision/manual/deployed combinations remain their original gates |
+
+Stable job/education/certification/project IDs dropped by the existing normalizer are an inherited **P7-03 entry risk** requiring separate RED/payload/native proof and optional-ID repair before structured editing. This is distinct from RD21 concurrency and is not a P7-02 repair claim. Dirty-locale and pending-write ownership/recovery must also be qualified before save/history expansion.
+
[INVENTORY.md](p7-00/INVENTORY.md#current-route-coverage) reconciles exactly32 current App patterns against [route acceptance](../phase-5/p5-15/ROUTE_ACCEPTANCE.md); all whole-route groups remain PARTIAL. Preserve Board/Application/mail aliases and actual query/hash/state behavior, section/sub precedence, safe internal from, numeric navigation-helper output, capture consumption, focusJobId and provider/token destinations. No Documents/Notifications/aggregate Admin/new Career destination is inferred without contract/content evidence.
P2-D01 remains the ordinary passing [frozen-workspace test](../../../job-tracker-ui/e2e/redesign-preservation.spec.ts#L73), retaining native capture/readback/archive bytes/canonical/sibling proof. No skip, expected-failure marker or relaxed oracle may replace it. Preserve server roles/account/tenant/owned-resource denial; canonical Career versus CV overrides; revision/conflict/recoverable drafts; private/public PDF admission/revocation; unchanged physical pagination; immutable packages; existing grounding/proposal/stale guards and Production C11 withholding.
diff --git a/docs/redesign/phase-7/README.md b/docs/redesign/phase-7/README.md
index 0bfef8c..09c6968 100644
--- a/docs/redesign/phase-7/README.md
+++ b/docs/redesign/phase-7/README.md
@@ -10,8 +10,8 @@ The entry commit is `b5319981ad3d1bd635daff861453d23c0de5320b` on `codex/ui-rede
|---|---|---|
| [P7-00](p7-00/README.md) | Fresh scope inventory and fixture baseline | Complete finite identity/route/matrix/static checks; inherited runtime separated. Push receipt recorded by the successor before page changes |
| [P7-01](p7-01/README.md) | Authentication and account-security presentation | Public sub-slice CONDITIONAL GO, pushed8ad720d with direct receipt; account implementation/runtime/actual8-image review CONDITIONAL GO (573/89 +6/22/10); pushedad7b419 with final static PASS/direct receipt19:16:15UTC; main unchanged |
-| [P7-02](p7-02/README.md) | Onboarding and Career overview/evidence | Entryad7b419 pushed/verified; bounded onboarding CONDITIONAL GO: affected32/native13/regression4, types/lint/build and13 actual PNG inspections pass; final hygiene PASS/pushedd21501aa, direct receipt23:55:12UTC/main unchanged. Career overview/evidence and whole checkpoint remain pending |
-| P7-03 | Career structured editing and import review | P7-02 fixtures; resolve or explicitly bound concurrency before changing save/history ownership; planned |
+| [P7-02](p7-02/README.md) | Onboarding and Career overview/evidence | Entryad7b419 pushed/verified; bounded onboarding CONDITIONAL GO32/13/4+types/lint/build/13 actual PNG inspections, hygiene PASS and d21501aa push verified23:55:12UTC. Separate SQLite evidence-list repair91 guards/HTTP1/Release passed, pushed01281f52/direct receipt00:06:47UTC with unfinished Career work preserved. Career affected46/3/native14/preservation2/types/lint/build and actual22-image review pass; implemented checkpoint CONDITIONAL GO with99 incompletes/manual gates. Career final hygiene PASS (four commands0,9docs347links0errors); normal push pending; main unchanged |
+| P7-03 | Career structured editing and import review | P7-02 normal push; separately reproduce/repair stable source-ID preservation before structured presentation, then prove dirty-locale/pending-write ownership and resolve or bound RD21 concurrency; planned |
| P7-04 | CV library and public entry | Existing gallery/editor and P7-03 source language; planned |
| P7-05 | Discovery, Companies, Offers and Reminders | Existing domain owners and Jobs return context; planned |
| P7-06 | Remaining Application forms and global correspondence | Existing seven-section workspace, immutable packages and draft/send owners; planned |
@@ -39,7 +39,7 @@ The separate [account runtime manifest](p7-01/evidence/account-results.json) rec
## Working constraints
-The [P7-02 onboarding slice](p7-02/evidence/onboarding-results.json) adds actual fresh affected32/2 (+23 cases over its nine-case inherited subset), ordinary native13 and separate Dashboard/Analytics4, app/browser types/lint/build and13 inspected final PNGs. Its13 all-enabled scans retain0 violation nodes/13 invisible-zero notification-badge contrast incompletes; no manual conformance or real provider grant is inferred. The retry-focus defect was reproduced by five strengthened unit cases and a focused native failure before correction. Latest full frontend573/89 remains inherited;596/89 is only a derived expectation. Onboarding implemented scope is CONDITIONAL GO final hygiene PASS and normal pushd21501aa/direct receipt23:55:12UTC; Career overview/evidence remains pending,57 groups/32 routes unchanged and production NO-GO.
+The [P7-02 onboarding slice](p7-02/evidence/onboarding-results.json) adds actual fresh affected32/2 (+23 cases over its nine-case inherited subset), ordinary native13 and separate Dashboard/Analytics4, app/browser types/lint/build and13 inspected final PNGs. Its13 all-enabled scans retain0 violation nodes/13 invisible-zero notification-badge contrast incompletes; no manual conformance or real provider grant is inferred. The retry-focus defect was reproduced by five strengthened unit cases and a focused native failure before correction. Latest full frontend573/89 remains inherited;596/89 is only a derived expectation. Onboarding implemented scope is CONDITIONAL GO final hygiene PASS and normal pushd21501aa/direct receipt23:55:12UTC; Career successor affected46/3/native14/preservation2 and22 actual image inspections now pass; implemented P7-02 scope is CONDITIONAL GO with final Career hygiene PASS; normal push pending. Its22 all-enabled scans retain0 violations/99 incompletes;610/89 is derived only, latest full573/89 unchanged. Frozen [Career results](p7-02/evidence/career-results.json) retain failures/source/export/manual qualifications;57 groups/32 routes unchanged and production NO-GO.
Use the current MUI/Emotion theme, PageLayout/section primitives, ViewStateNotice/useViewResource, Router, i18n, notification and save owners. Preserve query/history/aliases, account/tenant/role boundaries, canonical Career facts versus CV overrides, revision recovery, frozen packages and original PDF pagination/oracles. Do not infer new Documents/Notifications/aggregate Admin routes from illustrative navigation. No new hard-coded user-facing strings.
diff --git a/docs/redesign/phase-7/p7-02/README.md b/docs/redesign/phase-7/p7-02/README.md
index 23ccf2b..b83a3c8 100644
--- a/docs/redesign/phase-7/p7-02/README.md
+++ b/docs/redesign/phase-7/p7-02/README.md
@@ -1,6 +1,6 @@
# P7-02 — Onboarding and Career overview/evidence
-**Status: implemented onboarding guidance CONDITIONAL GO; final hygiene PASS, normally pushed d21501aa with direct receipt. Career overview/evidence and whole P7-02 remain pending.** Follow the exact [approved handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md#migration-order-and-commit-boundaries). This checkpoint has two bounded commits: onboarding guidance first, then Career overview/evidence. Structured Career editing/import/history remains P7-03; no alternative checkpoint order or new route is introduced.
+**Status: implemented P7-02 scope CONDITIONAL GO. Onboarding and the separate SQLite repair are pushed; Career runtime/visual acceptance and final slice hygiene PASS; normal push pending.** Follow the exact [approved handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md#migration-order-and-commit-boundaries). This checkpoint has two bounded commits: onboarding guidance first, then Career overview/evidence. Structured Career editing/import/history remains P7-03; no alternative checkpoint order or new route is introduced.
## Accepted entry baseline
@@ -52,31 +52,45 @@ The bounded [controller](../../../../JobTrackerApi/Controllers/CareerEvidenceCon
Dedicated SQLite1/1 and fresh affected guards91/91 passed with zero failed/not-executed cases. Release test-project/API build passed00:01:26–00:01:28UTC with zero warnings/errors. Actual real-HTTP GREEN passed1/1 at00:01:48–00:01:58UTC, zero skip/flaky/unexpected/retry. The added ordinary backend case makes1,034 the **derived** future full expectation; only the91 affected guards have freshly executed. The dedicated1/HTTP1 overlap this coverage and later Career native coverage; do not add them to full totals.
-Source/DLL, backend command/log/TRX and HTTP RED/GREEN report/log/result/trace/spec snapshots are immutable under `.artifacts/phase7/p7-02/evidence-list-repair/`, with34 file/hash references verified. The HTTP case executes local API contracts only; its uncommitted native-spec snapshot will be committed and rerun in the later Career slice. Existing onboarding frontend export is not a Career build or UI acceptance. Slice-specific [repair static checks](evidence/evidence-list-repair-static-checks.json) passed2026-10-12 00:04:59–00:05:02UTC: all four secret/working/staged/entry-whitespace commands exit0, nine Markdown documents/337 local links checked with0errors,57 groups/32routes retained, main unchanged. **Bounded local repair GO; final hygiene PASS, separate commit/push pending. Career UI/whole P7-02 remain pending.** This repair is committed separately before Career UI; no in-flight frontend implementation is included. A repair push observation may include the independent unfinished Career worktree; it must not claim that work complete or clean.
+Source/DLL, backend command/log/TRX and HTTP RED/GREEN report/log/result/trace/spec snapshots are immutable under `.artifacts/phase7/p7-02/evidence-list-repair/`, with34 file/hash references verified. The HTTP case executes local API contracts only; its uncommitted native-spec snapshot will be committed and rerun in the later Career slice. Existing onboarding frontend export is not a Career build or UI acceptance. Slice-specific [repair static checks](evidence/evidence-list-repair-static-checks.json) passed2026-10-12 00:04:59–00:05:02UTC: all four secret/working/staged/entry-whitespace commands exit0, nine Markdown documents/337 local links checked with0errors,57 groups/32routes retained, main unchanged. **Bounded local repair GO; final hygiene PASS, normally pushed01281f52 and directly verified. Career UI acceptance was pending at this repair gate; its successor result follows.** This repair is committed separately before Career UI; no in-flight frontend implementation is included. Actual receipt2026-10-12 00:06:47.145743UTC records development localHEAD=origin=live01281f52, local/origin/live main27657f3 unchanged and five independent unfinished Career paths. The worktree was explicitly not clean; the completed repair was normally pushed without discarding that work.
## Career overview/evidence commit
-Entry is the normally pushed onboarding `d21501aa7e5f9040937fa821d6a77d823b7e08eb`, directly verified23:55:12.614723UTC with development local/origin/live equality, main unchanged and clean worktree. Its final32/13/4/source/build/axe evidence remains frozen and historical at that commit; later Career translation changes cannot be validated against the earlier workspace. Latest fresh full frontend remains inherited573/89; onboarding adds23 verified affected cases, giving only a derived596/89 expectation. In the frozen573 report, the existing Career workspace suite has7 cases and evidence suite1, **eight-case affected baseline**. This is inherited baseline evidence, not a new Career execution.
+Entry includes the normally pushed onboarding `d21501aa7e5f9040937fa821d6a77d823b7e08eb` and subsequent separate provider repair `01281f52d9279ecdbd3363a11d2e9cb71230bf49`. Each has its actual direct development/main receipt above. Onboarding's final32/13/4/source/build/axe evidence remains frozen and historical atd215; later Career translation changes cannot be validated against the earlier workspace. Latest fresh full frontend remains inherited573/89; onboarding adds23 verified affected cases, giving only a derived596/89 expectation. In the frozen573 report, the existing Career workspace suite has7 cases and evidence suite1, **eight-case affected baseline**. This is inherited baseline evidence, not a new Career execution. Fresh backend91 affected guards/Release/HTTP1 are from the separately pushed repair; fullbackend1,034 is derived only.
Existing [CareerWorkspacePage](../../../../job-tracker-ui/src/views/CareerWorkspacePage.tsx) delegates to [CareerProfilePage](../../../../job-tracker-ui/src/views/CareerProfilePage.tsx). Preserve the actual Overview/Profile/Evidence/Import section owner and query/history behavior, including removal of the default overview query. Scope the residual presentation to [CareerWorkspaceOverview](../../../../job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx) and [CareerEvidenceBank](../../../../job-tracker-ui/src/views/career/CareerEvidenceBank.tsx), with existing [workspace](../../../../job-tracker-ui/src/career-workspace-page.test.tsx) and [evidence](../../../../job-tracker-ui/src/career-evidence.test.tsx) tests.
Keep canonical `/career/profile` data and existing server-provided completeness labels/provenance, source/raw-copy/history links, `/career/evidence` list/create and owned delete contracts. Evidence creation keeps existing category/title/statement/tags/source semantics and explicit manual review; presentation does not invent achievements or change persistence. Improve bounded headings/state/form/retry/reflow using existing owners after reproduction. No structured editor/save/import/history owner or CV renderer change belongs here.
-Required native evidence covers populated/empty/loading/error/retry, raw-copy/source/history destinations, actual evidence create/delete confirmation/no-write cancellation/readback, long/many items and keyboard/EN/NB/theme/narrow-screen states. Canonical/sibling/frozen boundaries and foreign-owner denial remain applicable. Any concurrency/save-owner change requires the separate P7-03 disposition; unavailable human/device evidence is carried explicitly. **Implementation/results/commit/push for this second boundary are PENDING.**
+The [finite Career manifest](evidence/career-results.json) records actual affected **46/46 in three suites**, ordinary Career **14/14** and separate existing preservation **2/2** passing, with zero skipped/flaky/unexpected/retry native cases. Final app/browser TypeScript, lint and build passed2026-10-12 00:18:30–00:19:05UTC. Career14 executed00:19:05–00:20:04UTC; the ordinary P2-D01 frozen-workspace and mobile-override cases executed00:20:04–00:20:19UTC. These two are freshly executed preservation proof, not inherited acceptance. The API-only provider case overlaps the separate repair HTTP case and is not added to totals.
-| Career proof | Current evidence / required outcome |
+The source-worker RED passed8/22 and failed14 added assertions. First affected GREEN passed45/46; its remaining required-label selector harness error was corrected without changing the product contract or removing assertions. The initial native pack passed12/14 on build `KKwBMDeMkaRLM-O5e2Fb-`. One failure exposed genuine Delete-cancel focus loss: disabling the trigger before confirmation prevented restoration. The stronger unit RED passed7/8, then the minimal state-order correction passed46/46 at00:13:56UTC; the duplicate-operation guard and shared confirmation owner remain. The earlier jsdom focus-only8/8 diagnostic did not reproduce native disabled-element blur and stays historical. The other native failure was Windows clipboard LF→CRLF conversion. The final assertion normalizes only CRLF→LF and retains actual code points; no clipboard product change, trimming or byte-identical platform output claim follows.
+
+Final workspace14/evidence8 replace inherited7+1, adding **14 net cases**; the existing Profile24 consumer cases also pass unchanged. Onboarding adds23 separately. Latest fresh full frontend remains P7-01 **573/89**; **610/89 is derived573+23+14**, not a new full run. Full backend1,034 is likewise derived from1,033+the new SQLite case; the fresh affected91 guard run is separate. Final full regression remains P7-12.
+
+| Career proof | Actual finite outcome / remaining boundary |
|---|---|
-| Reproduced presentation defects | Source-owner RED cases and exact failure causes **PENDING**; retain original operation/save/navigation semantics |
-| Affected unit regressions | Fresh workspace/evidence packet **PENDING**; reconcile names and net case changes against inherited7+1 without treating derived totals as a fresh full run |
-| Real local workflows and boundaries | Native actual create/delete/readback/cancel/retry/source/history/section-query flows and canonical/sibling/frozen no-write/foreign-owner assertions **PENDING**; provider/model execution excluded |
-| Finite responsive/localised/accessibility proof | EN/NB, light/dark, narrow/tablet/wide/short landscape, long/many items, semantic headings/forms, keyboard trap/restore, geometry and all axe findings **PENDING**; density only if an actual control exists |
-| Backend constraints | Targeted existing Career/evidence authorization and real SQLite endpoint guards **PENDING**; no schema/endpoint/data-save expansion implied |
-| Final source/export and exit | Fresh app/browser types/lint/build, exact measured source/export identity, actual image inspection, compact raw-report/hash evidence and slice-specific `career-static-checks.json` **PENDING**; normal push after passing bounded checks |
+| Truthful resource states and navigation | Populated/empty/pending/failed independent profile/run/variant reads, deliberate retry, section query/Back, existing source/history destinations and three unique CV links pass; structured editor/import/history remains P7-03 |
+| Evidence CRUD and isolation | Actual create, canceled delete/no write, failed save retaining draft, failed delete retaining row, deliberate retry/reconfirm and successful readback pass. Canonical Career and sibling CV readback after writes, owner denial and scoped requests remain asserted |
+| Keyboard/focus | Retry focus, actual section selection/subsequent form traversal and corrected cancel-trigger restoration pass. Failed-save/delete captures retain inherited shell Skip-link/scroll context; complete human focus/spoken-state acceptance remains unverified |
+| Responsive/localised visual review | Parent actually opened all22 final raw PNGs: eight EN/NB/theme samples320/360/390/768/1024/1280 short landscape/1440/1920 plus six pending/error states. Fields, titles and actions wrap without observed clipping; all22 recorded root-overflow values are0; the1440 many-item fixture has11 rows |
+| Accessibility | Twenty-two all-enabled scans retain0 violation nodes/99 incomplete occurrences. No automated result establishes reader/device/zoom conformance; density was not varied and Career has no global density control |
+| Exit | Runtime and actual22-image review support implemented-scope CONDITIONAL GO. Slice-specific final hygiene PASS; normal commit/push remains pending; main/production stays NO-GO |
-Record final compact outcomes in `evidence/career-results.json` only after actual executions. Full axe node/check vectors remain in the identified immutable raw report; the portable record must retain every rule count and contextual triage, including incomplete results and errors. Keep source-worker/native failures, fixture corrections and exact count deltas; no skips/expected failures/assertion relaxation. The accepted onboarding evidence and `onboarding-static-checks.json` remain independent. Career/whole P7-02 acceptance, source/build identity and push are not claimed by this plan.
+All99 incomplete contexts remain recorded:96 `color-contrast` (74 `bgOverlap` plus22 invisible notification-badge `0`/`shortTextContent`) and3 `aria-hidden-focus` targeting `#menu-`, the hidden MUI section-select portal in narrow evidence states. The actual section and subsequent form keyboard workflows pass; **M09/M11** reader/contextual contrast/forced-colors requirements remain pending. Complete HTML/data/related-node/check vectors remain in the exact hashed raw report, with every rule/target/check context summarized in the portable manifest. Controlled English500 details are server-fixture text, distinct from translated product fallback. Sticky appbar/Skip-link placement in error captures reflects recorded scroll/focus context, not a new demonstrated overflow defect.
+
+Final four-source LF digest is `190d0a24368bfc3cc76550ff0f74c272200d3a30f61218a86628449ac83735ce`; build `qG82wPnFf-IsAkFvXkmn6`; **75 exported files**, digest `50896e8ad6934b909b83cc487eaf3579516921fde54b19e50a9039db68e04869`. Final native report SHA256 is `f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360`. Source/test/build/export/runner/config, whole runtime/attempt tree, unit history and entry manifests are frozen under `.artifacts/phase7/p7-02/career-final/`:152 file-reference hashes verified,428 runtime files and81 unit files retained. Parent independently verified152 references/84 unique referenced files with0 errors. Raw hashes/counts remain measured bytes; portable JSON/source canonical-LF policies are explicit. Earlier first-build75-file export/report and failed unit/native attempts stay historical; the first source had already been corrected before export archival, so no original-source snapshot is claimed.
+
+Slice-specific [Career static checks](evidence/career-static-checks.json) passed2026-10-12 05:48:28–05:48:32UTC: four secret/working/staged/entry-whitespace commands exit0; nine Markdown documents/347 local links checked with0errors at that observation;57 qualified groups/32 routes retained and main27657f3 unchanged. Canonical UTF-8/LF static SHA256 is `f575a6304bb4d00e11ee77270d60ebdee11f1cd8faf9692adb4c473961b4d8f4`. Final hygiene PASS; normal commit/push receipt remains pending. Runtime/source/export/manual qualifications are unchanged.
## Preservation and exit
-S02/C02/C04/E09 and shared E08/S03 are the finite scope in the [57 matrix](../PRESERVATION.md). Retain all [debt](../DEBT.md), established auth/private-tree behavior, original routes and semantic action boundaries. Scoped truthful loading/retry does not establish the root cause of historical Dashboard/Board500 observations.
+S02/C01/C02/C04/C05/E09 and shared E08/S03 are the finite scope in the [57 matrix](../PRESERVATION.md). Retain all [debt](../DEBT.md), established auth/private-tree behavior, original routes and semantic action boundaries. Scoped truthful loading/retry does not establish the root cause of historical Dashboard/Board500 observations.
Each completed logical boundary must include reproduction/baseline, actual changes, automated and visual evidence, exact count explanation, source/export identity, manual qualifications and normal commit/push with remote=HEAD. Record observed results here after execution; no skips, expected failures or relaxed assertions can substitute for passing ordinary cases. P7-03 starts only after the applicable P7-02 fixtures/entry are verified. Production main/deployment, P5-13 activation and Phase8 Dashboard customization remain outside this checkpoint.
+
+### Mandatory P7-03 entry conditions
+
+Two independent source reviews identify an inherited stable-ID risk in [normalizeStructuredCv](../../../../job-tracker-ui/src/profileCv.ts): job/education/certification/project IDs are dropped, while CV overrides refer to source IDs and the API may assign replacements. **Before structured-edit presentation, separately reproduce and repair optional-ID preservation with normalizer/payload/native canonical-and-sibling proof.** This is a P7-03 entry condition, not a P7-02 regression or completed repair. No date-loss claim is made; server StartDate derives from Start.
+
+Retain RD21 concurrency as a separate obligation. Prove dirty drafts survive locale/navigation/read-retry boundaries and held-PUT/pending-write ownership/recovery before changing save/history behavior; resolve or explicitly bound stale profile/job saves and creation-intent behavior using the existing contracts. Known canonical/sibling fixtures and actual server IDs remain the basis; no guessed revision/schema/provider behavior. P7-03 begins after this slice's successful normal push. Import/history remains its approved second boundary; P5-13 and Phase8 remain deferred.
diff --git a/docs/redesign/phase-7/p7-02/evidence/career-results.json b/docs/redesign/phase-7/p7-02/evidence/career-results.json
new file mode 100644
index 0000000..fa6bd5d
--- /dev/null
+++ b/docs/redesign/phase-7/p7-02/evidence/career-results.json
@@ -0,0 +1,7965 @@
+{
+ "schemaVersion": 1,
+ "checkpoint": "P7-02",
+ "slice": "Career overview/evidence",
+ "collectedUtc": "2026-10-12T05:38:42.288348+00:00",
+ "acceptance": "CONDITIONAL GO",
+ "entry": {
+ "onboardingCommit": "d21501aa7e5f9040937fa821d6a77d823b7e08eb",
+ "evidence": {
+ "path": ".artifacts/phase7/p7-02/career-final/entry-onboarding-results.json",
+ "sha256": "e7cd700b34ac3c18086303cad770e68502b388286dec371a4ca5a8b9b6cfb1cf",
+ "bytes": 427470,
+ "hashPolicy": "UTF-8 text with CRLF normalized to LF"
+ },
+ "latestDevelopmentCommit": "01281f52d9279ecdbd3363a11d2e9cb71230bf49",
+ "repairEvidence": {
+ "path": ".artifacts/phase7/p7-02/career-final/entry-repair-results.json",
+ "sha256": "57a311629bebb49a6ff31078a8f730224e21e93a05ac65dd067f3542c6937645",
+ "bytes": 27865,
+ "hashPolicy": "UTF-8 text with CRLF normalized to LF"
+ },
+ "latestFullFrontend": "Inherited573/89;596/89 is derived after onboarding, not a fresh full run"
+ },
+ "identity": {
+ "sourceFiles": [
+ {
+ "path": "job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx",
+ "sha256": "20b01d7e6c16045cf87c19d7b259a77b4dd6a319dc11f71857bd82306774d2e0",
+ "bytes": 11537,
+ "hashPolicy": "UTF-8 text with CRLF normalized to LF"
+ },
+ {
+ "path": "job-tracker-ui/src/views/career/CareerEvidenceBank.tsx",
+ "sha256": "51cab7289717c9f26006a9d34ac1f8aac9e09d19e549a3666a15adc41d5d4724",
+ "bytes": 7455,
+ "hashPolicy": "UTF-8 text with CRLF normalized to LF"
+ },
+ {
+ "path": "job-tracker-ui/src/views/CareerProfilePage.tsx",
+ "sha256": "961f992fe9684766abb253f939bf64ca28bd4e671ba3f6efb98904aba6dea091",
+ "bytes": 47815,
+ "hashPolicy": "UTF-8 text with CRLF normalized to LF"
+ },
+ {
+ "path": "job-tracker-ui/src/i18n/translations.ts",
+ "sha256": "fea1eb8ba58a5b4ff86c33fa651ec542fe6df46dcbade226790737dc5994d30c",
+ "bytes": 308555,
+ "hashPolicy": "UTF-8 text with CRLF normalized to LF"
+ }
+ ],
+ "sourceSha256Lf": "190d0a24368bfc3cc76550ff0f74c272200d3a30f61218a86628449ac83735ce",
+ "sourceHashPolicy": "Ordered original path TAB canonical-LF source SHA LF records",
+ "buildId": "qG82wPnFf-IsAkFvXkmn6",
+ "buildIdRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/BUILD_ID",
+ "sha256": "9ac86cb69de1c8cc79ae66e9d10349496b629607f6de0f7fb26edfbbdb593a04",
+ "bytes": 21,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "exportFiles": 75,
+ "exportSha256": "50896e8ad6934b909b83cc487eaf3579516921fde54b19e50a9039db68e04869",
+ "exportHashPolicy": "Sorted original export path TAB exact raw file SHA LF records",
+ "sourceSnapshots": [
+ {
+ "originalSourcePath": "job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx",
+ "path": ".artifacts/phase7/p7-02/career-final/source/job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx",
+ "sha256": "e7ff8bdd8e541cf972f448298cc22e435a741e60a85222a85aafc12cf6536f5e",
+ "bytes": 11720,
+ "hashPolicy": "Exact measured raw bytes",
+ "canonicalLfSha256": "20b01d7e6c16045cf87c19d7b259a77b4dd6a319dc11f71857bd82306774d2e0"
+ },
+ {
+ "originalSourcePath": "job-tracker-ui/src/views/career/CareerEvidenceBank.tsx",
+ "path": ".artifacts/phase7/p7-02/career-final/source/job-tracker-ui/src/views/career/CareerEvidenceBank.tsx",
+ "sha256": "fc85ccfc1addd48af3a29bc263b089858765b2ac3ec7db3b66dedc55ddfab625",
+ "bytes": 7559,
+ "hashPolicy": "Exact measured raw bytes",
+ "canonicalLfSha256": "51cab7289717c9f26006a9d34ac1f8aac9e09d19e549a3666a15adc41d5d4724"
+ },
+ {
+ "originalSourcePath": "job-tracker-ui/src/views/CareerProfilePage.tsx",
+ "path": ".artifacts/phase7/p7-02/career-final/source/job-tracker-ui/src/views/CareerProfilePage.tsx",
+ "sha256": "a70c1f6aba86da0c34621b7812b30525dc5f96a67a983c6bf42826c116ad07b4",
+ "bytes": 48634,
+ "hashPolicy": "Exact measured raw bytes",
+ "canonicalLfSha256": "961f992fe9684766abb253f939bf64ca28bd4e671ba3f6efb98904aba6dea091"
+ },
+ {
+ "originalSourcePath": "job-tracker-ui/src/i18n/translations.ts",
+ "path": ".artifacts/phase7/p7-02/career-final/source/job-tracker-ui/src/i18n/translations.ts",
+ "sha256": "39e0a94d7f9d465bee4739a347fe15589cf34cc6dd99455d2284273654a42fd6",
+ "bytes": 313741,
+ "hashPolicy": "Exact measured raw bytes",
+ "canonicalLfSha256": "fea1eb8ba58a5b4ff86c33fa651ec542fe6df46dcbade226790737dc5994d30c"
+ }
+ ],
+ "testSnapshots": [
+ {
+ "originalTestPath": "job-tracker-ui/e2e/phase7-career-overview.spec.ts",
+ "path": ".artifacts/phase7/p7-02/career-final/tests/job-tracker-ui/e2e/phase7-career-overview.spec.ts",
+ "sha256": "175e3081bb05c19675fb088b78f21e513b5f925848c4ab0a23272577cb59a169",
+ "bytes": 25884,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ {
+ "originalTestPath": "job-tracker-ui/src/career-workspace-page.test.tsx",
+ "path": ".artifacts/phase7/p7-02/career-final/tests/job-tracker-ui/src/career-workspace-page.test.tsx",
+ "sha256": "0060297d6bf7b0d2ef6045b5103d25ba6513697b7dd007f9d38684a04b10a43d",
+ "bytes": 14842,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ {
+ "originalTestPath": "job-tracker-ui/src/career-evidence.test.tsx",
+ "path": ".artifacts/phase7/p7-02/career-final/tests/job-tracker-ui/src/career-evidence.test.tsx",
+ "sha256": "511341eec5e6dcdad7d0f9f63e959b7fb8ac7fdf43aa2dfcfa32fcff33540985",
+ "bytes": 10946,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ {
+ "originalTestPath": "job-tracker-ui/src/profile-page.test.tsx",
+ "path": ".artifacts/phase7/p7-02/career-final/tests/job-tracker-ui/src/profile-page.test.tsx",
+ "sha256": "2f3f2a583962351be93c4b1dcf08ec8db80b2eed87b5684b10ddbdb6a5c422a7",
+ "bytes": 29406,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ ],
+ "historicalSourceApplicability": "Original sourceFiles/sourceSha256Lf identify this frozen Career slice. Verify future source identities against sourceSnapshots canonicalLfSha256 or the eventual slice commit, not a later workspace. Measured hashes and original digest order remain unchanged.",
+ "staticExportSnapshot": {
+ "root": ".artifacts/phase7/p7-02/career-final/export",
+ "qualification": "Exact raw measured files from job-tracker-ui/out; original export digest paths/algorithm unchanged"
+ }
+ },
+ "environment": {
+ "appliedRunnerEnvironment": {
+ "NEXT_PUBLIC_API_BASE_URL": "http://localhost:5302/api",
+ "NEXT_TELEMETRY_DISABLED": "1",
+ "DOTNET_ROOT": "C:/Users/Connor/.dotnet",
+ "DOTNET_HOST_PATH": "C:/Users/Connor/.dotnet/dotnet.exe",
+ "PLAYWRIGHT_STATIC_EXPORT": "true",
+ "PLAYWRIGHT_PREBUILT_EXPORT": "true",
+ "PLAYWRIGHT_REUSE_SERVERS": "false",
+ "Workers__SavedJobSearchAlertsEnabled": "false",
+ "CV_FIDELITY_OUTPUT": ".artifacts/phase7/current/ui/fidelity",
+ "CV_SETTINGS_FIDELITY_OUTPUT": ".artifacts/phase7/current/ui/settings-fidelity"
+ },
+ "runner": {
+ "path": ".artifacts/phase7/p7-02/career-final/run-ui.py",
+ "sha256": "b7872368768d8b8e81b531250de524860e780c23b020a0655d31f525e43e7815",
+ "bytes": 4494,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "browserTypeScriptConfig": {
+ "path": ".artifacts/phase7/p7-02/career-final/e2e-tsconfig.json",
+ "sha256": "55fa6fffaed1e76a32657edfffcc501cd8bd87330bda2c3a3944f8f89d4019e2",
+ "bytes": 572,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "commands": {
+ "typecheck": {
+ "record": {
+ "name": "typecheck",
+ "command": [
+ "rtk",
+ "proxy",
+ "npm.cmd",
+ "run",
+ "typecheck"
+ ],
+ "startedUtc": "2026-10-12T00:18:30.013963+00:00",
+ "finishedUtc": "2026-10-12T00:18:39.153178+00:00",
+ "exitCode": 0
+ },
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/typecheck-command.json",
+ "sha256": "1a4236152e5fe91df07c492089027debfacf1544866e84ab020bc6e55c2e3a14",
+ "bytes": 247,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/typecheck.log",
+ "sha256": "89b0ec97b537eca6560c13ca2dfea9e3a97dd1bb35580c4ff39d2462db25e080",
+ "bytes": 148,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "browser-typecheck": {
+ "record": {
+ "name": "browser-typecheck",
+ "command": [
+ "rtk",
+ "proxy",
+ "npm.cmd",
+ "exec",
+ "tsc",
+ "--",
+ "--project",
+ "../.artifacts/phase7/e2e-tsconfig.json",
+ "--noEmit"
+ ],
+ "startedUtc": "2026-10-12T00:18:39.154678+00:00",
+ "finishedUtc": "2026-10-12T00:18:42.791299+00:00",
+ "exitCode": 0
+ },
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/browser-typecheck-command.json",
+ "sha256": "95463d53e197d240fa00cbfda967277a870a2a9f34a323b8e6522b2007c199b7",
+ "bytes": 343,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/browser-typecheck.log",
+ "sha256": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6",
+ "bytes": 78,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "lint": {
+ "record": {
+ "name": "lint",
+ "command": [
+ "rtk",
+ "proxy",
+ "npm.cmd",
+ "run",
+ "lint"
+ ],
+ "startedUtc": "2026-10-12T00:18:42.792291+00:00",
+ "finishedUtc": "2026-10-12T00:18:59.009976+00:00",
+ "exitCode": 0
+ },
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/lint-command.json",
+ "sha256": "27e1db6dfca0f79240baf9d3e37e19afc06f6e41fd2b56c13f8ab7d33938250b",
+ "bytes": 237,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/lint.log",
+ "sha256": "b040dbeca9b4adb3f6f4c25ac49de0d37e921375b2d9b57e87b542a10f599913",
+ "bytes": 136,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "build": {
+ "record": {
+ "name": "build",
+ "command": [
+ "rtk",
+ "proxy",
+ "npm.cmd",
+ "run",
+ "build"
+ ],
+ "startedUtc": "2026-10-12T00:18:59.012500+00:00",
+ "finishedUtc": "2026-10-12T00:19:05.740903+00:00",
+ "exitCode": 0
+ },
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/build-command.json",
+ "sha256": "e2ef838f050551c0b6939c161ed513ac818f1559e346fa204bb6cd8a44624793",
+ "bytes": 239,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/build.log",
+ "sha256": "702b79054382d442670530e29fbb785f3e59905f364e297e8aa18032e6acbbc7",
+ "bytes": 670,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ }
+ },
+ "affectedFrontend": {
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-cancel-green-20261012T001337Z.json",
+ "sha256": "9d69964106739a0e92f0782a016585574cd4d263d79f392693a2edd47860a8a2",
+ "bytes": 19284,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "startedUnixMs": 1791764018196,
+ "passed": 46,
+ "failed": 0,
+ "pending": 0,
+ "total": 46,
+ "suites": 3,
+ "cases": [
+ {
+ "name": "saves factual evidence with provenance and tags",
+ "status": "passed"
+ },
+ {
+ "name": "pending evidence reads announce loading without claiming an empty bank or allowing a raced save",
+ "status": "passed"
+ },
+ {
+ "name": "failed list reads remain distinct from empty state and retry only GET while preserving the draft",
+ "status": "passed"
+ },
+ {
+ "name": "failed saves retain factual inputs and retry the same explicit save without reloading the list",
+ "status": "passed"
+ },
+ {
+ "name": "a pending save prevents duplicate writes and prevents edits being cleared by the response",
+ "status": "passed"
+ },
+ {
+ "name": "contextual deletion is named and cancellation performs no writes or draft loss",
+ "status": "passed"
+ },
+ {
+ "name": "failed deletion keeps the row and draft, then reconfirms the same delete without list reload",
+ "status": "passed"
+ },
+ {
+ "name": "evidence sections and factual fields have semantic headings and required labels in Bokmål",
+ "status": "passed"
+ },
+ {
+ "name": "meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]",
+ "status": "passed"
+ },
+ {
+ "name": "meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]",
+ "status": "passed"
+ },
+ {
+ "name": "Career Profile section headings describe the visible hierarchy without changing editing fields",
+ "status": "passed"
+ },
+ {
+ "name": "account headings separate identity from security sections",
+ "status": "passed"
+ },
+ {
+ "name": "account CV text status in en does not claim the CV library is empty",
+ "status": "passed"
+ },
+ {
+ "name": "account CV text status in nb does not claim the CV library is empty",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds",
+ "status": "passed"
+ },
+ {
+ "name": "profile page loads persisted structured cv and can re-parse it",
+ "status": "passed"
+ },
+ {
+ "name": "saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)",
+ "status": "passed"
+ },
+ {
+ "name": "editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)",
+ "status": "passed"
+ },
+ {
+ "name": "profile page can reprocess from stored artifact history",
+ "status": "passed"
+ },
+ {
+ "name": "active extraction polling refreshes run status without resetting unsaved career fields",
+ "status": "passed"
+ },
+ {
+ "name": "profile page shows durable CV operation state and retries a failed run",
+ "status": "passed"
+ },
+ {
+ "name": "profile page keeps raw extraction collapsed until expanded",
+ "status": "passed"
+ },
+ {
+ "name": "saving the master profile (career) persists the structured profile via /career/profile",
+ "status": "passed"
+ },
+ {
+ "name": "/career shows the profile completeness overview",
+ "status": "passed"
+ },
+ {
+ "name": "/career profile exposes extraction progress",
+ "status": "passed"
+ },
+ {
+ "name": "/career profile can queue a CV upload without visiting import review first",
+ "status": "passed"
+ },
+ {
+ "name": "/career localizes completeness and review confidence without changing CV data",
+ "status": "passed"
+ },
+ {
+ "name": "/career separates overview, profile and import while preserving unsaved profile edits",
+ "status": "passed"
+ },
+ {
+ "name": "pending CV extraction can be reviewed and applied",
+ "status": "passed"
+ },
+ {
+ "name": "account email changes require a password and use the confirmation flow",
+ "status": "passed"
+ },
+ {
+ "name": "first-run workspace presents concise profile, import, general CV and job-specific actions",
+ "status": "passed"
+ },
+ {
+ "name": "career workspace overview and import state render in Bokmål",
+ "status": "passed"
+ },
+ {
+ "name": "returning workspace shows missing profile information and recent general and job-specific CVs",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the pending_review import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the queued import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the failed import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace represents loading and profile-load errors without inventing status",
+ "status": "passed"
+ },
+ {
+ "name": "a settled failed profile read hides the completeness score and retries only through its existing owner",
+ "status": "passed"
+ },
+ {
+ "name": "an unknown import read cannot claim no imports, completion or first-run guidance",
+ "status": "passed"
+ },
+ {
+ "name": "a failed import read stays unknown and keeps its own retry separate from the profile read",
+ "status": "passed"
+ },
+ {
+ "name": "failed recent-CV reads do not imply first-run and retry the same list without writes",
+ "status": "passed"
+ },
+ {
+ "name": "the parent exposes failed import-read retry without canonical saves or history restores",
+ "status": "passed"
+ },
+ {
+ "name": "overview retry cannot overwrite a dirty canonical draft after a failed source refresh",
+ "status": "passed"
+ },
+ {
+ "name": "visited evidence keeps its draft across sections without an unvisited or repeated list request",
+ "status": "passed"
+ }
+ ]
+ },
+ "affectedCommand": {
+ "record": {
+ "command": [
+ "rtk",
+ "proxy",
+ "npm.cmd",
+ "test",
+ "--",
+ "--runInBand",
+ "--watchAll=false",
+ "--json",
+ "--outputFile=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\unit\\career-cancel-green-20261012T001337Z.json",
+ "src/career-workspace-page.test.tsx",
+ "src/career-evidence.test.tsx",
+ "src/profile-page.test.tsx"
+ ],
+ "startedUtc": "2026-10-12T00:13:37.273731+00:00",
+ "finishedUtc": "2026-10-12T00:13:56.197773+00:00",
+ "exitCode": 0,
+ "counts": {
+ "numPassedTests": 46,
+ "numFailedTests": 0,
+ "numPendingTests": 0,
+ "numTodoTests": 0,
+ "numPassedTestSuites": 3,
+ "numFailedTestSuites": 0
+ }
+ },
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-cancel-green-20261012T001337Z-command.json",
+ "sha256": "a3956d3c3d639366e64a392510ad982afb6af43d569aee448ff590253264ec02",
+ "bytes": 719,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "caseDeltas": {
+ "baselineRaw": {
+ "path": ".artifacts/phase7/p7-01/account-final/runtime/jest.json",
+ "sha256": "319679b96644fbde2ec466faa5055ac3dce0f85053f3c92c7dbfbc9d763186f0",
+ "bytes": 241073,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "files": [
+ {
+ "file": "src/career-evidence.test.tsx",
+ "prior": 1,
+ "current": 8,
+ "added": [
+ "a pending save prevents duplicate writes and prevents edits being cleared by the response",
+ "contextual deletion is named and cancellation performs no writes or draft loss",
+ "evidence sections and factual fields have semantic headings and required labels in Bokmål",
+ "failed deletion keeps the row and draft, then reconfirms the same delete without list reload",
+ "failed list reads remain distinct from empty state and retry only GET while preserving the draft",
+ "failed saves retain factual inputs and retry the same explicit save without reloading the list",
+ "pending evidence reads announce loading without claiming an empty bank or allowing a raced save"
+ ],
+ "removedOrRenamed": []
+ },
+ {
+ "file": "src/career-workspace-page.test.tsx",
+ "prior": 7,
+ "current": 14,
+ "added": [
+ "a failed import read stays unknown and keeps its own retry separate from the profile read",
+ "a settled failed profile read hides the completeness score and retries only through its existing owner",
+ "an unknown import read cannot claim no imports, completion or first-run guidance",
+ "failed recent-CV reads do not imply first-run and retry the same list without writes",
+ "overview retry cannot overwrite a dirty canonical draft after a failed source refresh",
+ "the parent exposes failed import-read retry without canonical saves or history restores",
+ "visited evidence keeps its draft across sections without an unvisited or repeated list request"
+ ],
+ "removedOrRenamed": []
+ },
+ {
+ "file": "src/profile-page.test.tsx",
+ "prior": 24,
+ "current": 24,
+ "added": [],
+ "removedOrRenamed": []
+ }
+ ],
+ "netAdded": 14
+ },
+ "native": {
+ "command": {
+ "name": "career",
+ "command": [
+ "rtk",
+ "proxy",
+ "node",
+ "node_modules/@playwright/test/cli.js",
+ "test",
+ "e2e/phase7-career-overview.spec.ts",
+ "--retries=0",
+ "--reporter=list,json",
+ "--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\career-results"
+ ],
+ "startedUtc": "2026-10-12T00:19:05.747473+00:00",
+ "finishedUtc": "2026-10-12T00:20:04.645972+00:00",
+ "exitCode": 0,
+ "stats": {
+ "startTime": "2026-10-12T00:19:06.252Z",
+ "duration": 58323.432,
+ "expected": 14,
+ "skipped": 0,
+ "unexpected": 0,
+ "flaky": 0
+ }
+ },
+ "commandRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career-command.json",
+ "sha256": "f29d3b312ee1faf6277a85b7168783ef86c800959132d407e4c808a12d490701",
+ "bytes": 642,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "reportRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.log",
+ "sha256": "9b9335a1de10142061f9c3e9b2b30ea64366f6e3abbbdb0bf7e0e9af5379f25e",
+ "bytes": 3266,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "stats": {
+ "startTime": "2026-10-12T00:19:06.252Z",
+ "duration": 58323.432,
+ "expected": 14,
+ "skipped": 0,
+ "unexpected": 0,
+ "flaky": 0
+ },
+ "cases": [
+ {
+ "title": "[P7-02 PRES-C04 E09] real SQLite evidence list preserves owner boundaries and existing validation",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 106,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 954
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4319
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4201
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4119
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4029
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4141
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4566
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4727
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4434
+ },
+ {
+ "title": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 191,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 2266
+ },
+ {
+ "title": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 191,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 2224
+ },
+ {
+ "title": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 191,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 2223
+ },
+ {
+ "title": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 229,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 6683
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02] existing raw source copy and history entry remain read-only",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 331,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 2121
+ }
+ ],
+ "attachments": [
+ {
+ "test": "[P7-02 PRES-C04 E09] real SQLite evidence list preserves owner boundaries and existing validation",
+ "name": "native-evidence-owner-provider-contract",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "e4586eb2bd4f1c19fc742080a1f7a375238bc7baebf3516ca7f3c1d59cf6fe27",
+ "bytes": 267
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-320-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "06b9894b40df5b25aadfe47d380ffe29af49c9decc5c9b81a012049f2bd56736",
+ "bytes": 6792
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-320-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "46270abbe1bfd3f1d4c3d75a5feb3f536f31660725a7b00fff3335827e99a24d",
+ "bytes": 86185,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-dark-320-populated-overview.png",
+ "sha256": "46270abbe1bfd3f1d4c3d75a5feb3f536f31660725a7b00fff3335827e99a24d",
+ "bytes": 86185,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-320-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "a2288f6072ead891375093fa002407fce5c056845ea1d5ff99eb4d4c681368af",
+ "bytes": 11676
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-320-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "754ccbb181f061205466b9851ece8f7541ba487f3a1c1cfa4944316802775e10",
+ "bytes": 79872,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-dark-320-long-evidence.png",
+ "sha256": "754ccbb181f061205466b9851ece8f7541ba487f3a1c1cfa4944316802775e10",
+ "bytes": 79872,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-360-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "4967c67ec92d240fa20f82b2bc41c34fcb2e55d5b511e033f45f6407981a06b1",
+ "bytes": 6679
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-360-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "064f05f5bfaaebeeb314ff4f26fd7bd53c879d4f95377cd41520ef87520f73d9",
+ "bytes": 84594,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-360-populated-overview.png",
+ "sha256": "064f05f5bfaaebeeb314ff4f26fd7bd53c879d4f95377cd41520ef87520f73d9",
+ "bytes": 84594,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-360-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "7ecb060300192a0c5b9827b24ebab835fbdd5648215cf9eaa9aea4bc0b37fb4d",
+ "bytes": 11585
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-360-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "8090f7c66c4372689ee7e349bc37ba394d7e75addc689458fbd2d8e3924f7cc0",
+ "bytes": 70567,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-360-long-evidence.png",
+ "sha256": "8090f7c66c4372689ee7e349bc37ba394d7e75addc689458fbd2d8e3924f7cc0",
+ "bytes": 70567,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-390-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "c2c8a7cdb3177360635095b74bcd6cf5e881448133b357f38da9b8b8100461c5",
+ "bytes": 6796
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-390-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "0ddf1641e174ed0123e6a6a368cd4ddae02b7e16dd53088a28f7c74445cd79df",
+ "bytes": 86576,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-light-390-populated-overview.png",
+ "sha256": "0ddf1641e174ed0123e6a6a368cd4ddae02b7e16dd53088a28f7c74445cd79df",
+ "bytes": 86576,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-390-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "d73b176c5a2750dd55ea1ddbe49ac868c6c38ac07b9924af78c11b096bb1ea6d",
+ "bytes": 11677
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-390-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "05abccf36e7a8bf3a2ae5a82d34b59f1b68b9dd4f5b4d384101a04b0688b47f2",
+ "bytes": 71192,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-light-390-long-evidence.png",
+ "sha256": "05abccf36e7a8bf3a2ae5a82d34b59f1b68b9dd4f5b4d384101a04b0688b47f2",
+ "bytes": 71192,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-768-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "79e22aff21539affadbdfeb0a37132d4624bae7bc6550eaceccd4f4b42b60b0e",
+ "bytes": 5998
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-768-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "20258c36363096d061444d6cdae229160244463fc2de75992348d3c006b56394",
+ "bytes": 94494,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-768-populated-overview.png",
+ "sha256": "20258c36363096d061444d6cdae229160244463fc2de75992348d3c006b56394",
+ "bytes": 94494,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-768-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "89d50b7618ebb51a50935bbbfc564f70b252b930e8974eea64ab72ff04a77df3",
+ "bytes": 10419
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-768-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "4cc481d28dfb9d0439dc6900ba57541ee663ebd12136b323b18a083dc8a82a71",
+ "bytes": 83945,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-768-long-evidence.png",
+ "sha256": "4cc481d28dfb9d0439dc6900ba57541ee663ebd12136b323b18a083dc8a82a71",
+ "bytes": 83945,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-1024-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "9416274400aef9ef072254ba01914c44daa7324f876cd7b07273a3c62e485003",
+ "bytes": 6194
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-1024-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "42cffa1a683373a40e66d11bdfb373e8bbf2528aecbebe9fc84f454ccd91fd49",
+ "bytes": 119730,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-dark-1024-populated-overview.png",
+ "sha256": "42cffa1a683373a40e66d11bdfb373e8bbf2528aecbebe9fc84f454ccd91fd49",
+ "bytes": 119730,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-1024-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ab06eb0e4f2ed956cd36c9328f2dc64d096e623d9ec076204207137fb99e12fa",
+ "bytes": 10595
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-1024-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "e2b6fcbecf8ee35f3bf1d0fdd461901f466e1702f20d674641948131cd17cc8c",
+ "bytes": 110805,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-dark-1024-long-evidence.png",
+ "sha256": "e2b6fcbecf8ee35f3bf1d0fdd461901f466e1702f20d674641948131cd17cc8c",
+ "bytes": 110805,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-1280-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "1147566317d407fa4f55a29daebd710a06b5e2ed6919d694706ded2f7d4f9add",
+ "bytes": 6086
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-1280-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "c9d2e956cf79df51dff4fb3ca72dff44054e23d0bdce85ba220f37942ccf25b7",
+ "bytes": 103025,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-1280-populated-overview.png",
+ "sha256": "c9d2e956cf79df51dff4fb3ca72dff44054e23d0bdce85ba220f37942ccf25b7",
+ "bytes": 103025,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-1280-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "09f2a02a6783ff589b05c4221cf3fdb73ed096ad649bdeb9514797224f9420ef",
+ "bytes": 10509
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-1280-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "cd31e56c9c153784f2e5d65e5df49b075926a357d751387f5671a2df034960fd",
+ "bytes": 96501,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-1280-long-evidence.png",
+ "sha256": "cd31e56c9c153784f2e5d65e5df49b075926a357d751387f5671a2df034960fd",
+ "bytes": 96501,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-1440-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "b17107c4aa02114c5f96d80b4e195a207b17cce2462cf047226de37c5baf81d6",
+ "bytes": 6195
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-1440-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "760dd39a7567e0bf895d203402c34aa3cc7f4994a677aac2f15644df1e0a0534",
+ "bytes": 116544,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-light-1440-populated-overview.png",
+ "sha256": "760dd39a7567e0bf895d203402c34aa3cc7f4994a677aac2f15644df1e0a0534",
+ "bytes": 116544,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-1440-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "140bdf86a0e3d8d95f4b409da4474b1d27942ea8899c11ee19a2e1601be94415",
+ "bytes": 15841
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-1440-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "0f35646d6f793bac5556de7906d52be2a7dbc710267141615c969337572b2dd4",
+ "bytes": 247294,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-light-1440-long-evidence.png",
+ "sha256": "0f35646d6f793bac5556de7906d52be2a7dbc710267141615c969337572b2dd4",
+ "bytes": 247294,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-1920-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "2a5f1935c4e8ddbd47be73964cb490dc32f3087d7230f7386ba6a7d469045d17",
+ "bytes": 6040
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-1920-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "6a3abb5a7860d4cabd79155b6b14f31745b11460c738c6cc21e72c50dc157381",
+ "bytes": 120746,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-1920-populated-overview.png",
+ "sha256": "6a3abb5a7860d4cabd79155b6b14f31745b11460c738c6cc21e72c50dc157381",
+ "bytes": 120746,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-1920-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ff66cdef6a1c1427213380396fe09f603bdcdb5478cef1df1dd9dde33bb055e9",
+ "bytes": 10463
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-1920-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "8379b4b53169217e7dec875f85336b78ba6a472bf99177a7fdeec61d7b7afad7",
+ "bytes": 114192,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-1920-long-evidence.png",
+ "sha256": "8379b4b53169217e7dec875f85336b78ba6a472bf99177a7fdeec61d7b7afad7",
+ "bytes": 114192,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-profile-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "416a3fdf25bfe9631a29819d3060060a27811f3fbfb365ca0e6f43697508f663",
+ "bytes": 5945
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-profile",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "91f4453c838cd8baafc3044df89894dd153557d1c4c32d45235fd4211c6a5f10",
+ "bytes": 73791,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-390-unavailable-profile.png",
+ "sha256": "91f4453c838cd8baafc3044df89894dd153557d1c4c32d45235fd4211c6a5f10",
+ "bytes": 73791,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-runs-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "3395ba3449e5cb433bcce98ca25b44da3b82274b72f752130471522eb0f1c4e2",
+ "bytes": 6109
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-runs",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "bb4505751989734b278d1d42440d7f4f2c306b7dcf7377e68a03e257ed36be1f",
+ "bytes": 74199,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-390-unavailable-runs.png",
+ "sha256": "bb4505751989734b278d1d42440d7f4f2c306b7dcf7377e68a03e257ed36be1f",
+ "bytes": 74199,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-variants-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "bd70a06a950d5a9727cdcc47f38c6523848ff3b20c1c81feb898069920a7235f",
+ "bytes": 6107
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-variants",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "aac568dda7beb3f13b284d196d6a3686970b2c03bde92189781e4198149bf769",
+ "bytes": 75557,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-390-unavailable-variants.png",
+ "sha256": "aac568dda7beb3f13b284d196d6a3686970b2c03bde92189781e4198149bf769",
+ "bytes": 75557,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "p7-career-en-light-390-pending-evidence-read-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "1cf61579d7e4b068a6637706d5c9c10ceee13b4d098768bc4cc6115b289b4b02",
+ "bytes": 9069
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "p7-career-en-light-390-pending-evidence-read",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "1708d2dcac2b554c77b840711183ede606958ab273e22861f9989f4d9d659449",
+ "bytes": 46901,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-390-pending-evidence-read.png",
+ "sha256": "1708d2dcac2b554c77b840711183ede606958ab273e22861f9989f4d9d659449",
+ "bytes": 46901,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "3c7cdfe93e72fecd2bd2e127bad501f151c44abbe5e005113f93b7270ea01c64",
+ "bytes": 10008
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "p7-career-en-light-390-failed-save-retained-draft",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ecae840ca920c3b453e5fb6e1694bf06a4422dcec0f759999388a59a2c019d51",
+ "bytes": 50408,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-390-failed-save-retained-draft.png",
+ "sha256": "ecae840ca920c3b453e5fb6e1694bf06a4422dcec0f759999388a59a2c019d51",
+ "bytes": 50408,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ac1472ace969c0ff3d8c3890fb77df067a0eda0c151fb8b7a5947e5f3c5bd75d",
+ "bytes": 10190
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "p7-career-en-light-390-failed-delete-retained-row",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "96e3c43398ff9bc99d16f874773fa454c27d736a3d724e4beefc4ecbd38fa2b1",
+ "bytes": 53220,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-390-failed-delete-retained-row.png",
+ "sha256": "96e3c43398ff9bc99d16f874773fa454c27d736a3d724e4beefc4ecbd38fa2b1",
+ "bytes": 53220,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02] existing raw source copy and history entry remain read-only",
+ "name": "native-clipboard-line-endings",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "cab6d7eba877f7301a6a35f692c9f7bf7b68c2561fd38645f2a307ff89ca0ff8",
+ "bytes": 707
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02] existing raw source copy and history entry remain read-only",
+ "name": "native-career-source-history-entry",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "b0830e51ce1705e603e9481594f0a8909991db954a5779c1d2f0ed292d39c769",
+ "bytes": 296
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ }
+ ],
+ "reportErrors": [],
+ "configuration": {
+ "version": "1.62.1",
+ "workers": 1,
+ "projects": [
+ {
+ "name": "chromium",
+ "retries": 0
+ }
+ ]
+ },
+ "accessibility": {
+ "scans": [
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "06b9894b40df5b25aadfe47d380ffe29af49c9decc5c9b81a012049f2bd56736",
+ "bytes": 6792
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "dark",
+ "width": 320,
+ "height": 844
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 320,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "a2288f6072ead891375093fa002407fce5c056845ea1d5ff99eb4d4c681368af",
+ "bytes": 11676
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "dark",
+ "width": 320,
+ "height": 844
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 320,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "4967c67ec92d240fa20f82b2bc41c34fcb2e55d5b511e033f45f6407981a06b1",
+ "bytes": 6679
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 360,
+ "height": 800
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 360,
+ "height": 800,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "7ecb060300192a0c5b9827b24ebab835fbdd5648215cf9eaa9aea4bc0b37fb4d",
+ "bytes": 11585
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 360,
+ "height": 800
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 360,
+ "height": 800,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "c2c8a7cdb3177360635095b74bcd6cf5e881448133b357f38da9b8b8100461c5",
+ "bytes": 6796
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "light",
+ "width": 390,
+ "height": 844
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "d73b176c5a2750dd55ea1ddbe49ac868c6c38ac07b9924af78c11b096bb1ea6d",
+ "bytes": 11677
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "light",
+ "width": 390,
+ "height": 844
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "79e22aff21539affadbdfeb0a37132d4624bae7bc6550eaceccd4f4b42b60b0e",
+ "bytes": 5998
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 768,
+ "height": 1024
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 768,
+ "height": 1024,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "89d50b7618ebb51a50935bbbfc564f70b252b930e8974eea64ab72ff04a77df3",
+ "bytes": 10419
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 768,
+ "height": 1024
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 768,
+ "height": 1024,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "9416274400aef9ef072254ba01914c44daa7324f876cd7b07273a3c62e485003",
+ "bytes": 6194
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "dark",
+ "width": 1024,
+ "height": 768
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 1024,
+ "height": 768,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ab06eb0e4f2ed956cd36c9328f2dc64d096e623d9ec076204207137fb99e12fa",
+ "bytes": 10595
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "dark",
+ "width": 1024,
+ "height": 768
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 1024,
+ "height": 768,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "1147566317d407fa4f55a29daebd710a06b5e2ed6919d694706ded2f7d4f9add",
+ "bytes": 6086
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 1280,
+ "height": 320
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 1280,
+ "height": 320,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "09f2a02a6783ff589b05c4221cf3fdb73ed096ad649bdeb9514797224f9420ef",
+ "bytes": 10509
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 1280,
+ "height": 320
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 1280,
+ "height": 320,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "b17107c4aa02114c5f96d80b4e195a207b17cce2462cf047226de37c5baf81d6",
+ "bytes": 6195
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "light",
+ "width": 1440,
+ "height": 900
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 1440,
+ "height": 900,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "140bdf86a0e3d8d95f4b409da4474b1d27942ea8899c11ee19a2e1601be94415",
+ "bytes": 15841
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "light",
+ "width": 1440,
+ "height": 900
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 1440,
+ "height": 900,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "2a5f1935c4e8ddbd47be73964cb490dc32f3087d7230f7386ba6a7d469045d17",
+ "bytes": 6040
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 1920,
+ "height": 1080
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 1920,
+ "height": 1080,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ff66cdef6a1c1427213380396fe09f603bdcdb5478cef1df1dd9dde33bb055e9",
+ "bytes": 10463
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 1920,
+ "height": 1080
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 1920,
+ "height": 1080,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-profile-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "416a3fdf25bfe9631a29819d3060060a27811f3fbfb365ca0e6f43697508f663",
+ "bytes": 5945
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 390,
+ "height": 844
+ },
+ "state": "unavailable-profile",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-runs-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "3395ba3449e5cb433bcce98ca25b44da3b82274b72f752130471522eb0f1c4e2",
+ "bytes": 6109
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 390,
+ "height": 844
+ },
+ "state": "unavailable-runs",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-variants-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "bd70a06a950d5a9727cdcc47f38c6523848ff3b20c1c81feb898069920a7235f",
+ "bytes": 6107
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 390,
+ "height": 844
+ },
+ "state": "unavailable-variants",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-pending-evidence-read-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "1cf61579d7e4b068a6637706d5c9c10ceee13b4d098768bc4cc6115b289b4b02",
+ "bytes": 9069
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 390,
+ "height": 844
+ },
+ "state": "pending-evidence-read",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "3c7cdfe93e72fecd2bd2e127bad501f151c44abbe5e005113f93b7270ea01c64",
+ "bytes": 10008
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 390,
+ "height": 844
+ },
+ "state": "failed-save-retained-draft",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ac1472ace969c0ff3d8c3890fb77df067a0eda0c151fb8b7a5947e5f3c5bd75d",
+ "bytes": 10190
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 390,
+ "height": 844
+ },
+ "state": "failed-delete-retained-row",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ }
+ ],
+ "ruleNodeCounts": [
+ {
+ "kind": "incomplete",
+ "rule": "aria-hidden-focus",
+ "nodes": 3
+ },
+ {
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "nodes": 96
+ }
+ ],
+ "contexts": [
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "aria-hidden-focus",
+ "target": [
+ "#menu-"
+ ],
+ "checks": [
+ {
+ "vector": "all",
+ "id": "focusable-modal-open",
+ "message": "Check that focusable elements are not tabbable in the current state",
+ "messageKey": null
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".css-1f6076n > .MuiSelect-select.MuiSelect-outlined.css-1ehla7j"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1h_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1m_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "aria-hidden-focus",
+ "target": [
+ "#menu-"
+ ],
+ "checks": [
+ {
+ "vector": "all",
+ "id": "focusable-modal-open",
+ "message": "Check that focusable elements are not tabbable in the current state",
+ "messageKey": null
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".css-1f6076n > .MuiSelect-select.MuiSelect-outlined.css-1ehla7j"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1h_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1m_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "aria-hidden-focus",
+ "target": [
+ "#menu-"
+ ],
+ "checks": [
+ {
+ "vector": "all",
+ "id": "focusable-modal-open",
+ "message": "Check that focusable elements are not tabbable in the current state",
+ "messageKey": null
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".css-1f6076n > .MuiSelect-select.MuiSelect-outlined.css-1ehla7j"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1h_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1m_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1h_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1m_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1g_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1i_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1g_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1i_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1g_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1i_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1g_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1i_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-profile-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-profile-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-runs-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-runs-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-variants-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-variants-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-pending-evidence-read-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-pending-evidence-read-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "div[aria-labelledby=\"career-workspace-section-label\"]"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-pending-evidence-read-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_t_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-pending-evidence-read-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_v_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-pending-evidence-read-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_10_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-pending-evidence-read-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_11_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-pending-evidence-read-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_12_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "div[aria-labelledby=\"career-workspace-section-label\"]"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_t_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_v_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_10_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_11_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_12_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiButton-sizeMedium"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "div[aria-labelledby=\"career-workspace-section-label\"]"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_t_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_v_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_10_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_11_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_12_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-delete-retained-row-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiButton-textError"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ }
+ ],
+ "triage": {
+ "scans": 22,
+ "violationNodes": 0,
+ "incompleteNodes": 99,
+ "colorContrast": {
+ "backgroundOverlap": 74,
+ "invisibleBadgeShortText": 22
+ },
+ "hiddenFocus": {
+ "occurrences": 3,
+ "target": "#menu-",
+ "context": "Retained hidden MUI section-select portal in320/360/390 evidence states; actual section selection/subsequent form keyboard pass. Contextual M09/M11 remains required."
+ },
+ "qualification": "All findings retained; overlap/short text are incomplete measurement, not computed contrast passes. Actual reader/contrast/forced-colors/device conformance NOT VERIFIED."
+ },
+ "qualification": "Every rule/node occurrence summarized; full HTML/data/relatedNodes/check vectors remain in exact raw report and identified audit attachment hashes. No conformance claim."
+ }
+ },
+ "nativeAttempts": [
+ {
+ "command": {
+ "name": "career",
+ "command": [
+ "rtk",
+ "proxy",
+ "node",
+ "node_modules/@playwright/test/cli.js",
+ "test",
+ "e2e/phase7-career-overview.spec.ts",
+ "--retries=0",
+ "--reporter=list,json",
+ "--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\career-results"
+ ],
+ "startedUtc": "2026-10-12T00:10:38.836345+00:00",
+ "finishedUtc": "2026-10-12T00:11:40.317358+00:00",
+ "exitCode": 1,
+ "failureLog": "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\career.log",
+ "stats": {
+ "startTime": "2026-10-12T00:10:39.336Z",
+ "duration": 60927.596999999994,
+ "expected": 12,
+ "skipped": 0,
+ "unexpected": 2,
+ "flaky": 0
+ }
+ },
+ "commandRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career-command.json",
+ "sha256": "ca5c0b2fb0c7245fea18cafc8b47b12ed1e2fd32d77bced625e58046c0a7e6a8",
+ "bytes": 759,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "reportRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career.json",
+ "sha256": "46e36affe573e409d788015d3b2b32682fe6e2df95126c3c63f82854605fb06f",
+ "bytes": 2883240,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career.log",
+ "sha256": "88daf8454903dc8fbde8af013e023c09e1a0e5e27457b1d68d3b285ecb12711c",
+ "bytes": 9916,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "stats": {
+ "startTime": "2026-10-12T00:10:39.336Z",
+ "duration": 60927.596999999994,
+ "expected": 12,
+ "skipped": 0,
+ "unexpected": 2,
+ "flaky": 0
+ },
+ "cases": [
+ {
+ "title": "[P7-02 PRES-C04 E09] real SQLite evidence list preserves owner boundaries and existing validation",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 106,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 949
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4375
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4163
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 3782
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4044
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4194
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4364
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4572
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 139,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 4472
+ },
+ {
+ "title": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 191,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 2258
+ },
+ {
+ "title": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 191,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 2226
+ },
+ {
+ "title": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 191,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 2239
+ },
+ {
+ "title": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 229,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "failed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ [
+ {
+ "location": {
+ "file": "E:\\Storage\\Projects\\Active\\Job tracker\\job-tracker-ui\\e2e\\phase7-career-overview.spec.ts",
+ "column": 24,
+ "line": 302
+ },
+ "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeFocused\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByRole('article').filter({ hasText: 'Reviewed project — æøå' }).getByRole('button')\nExpected: focused\nReceived: inactive\nTimeout: 5000ms\n\nCall log:\n\u001b[2m - Expect \"toBeFocused\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByRole('article').filter({ hasText: 'Reviewed project — æøå' }).getByRole('button')\u001b[22m\n\u001b[2m 11 × locator resolved to \u001b[22m\n\u001b[2m - unexpected value \"inactive\"\u001b[22m\n\n\n 300 | await expect(dialog).toBeVisible();\n 301 | await dialog.getByRole('button', { name: t.cancel, exact: true }).click();\n> 302 | await expect(remove).toBeFocused();\n | ^\n 303 | expect(await (await page.request.get(`${apiUrl}/career/evidence`)).json()).toEqual([item]);\n 304 | await remove.click();\n 305 | const deleted = page.waitForResponse(response => response.url() === `${apiUrl}/career/evidence/${item.id}` && response.request().method() === 'DELETE');\n at E:\\Storage\\Projects\\Active\\Job tracker\\job-tracker-ui\\e2e\\phase7-career-overview.spec.ts:302:24"
+ }
+ ]
+ ],
+ "durationMs": 9034
+ },
+ {
+ "title": "[P7-02 PRES-C01 C02] existing raw source copy and history entry remain read-only",
+ "file": "phase7-career-overview.spec.ts",
+ "line": 315,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "failed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ [
+ {
+ "location": {
+ "file": "E:\\Storage\\Projects\\Active\\Job tracker\\job-tracker-ui\\e2e\\phase7-career-overview.spec.ts",
+ "column": 69,
+ "line": 329
+ },
+ "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\n\u001b[32m- Expected - 2\u001b[39m\n\u001b[31m+ Received + 2\u001b[39m\n\n\u001b[32m- Exact raw source — æøå\u001b[39m\n\u001b[31m+ Exact raw source — æøå\u001b[7m\r\u001b[27m\u001b[39m\n\u001b[32m- A supported owner claim.\u001b[39m\n\u001b[31m+ A supported owner claim.\u001b[7m\r\u001b[27m\u001b[39m\n\u001b[2m ↵\u001b[22m\n\n 327 | await page.getByRole('button', { name: new RegExp(t.profileCvRawPanelTitle) }).click();\n 328 | await page.getByRole('button', { name: t.profileCopyCvText, exact: true }).click();\n> 329 | expect(await page.evaluate(() => navigator.clipboard.readText())).toBe(raw);\n | ^\n 330 | await navigateSection(page, 'en', 'profile');\n 331 | const label = t.profileCvVersionHistory.replace('{count}', String(history.length));\n 332 | await page.getByRole('button', { name: label, exact: true }).click();\n at E:\\Storage\\Projects\\Active\\Job tracker\\job-tracker-ui\\e2e\\phase7-career-overview.spec.ts:329:69"
+ }
+ ]
+ ],
+ "durationMs": 2063
+ }
+ ],
+ "attachments": [
+ {
+ "test": "[P7-02 PRES-C04 E09] real SQLite evidence list preserves owner boundaries and existing validation",
+ "name": "native-evidence-owner-provider-contract",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "e4586eb2bd4f1c19fc742080a1f7a375238bc7baebf3516ca7f3c1d59cf6fe27",
+ "bytes": 267
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-320-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "06b9894b40df5b25aadfe47d380ffe29af49c9decc5c9b81a012049f2bd56736",
+ "bytes": 6792
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-320-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "46270abbe1bfd3f1d4c3d75a5feb3f536f31660725a7b00fff3335827e99a24d",
+ "bytes": 86185
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-320-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "a2288f6072ead891375093fa002407fce5c056845ea1d5ff99eb4d4c681368af",
+ "bytes": 11676
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-320-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "754ccbb181f061205466b9851ece8f7541ba487f3a1c1cfa4944316802775e10",
+ "bytes": 79872
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-360-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "4967c67ec92d240fa20f82b2bc41c34fcb2e55d5b511e033f45f6407981a06b1",
+ "bytes": 6679
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-360-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "064f05f5bfaaebeeb314ff4f26fd7bd53c879d4f95377cd41520ef87520f73d9",
+ "bytes": 84594
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-360-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "7ecb060300192a0c5b9827b24ebab835fbdd5648215cf9eaa9aea4bc0b37fb4d",
+ "bytes": 11585
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-360-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "8090f7c66c4372689ee7e349bc37ba394d7e75addc689458fbd2d8e3924f7cc0",
+ "bytes": 70567
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-390-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "c2c8a7cdb3177360635095b74bcd6cf5e881448133b357f38da9b8b8100461c5",
+ "bytes": 6796
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-390-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "0ddf1641e174ed0123e6a6a368cd4ddae02b7e16dd53088a28f7c74445cd79df",
+ "bytes": 86576
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-390-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "d73b176c5a2750dd55ea1ddbe49ac868c6c38ac07b9924af78c11b096bb1ea6d",
+ "bytes": 11677
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-390-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "05abccf36e7a8bf3a2ae5a82d34b59f1b68b9dd4f5b4d384101a04b0688b47f2",
+ "bytes": 71192
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-768-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "79e22aff21539affadbdfeb0a37132d4624bae7bc6550eaceccd4f4b42b60b0e",
+ "bytes": 5998
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-768-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "20258c36363096d061444d6cdae229160244463fc2de75992348d3c006b56394",
+ "bytes": 94494
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-768-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "89d50b7618ebb51a50935bbbfc564f70b252b930e8974eea64ab72ff04a77df3",
+ "bytes": 10419
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-768-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "4cc481d28dfb9d0439dc6900ba57541ee663ebd12136b323b18a083dc8a82a71",
+ "bytes": 83945
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-1024-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "9416274400aef9ef072254ba01914c44daa7324f876cd7b07273a3c62e485003",
+ "bytes": 6194
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-1024-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "8f14239e54330b758e44f51375443bc195d6a224bc1ad8060e2c01b1fb3fd882",
+ "bytes": 119929
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-1024-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ab06eb0e4f2ed956cd36c9328f2dc64d096e623d9ec076204207137fb99e12fa",
+ "bytes": 10595
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-dark-1024-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "2e36dde54994e305d1b5922b25a67dfe9f33154a2ff20ee9509357d28673393f",
+ "bytes": 111033
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-1280-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "1147566317d407fa4f55a29daebd710a06b5e2ed6919d694706ded2f7d4f9add",
+ "bytes": 6086
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-1280-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "79fbe45c8baa5055c83064c784a6d6c57cf8cdc6aadf08abf39999803f7b6f66",
+ "bytes": 103077
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-1280-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "09f2a02a6783ff589b05c4221cf3fdb73ed096ad649bdeb9514797224f9420ef",
+ "bytes": 10509
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-light-1280-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "6d9214dac60776c42d1925ac1f774c56a6ab1172b914664985009c47af0cf365",
+ "bytes": 96543
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-1440-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "b17107c4aa02114c5f96d80b4e195a207b17cce2462cf047226de37c5baf81d6",
+ "bytes": 6195
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-1440-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "397ad0abbcdaf8e71a0a045e0bf87ef6986ae480489690a4635b2fa8d40db52b",
+ "bytes": 116772
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-1440-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "140bdf86a0e3d8d95f4b409da4474b1d27942ea8899c11ee19a2e1601be94415",
+ "bytes": 15841
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-nb-light-1440-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "24ccdd435747dc0e89910fd583732347b1bb9daaf816adcef82c94718ae8d8a2",
+ "bytes": 247513
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-1920-populated-overview-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "2a5f1935c4e8ddbd47be73964cb490dc32f3087d7230f7386ba6a7d469045d17",
+ "bytes": 6040
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-1920-populated-overview",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "171b8cca708f6c15c1cd13266228f9d26a5741b44072d79b863551f9e0cdf935",
+ "bytes": 120978
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-1920-long-evidence-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ff66cdef6a1c1427213380396fe09f603bdcdb5478cef1df1dd9dde33bb055e9",
+ "bytes": 10463
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "name": "p7-career-en-dark-1920-long-evidence",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "5d9a195c81528a95331310219e9494b9a0459186990c974a884f1fc98f5210e8",
+ "bytes": 114417
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-profile-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "416a3fdf25bfe9631a29819d3060060a27811f3fbfb365ca0e6f43697508f663",
+ "bytes": 5945
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-profile",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "91f4453c838cd8baafc3044df89894dd153557d1c4c32d45235fd4211c6a5f10",
+ "bytes": 73791
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-runs-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "3395ba3449e5cb433bcce98ca25b44da3b82274b72f752130471522eb0f1c4e2",
+ "bytes": 6109
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-runs",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "bb4505751989734b278d1d42440d7f4f2c306b7dcf7377e68a03e257ed36be1f",
+ "bytes": 74199
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-variants-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "bd70a06a950d5a9727cdcc47f38c6523848ff3b20c1c81feb898069920a7235f",
+ "bytes": 6107
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "name": "p7-career-en-dark-390-unavailable-variants",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "aac568dda7beb3f13b284d196d6a3686970b2c03bde92189781e4198149bf769",
+ "bytes": 75557
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "55f6995b78a0185a3151c93cd7973a7d8a7f177303619fe8a2d33bc19a002bc2",
+ "bytes": 9974
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "p7-career-en-light-390-failed-save-retained-draft",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ecae840ca920c3b453e5fb6e1694bf06a4422dcec0f759999388a59a2c019d51",
+ "bytes": 50408
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "screenshot",
+ "contentType": "image/png",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career-results/phase7-career-overview--P7-188cd-llation-and-actual-deletion-chromium/test-failed-1.png",
+ "sha256": "5fa81920eca34286d7d355abba50ff451b573f9b6e0f37e63fda8914a96910ff",
+ "bytes": 36021,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "error-context",
+ "contentType": "text/markdown",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career-results/phase7-career-overview--P7-188cd-llation-and-actual-deletion-chromium/error-context.md",
+ "sha256": "b3c2ba0db3a2bbe6f6d690866ed9ae7b45ce69b00cf0ac13d56adc3fd5196b87",
+ "bytes": 13115,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "name": "trace",
+ "contentType": "application/zip",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career-results/phase7-career-overview--P7-188cd-llation-and-actual-deletion-chromium/trace.zip",
+ "sha256": "ccd093f90aa50f7bfec621745502117aa103b7084599cf293f2d3ef2e47ea67a",
+ "bytes": 2086391,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02] existing raw source copy and history entry remain read-only",
+ "name": "screenshot",
+ "contentType": "image/png",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career-results/phase7-career-overview--P7-c8232-tory-entry-remain-read-only-chromium/test-failed-1.png",
+ "sha256": "957b8bc69bdfe9fd2d09fbe770b487c5849c535df0832358f18a720c21ca65c4",
+ "bytes": 81911,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02] existing raw source copy and history entry remain read-only",
+ "name": "error-context",
+ "contentType": "text/markdown",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career-results/phase7-career-overview--P7-c8232-tory-entry-remain-read-only-chromium/error-context.md",
+ "sha256": "80ea04640333ef64699c1afc87aa46830b73446c9061c8096c2d62db55b1e103",
+ "bytes": 17646,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02] existing raw source copy and history entry remain read-only",
+ "name": "trace",
+ "contentType": "application/zip",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/attempts/career-001905/career-results/phase7-career-overview--P7-c8232-tory-entry-remain-read-only-chromium/trace.zip",
+ "sha256": "c124e61adcbc7e13e21edde64e5a93bc9461e9e60a342d30450429498e962203",
+ "bytes": 679560,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ }
+ ],
+ "reportErrors": [],
+ "configuration": {
+ "version": "1.62.1",
+ "workers": 1,
+ "projects": [
+ {
+ "name": "chromium",
+ "retries": 0
+ }
+ ]
+ },
+ "accessibility": {
+ "scans": [
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "06b9894b40df5b25aadfe47d380ffe29af49c9decc5c9b81a012049f2bd56736",
+ "bytes": 6792
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "dark",
+ "width": 320,
+ "height": 844
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 320,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "a2288f6072ead891375093fa002407fce5c056845ea1d5ff99eb4d4c681368af",
+ "bytes": 11676
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "dark",
+ "width": 320,
+ "height": 844
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 320,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "4967c67ec92d240fa20f82b2bc41c34fcb2e55d5b511e033f45f6407981a06b1",
+ "bytes": 6679
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 360,
+ "height": 800
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 360,
+ "height": 800,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "7ecb060300192a0c5b9827b24ebab835fbdd5648215cf9eaa9aea4bc0b37fb4d",
+ "bytes": 11585
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 360,
+ "height": 800
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 360,
+ "height": 800,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "c2c8a7cdb3177360635095b74bcd6cf5e881448133b357f38da9b8b8100461c5",
+ "bytes": 6796
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "light",
+ "width": 390,
+ "height": 844
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "d73b176c5a2750dd55ea1ddbe49ac868c6c38ac07b9924af78c11b096bb1ea6d",
+ "bytes": 11677
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "light",
+ "width": 390,
+ "height": 844
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "79e22aff21539affadbdfeb0a37132d4624bae7bc6550eaceccd4f4b42b60b0e",
+ "bytes": 5998
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 768,
+ "height": 1024
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 768,
+ "height": 1024,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "89d50b7618ebb51a50935bbbfc564f70b252b930e8974eea64ab72ff04a77df3",
+ "bytes": 10419
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 768,
+ "height": 1024
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 768,
+ "height": 1024,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "9416274400aef9ef072254ba01914c44daa7324f876cd7b07273a3c62e485003",
+ "bytes": 6194
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "dark",
+ "width": 1024,
+ "height": 768
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 1024,
+ "height": 768,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ab06eb0e4f2ed956cd36c9328f2dc64d096e623d9ec076204207137fb99e12fa",
+ "bytes": 10595
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "dark",
+ "width": 1024,
+ "height": 768
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 1024,
+ "height": 768,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "1147566317d407fa4f55a29daebd710a06b5e2ed6919d694706ded2f7d4f9add",
+ "bytes": 6086
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 1280,
+ "height": 320
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 1280,
+ "height": 320,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "09f2a02a6783ff589b05c4221cf3fdb73ed096ad649bdeb9514797224f9420ef",
+ "bytes": 10509
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 1280,
+ "height": 320
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 1280,
+ "height": 320,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "b17107c4aa02114c5f96d80b4e195a207b17cce2462cf047226de37c5baf81d6",
+ "bytes": 6195
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "light",
+ "width": 1440,
+ "height": 900
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 1440,
+ "height": 900,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "140bdf86a0e3d8d95f4b409da4474b1d27942ea8899c11ee19a2e1601be94415",
+ "bytes": 15841
+ },
+ "sample": {
+ "language": "nb",
+ "theme": "light",
+ "width": 1440,
+ "height": 900
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 1440,
+ "height": 900,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-populated-overview-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "2a5f1935c4e8ddbd47be73964cb490dc32f3087d7230f7386ba6a7d469045d17",
+ "bytes": 6040
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 1920,
+ "height": 1080
+ },
+ "state": "populated-overview",
+ "geometry": {
+ "width": 1920,
+ "height": 1080,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 1
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "ff66cdef6a1c1427213380396fe09f603bdcdb5478cef1df1dd9dde33bb055e9",
+ "bytes": 10463
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 1920,
+ "height": 1080
+ },
+ "state": "long-evidence",
+ "geometry": {
+ "width": 1920,
+ "height": 1080,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 7
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-profile-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "416a3fdf25bfe9631a29819d3060060a27811f3fbfb365ca0e6f43697508f663",
+ "bytes": 5945
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 390,
+ "height": 844
+ },
+ "state": "unavailable-profile",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-runs-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "3395ba3449e5cb433bcce98ca25b44da3b82274b72f752130471522eb0f1c4e2",
+ "bytes": 6109
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 390,
+ "height": 844
+ },
+ "state": "unavailable-runs",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-variants-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "bd70a06a950d5a9727cdcc47f38c6523848ff3b20c1c81feb898069920a7235f",
+ "bytes": 6107
+ },
+ "sample": {
+ "language": "en",
+ "theme": "dark",
+ "width": 390,
+ "height": 844
+ },
+ "state": "unavailable-variants",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 2
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "rawAudit": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "55f6995b78a0185a3151c93cd7973a7d8a7f177303619fe8a2d33bc19a002bc2",
+ "bytes": 9974
+ },
+ "sample": {
+ "language": "en",
+ "theme": "light",
+ "width": 390,
+ "height": 844
+ },
+ "state": "failed-save-retained-draft",
+ "geometry": {
+ "width": 390,
+ "height": 844,
+ "rootOverflow": 0
+ },
+ "violationNodes": 0,
+ "incompleteNodes": 8
+ }
+ ],
+ "ruleNodeCounts": [
+ {
+ "kind": "incomplete",
+ "rule": "aria-hidden-focus",
+ "nodes": 3
+ },
+ {
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "nodes": 81
+ }
+ ],
+ "contexts": [
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "aria-hidden-focus",
+ "target": [
+ "#menu-"
+ ],
+ "checks": [
+ {
+ "vector": "all",
+ "id": "focusable-modal-open",
+ "message": "Check that focusable elements are not tabbable in the current state",
+ "messageKey": null
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".css-1f6076n > .MuiSelect-select.MuiSelect-outlined.css-1ehla7j"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1h_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 320px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-320-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1m_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "aria-hidden-focus",
+ "target": [
+ "#menu-"
+ ],
+ "checks": [
+ {
+ "vector": "all",
+ "id": "focusable-modal-open",
+ "message": "Check that focusable elements are not tabbable in the current state",
+ "messageKey": null
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".css-1f6076n > .MuiSelect-select.MuiSelect-outlined.css-1ehla7j"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1h_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 360px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-360-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1m_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "aria-hidden-focus",
+ "target": [
+ "#menu-"
+ ],
+ "checks": [
+ {
+ "vector": "all",
+ "id": "focusable-modal-open",
+ "message": "Check that focusable elements are not tabbable in the current state",
+ "messageKey": null
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".css-1f6076n > .MuiSelect-select.MuiSelect-outlined.css-1ehla7j"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1h_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 390px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-390-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1m_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1h_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 768px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-768-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1m_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1g_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1i_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/dark 1024px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-dark-1024-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1g_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1i_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/light 1280px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-light-1280-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1g_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1i_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] nb/light 1440px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-nb-light-1440-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-populated-overview-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".Mui-selected.MuiTab-root.MuiTab-textColorPrimary"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1g_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1i_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1j_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1k_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C01 C02 C04 C05 E08 E09] en/dark 1920px overview and factual evidence preserve canonical source and recent CV links",
+ "attachment": "p7-career-en-dark-1920-long-evidence-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_1l_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-profile-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /career/profile stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-profile-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-runs-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /profile-cv/runs stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-runs-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-variants-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C02 E09] unavailable /cv/variants stays unknown and retries its reads without writes or false first-run guidance",
+ "attachment": "p7-career-en-dark-390-unavailable-variants-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiSelect-select"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiBadge-badge"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element content is too short to determine if it is actual text content",
+ "messageKey": "shortTextContent"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "div[aria-labelledby=\"career-workspace-section-label\"]"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_t_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_v_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_10_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_11_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ "#_r_12_"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ },
+ {
+ "test": "[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion",
+ "attachment": "p7-career-en-light-390-failed-save-retained-draft-audit",
+ "kind": "incomplete",
+ "rule": "color-contrast",
+ "target": [
+ ".MuiButton-sizeMedium"
+ ],
+ "checks": [
+ {
+ "vector": "any",
+ "id": "color-contrast",
+ "message": "Element's background color could not be determined because it is overlapped by another element",
+ "messageKey": "bgOverlap"
+ }
+ ]
+ }
+ ],
+ "triage": "PENDING actual contextual review",
+ "qualification": "Every rule/node occurrence summarized; full HTML/data/relatedNodes/check vectors remain in exact raw report and identified audit attachment hashes. No conformance claim."
+ }
+ }
+ ],
+ "unitHistory": [
+ {
+ "result": {
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-cancel-red-20261012T001301Z.json",
+ "sha256": "200b9a5d30c6df0fed9387f5e2b0b7a76beec80b9cf2c456fb316f8940706d14",
+ "bytes": 3997,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "startedUnixMs": 1791763982237,
+ "passed": 8,
+ "failed": 0,
+ "pending": 0,
+ "total": 8,
+ "suites": 1,
+ "cases": [
+ {
+ "name": "saves factual evidence with provenance and tags",
+ "status": "passed"
+ },
+ {
+ "name": "pending evidence reads announce loading without claiming an empty bank or allowing a raced save",
+ "status": "passed"
+ },
+ {
+ "name": "failed list reads remain distinct from empty state and retry only GET while preserving the draft",
+ "status": "passed"
+ },
+ {
+ "name": "failed saves retain factual inputs and retry the same explicit save without reloading the list",
+ "status": "passed"
+ },
+ {
+ "name": "a pending save prevents duplicate writes and prevents edits being cleared by the response",
+ "status": "passed"
+ },
+ {
+ "name": "contextual deletion is named and cancellation performs no writes or draft loss",
+ "status": "passed"
+ },
+ {
+ "name": "failed deletion keeps the row and draft, then reconfirms the same delete without list reload",
+ "status": "passed"
+ },
+ {
+ "name": "evidence sections and factual fields have semantic headings and required labels in Bokmål",
+ "status": "passed"
+ }
+ ]
+ },
+ "commandRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-cancel-red-20261012T001301Z-command.json",
+ "sha256": "e7c5cf375be5b1ec8f4dc3eb6fc9d87042f7c21ac601f06659d0bd6e03885f50",
+ "bytes": 639,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-cancel-red-20261012T001301Z.log",
+ "sha256": "d18214f689d74be4c520b4c101647799f009f6c5bc4b779bc8b551d58dd1a9e5",
+ "bytes": 3760,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "result": {
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-cancel-red-20261012T001324Z.json",
+ "sha256": "8f0c0dd0e048221579ca7a5e97b4b68880893a2f81fc4eda5132da1abe4e1d94",
+ "bytes": 6664,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "startedUnixMs": 1791764005340,
+ "passed": 7,
+ "failed": 1,
+ "pending": 0,
+ "total": 8,
+ "suites": 1,
+ "cases": [
+ {
+ "name": "saves factual evidence with provenance and tags",
+ "status": "passed"
+ },
+ {
+ "name": "pending evidence reads announce loading without claiming an empty bank or allowing a raced save",
+ "status": "passed"
+ },
+ {
+ "name": "failed list reads remain distinct from empty state and retry only GET while preserving the draft",
+ "status": "passed"
+ },
+ {
+ "name": "failed saves retain factual inputs and retry the same explicit save without reloading the list",
+ "status": "passed"
+ },
+ {
+ "name": "a pending save prevents duplicate writes and prevents edits being cleared by the response",
+ "status": "passed"
+ },
+ {
+ "name": "contextual deletion is named and cancellation performs no writes or draft loss",
+ "status": "failed"
+ },
+ {
+ "name": "failed deletion keeps the row and draft, then reconfirms the same delete without list reload",
+ "status": "passed"
+ },
+ {
+ "name": "evidence sections and factual fields have semantic headings and required labels in Bokmål",
+ "status": "passed"
+ }
+ ]
+ },
+ "commandRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-cancel-red-20261012T001324Z-command.json",
+ "sha256": "3f57ee0da4b62f52dacb0e64542c423a0a5b265957820bd2782e69bc3c01aba2",
+ "bytes": 639,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-cancel-red-20261012T001324Z.log",
+ "sha256": "6dfdf34a457035416bd09ea67fae93d435cf3ffe363eeed36aac8a36ab0997a1",
+ "bytes": 5015,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "result": {
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-green-20261012T000751Z.json",
+ "sha256": "312bba894107d3b00ea1f3d5fefa0b595d70a405a66dc68e7c2ab31806ce69ea",
+ "bytes": 40497,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "startedUnixMs": 1791763672737,
+ "passed": 45,
+ "failed": 1,
+ "pending": 0,
+ "total": 46,
+ "suites": 3,
+ "cases": [
+ {
+ "name": "saves factual evidence with provenance and tags",
+ "status": "passed"
+ },
+ {
+ "name": "pending evidence reads announce loading without claiming an empty bank or allowing a raced save",
+ "status": "passed"
+ },
+ {
+ "name": "failed list reads remain distinct from empty state and retry only GET while preserving the draft",
+ "status": "passed"
+ },
+ {
+ "name": "failed saves retain factual inputs and retry the same explicit save without reloading the list",
+ "status": "passed"
+ },
+ {
+ "name": "a pending save prevents duplicate writes and prevents edits being cleared by the response",
+ "status": "passed"
+ },
+ {
+ "name": "contextual deletion is named and cancellation performs no writes or draft loss",
+ "status": "passed"
+ },
+ {
+ "name": "failed deletion keeps the row and draft, then reconfirms the same delete without list reload",
+ "status": "passed"
+ },
+ {
+ "name": "evidence sections and factual fields have semantic headings and required labels in Bokmål",
+ "status": "passed"
+ },
+ {
+ "name": "first-run workspace presents concise profile, import, general CV and job-specific actions",
+ "status": "passed"
+ },
+ {
+ "name": "career workspace overview and import state render in Bokmål",
+ "status": "passed"
+ },
+ {
+ "name": "returning workspace shows missing profile information and recent general and job-specific CVs",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the pending_review import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the queued import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the failed import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace represents loading and profile-load errors without inventing status",
+ "status": "passed"
+ },
+ {
+ "name": "a settled failed profile read hides the completeness score and retries only through its existing owner",
+ "status": "passed"
+ },
+ {
+ "name": "an unknown import read cannot claim no imports, completion or first-run guidance",
+ "status": "passed"
+ },
+ {
+ "name": "a failed import read stays unknown and keeps its own retry separate from the profile read",
+ "status": "passed"
+ },
+ {
+ "name": "failed recent-CV reads do not imply first-run and retry the same list without writes",
+ "status": "passed"
+ },
+ {
+ "name": "the parent exposes failed import-read retry without canonical saves or history restores",
+ "status": "passed"
+ },
+ {
+ "name": "overview retry cannot overwrite a dirty canonical draft after a failed source refresh",
+ "status": "passed"
+ },
+ {
+ "name": "visited evidence keeps its draft across sections without an unvisited or repeated list request",
+ "status": "failed"
+ },
+ {
+ "name": "meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]",
+ "status": "passed"
+ },
+ {
+ "name": "meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]",
+ "status": "passed"
+ },
+ {
+ "name": "Career Profile section headings describe the visible hierarchy without changing editing fields",
+ "status": "passed"
+ },
+ {
+ "name": "account headings separate identity from security sections",
+ "status": "passed"
+ },
+ {
+ "name": "account CV text status in en does not claim the CV library is empty",
+ "status": "passed"
+ },
+ {
+ "name": "account CV text status in nb does not claim the CV library is empty",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds",
+ "status": "passed"
+ },
+ {
+ "name": "profile page loads persisted structured cv and can re-parse it",
+ "status": "passed"
+ },
+ {
+ "name": "saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)",
+ "status": "passed"
+ },
+ {
+ "name": "editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)",
+ "status": "passed"
+ },
+ {
+ "name": "profile page can reprocess from stored artifact history",
+ "status": "passed"
+ },
+ {
+ "name": "active extraction polling refreshes run status without resetting unsaved career fields",
+ "status": "passed"
+ },
+ {
+ "name": "profile page shows durable CV operation state and retries a failed run",
+ "status": "passed"
+ },
+ {
+ "name": "profile page keeps raw extraction collapsed until expanded",
+ "status": "passed"
+ },
+ {
+ "name": "saving the master profile (career) persists the structured profile via /career/profile",
+ "status": "passed"
+ },
+ {
+ "name": "/career shows the profile completeness overview",
+ "status": "passed"
+ },
+ {
+ "name": "/career profile exposes extraction progress",
+ "status": "passed"
+ },
+ {
+ "name": "/career profile can queue a CV upload without visiting import review first",
+ "status": "passed"
+ },
+ {
+ "name": "/career localizes completeness and review confidence without changing CV data",
+ "status": "passed"
+ },
+ {
+ "name": "/career separates overview, profile and import while preserving unsaved profile edits",
+ "status": "passed"
+ },
+ {
+ "name": "pending CV extraction can be reviewed and applied",
+ "status": "passed"
+ },
+ {
+ "name": "account email changes require a password and use the confirmation flow",
+ "status": "passed"
+ }
+ ]
+ },
+ "commandRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-green-20261012T000751Z-command.json",
+ "sha256": "4f97a6141ce7e355b93692643a87f62350e78601c3b04d9f77591282f623948d",
+ "bytes": 712,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-green-20261012T000751Z.log",
+ "sha256": "22fdac29e72365c40d564cdce486dc8eafd77e240a86cbc18195f460b65315e9",
+ "bytes": 9691,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "result": {
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-green-20261012T000837Z.json",
+ "sha256": "0c8fb24208b8fe2346a0ffaa64cc2b0552793075975be2609ee25663ef8f04d6",
+ "bytes": 19282,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "startedUnixMs": 1791763718762,
+ "passed": 46,
+ "failed": 0,
+ "pending": 0,
+ "total": 46,
+ "suites": 3,
+ "cases": [
+ {
+ "name": "first-run workspace presents concise profile, import, general CV and job-specific actions",
+ "status": "passed"
+ },
+ {
+ "name": "career workspace overview and import state render in Bokmål",
+ "status": "passed"
+ },
+ {
+ "name": "returning workspace shows missing profile information and recent general and job-specific CVs",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the pending_review import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the queued import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the failed import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace represents loading and profile-load errors without inventing status",
+ "status": "passed"
+ },
+ {
+ "name": "a settled failed profile read hides the completeness score and retries only through its existing owner",
+ "status": "passed"
+ },
+ {
+ "name": "an unknown import read cannot claim no imports, completion or first-run guidance",
+ "status": "passed"
+ },
+ {
+ "name": "a failed import read stays unknown and keeps its own retry separate from the profile read",
+ "status": "passed"
+ },
+ {
+ "name": "failed recent-CV reads do not imply first-run and retry the same list without writes",
+ "status": "passed"
+ },
+ {
+ "name": "the parent exposes failed import-read retry without canonical saves or history restores",
+ "status": "passed"
+ },
+ {
+ "name": "overview retry cannot overwrite a dirty canonical draft after a failed source refresh",
+ "status": "passed"
+ },
+ {
+ "name": "visited evidence keeps its draft across sections without an unvisited or repeated list request",
+ "status": "passed"
+ },
+ {
+ "name": "meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]",
+ "status": "passed"
+ },
+ {
+ "name": "meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]",
+ "status": "passed"
+ },
+ {
+ "name": "Career Profile section headings describe the visible hierarchy without changing editing fields",
+ "status": "passed"
+ },
+ {
+ "name": "account headings separate identity from security sections",
+ "status": "passed"
+ },
+ {
+ "name": "account CV text status in en does not claim the CV library is empty",
+ "status": "passed"
+ },
+ {
+ "name": "account CV text status in nb does not claim the CV library is empty",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry",
+ "status": "passed"
+ },
+ {
+ "name": "[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds",
+ "status": "passed"
+ },
+ {
+ "name": "profile page loads persisted structured cv and can re-parse it",
+ "status": "passed"
+ },
+ {
+ "name": "saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)",
+ "status": "passed"
+ },
+ {
+ "name": "editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)",
+ "status": "passed"
+ },
+ {
+ "name": "profile page can reprocess from stored artifact history",
+ "status": "passed"
+ },
+ {
+ "name": "active extraction polling refreshes run status without resetting unsaved career fields",
+ "status": "passed"
+ },
+ {
+ "name": "profile page shows durable CV operation state and retries a failed run",
+ "status": "passed"
+ },
+ {
+ "name": "profile page keeps raw extraction collapsed until expanded",
+ "status": "passed"
+ },
+ {
+ "name": "saving the master profile (career) persists the structured profile via /career/profile",
+ "status": "passed"
+ },
+ {
+ "name": "/career shows the profile completeness overview",
+ "status": "passed"
+ },
+ {
+ "name": "/career profile exposes extraction progress",
+ "status": "passed"
+ },
+ {
+ "name": "/career profile can queue a CV upload without visiting import review first",
+ "status": "passed"
+ },
+ {
+ "name": "/career localizes completeness and review confidence without changing CV data",
+ "status": "passed"
+ },
+ {
+ "name": "/career separates overview, profile and import while preserving unsaved profile edits",
+ "status": "passed"
+ },
+ {
+ "name": "pending CV extraction can be reviewed and applied",
+ "status": "passed"
+ },
+ {
+ "name": "account email changes require a password and use the confirmation flow",
+ "status": "passed"
+ },
+ {
+ "name": "saves factual evidence with provenance and tags",
+ "status": "passed"
+ },
+ {
+ "name": "pending evidence reads announce loading without claiming an empty bank or allowing a raced save",
+ "status": "passed"
+ },
+ {
+ "name": "failed list reads remain distinct from empty state and retry only GET while preserving the draft",
+ "status": "passed"
+ },
+ {
+ "name": "failed saves retain factual inputs and retry the same explicit save without reloading the list",
+ "status": "passed"
+ },
+ {
+ "name": "a pending save prevents duplicate writes and prevents edits being cleared by the response",
+ "status": "passed"
+ },
+ {
+ "name": "contextual deletion is named and cancellation performs no writes or draft loss",
+ "status": "passed"
+ },
+ {
+ "name": "failed deletion keeps the row and draft, then reconfirms the same delete without list reload",
+ "status": "passed"
+ },
+ {
+ "name": "evidence sections and factual fields have semantic headings and required labels in Bokmål",
+ "status": "passed"
+ }
+ ]
+ },
+ "commandRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-green-20261012T000837Z-command.json",
+ "sha256": "c1115f1308ac044157f2a2031c6c325365acbf93acb394d32af35f93ad8d3f3a",
+ "bytes": 712,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-green-20261012T000837Z.log",
+ "sha256": "c93182b84da9062be9004fd77a809816eccadea2e2592203903f13527b9f220b",
+ "bytes": 697,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "result": {
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-red-20261012T000336Z.json",
+ "sha256": "ae2d426ef59861105e3eb8cc648d5da43f9d53a01a77e0be763576dde655d12e",
+ "bytes": 372884,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "startedUnixMs": 1791763417506,
+ "passed": 8,
+ "failed": 14,
+ "pending": 0,
+ "total": 22,
+ "suites": 2,
+ "cases": [
+ {
+ "name": "first-run workspace presents concise profile, import, general CV and job-specific actions",
+ "status": "passed"
+ },
+ {
+ "name": "career workspace overview and import state render in Bokmål",
+ "status": "passed"
+ },
+ {
+ "name": "returning workspace shows missing profile information and recent general and job-specific CVs",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the pending_review import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the queued import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace exposes the failed import state as a resumable action",
+ "status": "passed"
+ },
+ {
+ "name": "workspace represents loading and profile-load errors without inventing status",
+ "status": "passed"
+ },
+ {
+ "name": "a settled failed profile read hides the completeness score and retries only through its existing owner",
+ "status": "failed"
+ },
+ {
+ "name": "an unknown import read cannot claim no imports, completion or first-run guidance",
+ "status": "failed"
+ },
+ {
+ "name": "a failed import read stays unknown and keeps its own retry separate from the profile read",
+ "status": "failed"
+ },
+ {
+ "name": "failed recent-CV reads do not imply first-run and retry the same list without writes",
+ "status": "failed"
+ },
+ {
+ "name": "the parent exposes failed import-read retry without canonical saves or history restores",
+ "status": "failed"
+ },
+ {
+ "name": "overview retry cannot overwrite a dirty canonical draft after a failed source refresh",
+ "status": "failed"
+ },
+ {
+ "name": "visited evidence keeps its draft across sections without an unvisited or repeated list request",
+ "status": "failed"
+ },
+ {
+ "name": "saves factual evidence with provenance and tags",
+ "status": "passed"
+ },
+ {
+ "name": "pending evidence reads announce loading without claiming an empty bank or allowing a raced save",
+ "status": "failed"
+ },
+ {
+ "name": "failed list reads remain distinct from empty state and retry only GET while preserving the draft",
+ "status": "failed"
+ },
+ {
+ "name": "failed saves retain factual inputs and retry the same explicit save without reloading the list",
+ "status": "failed"
+ },
+ {
+ "name": "a pending save prevents duplicate writes and prevents edits being cleared by the response",
+ "status": "failed"
+ },
+ {
+ "name": "contextual deletion is named and cancellation performs no writes or draft loss",
+ "status": "failed"
+ },
+ {
+ "name": "failed deletion keeps the row and draft, then reconfirms the same delete without list reload",
+ "status": "failed"
+ },
+ {
+ "name": "evidence sections and factual fields have semantic headings and required labels in Bokmål",
+ "status": "failed"
+ }
+ ]
+ },
+ "commandRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-red-20261012T000336Z-command.json",
+ "sha256": "8d1af878382d923158b8ce46d5a01bf5bb9f66b6bfb5d212018817bb9f9c7ec0",
+ "bytes": 676,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/unit/career-red-20261012T000336Z.log",
+ "sha256": "f1b63e59b3350d0b004d278daf4df4a0373614840d85ad1e661a16a5ead8e6e3",
+ "bytes": 188800,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ }
+ ],
+ "firstFailedManifest": {
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/history/first-12-pass-2-fail-manifest.json",
+ "sha256": "0f82daa6e221fdfac928dbe0ff401260850a1f4c33122711f5da19f62c3b8a62",
+ "bytes": 157567,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "qualification": "Historical PENDING12pass/2fail report/source observations; original paths are unchanged inside this raw manifest. Archived raw native attempts provide exact result/trace files; this capsule is not final source/build or acceptance evidence."
+ },
+ "firstCompiledExport": {
+ "archive": {
+ "path": ".artifacts/phase7/p7-02/career-final/history/first-build/archive.json",
+ "sha256": "064346e0713a0804334a64064e7615448ac519e71f1310d7bf401ef1d525227d",
+ "bytes": 25439,
+ "hashPolicy": "UTF-8 text with CRLF normalized to LF"
+ },
+ "buildIdRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/history/first-build/BUILD_ID",
+ "sha256": "b537028fb1d1a05f9a6f22afcbdbad85581099bfc2e05b22a0a1f4a9797b8943",
+ "bytes": 21,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "qualification": "Exact historical75-file compiled export matches first PENDING digest; original pre-cancel-repair source was not snapshotted."
+ },
+ "preservationRegression": {
+ "evidence": {
+ "command": {
+ "name": "career-preservation",
+ "command": [
+ "rtk",
+ "proxy",
+ "node",
+ "node_modules/@playwright/test/cli.js",
+ "test",
+ "e2e/redesign-preservation.spec.ts",
+ "--grep",
+ "mobile CV override|legacy workspace preserves frozen",
+ "--retries=0",
+ "--reporter=list,json",
+ "--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\career-preservation-results"
+ ],
+ "startedUtc": "2026-10-12T00:20:04.655482+00:00",
+ "finishedUtc": "2026-10-12T00:20:19.304200+00:00",
+ "exitCode": 0,
+ "stats": {
+ "startTime": "2026-10-12T00:20:05.169Z",
+ "duration": 14103.046,
+ "expected": 2,
+ "skipped": 0,
+ "unexpected": 0,
+ "flaky": 0
+ }
+ },
+ "commandRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career-preservation-command.json",
+ "sha256": "18bd14992aba5337bf72558de4820ea96c5d79366770738525355f6a34cab06b",
+ "bytes": 742,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "reportRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career-preservation.json",
+ "sha256": "cb0d08e8a80fa4148337ce6043c9c8e25007bd267088f6654632517fbc9fc938",
+ "bytes": 122727,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "logRaw": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career-preservation.log",
+ "sha256": "260def2e7214141bae6b590786fc546a589d6e1fac4a2521c233a61d114b7c57",
+ "bytes": 865,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "stats": {
+ "startTime": "2026-10-12T00:20:05.169Z",
+ "duration": 14103.046,
+ "expected": 2,
+ "skipped": 0,
+ "unexpected": 0,
+ "flaky": 0
+ },
+ "cases": [
+ {
+ "title": "[PRES-C01 PRES-C06 PRES-C07 PRES-C10] mobile CV override persists without changing the canonical profile or sibling CV",
+ "file": "redesign-preservation.spec.ts",
+ "line": 43,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 3650
+ },
+ {
+ "title": "[PRES-W01 PRES-W05 PRES-W06 PRES-W07 PRES-W08] legacy workspace preserves frozen documents after current sources change",
+ "file": "redesign-preservation.spec.ts",
+ "line": 73,
+ "expectedStatus": "passed",
+ "project": "chromium",
+ "resultStatuses": [
+ "passed"
+ ],
+ "retries": [
+ 0
+ ],
+ "errors": [
+ []
+ ],
+ "durationMs": 3522
+ }
+ ],
+ "attachments": [
+ {
+ "test": "[PRES-W01 PRES-W05 PRES-W06 PRES-W07 PRES-W08] legacy workspace preserves frozen documents after current sources change",
+ "name": "native-frozen-package",
+ "contentType": "image/png",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "2185e7a5e19317d91ed8c457cb4abddd6b20c064c1c3485e36a35964945b94cb",
+ "bytes": 88018,
+ "extractedPNG": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/cb0d08e8a80f/native-frozen-package.png",
+ "sha256": "2185e7a5e19317d91ed8c457cb4abddd6b20c064c1c3485e36a35964945b94cb",
+ "bytes": 88018,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career-preservation.json",
+ "sha256": "cb0d08e8a80fa4148337ce6043c9c8e25007bd267088f6654632517fbc9fc938",
+ "bytes": 122727,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ },
+ {
+ "test": "[PRES-W01 PRES-W05 PRES-W06 PRES-W07 PRES-W08] legacy workspace preserves frozen documents after current sources change",
+ "name": "native-preservation-invariants",
+ "contentType": "application/json",
+ "raw": {
+ "storage": "Base64 attachment in raw report",
+ "sha256": "3686ad95bbc0b6b9a554d67bc94e34b44c164f2f839567a19a3b2000f980b5f6",
+ "bytes": 348
+ },
+ "manualReview": "No individual inspection claimed by collector"
+ }
+ ],
+ "reportErrors": [],
+ "configuration": {
+ "version": "1.62.1",
+ "workers": 1,
+ "projects": [
+ {
+ "name": "chromium",
+ "retries": 0
+ }
+ ]
+ },
+ "accessibility": {
+ "scans": [],
+ "ruleNodeCounts": [],
+ "contexts": [],
+ "triage": "PENDING actual contextual review",
+ "qualification": "Every rule/node occurrence summarized; full HTML/data/relatedNodes/check vectors remain in exact raw report and identified audit attachment hashes. No conformance claim."
+ }
+ },
+ "qualification": "Separate existing ordinary P2-D01/mobile CV override lane; inherited rule scope is not mixed with Career all-enabled scans or added to historical159 full results."
+ },
+ "backendGuards": {
+ "evidence": {
+ "path": ".artifacts/phase7/p7-02/career-final/entry-repair-results.json",
+ "sha256": "57a311629bebb49a6ff31078a8f730224e21e93a05ac65dd067f3542c6937645",
+ "bytes": 27865,
+ "hashPolicy": "UTF-8 text with CRLF normalized to LF"
+ },
+ "qualification": "Fresh91 guards/SQLite1/HTTP1/Release belong to the separately pushed01281f52 backend repair. Backend1,034 remains derived; these are not a new full Career/backend execution."
+ },
+ "visualReview": {
+ "status": "ACTUALLY_INSPECTED_BY_PARENT",
+ "recordedUtc": "2026-10-12T05:38:41.221460+00:00",
+ "inspectionMethod": "Parent opened all22 final raw PNGs via view_image in4+4+4+4+6 batches",
+ "images": [
+ {
+ "name": "p7-career-nb-dark-320-populated-overview",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-dark-320-populated-overview.png",
+ "sha256": "46270abbe1bfd3f1d4c3d75a5feb3f536f31660725a7b00fff3335827e99a24d",
+ "bytes": 86185,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-nb-dark-320-long-evidence",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-dark-320-long-evidence.png",
+ "sha256": "754ccbb181f061205466b9851ece8f7541ba487f3a1c1cfa4944316802775e10",
+ "bytes": 79872,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-light-360-populated-overview",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-360-populated-overview.png",
+ "sha256": "064f05f5bfaaebeeb314ff4f26fd7bd53c879d4f95377cd41520ef87520f73d9",
+ "bytes": 84594,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-light-360-long-evidence",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-360-long-evidence.png",
+ "sha256": "8090f7c66c4372689ee7e349bc37ba394d7e75addc689458fbd2d8e3924f7cc0",
+ "bytes": 70567,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-nb-light-390-populated-overview",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-light-390-populated-overview.png",
+ "sha256": "0ddf1641e174ed0123e6a6a368cd4ddae02b7e16dd53088a28f7c74445cd79df",
+ "bytes": 86576,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-nb-light-390-long-evidence",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-light-390-long-evidence.png",
+ "sha256": "05abccf36e7a8bf3a2ae5a82d34b59f1b68b9dd4f5b4d384101a04b0688b47f2",
+ "bytes": 71192,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-dark-768-populated-overview",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-768-populated-overview.png",
+ "sha256": "20258c36363096d061444d6cdae229160244463fc2de75992348d3c006b56394",
+ "bytes": 94494,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-dark-768-long-evidence",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-768-long-evidence.png",
+ "sha256": "4cc481d28dfb9d0439dc6900ba57541ee663ebd12136b323b18a083dc8a82a71",
+ "bytes": 83945,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-nb-dark-1024-populated-overview",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-dark-1024-populated-overview.png",
+ "sha256": "42cffa1a683373a40e66d11bdfb373e8bbf2528aecbebe9fc84f454ccd91fd49",
+ "bytes": 119730,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-nb-dark-1024-long-evidence",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-dark-1024-long-evidence.png",
+ "sha256": "e2b6fcbecf8ee35f3bf1d0fdd461901f466e1702f20d674641948131cd17cc8c",
+ "bytes": 110805,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-light-1280-populated-overview",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-1280-populated-overview.png",
+ "sha256": "c9d2e956cf79df51dff4fb3ca72dff44054e23d0bdce85ba220f37942ccf25b7",
+ "bytes": 103025,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-light-1280-long-evidence",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-1280-long-evidence.png",
+ "sha256": "cd31e56c9c153784f2e5d65e5df49b075926a357d751387f5671a2df034960fd",
+ "bytes": 96501,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-nb-light-1440-populated-overview",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-light-1440-populated-overview.png",
+ "sha256": "760dd39a7567e0bf895d203402c34aa3cc7f4994a677aac2f15644df1e0a0534",
+ "bytes": 116544,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-nb-light-1440-long-evidence",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-nb-light-1440-long-evidence.png",
+ "sha256": "0f35646d6f793bac5556de7906d52be2a7dbc710267141615c969337572b2dd4",
+ "bytes": 247294,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-dark-1920-populated-overview",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-1920-populated-overview.png",
+ "sha256": "6a3abb5a7860d4cabd79155b6b14f31745b11460c738c6cc21e72c50dc157381",
+ "bytes": 120746,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-dark-1920-long-evidence",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-1920-long-evidence.png",
+ "sha256": "8379b4b53169217e7dec875f85336b78ba6a472bf99177a7fdeec61d7b7afad7",
+ "bytes": 114192,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-dark-390-unavailable-profile",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-390-unavailable-profile.png",
+ "sha256": "91f4453c838cd8baafc3044df89894dd153557d1c4c32d45235fd4211c6a5f10",
+ "bytes": 73791,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-dark-390-unavailable-runs",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-390-unavailable-runs.png",
+ "sha256": "bb4505751989734b278d1d42440d7f4f2c306b7dcf7377e68a03e257ed36be1f",
+ "bytes": 74199,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-dark-390-unavailable-variants",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-dark-390-unavailable-variants.png",
+ "sha256": "aac568dda7beb3f13b284d196d6a3686970b2c03bde92189781e4198149bf769",
+ "bytes": 75557,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-light-390-pending-evidence-read",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-390-pending-evidence-read.png",
+ "sha256": "1708d2dcac2b554c77b840711183ede606958ab273e22861f9989f4d9d659449",
+ "bytes": 46901,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-light-390-failed-save-retained-draft",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-390-failed-save-retained-draft.png",
+ "sha256": "ecae840ca920c3b453e5fb6e1694bf06a4422dcec0f759999388a59a2c019d51",
+ "bytes": 50408,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ },
+ {
+ "name": "p7-career-en-light-390-failed-delete-retained-row",
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/career-final/visuals/f7a166ec33ec/p7-career-en-light-390-failed-delete-retained-row.png",
+ "sha256": "96e3c43398ff9bc99d16f874773fa454c27d736a3d724e4beefc4ecbd38fa2b1",
+ "bytes": 53220,
+ "hashPolicy": "Exact measured raw bytes"
+ },
+ "originalEmbeddedReport": {
+ "path": ".artifacts/phase7/p7-02/career-final/runtime/career.json",
+ "sha256": "f7a166ec33ecdedd9f0374290961c0daaf1279d8c89d3425fbe3b3a66c4a2360",
+ "bytes": 3031612,
+ "hashPolicy": "Exact measured raw bytes"
+ }
+ }
+ ],
+ "observations": [
+ "Eight320–1920 width/language/theme matrix samples each show populated overview and long evidence; all22 samples wrapped with no clipped fields/card titles/buttons or recorded root overflow.",
+ "The1440px evidence sample actually shows11 rows; unavailable profile/runs/variants, pending evidence read, failed save retained draft and failed delete retained row images were inspected.",
+ "Native14 and separate ordinary P2-D01/mobile-override2 pass; tested Cancel/retry/confirmation and canonical/sibling readback are finite behavioral proof."
+ ],
+ "accessibilityTriage": {
+ "scans": 22,
+ "violationNodes": 0,
+ "incompleteNodes": 99,
+ "colorContrast": {
+ "backgroundOverlap": 74,
+ "invisibleBadgeShortText": 22
+ },
+ "hiddenFocus": {
+ "occurrences": 3,
+ "target": "#menu-",
+ "context": "Retained hidden MUI section-select portal in320/360/390 evidence states; actual section selection/subsequent form keyboard pass. Contextual M09/M11 remains required."
+ },
+ "qualification": "All findings retained; overlap/short text are incomplete measurement, not computed contrast passes. Actual reader/contrast/forced-colors/device conformance NOT VERIFIED."
+ },
+ "qualifications": [
+ "Failed-save/delete images retain inherited shell Skip-link focus/sticky-scroll capture positioning; no blanket focus restoration claim.",
+ "Controlled English500 details are server-fixture text, distinct from translated product guidance/fallbacks.",
+ "Windows clipboard LF→CRLF is verified only after deliberate CRLF→LF normalization with raw actual codepoints retained; no trimming/source-copy change or byte-identical OS clipboard claim.",
+ "Density not varied; no actual global Career density control, human screen reader, browser zoom, physical touch/software keyboard or real provider acceptance.",
+ "Canonical/job concurrency/save-import-history ownership remains P7-03/RD21; P5-13 deferred, Phase8 separate and production NO-GO."
+ ],
+ "decision": "Career implemented scope and integrated P7-02 CONDITIONAL GO; final hygiene PASS, actual normal push pending; all57 group statuses remain qualified"
+ },
+ "preservation": {
+ "groups": 57,
+ "partial": 56,
+ "deferred": 1,
+ "routes": 32
+ },
+ "qualifications": [
+ "Full vectors remain in raw reports; native/finite images are not human reader/zoom/device/provider acceptance.",
+ "P7-03 concurrency/import/history save-owner work, P5-13 AI activation and Phase8 remain separate.",
+ "Production NO-GO; normal development push receipt pending."
+ ],
+ "pushReceipt": {
+ "status": "PENDING_ACTUAL_PUSH"
+ },
+ "rawRetention": {
+ "root": ".artifacts/phase7/p7-02/career-final",
+ "runtimeFiles": 428,
+ "unitFiles": 81,
+ "qualification": "Whole final UI tree/archived attempts, unique unit records, four product sources, four test owners, export, BUILD_ID, runner/config and entry manifest retained byte for byte. Only recorded file references rebased; hashes, commands and raw reports/internal execution paths unchanged. Initial pre-cancel source was not snapshotted; exact failed native attempts and actual first compiled75-file export are retained. Do not rerun the collector after later source/build changes."
+ },
+ "staticGate": {
+ "status": "PASS",
+ "checkedUtc": "2026-10-12T05:48:32.289310+00:00",
+ "evidence": {
+ "path": "docs/redesign/phase-7/p7-02/evidence/career-static-checks.json",
+ "sha256": "f575a6304bb4d00e11ee77270d60ebdee11f1cd8faf9692adb4c473961b4d8f4",
+ "bytes": 3165,
+ "hashPolicy": "Portable JSON UTF-8 with CRLF normalized to LF"
+ },
+ "commands": [
+ {
+ "name": "secret-scan",
+ "command": [
+ "rtk",
+ "proxy",
+ "C:\\Users\\Connor\\AppData\\Local\\Programs\\Python\\Python312\\python.exe",
+ "-X",
+ "utf8",
+ "scripts/supply-chain.py",
+ "scan-secrets"
+ ],
+ "startedUtc": "2026-10-12T05:48:28.856155+00:00",
+ "finishedUtc": "2026-10-12T05:48:31.685439+00:00",
+ "exitCode": 0,
+ "log": ".artifacts/phase7/current/static/20261012T054828Z/secret-scan.log",
+ "logSha256Raw": "c5a88d5ebdc042adba125c1eaacbe44f9f4a5c19898c0f195573c00d511aa28d"
+ },
+ {
+ "name": "working-whitespace",
+ "command": [
+ "rtk",
+ "proxy",
+ "git",
+ "diff",
+ "--check"
+ ],
+ "startedUtc": "2026-10-12T05:48:31.685929+00:00",
+ "finishedUtc": "2026-10-12T05:48:31.771415+00:00",
+ "exitCode": 0,
+ "log": ".artifacts/phase7/current/static/20261012T054828Z/working-whitespace.log",
+ "logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
+ },
+ {
+ "name": "staged-whitespace",
+ "command": [
+ "rtk",
+ "proxy",
+ "git",
+ "diff",
+ "--cached",
+ "--check"
+ ],
+ "startedUtc": "2026-10-12T05:48:31.771415+00:00",
+ "finishedUtc": "2026-10-12T05:48:31.861097+00:00",
+ "exitCode": 0,
+ "log": ".artifacts/phase7/current/static/20261012T054828Z/staged-whitespace.log",
+ "logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
+ },
+ {
+ "name": "phase7-whitespace",
+ "command": [
+ "rtk",
+ "proxy",
+ "git",
+ "diff",
+ "--check",
+ "b5319981ad3d1bd635daff861453d23c0de5320b"
+ ],
+ "startedUtc": "2026-10-12T05:48:31.861097+00:00",
+ "finishedUtc": "2026-10-12T05:48:31.981627+00:00",
+ "exitCode": 0,
+ "log": ".artifacts/phase7/current/static/20261012T054828Z/phase7-whitespace.log",
+ "logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
+ }
+ ],
+ "untrackedSecretScan": {
+ "files": 0,
+ "findings": 0
+ },
+ "documentation": {
+ "files": 9,
+ "relativeLinks": 347,
+ "errors": []
+ },
+ "preservation": {
+ "groups": 57,
+ "statuses": {
+ "PARTIAL": 56,
+ "PASS": 0,
+ "FAIL": 0,
+ "DEFERRED": 1
+ },
+ "originalRoutesPreserved": true,
+ "currentConcreteRoutes": 32
+ },
+ "production": {
+ "main": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
+ "originMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
+ "status": "NO-GO",
+ "qualification": "Local fetched refs; direct push observation recorded separately."
+ },
+ "qualification": "Final staged finite hygiene PASS; normal commit/push receipt pending. No runtime/manual qualification changed."
+ }
+}
diff --git a/docs/redesign/phase-7/p7-02/evidence/career-static-checks.json b/docs/redesign/phase-7/p7-02/evidence/career-static-checks.json
new file mode 100644
index 0000000..e4d07c3
--- /dev/null
+++ b/docs/redesign/phase-7/p7-02/evidence/career-static-checks.json
@@ -0,0 +1,104 @@
+{
+ "schemaVersion": 1,
+ "checkpoint": "p7-02",
+ "status": "PASS",
+ "checkedUtc": "2026-10-12T05:48:32.289310+00:00",
+ "commands": [
+ {
+ "name": "secret-scan",
+ "command": [
+ "rtk",
+ "proxy",
+ "C:\\Users\\Connor\\AppData\\Local\\Programs\\Python\\Python312\\python.exe",
+ "-X",
+ "utf8",
+ "scripts/supply-chain.py",
+ "scan-secrets"
+ ],
+ "startedUtc": "2026-10-12T05:48:28.856155+00:00",
+ "finishedUtc": "2026-10-12T05:48:31.685439+00:00",
+ "exitCode": 0,
+ "log": ".artifacts/phase7/current/static/20261012T054828Z/secret-scan.log",
+ "logSha256Raw": "c5a88d5ebdc042adba125c1eaacbe44f9f4a5c19898c0f195573c00d511aa28d"
+ },
+ {
+ "name": "working-whitespace",
+ "command": [
+ "rtk",
+ "proxy",
+ "git",
+ "diff",
+ "--check"
+ ],
+ "startedUtc": "2026-10-12T05:48:31.685929+00:00",
+ "finishedUtc": "2026-10-12T05:48:31.771415+00:00",
+ "exitCode": 0,
+ "log": ".artifacts/phase7/current/static/20261012T054828Z/working-whitespace.log",
+ "logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
+ },
+ {
+ "name": "staged-whitespace",
+ "command": [
+ "rtk",
+ "proxy",
+ "git",
+ "diff",
+ "--cached",
+ "--check"
+ ],
+ "startedUtc": "2026-10-12T05:48:31.771415+00:00",
+ "finishedUtc": "2026-10-12T05:48:31.861097+00:00",
+ "exitCode": 0,
+ "log": ".artifacts/phase7/current/static/20261012T054828Z/staged-whitespace.log",
+ "logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
+ },
+ {
+ "name": "phase7-whitespace",
+ "command": [
+ "rtk",
+ "proxy",
+ "git",
+ "diff",
+ "--check",
+ "b5319981ad3d1bd635daff861453d23c0de5320b"
+ ],
+ "startedUtc": "2026-10-12T05:48:31.861097+00:00",
+ "finishedUtc": "2026-10-12T05:48:31.981627+00:00",
+ "exitCode": 0,
+ "log": ".artifacts/phase7/current/static/20261012T054828Z/phase7-whitespace.log",
+ "logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
+ }
+ ],
+ "untrackedSecretScan": {
+ "files": 0,
+ "findings": 0
+ },
+ "documentation": {
+ "files": 9,
+ "relativeLinks": 347,
+ "errors": []
+ },
+ "preservation": {
+ "groups": 57,
+ "statuses": {
+ "PARTIAL": 56,
+ "PASS": 0,
+ "FAIL": 0,
+ "DEFERRED": 1
+ },
+ "originalRoutesPreserved": true,
+ "currentConcreteRoutes": 32
+ },
+ "production": {
+ "main": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
+ "originMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
+ "status": "NO-GO",
+ "qualification": "Local fetched refs; direct push observation recorded separately."
+ },
+ "hashPolicy": "Portable JSON UTF8 LF; raw log hashes measure exact saved bytes.",
+ "limits": [
+ "Pattern scanner skips binary and files over2MiB; not historical Git/production secrets.",
+ "Local links check target existence, not URL/heading anchors.",
+ "Static evidence is not runtime/manual/device/provider/production acceptance."
+ ]
+}
diff --git a/docs/redesign/phase-7/p7-02/evidence/evidence-list-repair.json b/docs/redesign/phase-7/p7-02/evidence/evidence-list-repair.json
index 399f44c..d750ec6 100644
--- a/docs/redesign/phase-7/p7-02/evidence/evidence-list-repair.json
+++ b/docs/redesign/phase-7/p7-02/evidence/evidence-list-repair.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"checkpoint": "P7-02",
"slice": "SQLite evidence-list compatibility repair only",
- "acceptance": "GO for bounded local repair; final hygiene PASS, actual push pending",
+ "acceptance": "GO for bounded local repair; hygiene PASS, normally pushed and directly verified",
"entryCommit": "d21501aa7e5f9040937fa821d6a77d823b7e08eb",
"problem": "EF SQLite9.0.14 cannot translate DateTimeOffset ORDER BY; owned evidence POST200 was followed by list GET500 and actual provider NotSupportedException.",
"change": "Keep SQL owner filtering and AsNoTracking. SQLite materializes only owned rows then orders actual DTO instants; other providers retain existing SQL ordering.",
@@ -591,7 +591,32 @@
"qualification": "Exact backend command/log/TRX, frozen source/DLL, RED/GREEN HTTP raw reports/logs/result trees/traces and runner/spec snapshots; internal execution paths unchanged."
},
"pushReceipt": {
- "status": "PENDING_ACTUAL_PUSH"
+ "checkpoint": "P7-02",
+ "slice": "evidence list SQLite compatibility repair",
+ "status": "PUSHED_AND_VERIFIED",
+ "checkedUtc": "2026-10-12T00:06:47.145743+00:00",
+ "head": "01281f52d9279ecdbd3363a11d2e9cb71230bf49",
+ "originDevelopment": "01281f52d9279ecdbd3363a11d2e9cb71230bf49",
+ "liveDevelopment": "01281f52d9279ecdbd3363a11d2e9cb71230bf49",
+ "main": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
+ "originMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
+ "liveMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
+ "workingTreeClean": false,
+ "pendingPaths": [
+ "job-tracker-ui/src/career-evidence.test.tsx",
+ "job-tracker-ui/src/career-workspace-page.test.tsx",
+ "job-tracker-ui/src/i18n/translations.ts",
+ "job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx",
+ "job-tracker-ui/e2e/phase7-career-overview.spec.ts"
+ ],
+ "qualification": "Only in-progress Career frontend source/tests remain uncommitted; repair is complete and normally pushed. No other work discarded.",
+ "production": "NO-GO",
+ "pushExitCode": 0,
+ "raw": {
+ "path": ".artifacts/phase7/p7-02/evidence-list-repair/push-receipt.json",
+ "sha256": "4b673fb11248d185fd3d2b635a62d18d0423ea36dd7e4655fa0bb6279663a71b",
+ "hashPolicy": "Exact observed raw bytes"
+ }
},
"staticGate": {
"evidence": {
@@ -623,5 +648,6 @@
"originalRoutesPreserved": true,
"currentConcreteRoutes": 32
}
- }
+ },
+ "sourceApplicability": "Frozen canonical source identities apply at01281f52d9279ecdbd3363a11d2e9cb71230bf49; sourceAndBinarySnapshots preserve exact measured bytes. API/test DLLs are local build provenance, not deployed production identities."
}
diff --git a/docs/roadmap/todo.md b/docs/roadmap/todo.md
index 12e01be..30334ec 100644
--- a/docs/roadmap/todo.md
+++ b/docs/roadmap/todo.md
@@ -84,8 +84,8 @@ Follow the approved [Phase 7 handoff](../redesign/phase-6/p6-05/PHASE7_HANDOFF.m
- [x] P7-00 fresh scope inventory and unchanged-source fixture baseline; finite static checks pass. Commit and remote receipt in the Phase 7 ledger.
- [x] P7-01 public authentication and separate account/security presentation (implemented scope CONDITIONAL GO; account pushedad7b419/direct receipt19:16:15UTC): public sub-slice CONDITIONAL GO, pushed `8ad720d`, direct remote=HEAD verified2026-10-11 18:50:24UTC, main unchanged; affected61/native22/isolated SMTP2/helper6/auth subset87 pass. [Checkpoint record](../redesign/phase-7/p7-01/README.md) retains manual/provider/production gates. Fresh account full573/89, native6/public22/auth-boundaries10 and types/lint/build pass; all eight final post-copy PNGs actually inspected and source/context evidence frozen. Account85 and public31 current axe incompletes remain qualified; final staged finite hygiene passed; normal account pushad7b419 directly verified2026-10-11 19:16:15UTC with localHEAD=origin=live equality and clean worktree at observation, main unchanged.
-- [ ] P7-02 [onboarding guidance and Career overview/evidence](../redesign/phase-7/p7-02/README.md): entryad7b419 pushed/verified; onboarding implemented-scope CONDITIONAL GO with fresh affected32/native13/regression4/types/lint/build and13 actual PNG inspections. Legacy dismissal/routes/data and unknown-summary state preserved; final onboarding hygiene PASS and normally pushedd21501aa/direct receipt23:55:12UTC, main unchanged. Career overview/evidence second boundary and whole P7-02 remain pending;596 full frontend is derived only.
-- [ ] P7-03 Career structured editor and import/history presentation.
+- [ ] P7-02 [onboarding guidance and Career overview/evidence](../redesign/phase-7/p7-02/README.md): entryad7b419 pushed/verified; onboarding implemented-scope CONDITIONAL GO32/13/4+types/lint/build/13 actual PNG inspections/hygiene, pushedd21501aa/direct receipt23:55:12UTC. Separate actual SQLite evidence-list repair91 guards/HTTP1/Release passed and pushed01281f52/direct receipt00:06:47UTC; unfinished Career work preserved/main unchanged. Career affected46/3/native14/fresh preservation2/types/lint/build and22 actual PNG inspections pass; implemented P7-02 CONDITIONAL GO, final Career hygiene PASS (four commands0,9docs347links0errors) and normal push pending. Career0/99 axe incompletes/manual gates retained; fullfrontend610/backend1,034 are derived only, latest fresh full573/89 unchanged.
+- [ ] P7-03 Career structured editor and import/history: after P7-02 push, separately RED/prove/repair optional stable source-ID preservation before presentation; prove dirty-locale/held-PUT pending-write ownership/recovery and resolve or bound RD21 concurrency before save/history expansion.
- [ ] P7-04 CV library and public entry.
- [ ] P7-05 Discovery, Companies, Offers and Reminders.
- [ ] P7-06 remaining Application forms and global correspondence.
diff --git a/job-tracker-ui/e2e/phase7-career-overview.spec.ts b/job-tracker-ui/e2e/phase7-career-overview.spec.ts
new file mode 100644
index 0000000..5bd347b
--- /dev/null
+++ b/job-tracker-ui/e2e/phase7-career-overview.spec.ts
@@ -0,0 +1,358 @@
+import AxeBuilder from '@axe-core/playwright';
+import { expect, test as base, type APIRequestContext, type Page, type TestInfo } from '@playwright/test';
+import { translations } from '../src/i18n/translations';
+import type { CvVariant } from '../src/cvBuilder';
+
+const apiUrl = 'http://localhost:5302/api';
+const password = 'E2ePassword123!';
+type Owner = { id: string; email: string; headers: Record };
+type Sample = { language: 'en' | 'nb'; theme: 'light' | 'dark'; width: number; height: number };
+
+async function login(api: APIRequestContext, email: string): Promise {
+ expect((await api.post(`${apiUrl}/auth/login`, { data: { email, password } })).status()).toBe(200);
+ const response = await api.get(`${apiUrl}/auth/me`);
+ expect(response.status()).toBe(200);
+ const me = await response.json();
+ const csrf = (await api.storageState()).cookies.find(cookie => cookie.name === 'XSRF-TOKEN');
+ expect(csrf).toBeDefined();
+ return { id: me.id, email, headers: { 'X-CSRF-TOKEN': csrf!.value, 'X-Session-Context': me.sessionContext } };
+}
+
+async function createOwner(api: APIRequestContext, headers: Record) {
+ const email = `p7-career-${Date.now()}-${Math.random().toString(36).slice(2)}@example.test`;
+ expect((await api.post(`${apiUrl}/users`, { headers, data: { email, password, roles: [] } })).status()).toBe(200);
+ return email;
+}
+
+const test = base.extend<{ owner: Owner }>({
+ owner: async ({ page, context, playwright }, provide) => {
+ const admin = await playwright.request.newContext();
+ try {
+ const adminOwner = await login(admin, 'e2e@example.test');
+ const owner = await login(page.request, await createOwner(admin, adminOwner.headers));
+ await context.route('**/*', route => {
+ const url = new URL(route.request().url());
+ return ['localhost', '127.0.0.1'].includes(url.hostname) || ['data:', 'blob:', 'about:'].includes(url.protocol)
+ ? route.continue() : route.abort();
+ });
+ await context.addInitScript(() => {
+ if (!localStorage.getItem('uiLanguage')) localStorage.setItem('uiLanguage', 'en');
+ if (!localStorage.getItem('jobtracker.themeMode')) localStorage.setItem('jobtracker.themeMode', 'light');
+ });
+ await provide(owner);
+ } finally { await admin.dispose(); }
+ },
+});
+
+async function enter(page: Page, owner: Owner, sample: Sample, section = 'overview') {
+ expect((await page.request.put(`${apiUrl}/auth/preferences/language`, { headers: owner.headers,
+ data: { language: sample.language === 'nb' ? 'nb-NO' : 'en' } })).status()).toBe(204);
+ await page.setViewportSize({ width: sample.width, height: sample.height });
+ await page.goto(`/career?section=${section}&source=phase7#preserved`);
+ await page.evaluate(({ language, theme }) => {
+ localStorage.setItem('uiLanguage', language);
+ localStorage.setItem('jobtracker.themeMode', theme);
+ }, sample);
+ await page.emulateMedia({ reducedMotion: 'reduce' });
+ await page.reload();
+ await expect(page.locator('html')).toHaveAttribute('lang', sample.language === 'nb' ? 'nb-NO' : 'en');
+ await expect(page.locator('html')).toHaveAttribute('data-color-scheme', sample.theme);
+}
+
+async function navigateSection(page: Page, language: Sample['language'], section: 'overview' | 'profile' | 'evidence' | 'import') {
+ const t = translations[language];
+ const label = { overview: t.careerWorkspaceOverviewTab, profile: t.careerWorkspaceProfileTab,
+ evidence: t.careerWorkspaceEvidenceTab, import: t.careerWorkspaceImportTab }[section];
+ const selector = page.getByRole('combobox', { name: t.careerWorkspaceNavigation, exact: true });
+ if (await selector.isVisible()) {
+ await selector.click();
+ await page.getByRole('option', { name: label, exact: true }).click();
+ } else {
+ await page.getByRole('tab', { name: label, exact: true }).click();
+ }
+ const url = new URL(page.url());
+ expect(url.searchParams.get('section')).toBe(section === 'overview' ? null : section);
+ expect(url.searchParams.get('source')).toBe('phase7');
+ expect(url.hash).toBe('#preserved');
+}
+
+async function capture(page: Page, info: TestInfo, sample: Sample, state: string) {
+ await page.evaluate(async () => { await document.fonts.ready; await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(() => resolve()))); });
+ const geometry = await page.evaluate(() => ({ width: innerWidth, height: innerHeight,
+ rootOverflow: Math.max(0, document.documentElement.scrollWidth - document.documentElement.clientWidth) }));
+ const axe = await new AxeBuilder({ page }).options({ rules: { 'target-size': { enabled: true } } }).analyze();
+ const name = `p7-career-${sample.language}-${sample.theme}-${sample.width}-${state}`;
+ await info.attach(`${name}-audit`, { body: JSON.stringify({ sample, state, geometry,
+ ariaSnapshot: await page.getByRole('main').ariaSnapshot(),
+ axe: { scope: 'All enabled rules plus target-size; complete findings retained', violations: axe.violations,
+ incomplete: axe.incomplete, passes: axe.passes.map(rule => ({ id: rule.id, nodes: rule.nodes.length })) },
+ limits: ['No human screen reader or physical touch/software keyboard', 'No actual browser zoom or production font/photo qualification', 'Controlled faults are explicit; no model/provider invocation'],
+ }), contentType: 'application/json' });
+ await info.attach(name, { body: await page.screenshot({ fullPage: true, animations: 'disabled' }), contentType: 'image/png' });
+ expect(geometry.rootOverflow).toBe(0);
+}
+
+const matrix: Sample[] = [
+ { language: 'nb', theme: 'dark', width: 320, height: 844 },
+ { language: 'en', theme: 'light', width: 360, height: 800 },
+ { language: 'nb', theme: 'light', width: 390, height: 844 },
+ { language: 'en', theme: 'dark', width: 768, height: 1024 },
+ { language: 'nb', theme: 'dark', width: 1024, height: 768 },
+ { language: 'en', theme: 'light', width: 1280, height: 320 },
+ { language: 'nb', theme: 'light', width: 1440, height: 900 },
+ { language: 'en', theme: 'dark', width: 1920, height: 1080 },
+];
+
+test('[P7-02 PRES-C04 E09] real SQLite evidence list preserves owner boundaries and existing validation', async ({ page, owner, playwright }, info) => {
+ const created = await page.request.post(`${apiUrl}/career/evidence`, { headers: owner.headers,
+ data: { category: 'project', title: 'Owner A evidence', statement: 'Recorded, reviewed fact.', tags: [' C# ', 'c#', 'Norsk'], sourceType: 'manual', sourceReference: ' Retrospective ', isVerified: true } });
+ expect(created.status()).toBe(200);
+ const item = await created.json();
+ const listed = await page.request.get(`${apiUrl}/career/evidence`);
+ expect(listed.status(), 'the actual local SQLite HTTP list must succeed').toBe(200);
+ expect(await listed.json()).toEqual([item]);
+ expect(item.tags).toEqual(['C#', 'Norsk']);
+ expect(item.sourceReference).toBe('Retrospective');
+ const admin = await playwright.request.newContext();
+ const other = await playwright.request.newContext();
+ const anonymous = await playwright.request.newContext();
+ try {
+ const adminOwner = await login(admin, 'e2e@example.test');
+ const otherOwner = await login(other, await createOwner(admin, adminOwner.headers));
+ expect(await (await other.get(`${apiUrl}/career/evidence?ownerUserId=${encodeURIComponent(owner.id)}`)).json()).toEqual([]);
+ expect((await other.put(`${apiUrl}/career/evidence/${item.id}`, { headers: otherOwner.headers,
+ data: { title: 'Foreign overwrite', statement: 'Denied' } })).status()).toBe(404);
+ expect((await other.delete(`${apiUrl}/career/evidence/${item.id}`, { headers: otherOwner.headers })).status()).toBe(404);
+ expect((await anonymous.get(`${apiUrl}/career/evidence`)).status()).toBe(401);
+ expect((await page.request.post(`${apiUrl}/career/evidence`, { headers: owner.headers,
+ data: { title: ' ', statement: 'Not saved' } })).status()).toBe(400);
+ expect((await page.request.post(`${apiUrl}/career/evidence`, { headers: owner.headers,
+ data: { title: 'Not saved', statement: ' ' } })).status()).toBe(400);
+ expect(await (await page.request.get(`${apiUrl}/career/evidence`)).json()).toEqual([item]);
+ await info.attach('native-evidence-owner-provider-contract', { body: JSON.stringify({ provider: 'Local Playwright SQLite', list200: true,
+ foreignUpdate404: true, foreignDelete404: true, anonymous401: true, invalidCreate400: true, noForeignMutation: true,
+ qualification: 'Actual preceding HTTP assertions; no InMemory or production-provider inference' }), contentType: 'application/json' });
+ } finally { await admin.dispose(); await other.dispose(); await anonymous.dispose(); }
+});
+
+for (const sample of matrix) {
+ test(`[P7-02 PRES-C01 C02 C04 C05 E08 E09] ${sample.language}/${sample.theme} ${sample.width}px overview and factual evidence preserve canonical source and recent CV links`, async ({ page, owner }, info) => {
+ test.setTimeout(120_000);
+ const profile = { version: '1', contact: { fullName: 'Åse Kunnskapsbank', headline: 'Canonical source' },
+ jobs: [{ title: 'Engineer', company: 'Dokumentasjon AS', bullets: ['Recorded work, no invented outcomes.'] }], skills: ['C#', 'Norsk'] };
+ expect((await page.request.put(`${apiUrl}/career/profile`, { headers: owner.headers, data: { profile } })).status()).toBe(200);
+ const before = await (await page.request.get(`${apiUrl}/career/profile`)).json();
+ const cvs: CvVariant[] = [];
+ for (let i = 0; i < 4; i++) {
+ const r = await page.request.post(`${apiUrl}/cv/variants`, { headers: owner.headers, data: { name: `CV ${i + 1} — ${'Lang dokumenttittel '.repeat(5)}` } });
+ expect(r.status()).toBe(200); cvs.push(await r.json());
+ }
+ const summariesResponse = await page.request.get(`${apiUrl}/cv/variants`);
+ expect(summariesResponse.status()).toBe(200);
+ const authoritativeRecent = (await summariesResponse.json()).slice(0, 3).map((cv: { id: number }) => `/career/builder/${cv.id}`);
+ const item = await page.request.post(`${apiUrl}/career/evidence`, { headers: owner.headers, data: {
+ title: 'Et dokumentert prosjekt med en lang tittel — æøå '.repeat(4), statement: 'Faktisk dokumentasjon fra et gjennomført prosjekt. '.repeat(8),
+ category: 'project', tags: ['Tilgjengelighet', 'Systematisk dokumentasjon'], sourceType: 'manual', sourceReference: 'Prosjektgjennomgang — æøå', isVerified: true,
+ } });
+ expect(item.status()).toBe(200);
+ const evidence = await item.json();
+ if (sample.width === 1440) {
+ for (let i = 1; i <= 10; i++) {
+ expect((await page.request.post(`${apiUrl}/career/evidence`, { headers: owner.headers, data: {
+ title: `Additional owned evidence ${i}`, statement: 'Another supported statement. '.repeat(8), sourceType: 'manual', isVerified: true,
+ } })).status()).toBe(200);
+ }
+ expect(await (await page.request.get(`${apiUrl}/career/evidence`)).json()).toHaveLength(11);
+ }
+ await enter(page, owner, sample);
+ const t = translations[sample.language];
+ await expect(page.getByRole('heading', { name: t.careerWorkspaceOverviewTab, level: 2 })).toBeVisible();
+ await expect(page.getByRole('progressbar', { name: t.careerOverviewCompletenessLabel })).toHaveAttribute('aria-valuenow', String(before.completeness.percent));
+ const recent = page.getByRole('region', { name: t.careerOverviewRecentCvs, exact: true });
+ await expect(recent.getByRole('link', { name: t.cvDashboardOpen, exact: true })).toHaveCount(3);
+ const links = await recent.getByRole('link', { name: t.cvDashboardOpen, exact: true }).evaluateAll(nodes => nodes.map(node => node.getAttribute('href')));
+ expect(new Set(links).size).toBe(3);
+ expect(links).toEqual(authoritativeRecent);
+ await capture(page, info, sample, 'populated-overview');
+ await navigateSection(page, sample.language, 'evidence');
+ await expect(page.getByRole('heading', { name: t.careerEvidenceTitle, level: 2 })).toBeVisible();
+ await expect(page.getByText(evidence.title, { exact: true })).toBeVisible();
+ await expect(page.getByLabel(t.careerEvidenceStatement)).toBeVisible();
+ if (sample.width === 1440) await expect(page.getByText('Additional owned evidence 10', { exact: true })).toBeVisible();
+ await capture(page, info, sample, 'long-evidence');
+ expect(await (await page.request.get(`${apiUrl}/career/profile`)).json()).toEqual(before);
+ for (const cv of cvs) expect(await (await page.request.get(`${apiUrl}/cv/variants/${cv.id}`)).json()).toEqual(cv);
+ await page.reload();
+ await expect(page.getByText(evidence.title, { exact: true })).toBeVisible();
+ });
+}
+
+for (const failedPath of ['/career/profile', '/profile-cv/runs', '/cv/variants']) {
+ test(`[P7-02 PRES-C02 E09] unavailable ${failedPath} stays unknown and retries its reads without writes or false first-run guidance`, async ({ page, owner }, info) => {
+ const sample: Sample = { language: 'en', theme: 'dark', width: 390, height: 844 };
+ const actualProfile = await (await page.request.get(`${apiUrl}/career/profile`)).json();
+ let fail = true;
+ let reads = 0;
+ await page.route(`**/api${failedPath}`, async route => {
+ if (route.request().method() === 'GET') {
+ reads++;
+ if (fail) return route.fulfill({ status: 500, contentType: 'application/json', body: JSON.stringify({ message: 'Controlled source read unavailable' }) });
+ }
+ return route.continue();
+ });
+ await enter(page, owner, sample);
+ const t = translations.en;
+ const message = failedPath === '/career/profile' ? t.careerOverviewUnavailable : failedPath === '/profile-cv/runs' ? t.careerOverviewImportUnavailable : t.careerOverviewRecentFailed;
+ const alert = page.getByRole('alert').filter({ hasText: message });
+ await expect(alert).toBeVisible();
+ await expect(page.getByText(t.careerOverviewFirstRun, { exact: true })).toHaveCount(0);
+ if (failedPath === '/career/profile') await expect(page.getByRole('progressbar', { name: t.careerOverviewCompletenessLabel })).toHaveCount(0);
+ if (failedPath === '/profile-cv/runs') await expect(page.getByText(t.careerOverviewNoImport, { exact: true })).toHaveCount(0);
+ if (failedPath === '/cv/variants') await expect(page.getByText(t.careerOverviewNoCvs, { exact: true })).toHaveCount(0);
+ await capture(page, info, sample, `unavailable-${failedPath.split('/').pop()}`);
+ const writes: string[] = [];
+ page.on('request', request => { if (request.url().startsWith(apiUrl) && !['GET', 'HEAD', 'OPTIONS'].includes(request.method())) writes.push(request.method() + ' ' + request.url()); });
+ const beforeReads = reads;
+ fail = false;
+ await alert.getByRole('button', { name: t.retry, exact: true }).focus();
+ await page.keyboard.press('Enter');
+ await expect(alert).toHaveCount(0);
+ const focusRegion = failedPath === '/career/profile' ? t.careerOverviewProfileStatus : failedPath === '/profile-cv/runs' ? t.careerOverviewCvImport : t.careerOverviewRecentCvs;
+ const focusLabel = failedPath === '/career/profile' ? t.careerOverviewImproveProfile : failedPath === '/profile-cv/runs' ? t.careerOverviewImportCv : t.careerOverviewViewAll;
+ await expect(page.getByRole('region', { name: focusRegion, exact: true }).getByRole('link', { name: focusLabel, exact: true })).toBeFocused();
+ await expect(page.getByRole('progressbar', { name: t.careerOverviewCompletenessLabel })).toHaveAttribute('aria-valuenow', String(actualProfile.completeness.percent));
+ expect(reads).toBe(beforeReads + 1);
+ expect(writes).toEqual([]);
+ });
+}
+
+test('[P7-02 PRES-C04 E09] evidence pending/failure/read retry and failed save preserve drafts across section changes, cancellation and actual deletion', async ({ page, owner }, info) => {
+ test.setTimeout(120_000);
+ const sample: Sample = { language: 'en', theme: 'light', width: 390, height: 844 };
+ expect((await page.request.put(`${apiUrl}/career/profile`, { headers: owner.headers, data: {
+ profile: { version: '1', contact: { fullName: 'Independent canonical source' }, skills: ['Original source fact'] }, cvText: 'Original raw source',
+ } })).status()).toBe(200);
+ const canonicalBefore = await (await page.request.get(`${apiUrl}/career/profile`)).json();
+ const retainedCvs: CvVariant[] = [];
+ for (const name of ['Selected CV', 'Sibling CV']) {
+ const response = await page.request.post(`${apiUrl}/cv/variants`, { headers: owner.headers, data: { name } });
+ expect(response.status()).toBe(200); retainedCvs.push(await response.json());
+ }
+ let readFailure = true;
+ let holdRead = false;
+ let releaseRead!: () => void;
+ const delayedRead = new Promise(resolve => { releaseRead = resolve; });
+ let saveFailure = true;
+ const payloads: unknown[] = [];
+ await page.route('**/api/career/evidence', async route => {
+ const request = route.request();
+ if (request.method() === 'GET' && readFailure) return route.fulfill({ status: 500, contentType: 'application/json', body: JSON.stringify({ message: 'Controlled evidence read unavailable' }) });
+ if (request.method() === 'GET' && holdRead) await delayedRead;
+ if (request.method() === 'POST') {
+ payloads.push(request.postDataJSON());
+ if (saveFailure) return route.fulfill({ status: 500, contentType: 'application/json', body: JSON.stringify({ message: 'Controlled evidence write unavailable' }) });
+ }
+ return route.continue();
+ });
+ await enter(page, owner, sample, 'evidence');
+ const t = translations.en;
+ const readAlert = page.getByRole('alert').filter({ hasText: 'Controlled evidence read unavailable' });
+ await expect(readAlert).toBeVisible();
+ await expect(page.getByText(t.careerEvidenceEmpty, { exact: true })).toHaveCount(0);
+ readFailure = false;
+ holdRead = true;
+ await readAlert.getByRole('button', { name: t.retry, exact: true }).click();
+ const bank = page.getByRole('region', { name: t.careerEvidenceTitle, exact: true });
+ await expect(bank.getByText(t.loading, { exact: true })).toBeVisible();
+ await expect(page.getByText(t.careerEvidenceEmpty, { exact: true })).toHaveCount(0);
+ await expect(page.getByRole('button', { name: t.careerEvidenceSave, exact: true })).toBeDisabled();
+ await capture(page, info, sample, 'pending-evidence-read');
+ releaseRead();
+ await expect(page.getByText(t.careerEvidenceEmpty, { exact: true })).toBeVisible();
+ await page.getByLabel(t.careerEvidenceItemTitle).fill('Reviewed project — æøå');
+ await page.getByLabel(t.careerEvidenceStatement).fill('A fact supplied by the owner.');
+ await page.getByLabel(t.careerEvidenceTags, { exact: true }).fill('C#, Norsk');
+ await page.getByLabel(t.careerEvidenceSource, { exact: true }).fill('Project retrospective');
+ await page.getByRole('button', { name: t.careerEvidenceSave, exact: true }).click();
+ const saveAlert = page.getByRole('alert').filter({ hasText: 'Controlled evidence write unavailable' });
+ await expect(saveAlert).toBeVisible();
+ await expect(saveAlert.getByRole('button', { name: t.retry, exact: true })).toHaveCount(0);
+ await capture(page, info, sample, 'failed-save-retained-draft');
+ await navigateSection(page, 'en', 'overview');
+ await navigateSection(page, 'en', 'evidence');
+ await expect(page.getByLabel(t.careerEvidenceItemTitle)).toHaveValue('Reviewed project — æøå');
+ await expect(page.getByLabel(t.careerEvidenceStatement)).toHaveValue('A fact supplied by the owner.');
+ saveFailure = false;
+ const saved = page.waitForResponse(response => response.url() === `${apiUrl}/career/evidence` && response.request().method() === 'POST');
+ await page.getByRole('button', { name: t.careerEvidenceSave, exact: true }).focus();
+ await page.keyboard.press('Enter');
+ expect((await saved).status()).toBe(200);
+ expect(payloads).toEqual(Array(2).fill({ category: 'achievement', title: 'Reviewed project — æøå', statement: 'A fact supplied by the owner.', tags: ['C#', ' Norsk'], sourceType: 'manual', sourceReference: 'Project retrospective', isVerified: true }));
+ const [item] = await (await page.request.get(`${apiUrl}/career/evidence`)).json();
+ await expect(page.getByText(item.title, { exact: true })).toBeVisible();
+ await expect(page.getByLabel(t.careerEvidenceItemTitle)).toHaveValue('');
+ expect(await (await page.request.get(`${apiUrl}/career/profile`)).json()).toEqual(canonicalBefore);
+ for (const cv of retainedCvs) expect(await (await page.request.get(`${apiUrl}/cv/variants/${cv.id}`)).json()).toEqual(cv);
+ const row = page.getByRole('article').filter({ hasText: item.title });
+ const remove = row.getByRole('button', { name: t.careerEvidenceDeleteMessage.replace('{title}', item.title), exact: true });
+ await remove.focus();
+ await page.keyboard.press('Enter');
+ const dialog = page.getByRole('dialog', { name: t.careerEvidenceDeleteTitle, exact: true });
+ await expect(dialog).toBeVisible();
+ await dialog.getByRole('button', { name: t.cancel, exact: true }).click();
+ await expect(remove).toBeFocused();
+ expect(await (await page.request.get(`${apiUrl}/career/evidence`)).json()).toEqual([item]);
+ let deleteFailure = true;
+ await page.route(`**/api/career/evidence/${item.id}`, route => route.request().method() === 'DELETE' && deleteFailure
+ ? route.fulfill({ status: 500, contentType: 'application/json', body: JSON.stringify({ message: 'Controlled evidence deletion unavailable' }) }) : route.continue());
+ await remove.click();
+ const failedDelete = page.waitForResponse(response => response.url() === `${apiUrl}/career/evidence/${item.id}` && response.request().method() === 'DELETE');
+ await dialog.getByRole('button', { name: t.deleteAction, exact: true }).click();
+ expect((await failedDelete).status()).toBe(500);
+ const deleteAlert = row.getByRole('alert').filter({ hasText: 'Controlled evidence deletion unavailable' });
+ await expect(deleteAlert).toBeVisible();
+ expect(await (await page.request.get(`${apiUrl}/career/evidence`)).json()).toEqual([item]);
+ await capture(page, info, sample, 'failed-delete-retained-row');
+ deleteFailure = false;
+ await deleteAlert.getByRole('button', { name: t.retry, exact: true }).focus();
+ await page.keyboard.press('Enter');
+ await expect(dialog).toBeVisible();
+ const deleted = page.waitForResponse(response => response.url() === `${apiUrl}/career/evidence/${item.id}` && response.request().method() === 'DELETE');
+ await dialog.getByRole('button', { name: t.deleteAction, exact: true }).click();
+ expect((await deleted).status()).toBe(204);
+ await expect(page.getByText(t.careerEvidenceEmpty, { exact: true })).toBeVisible();
+ await expect(page.getByLabel(t.careerEvidenceItemTitle)).toBeFocused();
+ await page.reload();
+ await expect(page.getByText(t.careerEvidenceEmpty, { exact: true })).toBeVisible();
+ expect(await (await page.request.get(`${apiUrl}/career/profile`)).json()).toEqual(canonicalBefore);
+ for (const cv of retainedCvs) expect(await (await page.request.get(`${apiUrl}/cv/variants/${cv.id}`)).json()).toEqual(cv);
+});
+
+test('[P7-02 PRES-C01 C02] existing raw source copy and history entry remain read-only', async ({ page, owner, context }, info) => {
+ const sample: Sample = { language: 'en', theme: 'light', width: 1440, height: 900 };
+ const profile = { version: '1', contact: { fullName: 'Canonical source' }, skills: ['Recorded skill'] };
+ const raw = 'Exact raw source — æøå\nA supported owner claim.\n';
+ expect((await page.request.put(`${apiUrl}/career/profile`, { headers: owner.headers, data: { profile: { ...profile, skills: ['Recorded skill', 'Recorded later skill'] }, cvText: raw } })).status()).toBe(200);
+ expect((await page.request.put(`${apiUrl}/career/profile`, { headers: owner.headers, data: { profile, cvText: raw } })).status()).toBe(200);
+ const before = await (await page.request.get(`${apiUrl}/career/profile`)).json();
+ const history = await (await page.request.get(`${apiUrl}/career/profile/versions`)).json();
+ await context.grantPermissions(['clipboard-read', 'clipboard-write']);
+ await enter(page, owner, sample);
+ await navigateSection(page, 'en', 'import');
+ const t = translations.en;
+ await page.getByRole('button', { name: new RegExp(t.profileCvRawPanelTitle) }).click();
+ await page.getByRole('button', { name: t.profileCopyCvText, exact: true }).click();
+ const copied = await page.evaluate(() => navigator.clipboard.readText());
+ await info.attach('native-clipboard-line-endings', { body: JSON.stringify({ requestedSource: raw, copied,
+ requestedCodePoints: [...raw].map(value => value.codePointAt(0)), copiedCodePoints: [...copied].map(value => value.codePointAt(0)),
+ qualification: 'Windows clipboard may convert LF to CRLF; preserve exact text after this explicit platform normalization, without trimming or other changes' }), contentType: 'application/json' });
+ expect(copied.replace(/\r\n/g, '\n')).toBe(raw);
+ await navigateSection(page, 'en', 'profile');
+ const label = t.profileCvVersionHistory.replace('{count}', String(history.length));
+ await page.getByRole('button', { name: label, exact: true }).click();
+ await expect(page.getByRole('button', { name: t.profileCvVersionRestore, exact: true }).first()).toBeVisible();
+ expect(await (await page.request.get(`${apiUrl}/career/profile`)).json()).toEqual(before);
+ expect(await (await page.request.get(`${apiUrl}/career/profile/versions`)).json()).toEqual(history);
+ await info.attach('native-career-source-history-entry', { body: JSON.stringify({ clipboardContentPreservedWithExplicitWindowsLineEndingNormalization: true, historyEntryVisible: true,
+ canonicalAndHistoryUnchanged: true, qualification: 'Browser clipboard permission granted; exact OS clipboard bytes/human acceptance not claimed; restore/save/import-review migration is P7-03' }), contentType: 'application/json' });
+});
diff --git a/job-tracker-ui/src/career-evidence.test.tsx b/job-tracker-ui/src/career-evidence.test.tsx
index 17a6271..dabdab3 100644
--- a/job-tracker-ui/src/career-evidence.test.tsx
+++ b/job-tracker-ui/src/career-evidence.test.tsx
@@ -1,23 +1,182 @@
import React from "react";
import "@testing-library/jest-dom";
-import { fireEvent, render, screen, waitFor } from "@testing-library/react";
+import { act, fireEvent, render, screen, waitFor, within } from "@testing-library/react";
import CareerEvidenceBank from "./views/career/CareerEvidenceBank";
import { I18nProvider } from "./i18n/I18nProvider";
+import { translations } from "./i18n/translations";
+import { ConfirmProvider } from "./confirm";
import { api } from "./api";
-jest.mock("./api", () => ({ api: { get: jest.fn(), post: jest.fn(), delete: jest.fn() }, getApiErrorMessage: (_e: unknown, fallback: string) => fallback }));
-jest.mock("./confirm", () => ({ useConfirm: () => ({ confirm: jest.fn().mockResolvedValue(true) }) }));
+jest.mock("./api", () => ({
+ api: { get: jest.fn(), post: jest.fn(), delete: jest.fn(), put: jest.fn(), patch: jest.fn() },
+ getApiErrorMessage: jest.requireActual("./api").getApiErrorMessage,
+}));
const mocked = api as jest.Mocked;
+const evidence = { id: 1, category: "achievement", title: "Reduced incidents", statement: "Added rollback checks", tags: ["reliability"], sourceReference: "retrospective" };
+
+function open(language: "en" | "nb" = "en") {
+ window.localStorage.setItem("uiLanguage", language);
+ return render();
+}
+
+function fillDraft() {
+ fireEvent.change(screen.getByLabelText("Short title", { exact: false }), { target: { value: evidence.title } });
+ fireEvent.change(screen.getByLabelText("Evidence statement", { exact: false }), { target: { value: evidence.statement } });
+ fireEvent.change(screen.getByLabelText("Skills and keywords"), { target: { value: "reliability, C#" } });
+ fireEvent.change(screen.getByLabelText("Source or provenance"), { target: { value: evidence.sourceReference } });
+}
+
+function expectNoWrites() {
+ for (const method of [mocked.post, mocked.delete, mocked.put, mocked.patch]) expect(method).not.toHaveBeenCalled();
+}
+
+beforeEach(() => {
+ jest.clearAllMocks();
+ window.localStorage.removeItem("uiLanguage");
+ mocked.get.mockReset().mockResolvedValue({ data: [] } as any);
+ for (const method of [mocked.post, mocked.delete, mocked.put, mocked.patch]) method.mockReset().mockRejectedValue(new Error("Unexpected write"));
+});
+
+afterEach(() => window.localStorage.removeItem("uiLanguage"));
test("saves factual evidence with provenance and tags", async () => {
- mocked.get.mockResolvedValue({ data: [] } as any);
- mocked.post.mockResolvedValue({ data: { id: 1, category: "achievement", title: "Reduced incidents", statement: "Added rollback checks", tags: ["reliability"], sourceReference: "retrospective" } } as any);
- render();
- fireEvent.change(await screen.findByLabelText("Short title"), { target: { value: "Reduced incidents" } });
- fireEvent.change(screen.getByLabelText("Evidence statement"), { target: { value: "Added rollback checks" } });
- fireEvent.change(screen.getByLabelText("Skills and keywords"), { target: { value: "reliability" } });
- fireEvent.change(screen.getByLabelText("Source or provenance"), { target: { value: "retrospective" } });
+ mocked.post.mockResolvedValue({ data: evidence } as any);
+ open();
+ await screen.findByText(translations.en.careerEvidenceEmpty);
+ fillDraft();
fireEvent.click(screen.getByRole("button", { name: "Save evidence" }));
- await waitFor(() => expect(mocked.post).toHaveBeenCalledWith("/career/evidence", expect.objectContaining({ title: "Reduced incidents", isVerified: true, sourceType: "manual" })));
- expect(await screen.findByText("Added rollback checks")).toBeInTheDocument();
+ await waitFor(() => expect(mocked.post).toHaveBeenCalledWith("/career/evidence", {
+ category: "achievement", title: evidence.title, statement: evidence.statement,
+ tags: ["reliability", " C#"], sourceType: "manual", sourceReference: evidence.sourceReference, isVerified: true,
+ }));
+ expect(await screen.findByText(evidence.statement)).toBeInTheDocument();
+});
+
+test("pending evidence reads announce loading without claiming an empty bank or allowing a raced save", async () => {
+ let finish!: (value: any) => void;
+ mocked.get.mockReturnValue(new Promise((resolve) => { finish = resolve; }));
+ open();
+ expect(screen.getByRole("status")).toHaveTextContent(translations.en.loading);
+ expect(screen.queryByText(translations.en.careerEvidenceEmpty)).not.toBeInTheDocument();
+ fillDraft();
+ const save = screen.getByRole("button", { name: translations.en.careerEvidenceSave });
+ expect(save).toBeDisabled();
+ fireEvent.click(save);
+ expectNoWrites();
+ await act(async () => finish({ data: [] }));
+ expect(await screen.findByText(translations.en.careerEvidenceEmpty)).toBeVisible();
+ expect(save).toBeEnabled();
+ expect(screen.getByLabelText("Short title", { exact: false })).toHaveValue(evidence.title);
+});
+
+test("failed list reads remain distinct from empty state and retry only GET while preserving the draft", async () => {
+ mocked.get.mockRejectedValueOnce({ response: { status: 503, data: "Evidence list unavailable" } });
+ open();
+ const alert = await screen.findByRole("alert");
+ expect(alert).toHaveTextContent("Evidence list unavailable");
+ expect(screen.queryByText(translations.en.careerEvidenceEmpty)).not.toBeInTheDocument();
+ fillDraft();
+ fireEvent.click(within(alert).getByRole("button", { name: translations.en.retry }));
+ expect(await screen.findByText(translations.en.careerEvidenceEmpty)).toBeVisible();
+ expect(screen.getByLabelText("Evidence statement", { exact: false })).toHaveValue(evidence.statement);
+ expect(mocked.get.mock.calls.map(([url]) => url)).toEqual(["/career/evidence", "/career/evidence"]);
+ expectNoWrites();
+});
+
+test("failed saves retain factual inputs and retry the same explicit save without reloading the list", async () => {
+ mocked.post.mockRejectedValueOnce({ response: { status: 503, data: "Evidence save unavailable" } }).mockResolvedValueOnce({ data: evidence } as any);
+ open();
+ await screen.findByText(translations.en.careerEvidenceEmpty);
+ fillDraft();
+ const form = screen.getByRole("region", { name: translations.en.careerEvidenceAdd });
+ fireEvent.click(within(form).getByRole("button", { name: translations.en.careerEvidenceSave }));
+ expect(await within(form).findByRole("alert")).toHaveTextContent("Evidence save unavailable");
+ expect(screen.getByLabelText("Short title", { exact: false })).toHaveValue(evidence.title);
+ expect(screen.getByLabelText("Evidence statement", { exact: false })).toHaveValue(evidence.statement);
+ expect(screen.getByLabelText("Skills and keywords")).toHaveValue("reliability, C#");
+ expect(screen.getByLabelText("Source or provenance")).toHaveValue(evidence.sourceReference);
+ fireEvent.click(within(form).getByRole("button", { name: translations.en.careerEvidenceSave }));
+ expect(await screen.findByRole("article", { name: evidence.title })).toHaveTextContent(evidence.statement);
+ expect(mocked.post).toHaveBeenCalledTimes(2);
+ expect(mocked.post.mock.calls[1]).toEqual(mocked.post.mock.calls[0]);
+ expect(mocked.get).toHaveBeenCalledTimes(1);
+ expect(mocked.delete).not.toHaveBeenCalled();
+ expect(mocked.put).not.toHaveBeenCalled();
+ expect(screen.getByLabelText("Short title", { exact: false })).toHaveValue("");
+});
+
+test("a pending save prevents duplicate writes and prevents edits being cleared by the response", async () => {
+ let finish!: (value: any) => void;
+ mocked.post.mockReturnValue(new Promise((resolve) => { finish = resolve; }));
+ open();
+ await screen.findByText(translations.en.careerEvidenceEmpty);
+ fillDraft();
+ const save = screen.getByRole("button", { name: translations.en.careerEvidenceSave });
+ fireEvent.click(save);
+ expect(save).toBeDisabled();
+ expect(screen.getByLabelText("Short title", { exact: false })).toBeDisabled();
+ expect(screen.getByLabelText("Evidence statement", { exact: false })).toBeDisabled();
+ fireEvent.click(save);
+ expect(mocked.post).toHaveBeenCalledTimes(1);
+ await act(async () => finish({ data: evidence }));
+ expect(await screen.findByRole("article", { name: evidence.title })).toBeVisible();
+ expect(save).toBeDisabled();
+ expect(screen.getByLabelText("Short title", { exact: false })).toBeEnabled();
+});
+
+test("contextual deletion is named and cancellation performs no writes or draft loss", async () => {
+ mocked.get.mockResolvedValue({ data: [evidence] } as any);
+ open();
+ const item = await screen.findByRole("article", { name: evidence.title });
+ fillDraft();
+ const deleteButton = within(item).getByRole("button", { name: /Reduced incidents/ });
+ deleteButton.focus();
+ fireEvent.click(deleteButton);
+ const dialog = await screen.findByRole("dialog", { name: translations.en.careerEvidenceDeleteTitle });
+ expect(dialog).toHaveTextContent(evidence.title);
+ expect(deleteButton).toBeEnabled();
+ fireEvent.click(within(dialog).getByRole("button", { name: translations.en.cancel }));
+ await waitFor(() => expect(screen.queryByRole("dialog")).not.toBeInTheDocument());
+ expect(deleteButton).toHaveFocus();
+ expect(item).toBeVisible();
+ expect(screen.getByLabelText("Short title", { exact: false })).toHaveValue(evidence.title);
+ expectNoWrites();
+});
+
+test("failed deletion keeps the row and draft, then reconfirms the same delete without list reload", async () => {
+ mocked.get.mockResolvedValue({ data: [evidence] } as any);
+ mocked.delete.mockRejectedValueOnce({ response: { status: 503, data: "Evidence deletion unavailable" } }).mockResolvedValueOnce({} as any);
+ open();
+ const item = await screen.findByRole("article", { name: evidence.title });
+ fillDraft();
+ fireEvent.click(within(item).getByRole("button", { name: /Reduced incidents/ }));
+ let dialog = await screen.findByRole("dialog", { name: translations.en.careerEvidenceDeleteTitle });
+ fireEvent.click(within(dialog).getByRole("button", { name: translations.en.deleteAction }));
+ expect(await within(item).findByRole("alert")).toHaveTextContent("Evidence deletion unavailable");
+ expect(mocked.delete).toHaveBeenCalledWith("/career/evidence/1");
+ expect(screen.getByLabelText("Evidence statement", { exact: false })).toHaveValue(evidence.statement);
+ await waitFor(() => expect(screen.queryByRole("dialog")).not.toBeInTheDocument());
+ fireEvent.click(within(item).getByRole("button", { name: translations.en.retry }));
+ dialog = await screen.findByRole("dialog", { name: translations.en.careerEvidenceDeleteTitle });
+ fireEvent.click(within(dialog).getByRole("button", { name: translations.en.deleteAction }));
+ await waitFor(() => expect(screen.queryByRole("article", { name: evidence.title })).not.toBeInTheDocument());
+ expect(mocked.delete.mock.calls.map(([url]) => url)).toEqual(["/career/evidence/1", "/career/evidence/1"]);
+ expect(mocked.get).toHaveBeenCalledTimes(1);
+ expect(mocked.post).not.toHaveBeenCalled();
+ expect(screen.getByLabelText("Short title", { exact: false })).toHaveValue(evidence.title);
+ await waitFor(() => expect(screen.getByLabelText("Short title", { exact: false })).toHaveFocus());
+});
+
+test("evidence sections and factual fields have semantic headings and required labels in Bokmål", async () => {
+ mocked.get.mockResolvedValue({ data: [evidence] } as any);
+ open("nb");
+ expect(screen.getByRole("heading", { name: translations.nb.careerEvidenceTitle, level: 2 })).toBeInTheDocument();
+ expect(screen.getByRole("heading", { name: translations.nb.careerEvidenceAdd, level: 3 })).toBeInTheDocument();
+ expect(screen.getByLabelText(translations.nb.careerEvidenceItemTitle, { exact: false })).toBeRequired();
+ expect(screen.getByLabelText(translations.nb.careerEvidenceStatement, { exact: false })).toBeRequired();
+ const item = await screen.findByRole("article", { name: evidence.title });
+ expect(within(item).getByRole("heading", { name: evidence.title, level: 3 })).toBeInTheDocument();
+ expect(item).toHaveTextContent(translations.nb.careerEvidenceCategory_achievement);
+ expect(item).toHaveTextContent(evidence.sourceReference);
+ expectNoWrites();
});
diff --git a/job-tracker-ui/src/career-workspace-page.test.tsx b/job-tracker-ui/src/career-workspace-page.test.tsx
index b6be7d2..1cad68b 100644
--- a/job-tracker-ui/src/career-workspace-page.test.tsx
+++ b/job-tracker-ui/src/career-workspace-page.test.tsx
@@ -1,16 +1,23 @@
import React from "react";
import "@testing-library/jest-dom";
-import { render, screen, waitFor } from "@testing-library/react";
+import { act, fireEvent, render, screen, waitFor, within } from "@testing-library/react";
import { cvBuilderApi } from "./cvBuilder";
import CareerWorkspaceOverview, { CareerWorkspaceImportRun } from "./views/career/CareerWorkspaceOverview";
import { I18nProvider } from "./i18n/I18nProvider";
+import { translations } from "./i18n/translations";
+import { api } from "./api";
+import { ToastProvider } from "./toast";
+import { ConfirmProvider } from "./confirm";
+import CareerProfilePage from "./views/CareerProfilePage";
jest.mock("./cvBuilder", () => ({
cvBuilderApi: { list: jest.fn() },
}));
const mockedList = cvBuilderApi.list as jest.MockedFunction;
+const mockedApi = api as jest.Mocked;
+const careerResponse = { profile: { version: "1", contact: { fullName: "Stored career name" }, skills: ["Stored C#"] }, completeness: { percent: 70, missing: ["Projects"], sections: [] }, cvText: "Stored raw text" };
function renderOverview({
percent = 0,
@@ -18,12 +25,22 @@ function renderOverview({
runs = [],
loading = false,
loadError = null,
+ runsLoading = false,
+ runsLoadError = null,
+ onRetryProfile,
+ onRetryRuns,
+ profileDirty = false,
}: {
percent?: number;
missing?: string[];
runs?: CareerWorkspaceImportRun[];
loading?: boolean;
loadError?: string | null;
+ runsLoading?: boolean;
+ runsLoadError?: string | null;
+ onRetryProfile?: () => void;
+ onRetryRuns?: () => void;
+ profileDirty?: boolean;
} = {}) {
return render(
@@ -32,14 +49,28 @@ function renderOverview({
runs={runs}
loading={loading}
loadError={loadError}
+ runsLoading={runsLoading}
+ runsLoadError={runsLoadError}
+ onRetryProfile={onRetryProfile}
+ onRetryRuns={onRetryRuns}
+ profileDirty={profileDirty}
/>
,
);
}
beforeEach(() => {
+ jest.clearAllMocks();
+ window.history.replaceState({}, "", "/career");
window.localStorage.removeItem("uiLanguage");
- mockedList.mockResolvedValue([]);
+ mockedList.mockReset().mockResolvedValue([]);
+ mockedApi.get.mockReset().mockImplementation((url: string) => {
+ if (url === "/career/profile") return Promise.resolve({ data: careerResponse } as any);
+ if (url === "/auth/me") return Promise.resolve({ data: { id: "career-owner", provider: "local", displayName: "Account name" } } as any);
+ if (["/profile-cv/runs", "/career/profile/versions", "/career/evidence"].includes(url)) return Promise.resolve({ data: [] } as any);
+ return Promise.reject(new Error(`Unexpected read: ${url}`));
+ });
+ for (const method of [mockedApi.post, mockedApi.put, mockedApi.patch, mockedApi.delete]) method.mockReset().mockRejectedValue(new Error("Unexpected write"));
});
afterEach(() => {
@@ -107,3 +138,118 @@ test("workspace represents loading and profile-load errors without inventing sta
expect(screen.queryByText(/start by adding career information/i)).not.toBeInTheDocument();
await waitFor(() => expect(mockedList).toHaveBeenCalledTimes(1));
});
+
+test("a settled failed profile read hides the completeness score and retries only through its existing owner", async () => {
+ const retry = jest.fn();
+ renderOverview({ percent: 70, loadError: "Profile unavailable", onRetryProfile: retry });
+ const region = screen.getByRole("region", { name: translations.en.careerOverviewProfileStatus });
+ expect(within(region).queryByRole("progressbar")).not.toBeInTheDocument();
+ expect(within(region).queryByText("70%")).not.toBeInTheDocument();
+ expect(within(region).getByRole("alert")).toHaveTextContent(translations.en.careerOverviewUnavailable);
+ fireEvent.click(within(region).getByRole("button", { name: translations.en.retry }));
+ expect(retry).toHaveBeenCalledTimes(1);
+ expect(mockedApi.put).not.toHaveBeenCalled();
+ await screen.findByText(translations.en.careerOverviewNoCvs);
+});
+
+test("an unknown import read cannot claim no imports, completion or first-run guidance", async () => {
+ renderOverview({ runsLoading: true });
+ const region = screen.getByRole("region", { name: translations.en.careerOverviewCvImport });
+ expect(within(region).getByRole("status")).toHaveTextContent(translations.en.loading);
+ expect(screen.queryByText(translations.en.careerOverviewNoImport)).not.toBeInTheDocument();
+ expect(screen.queryByText(translations.en.careerOverviewImportComplete)).not.toBeInTheDocument();
+ await screen.findByText(translations.en.careerOverviewNoCvs);
+ expect(screen.queryByText(translations.en.careerOverviewFirstRun)).not.toBeInTheDocument();
+});
+
+test("a failed import read stays unknown and keeps its own retry separate from the profile read", async () => {
+ const retryRuns = jest.fn();
+ const retryProfile = jest.fn();
+ renderOverview({ runsLoadError: "Run read unavailable", onRetryRuns: retryRuns, onRetryProfile: retryProfile });
+ const region = screen.getByRole("region", { name: translations.en.careerOverviewCvImport });
+ expect(within(region).getByRole("alert")).toHaveTextContent(translations.en.careerOverviewImportUnavailable);
+ expect(screen.queryByText(translations.en.careerOverviewNoImport)).not.toBeInTheDocument();
+ fireEvent.click(within(region).getByRole("button", { name: translations.en.retry }));
+ expect(retryRuns).toHaveBeenCalledTimes(1);
+ expect(retryProfile).not.toHaveBeenCalled();
+ await screen.findByText(translations.en.careerOverviewNoCvs);
+ expect(screen.queryByText(translations.en.careerOverviewFirstRun)).not.toBeInTheDocument();
+});
+
+test("failed recent-CV reads do not imply first-run and retry the same list without writes", async () => {
+ mockedList.mockRejectedValueOnce(new Error("Recent list unavailable"));
+ renderOverview();
+ const region = screen.getByRole("region", { name: translations.en.careerOverviewRecentCvs });
+ expect(await within(region).findByRole("alert")).toHaveTextContent(translations.en.careerOverviewRecentFailed);
+ expect(screen.queryByText(translations.en.careerOverviewFirstRun)).not.toBeInTheDocument();
+ expect(within(region).queryByText(translations.en.careerOverviewNoCvs)).not.toBeInTheDocument();
+ fireEvent.click(within(region).getByRole("button", { name: translations.en.retry }));
+ expect(await within(region).findByText(translations.en.careerOverviewNoCvs)).toBeVisible();
+ expect(mockedList).toHaveBeenCalledTimes(2);
+ expect(mockedApi.post).not.toHaveBeenCalled();
+ expect(mockedApi.put).not.toHaveBeenCalled();
+});
+
+function renderCareer() {
+ return render();
+}
+
+test("the parent exposes failed import-read retry without canonical saves or history restores", async () => {
+ let fail = true;
+ const originalGet = mockedApi.get.getMockImplementation()!;
+ mockedApi.get.mockImplementation((url: string) => url === "/profile-cv/runs" && fail
+ ? Promise.reject(new Error("Run read unavailable")) : originalGet(url));
+ renderCareer();
+ const region = screen.getByRole("region", { name: translations.en.careerOverviewCvImport });
+ expect(await within(region).findByRole("alert")).toHaveTextContent(translations.en.careerOverviewImportUnavailable);
+ const careerReads = mockedApi.get.mock.calls.filter(([url]) => url === "/career/profile").length;
+ fail = false;
+ fireEvent.click(within(region).getByRole("button", { name: translations.en.retry }));
+ expect(await within(region).findByText(translations.en.careerOverviewNoImport)).toBeVisible();
+ expect(mockedApi.get.mock.calls.filter(([url]) => url === "/profile-cv/runs")).toHaveLength(2);
+ expect(mockedApi.get.mock.calls.filter(([url]) => url === "/career/profile")).toHaveLength(careerReads);
+ expect(mockedApi.post).not.toHaveBeenCalled();
+ expect(mockedApi.put).not.toHaveBeenCalled();
+});
+
+test("overview retry cannot overwrite a dirty canonical draft after a failed source refresh", async () => {
+ renderCareer();
+ await screen.findByText("70%");
+ fireEvent.click(screen.getByRole("tab", { name: translations.en.careerWorkspaceProfileTab }));
+ fireEvent.change(screen.getByLabelText("Full name"), { target: { value: "Unsaved canonical name" } });
+ fireEvent.click(screen.getByRole("tab", { name: translations.en.careerWorkspaceOverviewTab }));
+ const originalGet = mockedApi.get.getMockImplementation()!;
+ mockedApi.get.mockImplementation((url: string) => url === "/career/profile"
+ ? Promise.reject(new Error("Source refresh unavailable")) : originalGet(url));
+ act(() => window.dispatchEvent(new StorageEvent("storage", { key: "uiLanguage", newValue: "nb" })));
+ const region = await screen.findByRole("region", { name: translations.nb.careerOverviewProfileStatus });
+ expect(await within(region).findByRole("alert")).toHaveTextContent(translations.nb.careerOverviewRetryDraftHint);
+ const reads = mockedApi.get.mock.calls.length;
+ const retry = within(region).getByRole("button", { name: translations.nb.retry });
+ expect(retry).toBeDisabled();
+ fireEvent.click(retry);
+ expect(mockedApi.get).toHaveBeenCalledTimes(reads);
+ fireEvent.click(screen.getByRole("tab", { name: translations.nb.careerWorkspaceProfileTab }));
+ expect(screen.getByLabelText("Fullt navn")).toHaveValue("Unsaved canonical name");
+ expect(mockedApi.put).not.toHaveBeenCalled();
+});
+
+test("visited evidence keeps its draft across sections without an unvisited or repeated list request", async () => {
+ renderCareer();
+ await screen.findByText("70%");
+ expect(mockedApi.get).not.toHaveBeenCalledWith("/career/evidence");
+ fireEvent.click(screen.getByRole("tab", { name: translations.en.careerWorkspaceEvidenceTab }));
+ await screen.findByText(translations.en.careerEvidenceEmpty);
+ fireEvent.change(screen.getByLabelText(translations.en.careerEvidenceItemTitle, { exact: false }), { target: { value: "Unsaved evidence title" } });
+ fireEvent.change(screen.getByLabelText(translations.en.careerEvidenceStatement, { exact: false }), { target: { value: "Unsaved factual statement" } });
+ fireEvent.change(screen.getByLabelText(translations.en.careerEvidenceTags), { target: { value: "C#, reliability" } });
+ fireEvent.click(screen.getByRole("tab", { name: translations.en.careerWorkspaceProfileTab }));
+ expect(screen.queryByRole("region", { name: translations.en.careerEvidenceTitle })).not.toBeInTheDocument();
+ fireEvent.click(screen.getByRole("tab", { name: translations.en.careerWorkspaceEvidenceTab }));
+ expect(screen.getByLabelText(translations.en.careerEvidenceItemTitle, { exact: false })).toHaveValue("Unsaved evidence title");
+ expect(screen.getByLabelText(translations.en.careerEvidenceStatement, { exact: false })).toHaveValue("Unsaved factual statement");
+ expect(screen.getByLabelText(translations.en.careerEvidenceTags)).toHaveValue("C#, reliability");
+ expect(mockedApi.get.mock.calls.filter(([url]) => url === "/career/evidence")).toHaveLength(1);
+ expect(mockedApi.post).not.toHaveBeenCalled();
+ expect(mockedApi.put).not.toHaveBeenCalled();
+});
diff --git a/job-tracker-ui/src/i18n/translations.ts b/job-tracker-ui/src/i18n/translations.ts
index 89404cf..191bd3a 100644
--- a/job-tracker-ui/src/i18n/translations.ts
+++ b/job-tracker-ui/src/i18n/translations.ts
@@ -888,7 +888,9 @@ export const translations = {
careerOverviewSubtitle: "Choose what you want to work on next.",
careerOverviewOpenBuilder: "Open CV Builder",
careerOverviewFirstRun: "Start by adding career information manually or importing a CV.",
- careerOverviewUnavailable: "Workspace status is unavailable. The profile editor below can retry the request.",
+ careerOverviewUnavailable: "Workspace status is unavailable.",
+ careerOverviewImportUnavailable: "CV import status could not be loaded.",
+ careerOverviewRetryDraftHint: "Your Career profile has unsaved changes. Review them in the profile before retrying.",
careerOverviewProfileStatus: "Profile status",
careerOverviewCompleteness: "Profile completeness",
careerOverviewCompletenessLabel: "Career profile completeness",
@@ -927,7 +929,7 @@ export const translations = {
careerOverviewChooseJob: "Choose a job",
careerOverviewRecentCvs: "Recent CVs",
careerOverviewViewAll: "View all CVs",
- careerOverviewRecentFailed: "Recent CVs could not be loaded. Open the CV Builder to try again.",
+ careerOverviewRecentFailed: "Recent CVs could not be loaded.",
careerOverviewNoCvs: "No CV documents yet.",
careerOverviewUpdated: "Updated {date}",
careerOverviewJobSpecific: "Job-specific",
@@ -3476,7 +3478,9 @@ export const translations = {
careerOverviewSubtitle: "Velg hva du vil arbeide med videre.",
careerOverviewOpenBuilder: "Åpne CV-bygger",
careerOverviewFirstRun: "Start med å legge til karriereinformasjon manuelt eller importere en CV.",
- careerOverviewUnavailable: "Status for karriereområdet er utilgjengelig. Profilredigeringen nedenfor kan prøve forespørselen på nytt.",
+ careerOverviewUnavailable: "Status for karriereområdet er utilgjengelig.",
+ careerOverviewImportUnavailable: "Kunne ikke laste status for CV-import.",
+ careerOverviewRetryDraftHint: "Karriereprofilen har ulagrede endringer. Se gjennom dem i profilen før du prøver igjen.",
careerOverviewProfileStatus: "Profilstatus",
careerOverviewCompleteness: "Hvor komplett profilen er",
careerOverviewCompletenessLabel: "Hvor komplett karriereprofilen er",
@@ -3515,7 +3519,7 @@ export const translations = {
careerOverviewChooseJob: "Velg en jobb",
careerOverviewRecentCvs: "Nylige CV-er",
careerOverviewViewAll: "Vis alle CV-er",
- careerOverviewRecentFailed: "Nylige CV-er kunne ikke lastes. Åpne CV-byggeren for å prøve igjen.",
+ careerOverviewRecentFailed: "Kunne ikke laste nylige CV-er.",
careerOverviewNoCvs: "Ingen CV-dokumenter ennå.",
careerOverviewUpdated: "Oppdatert {date}",
careerOverviewJobSpecific: "Jobbspesifikk",
diff --git a/job-tracker-ui/src/views/CareerProfilePage.tsx b/job-tracker-ui/src/views/CareerProfilePage.tsx
index 63ae437..0fe7a8d 100644
--- a/job-tracker-ui/src/views/CareerProfilePage.tsx
+++ b/job-tracker-ui/src/views/CareerProfilePage.tsx
@@ -150,7 +150,7 @@ export default function CareerProfilePage() {
const cvInputRef = useRef(null);
const avatarInputRef = useRef(null);
const [me, setMe] = useState(null);
- const [loading, setLoading] = useState(false);
+ const [loading, setLoading] = useState(true);
const [loadError, setLoadError] = useState(null);
const [uploadingCv, setUploadingCv] = useState(false);
const [improvingCv, setImprovingCv] = useState(false);
@@ -170,9 +170,11 @@ export default function CareerProfilePage() {
// The raw import/section parser remains available as an advanced recovery tool.
const [showAdvancedCvTools, setShowAdvancedCvTools] = useState(false);
const [workspaceSection, setWorkspaceSection] = useState(initialWorkspaceSection);
+ const [evidenceVisited, setEvidenceVisited] = useState(() => initialWorkspaceSection() === "evidence");
const navigateWorkspace = useCallback((next: CareerWorkspaceSection) => {
setWorkspaceSection(next);
+ if (next === "evidence") setEvidenceVisited(true);
if (typeof window === "undefined") return;
const url = new URL(window.location.href);
if (next === "overview") url.searchParams.delete("section");
@@ -205,6 +207,9 @@ export default function CareerProfilePage() {
}
}, [loadVersions, t, toast]);
const [extractionRuns, setExtractionRuns] = useState([]);
+ const [runsLoading, setRunsLoading] = useState(true);
+ const [runsLoadError, setRunsLoadError] = useState(null);
+ const runsReadId = useRef(0);
const [runDiffs, setRunDiffs] = useState>({});
const [reviewingRunId, setReviewingRunId] = useState(null);
const [acceptedLowConfidenceIds, setAcceptedLowConfidenceIds] = useState>({});
@@ -216,11 +221,19 @@ export default function CareerProfilePage() {
}, []);
const loadExtractionRuns = useCallback(async () => {
+ const readId = ++runsReadId.current;
+ setRunsLoading(true);
try {
const response = await api.get("/profile-cv/runs");
- setExtractionRuns(response.data ?? []);
- } catch {
+ if (readId === runsReadId.current) {
+ setExtractionRuns(response.data ?? []);
+ setRunsLoadError(null);
+ }
+ } catch (error) {
// Polling failure must not clear existing run state or touch unsaved profile edits.
+ if (readId === runsReadId.current) setRunsLoadError(String(error));
+ } finally {
+ if (readId === runsReadId.current) setRunsLoading(false);
}
}, []);
@@ -367,11 +380,16 @@ export default function CareerProfilePage() {
runs={extractionRuns}
loading={loading}
loadError={loadError}
+ runsLoading={runsLoading}
+ runsLoadError={runsLoadError}
+ onRetryRuns={() => void loadExtractionRuns()}
+ onRetryProfile={() => { if (!profileDirty) void loadProfile(); }}
+ profileDirty={profileDirty}
onNavigate={navigateWorkspace}
/>
) : null}
- {workspaceSection === "evidence" ? : null}
+ {evidenceVisited ? : null}
{workspaceSection === "profile" || workspaceSection === "import" ?
([]); const [title, setTitle] = useState(""); const [statement, setStatement] = useState("");
- const [category, setCategory] = useState("achievement"); const [tags, setTags] = useState(""); const [source, setSource] = useState("");
- const [error, setError] = useState(null); const [busy, setBusy] = useState(false);
- const load = () => api.get("/career/evidence").then(r => { setItems(r.data); setError(null); }).catch(e => setError(getApiErrorMessage(e, t("careerEvidenceLoadFailed"))));
- useEffect(() => { void load(); }, []); // eslint-disable-line react-hooks/exhaustive-deps
- const add = async () => { setBusy(true); try { const r = await api.post("/career/evidence", { category, title, statement, tags: tags.split(","), sourceType: "manual", sourceReference: source, isVerified: true }); setItems(v => [r.data, ...v]); setTitle(""); setStatement(""); setTags(""); setSource(""); setError(null); } catch (e) { setError(getApiErrorMessage(e, t("careerEvidenceSaveFailed"))); } finally { setBusy(false); } };
- const remove = async (item: Evidence) => { if (!(await confirm({ title: t("careerEvidenceDeleteTitle"), message: t("careerEvidenceDeleteMessage", { title: item.title }), confirmLabel: t("deleteAction"), destructive: true }))) return; try { await api.delete(`/career/evidence/${item.id}`); setItems(v => v.filter(x => x.id !== item.id)); } catch (e) { setError(getApiErrorMessage(e, t("careerEvidenceDeleteFailed"))); } };
+ const { t } = useI18n();
+ const { confirm } = useConfirm();
+ const [items, setItems] = useState([]);
+ const [title, setTitle] = useState("");
+ const [statement, setStatement] = useState("");
+ const [category, setCategory] = useState("achievement");
+ const [tags, setTags] = useState("");
+ const [source, setSource] = useState("");
+ const [loading, setLoading] = useState(true);
+ const [readAttempt, setReadAttempt] = useState(0);
+ const [loadError, setLoadError] = useState<{ cause: unknown } | null>(null);
+ const [saveError, setSaveError] = useState<{ cause: unknown } | null>(null);
+ const [deleteErrors, setDeleteErrors] = useState>({});
+ const [busy, setBusy] = useState(false);
+ const [deletingId, setDeletingId] = useState(null);
+ const writePending = useRef(false);
+ const titleInputRef = useRef(null);
+ const focusAfterDelete = useRef(false);
+
+ useEffect(() => {
+ let cancelled = false;
+ setLoading(true);
+ api.get("/career/evidence")
+ .then((response) => { if (!cancelled) { setItems(response.data); setLoadError(null); } })
+ .catch((cause) => { if (!cancelled) setLoadError({ cause }); })
+ .finally(() => { if (!cancelled) setLoading(false); });
+ return () => { cancelled = true; };
+ }, [readAttempt]);
+
+ useEffect(() => {
+ if (focusAfterDelete.current) {
+ focusAfterDelete.current = false;
+ titleInputRef.current?.focus();
+ }
+ }, [items]);
+
+ const add = async () => {
+ if (writePending.current || loading || loadError || !title.trim() || !statement.trim()) return;
+ writePending.current = true;
+ setBusy(true);
+ try {
+ const response = await api.post("/career/evidence", { category, title, statement, tags: tags.split(","), sourceType: "manual", sourceReference: source, isVerified: true });
+ setItems((previous) => [response.data, ...previous]);
+ setTitle(""); setStatement(""); setTags(""); setSource("");
+ setSaveError(null);
+ } catch (cause) {
+ setSaveError({ cause });
+ } finally {
+ writePending.current = false;
+ setBusy(false);
+ }
+ };
+
+ const remove = async (item: Evidence) => {
+ if (writePending.current || loading || loadError) return;
+ writePending.current = true;
+ try {
+ if (!(await confirm({ title: t("careerEvidenceDeleteTitle"), message: t("careerEvidenceDeleteMessage", { title: item.title }), confirmLabel: t("deleteAction"), destructive: true }))) return;
+ setDeletingId(item.id);
+ await api.delete(`/career/evidence/${item.id}`);
+ focusAfterDelete.current = true;
+ setItems((previous) => previous.filter((entry) => entry.id !== item.id));
+ setDeleteErrors((previous) => { const next = { ...previous }; delete next[item.id]; return next; });
+ } catch (cause) {
+ setDeleteErrors((previous) => ({ ...previous, [item.id]: { cause } }));
+ } finally {
+ writePending.current = false;
+ setDeletingId(null);
+ }
+ };
const categories = ["achievement", "metric", "project", "technology", "responsibility", "example"];
- const categoryLabel = (value: string) => t(`careerEvidenceCategory_${value}` as "careerEvidenceCategory_achievement");
- return
- {t("careerEvidenceTitle")}{t("careerEvidenceSubtitle")}
- {error && void load()}>{t("retry")}}>{error}}
-
- {t("careerEvidenceAdd")}
- setCategory(e.target.value)}>{categories.map(v => )}
- setTitle(e.target.value)} />
- setStatement(e.target.value)} multiline minRows={3} helperText={t("careerEvidenceTruthHelp")} />
- setTags(e.target.value)} helperText={t("careerEvidenceTagsHelp")} />
- setSource(e.target.value)} helperText={t("careerEvidenceSourceHelp")} />
-
-
- {items.length === 0 ? {t("careerEvidenceEmpty")} : items.map(item =>
- {item.title}{categoryLabel(item.category)} · {item.sourceReference || t("careerEvidenceManualSource")}} onClick={() => void remove(item)}>{t("deleteAction")}
+ const categoryLabel = (value: string) => categories.includes(value) ? t(`careerEvidenceCategory_${value}` as "careerEvidenceCategory_achievement") : value;
+ return
+
+ {loading ? {t("loading")} : loadError ? { titleInputRef.current?.focus(); setReadAttempt((attempt) => attempt + 1); }}>{t("retry")}}>{getApiErrorMessage(loadError.cause, t("careerEvidenceLoadFailed"))} : null}
+
+ {saveError ? {getApiErrorMessage(saveError.cause, t("careerEvidenceSaveFailed"))} : null}
+ setCategory(e.target.value)}>{categories.map(v => )}
+ setTitle(e.target.value)} />
+ setStatement(e.target.value)} multiline minRows={3} helperText={t("careerEvidenceTruthHelp")} />
+ setTags(e.target.value)} helperText={t("careerEvidenceTagsHelp")} />
+ setSource(e.target.value)} helperText={t("careerEvidenceSourceHelp")} />
+
+
+ {!loading && !loadError && items.length === 0 ? {t("careerEvidenceEmpty")} : null}
+ {items.map(item =>
+ {item.title}{categoryLabel(item.category)} · {item.sourceReference || t("careerEvidenceManualSource")}} onClick={() => void remove(item)}>{t("deleteAction")}
+ {deleteErrors[item.id] ? void remove(item)}>{t("retry")}}>{getApiErrorMessage(deleteErrors[item.id].cause, t("careerEvidenceDeleteFailed"))} : null}
{item.statement}{item.tags.map(tag => )}
)}
- ;
+
+ ;
}
diff --git a/job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx b/job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx
index 2d1f2ca..c2be014 100644
--- a/job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx
+++ b/job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useMemo, useState } from "react";
+import React, { useEffect, useMemo, useRef, useState } from "react";
import { Alert, Box, Button, Chip, LinearProgress, Paper, Skeleton, Stack, Typography } from "@mui/material";
import DescriptionOutlinedIcon from "@mui/icons-material/DescriptionOutlined";
@@ -9,6 +9,7 @@ import WorkOutlineIcon from "@mui/icons-material/WorkOutline";
import { CvVariantSummary, cvBuilderApi } from "../../cvBuilder";
import type { UserOperation } from "../../types";
import { useI18n } from "../../i18n/I18nProvider";
+import { PageSection } from "../../layout/PageLayout";
import { localizeCompletenessLabel } from "./careerCompletenessLabels";
export type CareerWorkspaceCompleteness = {
@@ -40,10 +41,10 @@ function ActionCard({ title, body, href, label, icon, onNavigate }: {
onNavigate?: () => void;
}) {
return (
-
+
{icon}
- {title}
+ {title}
{body}
-
-
- {isFirstRun ? {t("careerOverviewFirstRun")} : null}
- {loadError ? {t("careerOverviewUnavailable")} : null}
-
-
-
+ } href="/career/builder">{t("careerOverviewOpenBuilder")}
+ }>
+
+ {isFirstRun ? {t("careerOverviewFirstRun")} : null}
+
+
- {t("careerOverviewCompleteness")}
- {loading ? : {completeness?.percent ?? 0}%}
+ {t("careerOverviewCompleteness")}
+ {loading ? : profileKnown ? {completeness.percent}% : null}
-
- {!loading && completeness?.missing.length ? (
+ {loading || profileKnown ? : null}
+ {loadError ? { profileLinkRef.current?.focus(); onRetryProfile(); }}>{t("retry")} : undefined}>
+ {t("careerOverviewUnavailable")}
+ {profileDirty ? {t("careerOverviewRetryDraftHint")} : null}
+ : null}
+ {profileKnown && completeness.missing.length ? (
{t("careerOverviewAddNext", { items: completeness.missing.slice(0, 3).map((label) => localizeCompletenessLabel(label, t)).join(", ") })}
) : null}
- { event.preventDefault(); onNavigate("profile"); } : undefined} size="small" sx={{ mt: 1, px: 0.5 }}>{t("careerOverviewImproveProfile")}
-
-
-
- {t("careerOverviewCvImport")}
- {importState.message}
- { event.preventDefault(); onNavigate("import"); } : undefined} color="inherit" size="small" sx={{ mt: 0.75, px: 0.5 }}>{importState.label}
-
+ { event.preventDefault(); onNavigate("profile"); } : undefined} size="small" sx={{ mt: 1, px: 0.5 }}>{t("careerOverviewImproveProfile")}
+
+
+ {importUnknown ? {t("loading")}
+ : runsLoadError ? { importLinkRef.current?.focus(); onRetryRuns(); }}>{t("retry")} : undefined}>{t("careerOverviewImportUnavailable")}
+ : {importState.message}}
+ { event.preventDefault(); onNavigate("import"); } : undefined} size="small" sx={{ mt: 0.75, px: 0.5 }}>{importLabel}
+
-
onNavigate("profile") : undefined} label={t("careerOverviewEditProfile")} icon={} />
- onNavigate("import") : undefined} label={importState.label} icon={} />
+ onNavigate("import") : undefined} label={importLabel} icon={} />
} />
} />
-
-
- {t("careerOverviewRecentCvs")}
- {t("careerOverviewViewAll")}
-
+ {t("careerOverviewViewAll")}}>
{recentLoading ? (
-
+ {t("loading")}
) : recentError ? (
- {t("careerOverviewRecentFailed")}
+ { recentLinkRef.current?.focus(); setRecentAttempt((attempt) => attempt + 1); }}>{t("retry")}}>{t("careerOverviewRecentFailed")}
) : recentCvs.length === 0 ? (
{t("careerOverviewNoCvs")}
) : (
{recentCvs.map((cv) => (
-
+
{cv.name}
{t("careerOverviewUpdated", { date: new Date(cv.updatedAtUtc).toLocaleDateString(language === "nb" ? "nb-NO" : "en-GB") })}
@@ -171,7 +176,8 @@ export default function CareerWorkspaceOverview({ completeness, runs, loading, l
))}
)}
-
-
+
+
+
);
}