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
+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",