fix(career): preserve evidence listing on SQLite

This commit is contained in:
cesnimda
2026-10-12 02:06:27 +02:00
parent d21501aa7e
commit 01281f52d9
11 changed files with 821 additions and 12 deletions
@@ -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<ICurrentUserService>();
current.SetupGet(x => x.UserId).Returns("owner-1");
await using var db = new JobTrackerContext(new DbContextOptionsBuilder<JobTrackerContext>().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<IEnumerable<CareerEvidenceController.EvidenceDto>>(Assert.IsType<OkObjectResult>((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<UserManager<ApplicationUser>> Users(string id)
{
var store = new Mock<IUserStore<ApplicationUser>>();
@@ -21,7 +21,11 @@ public sealed class CareerEvidenceController(JobTrackerContext db, UserManager<A
{
var owner = await OwnerAsync();
if (owner is null) return Unauthorized();
var rows = await db.Set<CareerEvidence>().AsNoTracking().Where(x => x.OwnerUserId == owner).OrderByDescending(x => x.UpdatedAtUtc).ToListAsync(ct);
var query = db.Set<CareerEvidence>().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));
}
+2 -1
View File
@@ -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.
+3 -1
View File
@@ -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.
+1 -1
View File
@@ -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 |
+2 -2
View File
@@ -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.
+26 -3
View File
@@ -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.
@@ -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."
]
}
@@ -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
}
}
}
@@ -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",
+1 -1
View File
@@ -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.