From 01281f52d9279ecdbd3363a11d2e9cb71230bf49 Mon Sep 17 00:00:00 2001 From: cesnimda Date: Mon, 12 Oct 2026 02:06:27 +0200 Subject: [PATCH] fix(career): preserve evidence listing on SQLite --- .../CareerEvidenceControllerTests.cs | 23 + .../Controllers/CareerEvidenceController.cs | 6 +- docs/redesign/phase-7/COMMITS.md | 3 +- docs/redesign/phase-7/DEBT.md | 4 +- docs/redesign/phase-7/PRESERVATION.md | 2 +- docs/redesign/phase-7/README.md | 4 +- docs/redesign/phase-7/p7-02/README.md | 29 +- .../evidence-list-repair-static-checks.json | 104 +++ .../p7-02/evidence/evidence-list-repair.json | 627 ++++++++++++++++++ .../p7-02/evidence/onboarding-results.json | 29 +- docs/roadmap/todo.md | 2 +- 11 files changed, 821 insertions(+), 12 deletions(-) create mode 100644 docs/redesign/phase-7/p7-02/evidence/evidence-list-repair-static-checks.json create mode 100644 docs/redesign/phase-7/p7-02/evidence/evidence-list-repair.json diff --git a/JobTrackerApi.Tests/CareerEvidenceControllerTests.cs b/JobTrackerApi.Tests/CareerEvidenceControllerTests.cs index 003e18a..7841708 100644 --- a/JobTrackerApi.Tests/CareerEvidenceControllerTests.cs +++ b/JobTrackerApi.Tests/CareerEvidenceControllerTests.cs @@ -4,6 +4,7 @@ using JobTrackerApi.Models; using JobTrackerApi.Services; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; +using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Moq; using Xunit; @@ -33,6 +34,28 @@ public sealed class CareerEvidenceControllerTests Assert.Empty(await db.CareerEvidence.Where(x => x.OwnerUserId == "owner-1").ToListAsync()); } + [Fact] + public async Task List_orders_owned_evidence_by_actual_timestamp_with_sqlite() + { + await using var connection = new SqliteConnection("Data Source=:memory:"); + await connection.OpenAsync(); + var current = new Mock(); + current.SetupGet(x => x.UserId).Returns("owner-1"); + await using var db = new JobTrackerContext(new DbContextOptionsBuilder().UseSqlite(connection).Options, current.Object); + await db.Database.EnsureCreatedAsync(); + db.CareerEvidence.AddRange( + new CareerEvidence { OwnerUserId = "owner-1", Title = "Older local clock", Statement = "Owned earlier fact", UpdatedAtUtc = DateTimeOffset.Parse("2026-10-11T22:00:00+02:00") }, + new CareerEvidence { OwnerUserId = "owner-1", Title = "Newer instant", Statement = "Owned later fact", UpdatedAtUtc = DateTimeOffset.Parse("2026-10-11T20:30:00+00:00") }, + new CareerEvidence { OwnerUserId = "owner-2", Title = "Private future fact", Statement = "Other tenant", UpdatedAtUtc = DateTimeOffset.Parse("2026-10-12T12:00:00+00:00") }); + await db.SaveChangesAsync(); + var controller = new CareerEvidenceController(db, Users("owner-1").Object); + + var listed = Assert.IsAssignableFrom>(Assert.IsType((await controller.List(default)).Result).Value).ToList(); + + Assert.Equal(["Newer instant", "Older local clock"], listed.Select(x => x.Title)); + Assert.Equal(3, await db.CareerEvidence.IgnoreQueryFilters().CountAsync()); + } + private static Mock> Users(string id) { var store = new Mock>(); diff --git a/JobTrackerApi/Controllers/CareerEvidenceController.cs b/JobTrackerApi/Controllers/CareerEvidenceController.cs index 441e33c..ab2f72d 100644 --- a/JobTrackerApi/Controllers/CareerEvidenceController.cs +++ b/JobTrackerApi/Controllers/CareerEvidenceController.cs @@ -21,7 +21,11 @@ public sealed class CareerEvidenceController(JobTrackerContext db, UserManager().AsNoTracking().Where(x => x.OwnerUserId == owner).OrderByDescending(x => x.UpdatedAtUtc).ToListAsync(ct); + var query = db.Set().AsNoTracking().Where(x => x.OwnerUserId == owner); + // SQLite cannot order DateTimeOffset; retain SQL ownership filtering before sorting. + var rows = db.Database.IsSqlite() + ? (await query.ToListAsync(ct)).OrderByDescending(x => x.UpdatedAtUtc).ToList() + : await query.OrderByDescending(x => x.UpdatedAtUtc).ToListAsync(ct); return Ok(rows.Select(ToDto)); } diff --git a/docs/redesign/phase-7/COMMITS.md b/docs/redesign/phase-7/COMMITS.md index 82ffac3..0995f9d 100644 --- a/docs/redesign/phase-7/COMMITS.md +++ b/docs/redesign/phase-7/COMMITS.md @@ -9,7 +9,8 @@ Entry is the completed Phase6 successor receipt `b5319981ad3d1bd635daff861453d23 | P7-00 inventory, preservation/debt and unchanged-source baseline | `27c54146ad6f9059295d169b533db7b1b6689210` | [P7-00](p7-00/README.md), [fresh finite baseline](p7-00/evidence/baseline.json) and [static checks](p7-00/evidence/static-checks.json); inherited runtime explicitly separated. Normal development push verified2026-10-11 14:44:45UTC: localHEAD=origin=live development27c5414; local/origin/live main unchanged27657f3; clean worktree. P7-01 entry dependency satisfied | | 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 | PENDING actual commit/push | [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 direct normal push receipt pending. Career overview/evidence and whole P7-02 pending;57/32 unchanged/main NO-GO | +| 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 | 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 53bd1d0..791e965 100644 --- a/docs/redesign/phase-7/DEBT.md +++ b/docs/redesign/phase-7/DEBT.md @@ -83,11 +83,13 @@ 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. + ### P7-02 onboarding conditional disposition [Onboarding results](p7-02/evidence/onboarding-results.json) add fresh affected32/2, ordinary native13 and separate existing Dashboard/Analytics4 with types/lint/build passing. All13 final PNGs were actually inspected; thirteen all-enabled scans retain0 violation nodes/13 `color-contrast` incomplete occurrences on the invisible notification badge `0` (`shortTextContent`). Keep M09/M11 contextual/human qualification and all provider/zoom/physical-input gates open. The connected-mailbox response in the four-complete native case is an explicit stored-connection fixture, not a real grant. Controlled English failure text is server-fixture detail; translated product guidance/fallbacks remain separate. -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/push pending; Career overview/evidence and whole P7-02 remain pending,57/32 statuses unchanged. +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. 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. diff --git a/docs/redesign/phase-7/PRESERVATION.md b/docs/redesign/phase-7/PRESERVATION.md index 7871a63..a603d0e 100644 --- a/docs/redesign/phase-7/PRESERVATION.md +++ b/docs/redesign/phase-7/PRESERVATION.md @@ -46,7 +46,7 @@ The migration-owner column assigns the approved slice while retaining completed | **PRES-C01** All canonical structured/long-tail/custom career fields | [Source isolation](../phase-5/p5-10/README.md), canonical service/controller tests | PARTIAL | Full long-tail mobile save and profile concurrency; singleton source distinct from identified variants | P7-02/03 | | **PRES-C02** Overview/completeness/import/raw copy/avatar/history restore | [Retained Career owner](../phase-5/p5-15/ROUTE_ACCEPTANCE.md), overview/profile/history tests | PARTIAL | Complete native historical restore/clipboard/avatar/reader; live inherited CVs may reflect later source changes | P7-02/03 | | **PRES-C03** Upload/extract/reprocess/diff/low-confidence select/accept/discard/retry | [Native picker repair](../phase-5/p5-15/p5-15-04/file-picker/README.md), extraction/diff tests | PARTIAL | Scanned/OCR corpus and complete low-confidence/discard/native-reader flow; extracted proposal is not canonical truth | P7-02/03 | -| **PRES-C04** Evidence sources/categories/tags/add/list/delete | [Retained evidence owner](../phase-5/p5-15/ROUTE_ACCEPTANCE.md), evidence frontend/API tests | PARTIAL | Many-item/delete/keyboard acceptance; evidence stays sourced and owner-bound | P7-02/03 | +| **PRES-C04** Evidence sources/categories/tags/add/list/delete | [Retained evidence owner](../phase-5/p5-15/ROUTE_ACCEPTANCE.md), evidence frontend/API tests, [actual SQLite list repair](p7-02/evidence/evidence-list-repair.json) | PARTIAL | Many-item/delete/keyboard/human acceptance; SQLite compatibility repaired with owner SQL preserved, full frontend/production acceptance remains qualified | P7-02/03 | | **PRES-C05** Library CRUD/gallery/share/publication/PDF | [Gallery/control reuse](../phase-5/p5-12/README.md), library/publication tests | PARTIAL | Library migration not complete; publish/unpublish/old-slug revocation and every template combination required | P7-04/07 | | **PRES-C06** Studio tabs/save states/debounce/pages/fit/mobile panes | [Frame](../phase-5/p5-09/README.md), [preview](../phase-5/p5-11/README.md), [hidden-initial repair](../phase-5/p5-15/p5-15-04/mobile-preview/README.md) | PARTIAL | Physical keyboard/touch/AT and broader short-height/wrapped/deployed cases; one editor/save/preview owner | Retain editor; P7-04/07 boundaries / P7-12 | | **PRES-C07** Visibility/order/custom sections/item-document overrides/reset | [Source/override editing](../phase-5/p5-10/README.md), [nested ownership proof](../phase-5/p5-14/README.md) | PARTIAL | Physical selection/drop/all-browser and exhaustive reset/inheritance combinations; sibling/canonical/frozen separation retained | Retain editor; P7-04/07 boundaries / P7-12 | diff --git a/docs/redesign/phase-7/README.md b/docs/redesign/phase-7/README.md index 4e7637f..0bfef8c 100644 --- a/docs/redesign/phase-7/README.md +++ b/docs/redesign/phase-7/README.md @@ -10,7 +10,7 @@ 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/push pending. Career overview/evidence and whole checkpoint remain pending | +| [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-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 | @@ -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/push pending; 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 overview/evidence remains pending,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 ba473b0..23ccf2b 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, normal push pending. 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 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. ## Accepted entry baseline @@ -34,7 +34,7 @@ Final measured three-source LF digest is `dd98c47e6064a4f8d6abe6dbe4e2b61b86cf9d The fresh affected32 result replaces nine inherited cases with32: Dashboard8→9 adds one, checklist1→23 adds22 net. The original broad checklist title is replaced by its four-source-backed successor and22 additional cases; the manifest records all23 added titles and the single renamed title rather than hiding the change. Full596/89 is only the derived expectation573+23 with no new suite, **not a newly executed full frontend result**. The inherited latest full result remains573/89; final full regression belongs to P7-12. Native12→13 adds the complete-guidance recovery case with no product or unit-count change. -Slice-specific [final static checks](evidence/onboarding-static-checks.json) passed2026-10-11 23:53:23–23:53:26UTC: tracked/untracked secret scan and working/staged/Phase7-entry whitespace commands all exit0; nine Markdown documents/329 relative links checked with no errors at that observation;57 groups/32 concrete routes unchanged; main remains27657f3 and production NO-GO. Portable static JSON uses canonical UTF-8/LF hashes; raw log/runtime hashes retain exact saved bytes. Commit/push remains pending until its actual receipt. +Slice-specific [final static checks](evidence/onboarding-static-checks.json) passed2026-10-11 23:53:23–23:53:26UTC: tracked/untracked secret scan and working/staged/Phase7-entry whitespace commands all exit0; nine Markdown documents/329 relative links checked with no errors at that observation;57 groups/32 concrete routes unchanged; main remains27657f3 and production NO-GO. Portable static JSON uses canonical UTF-8/LF hashes; raw log/runtime hashes retain exact saved bytes. Normal push `d21501aa7e5f9040937fa821d6a77d823b7e08eb` was directly verified2026-10-11 23:55:12.614723UTC: localHEAD=origin=live development, local/origin/live main27657f3 unchanged and clean worktree at observation. Its actual receipt is appended in the manifest by this successor; frozen runtime/source identities remain historical at that commit. | Required proof | Acceptance condition / current result | |---|---| @@ -42,16 +42,39 @@ Slice-specific [final static checks](evidence/onboarding-static-checks.json) pas | Dismissal and owner boundary | Legacy-key/session dismissal, owner isolation/late responses/unavailable storage and actual dismiss/reload/settled no-read corroboration pass | | Existing navigation | Four existing destinations, actual keyboard/Back/no-write and dismissal/complete-recovery next-action focus proof pass | | Responsive/localised/semantic states | EN/NB/theme finite width samples, named H2/progress/control states, keyboard/focus and13 root-geometry/axe vectors pass their assertions; all13 raw PNGs actually inspected; M09/M11/human/zoom/device/provider qualifications retained | -| Verification and bounded push | Fresh affected32/native13/regression4, app/browser types, lint/build, actual13-image inspection and slice-specific final hygiene pass; actual normal commit/push receipt **PENDING** | +| Verification and bounded push | Fresh affected32/native13/regression4, app/browser types, lint/build, actual13-image inspection and slice-specific final hygiene pass; normal pushd21501aa and actual direct equality receipt PASS23:55:12UTC | + +## Separate evidence-list provider repair + +Actual local SQLite exposed an existing list failure before Career presentation acceptance: evidence POST returned200 but subsequent GET returned500. The new ordinary provider test failed0/1 with SQLite9.0.14 `DateTimeOffset ORDER BY` `NotSupportedException`; the real-HTTP case independently failed0/1 at23:59:55–00:00:03UTC. Existing affected guards had freshly passed90/90. See the [frozen repair evidence](evidence/evidence-list-repair.json). + +The bounded [controller](../../../../JobTrackerApi/Controllers/CareerEvidenceController.cs) repair keeps SQL owner filtering and `AsNoTracking`; SQLite materializes only owned rows then sorts actual DTO instants. Other providers retain existing SQL ordering by source-branch inspection; no live production/MySQL execution is claimed. The [new ordinary test](../../../../JobTrackerApi.Tests/CareerEvidenceControllerTests.cs) distinguishes actual timestamps with different offsets and a foreign owner's future row. No schema/converter/action/payload/authorization changes occur. Owner-local SQLite materialization remains O(N); this is compatibility repair, with no scaling or timing claim. + +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. ## 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. + 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.** +| Career proof | Current evidence / required outcome | +|---|---| +| 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 | + +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. + ## 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. diff --git a/docs/redesign/phase-7/p7-02/evidence/evidence-list-repair-static-checks.json b/docs/redesign/phase-7/p7-02/evidence/evidence-list-repair-static-checks.json new file mode 100644 index 0000000..b11922d --- /dev/null +++ b/docs/redesign/phase-7/p7-02/evidence/evidence-list-repair-static-checks.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "checkpoint": "p7-02", + "status": "PASS", + "checkedUtc": "2026-10-12T00:05:02.877384+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-12T00:04:59.962933+00:00", + "finishedUtc": "2026-10-12T00:05:02.261243+00:00", + "exitCode": 0, + "log": ".artifacts/phase7/current/static/20261012T000459Z/secret-scan.log", + "logSha256Raw": "c5a88d5ebdc042adba125c1eaacbe44f9f4a5c19898c0f195573c00d511aa28d" + }, + { + "name": "working-whitespace", + "command": [ + "rtk", + "proxy", + "git", + "diff", + "--check" + ], + "startedUtc": "2026-10-12T00:05:02.261726+00:00", + "finishedUtc": "2026-10-12T00:05:02.355120+00:00", + "exitCode": 0, + "log": ".artifacts/phase7/current/static/20261012T000459Z/working-whitespace.log", + "logSha256Raw": "61c4a18a12571be0ae0f3aa958d5b57f50120ca4769bf52d9258b408b77326c9" + }, + { + "name": "staged-whitespace", + "command": [ + "rtk", + "proxy", + "git", + "diff", + "--cached", + "--check" + ], + "startedUtc": "2026-10-12T00:05:02.355663+00:00", + "finishedUtc": "2026-10-12T00:05:02.441413+00:00", + "exitCode": 0, + "log": ".artifacts/phase7/current/static/20261012T000459Z/staged-whitespace.log", + "logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6" + }, + { + "name": "phase7-whitespace", + "command": [ + "rtk", + "proxy", + "git", + "diff", + "--check", + "b5319981ad3d1bd635daff861453d23c0de5320b" + ], + "startedUtc": "2026-10-12T00:05:02.441928+00:00", + "finishedUtc": "2026-10-12T00:05:02.568113+00:00", + "exitCode": 0, + "log": ".artifacts/phase7/current/static/20261012T000459Z/phase7-whitespace.log", + "logSha256Raw": "61c4a18a12571be0ae0f3aa958d5b57f50120ca4769bf52d9258b408b77326c9" + } + ], + "untrackedSecretScan": { + "files": 1, + "findings": 0 + }, + "documentation": { + "files": 9, + "relativeLinks": 337, + "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 new file mode 100644 index 0000000..399f44c --- /dev/null +++ b/docs/redesign/phase-7/p7-02/evidence/evidence-list-repair.json @@ -0,0 +1,627 @@ +{ + "schemaVersion": 1, + "checkpoint": "P7-02", + "slice": "SQLite evidence-list compatibility repair only", + "acceptance": "GO for bounded local repair; final hygiene PASS, actual push pending", + "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.", + "sourceAndBinarySnapshots": [ + { + "originalPath": "JobTrackerApi/Controllers/CareerEvidenceController.cs", + "raw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/source/JobTrackerApi/Controllers/CareerEvidenceController.cs", + "sha256": "46b9f9a78aa486d0870fe86a85156f87820798454d2e4f5e96c02208b47cd117", + "bytes": 4672, + "hashPolicy": "Exact measured raw bytes" + }, + "observedSha256": "f7c9998d16d963f87ce81442680dba3cc4c37b53b829016bf42d8795751ee87c", + "observedHashPolicy": "UTF-8 canonical LF" + }, + { + "originalPath": "JobTrackerApi.Tests/CareerEvidenceControllerTests.cs", + "raw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/source/JobTrackerApi.Tests/CareerEvidenceControllerTests.cs", + "sha256": "2621168ce6e0a287d2415da3c22a2348977d2989206e7737ba7de7e7780c7aae", + "bytes": 4071, + "hashPolicy": "Exact measured raw bytes" + }, + "observedSha256": "5009fc9a36aeb74faeb0c8064e0b4bef567468f687e6910a7ae39e3d4131f000", + "observedHashPolicy": "UTF-8 canonical LF" + }, + { + "originalPath": "JobTrackerApi/bin/Release/net9.0/JobTrackerApi.dll", + "raw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/source/JobTrackerApi/bin/Release/net9.0/JobTrackerApi.dll", + "sha256": "d2da64748364880d471d2087d5aa101ce749b26966beed13d9e9dbaa3b92512b", + "bytes": 4026368, + "hashPolicy": "Exact measured raw bytes" + }, + "observedSha256": "d2da64748364880d471d2087d5aa101ce749b26966beed13d9e9dbaa3b92512b", + "observedHashPolicy": "raw binary bytes" + }, + { + "originalPath": "JobTrackerApi.Tests/bin/Release/net9.0/JobTrackerApi.Tests.dll", + "raw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/source/JobTrackerApi.Tests/bin/Release/net9.0/JobTrackerApi.Tests.dll", + "sha256": "a7f6efd41c87d1a65607d0e402c12d88b883dd66ade92dac5d33049602af2a46", + "bytes": 1903104, + "hashPolicy": "Exact measured raw bytes" + }, + "observedSha256": "a7f6efd41c87d1a65607d0e402c12d88b883dd66ade92dac5d33049602af2a46", + "observedHashPolicy": "raw binary bytes" + } + ], + "backend": { + "baseline": { + "record": { + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "test", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-build", + "--filter", + "FullyQualifiedName~CareerEvidenceControllerTests|FullyQualifiedName~CareerProfileControllerTests|FullyQualifiedName~CareerProfileServiceTests|FullyQualifiedName~CvBuilderTests|FullyQualifiedName~CvRevisionReadinessTests|FullyQualifiedName~SubmittedApplicationPackageTests|FullyQualifiedName~ApiAuthorizationPostureTests|FullyQualifiedName~SessionContextMiddlewareTests", + "--logger", + "trx;LogFileName=career.trx", + "--results-directory", + "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\backend-career\\p702-baseline-20261011T235628Z" + ], + "startedUtc": "2026-10-11T23:56:28.061237+00:00", + "finishedUtc": "2026-10-11T23:56:31.475433+00:00", + "exitCode": 0, + "logSha256": "9e71a60fc71de50e239733371f99d4a545ef703fd372b861d113ffe8db86e487", + "counts": { + "total": 90, + "passed": 90, + "failed": 0, + "notExecuted": 0 + }, + "resultSha256": "77848b750e1f3cacaaca3d8ebe173bea39daf28467dec183aa7a1cf4ed4e0759" + }, + "files": [ + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-baseline-20261011T235628Z/career.log", + "sha256": "9e71a60fc71de50e239733371f99d4a545ef703fd372b861d113ffe8db86e487", + "bytes": 610, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-baseline-20261011T235628Z/career.trx", + "sha256": "77848b750e1f3cacaaca3d8ebe173bea39daf28467dec183aa7a1cf4ed4e0759", + "bytes": 128269, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-baseline-20261011T235628Z/command.json", + "sha256": "0307d337d24d369c5a11b1624e8502bcc54d7063072fa7f3cc038d66176755e3", + "bytes": 1218, + "hashPolicy": "Exact measured raw bytes" + } + ] + }, + "sqliteRed": { + "record": { + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "test", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-restore", + "--filter", + "FullyQualifiedName~List_orders_owned_evidence_by_actual_timestamp_with_sqlite", + "--logger", + "trx;LogFileName=career.trx", + "--results-directory", + "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\backend-career\\p702-evidence-sqlite-red-20261011T235657Z" + ], + "startedUtc": "2026-10-11T23:56:57.533570+00:00", + "finishedUtc": "2026-10-11T23:57:13.608627+00:00", + "exitCode": 1, + "logSha256": "959470d4b332277484cb80cd4a33ed4580a472150b4a8afcebdeff6dd2c737d3", + "counts": { + "total": 1, + "passed": 0, + "failed": 1, + "notExecuted": 0 + }, + "resultSha256": "d5ef5436197d10e351c806a8bd76f057790a8353a157db258668b6e59aca5597" + }, + "files": [ + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-evidence-sqlite-red-20261011T235657Z/career.log", + "sha256": "959470d4b332277484cb80cd4a33ed4580a472150b4a8afcebdeff6dd2c737d3", + "bytes": 4622, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-evidence-sqlite-red-20261011T235657Z/career.trx", + "sha256": "d5ef5436197d10e351c806a8bd76f057790a8353a157db258668b6e59aca5597", + "bytes": 11060, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-evidence-sqlite-red-20261011T235657Z/command.json", + "sha256": "c73a0a35d31c2d2565befa22cc05219a204ec41b21ef0647f75b74cb2d8899ec", + "bytes": 938, + "hashPolicy": "Exact measured raw bytes" + } + ] + }, + "sqliteGreen": { + "record": { + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "test", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-restore", + "--filter", + "FullyQualifiedName~List_orders_owned_evidence_by_actual_timestamp_with_sqlite", + "--logger", + "trx;LogFileName=career.trx", + "--results-directory", + "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\backend-career\\p702-evidence-sqlite-green-20261012T000057Z" + ], + "startedUtc": "2026-10-12T00:00:57.016585+00:00", + "finishedUtc": "2026-10-12T00:01:05.789347+00:00", + "exitCode": 0, + "logSha256": "cc1eacbbf666f2a8639cc969584e1698206a5a411734464885960c3ba40fa147", + "counts": { + "total": 1, + "passed": 1, + "failed": 0, + "notExecuted": 0 + }, + "resultSha256": "ada2edede2b7c52ad1bfdb4d48c36489fd98d2d8992a0be160ef4e712d864195" + }, + "files": [ + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-evidence-sqlite-green-20261012T000057Z/career.log", + "sha256": "cc1eacbbf666f2a8639cc969584e1698206a5a411734464885960c3ba40fa147", + "bytes": 994, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-evidence-sqlite-green-20261012T000057Z/career.trx", + "sha256": "ada2edede2b7c52ad1bfdb4d48c36489fd98d2d8992a0be160ef4e712d864195", + "bytes": 3026, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-evidence-sqlite-green-20261012T000057Z/command.json", + "sha256": "94ca9b5c9c6bba98c243d3f575341685ba20beb760ec939aa86a3edbae3d0ca0", + "bytes": 940, + "hashPolicy": "Exact measured raw bytes" + } + ] + }, + "guardsGreen": { + "record": { + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "test", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-build", + "--filter", + "FullyQualifiedName~CareerEvidenceControllerTests|FullyQualifiedName~CareerProfileControllerTests|FullyQualifiedName~CareerProfileServiceTests|FullyQualifiedName~CvBuilderTests|FullyQualifiedName~CvRevisionReadinessTests|FullyQualifiedName~SubmittedApplicationPackageTests|FullyQualifiedName~ApiAuthorizationPostureTests|FullyQualifiedName~SessionContextMiddlewareTests", + "--logger", + "trx;LogFileName=career.trx", + "--results-directory", + "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\backend-career\\p702-guards-green-20261012T000119Z" + ], + "startedUtc": "2026-10-12T00:01:19.811294+00:00", + "finishedUtc": "2026-10-12T00:01:22.664666+00:00", + "exitCode": 0, + "logSha256": "9be116374569b570d6f084c93cf06bca427a6e85b466609eeb1b6f0540493a98", + "counts": { + "total": 91, + "passed": 91, + "failed": 0, + "notExecuted": 0 + }, + "resultSha256": "0c4dd2b5547f3a1ecb004e1c1b09ccf3deadcbbee6d71c0c75b886d8e29437aa" + }, + "files": [ + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-guards-green-20261012T000119Z/career.log", + "sha256": "9be116374569b570d6f084c93cf06bca427a6e85b466609eeb1b6f0540493a98", + "bytes": 614, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-guards-green-20261012T000119Z/career.trx", + "sha256": "0c4dd2b5547f3a1ecb004e1c1b09ccf3deadcbbee6d71c0c75b886d8e29437aa", + "bytes": 129686, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-guards-green-20261012T000119Z/command.json", + "sha256": "df615b85b3a80eb29cc5a16a158ccf917bb717c7df6f1bc7bb4c3da55c62d1cb", + "bytes": 1222, + "hashPolicy": "Exact measured raw bytes" + } + ] + }, + "release": { + "record": { + "command": [ + "rtk", + "proxy", + "C:/Users/Connor/.dotnet/dotnet.exe", + "build", + "JobTrackerApi.Tests/JobTrackerApi.Tests.csproj", + "--configuration", + "Release", + "--no-restore", + "-warnaserror" + ], + "startedUtc": "2026-10-12T00:01:26.742018+00:00", + "finishedUtc": "2026-10-12T00:01:28.751987+00:00", + "exitCode": 0, + "logSha256": "3a06e66b8541fd052f4c5b5df7b4485c8b1a6f7967ea7697fe2ef511a50ac981" + }, + "files": [ + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-release-20261012T000126Z/command.json", + "sha256": "eb12a8b05f49578581b4d3563da1e968fc24ceed4621e57c29be2fe161ed5051", + "bytes": 455, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/backend/p702-release-20261012T000126Z/release.log", + "sha256": "3a06e66b8541fd052f4c5b5df7b4485c8b1a6f7967ea7697fe2ef511a50ac981", + "bytes": 531, + "hashPolicy": "Exact measured raw bytes" + } + ] + } + }, + "httpRed": { + "command": { + "name": "career-provider", + "command": [ + "rtk", + "proxy", + "node", + "node_modules/@playwright/test/cli.js", + "test", + "e2e/phase7-career-overview.spec.ts", + "--grep", + "real SQLite evidence list", + "--retries=0", + "--reporter=list,json", + "--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\career-provider-results" + ], + "startedUtc": "2026-10-11T23:59:55.394424+00:00", + "finishedUtc": "2026-10-12T00:00:03.810904+00:00", + "exitCode": 1, + "failureLog": "E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\career-provider.log", + "stats": { + "startTime": "2026-10-11T23:59:55.906Z", + "duration": 7862.606000000001, + "expected": 0, + "skipped": 0, + "unexpected": 1, + "flaky": 0 + } + }, + "commandRaw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider-command.json", + "sha256": "2f62a75ba5a8ffe0c90bd7f5f4ff1101001448d73b95e512189e4218d0a132c4", + "bytes": 833, + "hashPolicy": "Exact measured raw bytes" + }, + "reportRaw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider.json", + "sha256": "89e9c7a29a1f0ddd44226103d0005175571e4c6156857bb632cdab3d189c9cfd", + "bytes": 7536, + "hashPolicy": "Exact measured raw bytes" + }, + "logRaw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider.log", + "sha256": "e99aa2b38dfe056b01acf53156b1e422a9b4c26d3c4d7cb541141753792f1b25", + "bytes": 3396, + "hashPolicy": "Exact measured raw bytes" + }, + "stats": { + "startTime": "2026-10-11T23:59:55.906Z", + "duration": 7862.606000000001, + "expected": 0, + "skipped": 0, + "unexpected": 1, + "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": [ + "failed" + ], + "retries": [ + 0 + ], + "errors": [ + [ + { + "location": { + "file": "E:\\Storage\\Projects\\Active\\Job tracker\\job-tracker-ui\\e2e\\phase7-career-overview.spec.ts", + "column": 77, + "line": 112 + }, + "message": "Error: the actual local SQLite HTTP list must succeed\n\n\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\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m500\u001b[39m\n\n 110 | const item = await created.json();\n 111 | const listed = await page.request.get(`${apiUrl}/career/evidence`);\n> 112 | expect(listed.status(), 'the actual local SQLite HTTP list must succeed').toBe(200);\n | ^\n 113 | expect(await listed.json()).toEqual([item]);\n 114 | expect(item.tags).toEqual(['C#', 'Norsk']);\n 115 | expect(item.sourceReference).toBe('Retrospective');\n at E:\\Storage\\Projects\\Active\\Job tracker\\job-tracker-ui\\e2e\\phase7-career-overview.spec.ts:112:77" + } + ] + ], + "durationMs": 675 + } + ], + "axeScans": [], + "attachments": [ + { + "test": "[P7-02 PRES-C04 E09] real SQLite evidence list preserves owner boundaries and existing validation", + "name": "screenshot", + "contentType": "image/png", + "raw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider-results/phase7-career-overview--P7-864bf-ies-and-existing-validation-chromium/test-failed-1.png", + "sha256": "3878570f4a62a0d65f57cf1754e0269e56ec797f4e36e26b44c172eb6e800401", + "bytes": 4254, + "hashPolicy": "Exact measured raw bytes" + }, + "manualReview": "No individual inspection claimed by collector" + }, + { + "test": "[P7-02 PRES-C04 E09] real SQLite evidence list preserves owner boundaries and existing validation", + "name": "error-context", + "contentType": "text/markdown", + "raw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider-results/phase7-career-overview--P7-864bf-ies-and-existing-validation-chromium/error-context.md", + "sha256": "0eeb1979387dd74e6f459c61a827abdbc424aacae5d74c311df00841d087e4e4", + "bytes": 15950, + "hashPolicy": "Exact measured raw bytes" + }, + "manualReview": "No individual inspection claimed by collector" + }, + { + "test": "[P7-02 PRES-C04 E09] real SQLite evidence list preserves owner boundaries and existing validation", + "name": "trace", + "contentType": "application/zip", + "raw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider-results/phase7-career-overview--P7-864bf-ies-and-existing-validation-chromium/trace.zip", + "sha256": "b4a3fa6f406aa46ffc83d75e340dd937d8881366fe484176ca4e69d48c642470", + "bytes": 31146, + "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 + } + ] + } + }, + "httpGreen": { + "command": { + "name": "career-provider", + "command": [ + "rtk", + "proxy", + "node", + "node_modules/@playwright/test/cli.js", + "test", + "e2e/phase7-career-overview.spec.ts", + "--grep", + "real SQLite evidence list", + "--retries=0", + "--reporter=list,json", + "--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\career-provider-results" + ], + "startedUtc": "2026-10-12T00:01:48.424577+00:00", + "finishedUtc": "2026-10-12T00:01:58.005609+00:00", + "exitCode": 0, + "stats": { + "startTime": "2026-10-12T00:01:48.945Z", + "duration": 9025.08, + "expected": 1, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + } + }, + "commandRaw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/green-http/career-provider-command.json", + "sha256": "529df34ab717097d058a3ffd47fa62bd9ef8a0539e0239e40ee212d0c1eb3fb1", + "bytes": 706, + "hashPolicy": "Exact measured raw bytes" + }, + "reportRaw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/green-http/career-provider.json", + "sha256": "e8a46bb1cd77b10156d6e190084e48f84c4094a021411b954d5587682bd60c85", + "bytes": 3898, + "hashPolicy": "Exact measured raw bytes" + }, + "logRaw": { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/green-http/career-provider.log", + "sha256": "62f2994ad19a262c6bf2d702eb216db1307fad5b5119ac2f8672fafd881d6e5a", + "bytes": 654, + "hashPolicy": "Exact measured raw bytes" + }, + "stats": { + "startTime": "2026-10-12T00:01:48.945Z", + "duration": 9025.08, + "expected": 1, + "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": 925 + } + ], + "axeScans": [], + "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" + } + ], + "reportErrors": [], + "configuration": { + "version": "1.62.1", + "workers": 1, + "projects": [ + { + "name": "chromium", + "retries": 0 + } + ] + } + }, + "nativeSpecificationSnapshots": { + "red": [ + { + "originalPath": ".artifacts/phase7/current/ui/career-provider.json", + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider.json", + "sha256": "89e9c7a29a1f0ddd44226103d0005175571e4c6156857bb632cdab3d189c9cfd", + "hashPolicy": "Exact measured raw bytes" + }, + { + "originalPath": ".artifacts/phase7/current/ui/career-provider.log", + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider.log", + "sha256": "e99aa2b38dfe056b01acf53156b1e422a9b4c26d3c4d7cb541141753792f1b25", + "hashPolicy": "Exact measured raw bytes" + }, + { + "originalPath": ".artifacts/phase7/current/ui/career-provider-command.json", + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/career-provider-command.json", + "sha256": "2f62a75ba5a8ffe0c90bd7f5f4ff1101001448d73b95e512189e4218d0a132c4", + "hashPolicy": "Exact measured raw bytes" + }, + { + "originalPath": ".artifacts/phase7/current/run-ui.py", + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/run-ui.py", + "sha256": "fb9062016d827b33261babbd7eae808f3044e47671ca17d0ba5d1a241497fc4d", + "hashPolicy": "Exact measured raw bytes" + }, + { + "originalPath": "job-tracker-ui/e2e/phase7-career-overview.spec.ts", + "path": ".artifacts/phase7/p7-02/evidence-list-repair/red-http/phase7-career-overview.spec.ts", + "sha256": "870d4b3f22639e140b1b4d48a99d3d18134e1b47655d364d0ed1cd14a88856c5", + "hashPolicy": "Exact measured raw bytes" + } + ], + "green": [ + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/green-http/phase7-career-overview.spec.ts", + "sha256": "695a14a507432c4cf0ed6a8521a41ece9c0ee6bbf4ac34fdf4787c63dd020f14", + "bytes": 22274, + "hashPolicy": "Exact measured raw bytes" + }, + { + "path": ".artifacts/phase7/p7-02/evidence-list-repair/green-http/run-ui.py", + "sha256": "fb9062016d827b33261babbd7eae808f3044e47671ca17d0ba5d1a241497fc4d", + "bytes": 4430, + "hashPolicy": "Exact measured raw bytes" + } + ] + }, + "backendCountDelta": { + "priorFull": 1033, + "newOrdinaryCases": 1, + "derivedFutureFull": 1034, + "qualification": "Fresh affected guards90→91 include one actual SQLite sorting/foreign-owner test. Full1,034 is derived, not freshly executed; the dedicated1 and HTTP1 overlap these guards and final Career coverage." + }, + "limits": [ + "No schema/converter/action/payload/SQL owner authorization change; other-provider ordering unchanged.", + "Owned evidence list remains O(N) with SQLite owner-local materialization; no performance improvement claim.", + "HTTP-only provider case uses real local API/SQLite, not Career UI acceptance. Existing onboarding exportbwZtqlczGqVRJ0J01IxVK does not establish a fresh Career frontend build.", + "Native specification/fixture is an uncommitted snapshot at repair proof; its ordinary case will be committed and rerun in the later Career UI slice, not counted twice.", + "Production NO-GO/main unchanged;57 groups remain56PARTIAL+C11DEFERRED/32routes; all manual/AI/Phase8 gates retained.", + "Other-provider SQL ordering is unchanged by source-branch inspection; no live production/MySQL provider execution is claimed." + ], + "rawRetention": { + "root": ".artifacts/phase7/p7-02/evidence-list-repair", + "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" + }, + "staticGate": { + "evidence": { + "path": "docs/redesign/phase-7/p7-02/evidence/evidence-list-repair-static-checks.json", + "sha256": "c6e0f2dde1f33d08bdc9b4930fc06b1fc1f76af5fb6c38ae63399966c1e3feb8", + "hashPolicy": "Portable JSON canonical UTF-8 LF bytes" + }, + "status": "PASS", + "checkedUtc": "2026-10-12T00:05:02.877384+00:00", + "commandExitCodes": { + "secret-scan": 0, + "working-whitespace": 0, + "staged-whitespace": 0, + "phase7-whitespace": 0 + }, + "documentation": { + "files": 9, + "relativeLinks": 337, + "errors": [] + }, + "preservation": { + "groups": 57, + "statuses": { + "PARTIAL": 56, + "PASS": 0, + "FAIL": 0, + "DEFERRED": 1 + }, + "originalRoutesPreserved": true, + "currentConcreteRoutes": 32 + } + } +} diff --git a/docs/redesign/phase-7/p7-02/evidence/onboarding-results.json b/docs/redesign/phase-7/p7-02/evidence/onboarding-results.json index d156737..e250d99 100644 --- a/docs/redesign/phase-7/p7-02/evidence/onboarding-results.json +++ b/docs/redesign/phase-7/p7-02/evidence/onboarding-results.json @@ -102,7 +102,7 @@ "hashPolicy": "Exact measured raw bytes" } ], - "historicalSourceApplicability": "Original sourceFiles/sourceSha256Lf identify this frozen onboarding 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.", + "historicalSourceApplicability": "Original sourceFiles/sourceSha256Lf apply at d21501aa7e5f9040937fa821d6a77d823b7e08eb. Verify against immutable sourceSnapshots canonicalLfSha256 or that committed tree, not a later Career/i18n workspace. Measured source/build/export hashes and original digest order remain unchanged.", "staticExportSnapshot": { "root": ".artifacts/phase7/p7-02/onboarding-final/export", "qualification": "Exact raw74 files from job-tracker-ui/out; original export digest paths/algorithm unchanged" @@ -8512,7 +8512,32 @@ "Phase8": "Outside scope" }, "pushReceipt": { - "status": "PENDING_ACTUAL_COMMIT_AND_PUSH" + "checkpoint": "P7-02", + "slice": "onboarding guidance", + "status": "PUSHED_AND_VERIFIED", + "checkedUtc": "2026-10-11T23:55:12.614723+00:00", + "head": "d21501aa7e5f9040937fa821d6a77d823b7e08eb", + "originDevelopment": "d21501aa7e5f9040937fa821d6a77d823b7e08eb", + "liveDevelopment": "d21501aa7e5f9040937fa821d6a77d823b7e08eb", + "main": "27657f31131cd95d42f0e1290853ec9c9b3959a4", + "originMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4", + "liveMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4", + "workingTreeClean": true, + "production": "NO-GO", + "pushCommand": [ + "rtk", + "proxy", + "git", + "push", + "origin", + "HEAD:refs/heads/codex/ui-redesign-phase4" + ], + "pushExitCode": 0, + "raw": { + "path": ".artifacts/phase7/p7-02/onboarding-final/push-receipt.json", + "sha256": "c9bb5ec8abb56652501b700c54c31bf52eb085331e3c38e1e9dde87f61f9c2d3", + "hashPolicy": "Exact observed raw bytes" + } }, "rawRetention": { "root": ".artifacts/phase7/p7-02/onboarding-final", diff --git a/docs/roadmap/todo.md b/docs/roadmap/todo.md index 7b4f14a..12e01be 100644 --- a/docs/roadmap/todo.md +++ b/docs/roadmap/todo.md @@ -84,7 +84,7 @@ 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/push pending. Career overview/evidence second boundary and whole P7-02 remain pending;596 full frontend is derived only. +- [ ] 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-04 CV library and public entry. - [ ] P7-05 Discovery, Companies, Offers and Reminders.