test(e2e): isolate administrator roles and locale between journeys
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# Shared native fixture isolation
|
||||
|
||||
## Recorded failure
|
||||
|
||||
The committed-source run on `b333ef55d5665223d2f570ec9681336fc3971c8a` completed20October19:15:16UTC with **103passed/248failed/0skipped/0flaky**, zero configured retries. This is a failed integrated run, retained in its raw JSON/log/trace evidence, not248 established application defects.
|
||||
|
||||
Earlier zoom and route-census cases created synthetic administrators without removing their elevated roles. The Users case assumed the bootstrap administrator was the last one, attempted self-demotion, received204instead of409 and consequently removed the shared fixture's administrative access. Most later setup requests returned403. No server authorization failure is established: demotion was permitted because other administrators existed.
|
||||
|
||||
Separately, Audit’s bilingual samples persisted Bokmål to the shared administrator. System’s English fixture seeded only localStorage; the application correctly hydrated authoritative `/auth/me` language and displayed `Prøv igjen`/`Innstillinger`, while the test expected English. Trace responses and accessible snapshots confirm this cause.
|
||||
|
||||
An earlier Audit GET of the restored owned job328 returned500. It does not follow from later self-demotion. A read-only SQLite backup into an isolated diagnostic data root and an authenticated GET returned200; the combined successor case also passes. Root cause remains unproven. Do not close the intermittent read debt from these successful continuations. The ordinary browser backend now pipes Warning/error logs so future500responses retain server diagnostics without verbose SQL logging.
|
||||
|
||||
## Bounded correction and preservation
|
||||
|
||||
- Zoom and route census retain the exact ID of their own created administrator, remove only that synthetic account's roles in `finally` using bootstrap credentials, assert204and still dispose contexts/attach evidence on cleanup failure. No account or database is deleted.
|
||||
- Users first asserts the bootstrap is the sole administrator before attempting self-demotion. This prevents another future fixture leak from causing a cascading loss of test authority. Its original409, ordinary-user403, session revocation and deletion-disabled503assertions remain. Its promoted synthetic account is demoted in `finally` through the independent bootstrap context.
|
||||
- Audit, System and Users bootstrap login helpers explicitly save the language required by their fixture through the existing protected API. The bilingual cases retain every explicit per-sample update and assertion. Ordinary owners are unaffected.
|
||||
- No application/API/schema/security semantics, production data, model, renderer, test timeout, skip, expected-failure marker or configured retry is changed. No case is removed or reordered to hide the integration failure.
|
||||
|
||||
## Successor evidence
|
||||
|
||||
The combined ordinary run executes both zoom cases, all five route/Board cases, Audit3, System3and Users3in their normal order on one fresh fixture: **16/16PASS**,21October05:11:01–05:15:20UTC, zero skips/flaky/retries. This proves producers and consumers compose, including the last-admin precondition and original409. Raw artifacts are `.artifacts/phase7/current/ui/composition.json`, `composition.log` and `composition-results/`; the portable manifest records hashes.
|
||||
|
||||
Two earlier composition attempts correctly refused to reuse port5302left by the parent's isolated diagnostic process. That exact task-owned process was identified and stopped; neither failed setup is a passing run. Source collection is post-run; the late stdout/log-level diagnostic change is qualified separately and receives fresh type/lint/full-run proof.
|
||||
|
||||
Case inventories remain899frontend/101suites,1057backend,56sidecar and351ordinary browser. This repair adds0cases; the preceding confirmation repair accounts for the899th frontend case. Overlapping focused vectors are not summed. Full integrated successor execution and final post-run source reconciliation remain required. All57 PRES dispositions and33routes remain; production readiness is NO-GO, P5-13 withheld and Phase8 not started.
|
||||
@@ -1,5 +1,11 @@
|
||||
# P7-12 — Integrated migration acceptance
|
||||
|
||||
## Continuation — 21 October
|
||||
|
||||
The first complete successor run failed103/351, with248unexpected failures and zero skips/flaky/retries; it is not accepted. [Fixture investigation](FIXTURE_ISOLATION.md) and [portable evidence](evidence/fixture-repair.json) separate administrative role/language contamination from an unresolved isolated Audit500. The corrected shared-fixture composition passes16/16. Existing409/403/503, ownership, source/save and route assertions remain; no test is removed or relaxed. The final whole run and separate lanes still follow. The earlier18:52:58UTC clean publication of entry evidence `ddb9c3da4ff31447fa6bd579002f32199052937d` remains historical, not final acceptance.
|
||||
|
||||
Separately, parser native-exit diagnostics `dda16873455259bce23a744bd838c3e3e0fc6ee8` are pushed on development and equivalent main8699ae4 is normally pushed/directly verified21October05:13:39UTC. Release837 remains unqualified: it subsequently failed in native MSBuild/.NET test compilation after the parser process succeeded. No deployment/model activation is claimed. The [parser report](../../../infrastructure/2026-10-21-parser-native-exit.md) preserves the earlier distinct SIGSEGV and diagnostic-only scope.
|
||||
|
||||
## Entry and bounded scope
|
||||
|
||||
All P7-00–P7-11 presentation boundaries are implemented and published, with their original qualifications retained. P7-11 final error-owner commit `584530b694a2238928d10fddfc013499cf9b3fab` was pushed and directly verified clean at 2026-10-20T18:29:28 UTC. The normal main-repair reconciliation merge `8bbaf1f875f6d32dd7d379779a35188dca844fbb` was pushed and verified clean at18:29:38 UTC. These receipts supersede earlier pending-publication observations.
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"observedUtc": "2026-10-21T05:18:18.993008+00:00",
|
||||
"failure": {
|
||||
"stats": {
|
||||
"startTime": "2026-10-20T18:50:55.722Z",
|
||||
"duration": 1460403.5180000002,
|
||||
"expected": 103,
|
||||
"skipped": 0,
|
||||
"unexpected": 248,
|
||||
"flaky": 0
|
||||
},
|
||||
"rawJsonSha256": "aef0c669476135ab655a30104bba9886cfe5fb64458285dd7a2be4254d1e5343",
|
||||
"rawLogSha256": "f0280b5a9665af14952c583b3fab2af10d330574a0f48e25201e44f7e2fe5a27",
|
||||
"source": "b333ef55d5665223d2f570ec9681336fc3971c8a",
|
||||
"qualification": "Completed failed whole run. Successor runner archives these exact raw bytes under ui/attempts; final manifest must resolve the archive path by hash. No failure is converted to a skip or expected failure."
|
||||
},
|
||||
"composition": {
|
||||
"stats": {
|
||||
"startTime": "2026-10-21T05:11:01.774Z",
|
||||
"duration": 259024.46,
|
||||
"expected": 16,
|
||||
"skipped": 0,
|
||||
"unexpected": 0,
|
||||
"flaky": 0
|
||||
},
|
||||
"command": {
|
||||
"name": "composition",
|
||||
"command": [
|
||||
"rtk",
|
||||
"proxy",
|
||||
"node",
|
||||
"node_modules/@playwright/test/cli.js",
|
||||
"test",
|
||||
"e2e/browser-zoom-audit.spec.ts",
|
||||
"e2e/functional-acceptance.spec.ts",
|
||||
"e2e/phase7-admin-audit.spec.ts",
|
||||
"e2e/phase7-admin-system.spec.ts",
|
||||
"e2e/phase7-admin-users.spec.ts",
|
||||
"--retries=0",
|
||||
"--reporter=list,json",
|
||||
"--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\composition-results"
|
||||
],
|
||||
"startedUtc": "2026-10-21T05:11:01.254030+00:00",
|
||||
"finishedUtc": "2026-10-21T05:15:20.899324+00:00",
|
||||
"exitCode": 0
|
||||
},
|
||||
"path": ".artifacts/phase7/current/ui/composition.json",
|
||||
"sha256": "e751f72a84bbde8340b4077782c415cae62d0d175ad3684766366a428c1b3d48"
|
||||
},
|
||||
"files": {
|
||||
"job-tracker-ui/e2e/browser-zoom-audit.spec.ts": "d2e14c8fb86a068456c1bcebf090b707d6448561b8643f13204bcd22e1515b37",
|
||||
"job-tracker-ui/e2e/functional-acceptance.spec.ts": "fbba35f4ccdae767e5a4d87623f190bb348ce3ecd1eb7a4248316d6822fa3dd0",
|
||||
"job-tracker-ui/e2e/phase7-admin-audit.spec.ts": "3737f20446d56bc6e61ba249b2c13316314aa0bfde6e7ff2202a781d3f793d6f",
|
||||
"job-tracker-ui/e2e/phase7-admin-system.spec.ts": "1e4dc4a33587adcc8f2f4cc23f83a2d7f47b589d0fa4b81977187d5849dbce37",
|
||||
"job-tracker-ui/e2e/phase7-admin-users.spec.ts": "df6ca26e3608a7dd0772f7dbcb71258fa7d58e7535982ecd5eddec157fcc790c",
|
||||
"job-tracker-ui/playwright.config.ts": "24f13510ab8d4f2718bfeaaa7c77bb95ae109c69d4a318abd1b5c87777306ee0"
|
||||
},
|
||||
"axe": {
|
||||
"scans": 28,
|
||||
"violations": 0,
|
||||
"incompleteRules": {
|
||||
"color-contrast": 2145,
|
||||
"aria-prohibited-attr": 10
|
||||
},
|
||||
"incompleteNodes": 2155
|
||||
},
|
||||
"visualEvidence": "Screenshots are retained automated state evidence; no new human image review claimed for this fixture-only repair. Prior checkpoint visual inspections remain qualified.",
|
||||
"sourceQualification": "Post-run source collection. Logging-only Playwright stdout/log-level change was made while composition was already running and did not affect that backend process; fresh successor full run validates it.",
|
||||
"conditions": [
|
||||
"Audit owned-read500 remains unreproduced/intermittent, not closed by successful rerun.",
|
||||
"Role cleanup is finally-based; sole-admin precondition fails safely if forced termination prevents earlier cleanup.",
|
||||
"Axe incomplete contexts remain raw triage evidence and do not establish human screen-reader/device acceptance.",
|
||||
"Full351browser and separate HTTP/security lanes remain required; no final acceptance yet."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"checkpoint": "p7-12",
|
||||
"status": "PASS",
|
||||
"checkedUtc": "2026-10-21T05:21:16.714740+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-21T05:21:11.487147+00:00",
|
||||
"finishedUtc": "2026-10-21T05:21:15.631000+00:00",
|
||||
"exitCode": 0,
|
||||
"log": ".artifacts/phase7/current/static/20261021T052111Z/secret-scan.log",
|
||||
"logSha256Raw": "be5119e6057287d397e87759f855c91e634e3bfac61c8be7584d05592ba2dfcd"
|
||||
},
|
||||
{
|
||||
"name": "working-whitespace",
|
||||
"command": [
|
||||
"rtk",
|
||||
"proxy",
|
||||
"git",
|
||||
"diff",
|
||||
"--check"
|
||||
],
|
||||
"startedUtc": "2026-10-21T05:21:15.631500+00:00",
|
||||
"finishedUtc": "2026-10-21T05:21:15.721641+00:00",
|
||||
"exitCode": 0,
|
||||
"log": ".artifacts/phase7/current/static/20261021T052111Z/working-whitespace.log",
|
||||
"logSha256Raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"name": "staged-whitespace",
|
||||
"command": [
|
||||
"rtk",
|
||||
"proxy",
|
||||
"git",
|
||||
"diff",
|
||||
"--cached",
|
||||
"--check"
|
||||
],
|
||||
"startedUtc": "2026-10-21T05:21:15.722142+00:00",
|
||||
"finishedUtc": "2026-10-21T05:21:15.811199+00:00",
|
||||
"exitCode": 0,
|
||||
"log": ".artifacts/phase7/current/static/20261021T052111Z/staged-whitespace.log",
|
||||
"logSha256Raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"name": "phase7-whitespace",
|
||||
"command": [
|
||||
"rtk",
|
||||
"proxy",
|
||||
"git",
|
||||
"diff",
|
||||
"--check",
|
||||
"b5319981ad3d1bd635daff861453d23c0de5320b"
|
||||
],
|
||||
"startedUtc": "2026-10-21T05:21:15.811199+00:00",
|
||||
"finishedUtc": "2026-10-21T05:21:16.134813+00:00",
|
||||
"exitCode": 0,
|
||||
"log": ".artifacts/phase7/current/static/20261021T052111Z/phase7-whitespace.log",
|
||||
"logSha256Raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
],
|
||||
"untrackedSecretScan": {
|
||||
"files": 0,
|
||||
"findings": 0
|
||||
},
|
||||
"documentation": {
|
||||
"files": 42,
|
||||
"relativeLinks": 668,
|
||||
"errors": []
|
||||
},
|
||||
"preservation": {
|
||||
"groups": 57,
|
||||
"statuses": {
|
||||
"PARTIAL": 56,
|
||||
"PASS": 0,
|
||||
"FAIL": 0,
|
||||
"DEFERRED": 1
|
||||
},
|
||||
"originalRoutesPreserved": true,
|
||||
"currentConcreteRoutes": 33
|
||||
},
|
||||
"production": {
|
||||
"main": "8699ae4f421bb1d049b937e735e40a4797a4b719",
|
||||
"originMain": "8699ae4f421bb1d049b937e735e40a4797a4b719",
|
||||
"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."
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user