10 KiB
Test baseline and gaps
The test-file census lists every discovered tracked frontend test file (76: 67 unit/component and nine browser/HTTP specification files), 106 backend test-source files, plus extension/parser/repository safety files. Counts describe files, not executed cases or coverage percentages. The source snapshot is 97fce89; subsequent bounded CI packaging corrections are tracked in the B06 release log, not redesign work.
Test layers
| Layer | Setup and demonstrated scope | Limit |
|---|---|---|
| Frontend unit/component | Jest, jsdom, Testing Library; config. Account switching, routes, workspace/drafts, CV, mail, admin, theme, translations, dialogs and imports/exports | Babel strips TypeScript; mocks do not prove server ownership or real provider behavior |
| General browser | Playwright config: one Chromium project, isolated .NET API/SQLite data and local frontend; production static build supported | Chromium only; no actual Traefik/nginx; no cross-browser or screen-reader certification |
| Browser smoke | Nine cases in e2e/smoke.spec.ts: health/readiness, public plans, login, Free restrictions, reviewed job create, deep-linked job workspace/dirty guard, career, public CV/PDF, long searchable Code PDF |
Selected journeys, not exhaustive editor states or all providers |
| Account isolation | Four e2e/account-isolation.spec.ts cases: original A→B replay, missing/forged context, crafted CV ownership/association, two-tab private-state disposal/Back |
Retain API and database assertions when UI changes |
| Accessibility | Two axe cases over eight sampled routes | See missing state matrix below |
| Other general browser | One each discovery responsive review, dark Kanban, CSV security/UTF-8 byte preservation | Does not establish whole-app mobile/theme parity |
| PDF HTTP probe | pdf-tests/admission.spec.ts and dedicated config |
Synthetic bounded concurrent requests; admission differs from time-window limiting |
| Rate-limit HTTP probe | rate-limit-tests/isolation.spec.ts and dedicated config |
Nine account/session/IP/auth/forwarding scenarios; native API topology |
| Production ingress HTTP | ingress-tests/production.spec.ts and dedicated config |
Six native production-mode origin/proxy checks; not running nginx or Traefik |
| Backend | xUnit/Moq, SQLite/InMemory and HTTP test seams; API/service ownership, auth, parser, CV/history/PDF, queue, billing, export, migration and rate/proxy tests | Provider-host tests and fault/probe tests have separate runtime requirements; SQLite is not full MariaDB proof |
| Repository/dependencies | Compose rendering + 17 hostile mutations, secret scan/SBOM, evaluation and supply-chain scripts | Config validation cannot prove host firewall or actual socket peers |
| Adjacent clients/services | Browser-extension node tests and Python parser/service tests | Preserve capture/document boundary; avoid pretending these are covered by React Jest |
The default browser suite currently contains 18 tests. The nine special browser/HTTP files count includes six general e2e files and three separately configured suites. Special configurations must be invoked explicitly; a plain general Playwright run does not run all of them.
Existing evidence versus fresh execution
| Evidence | Result and classification |
|---|---|
| Previous B06 unchanged application regression | 166 focused backend, 3 Compose, 6 production HTTP, 9 rate-limit HTTP passed; exact prior commands/results |
| Previous B06 broader baseline | 915 selected backend tests, 298 frontend tests/67 suites, 18 browser tests, Release builds and targeted lint passed; external-DNS-dependent IMAP test excluded locally and explicitly documented |
| Fresh Phase 1 type reproduction | From job-tracker-ui: node node_modules/typescript/bin/tsc --noEmit --incremental false → exit 1, src/interview-prep.test.tsx(120,10): error TS2571: Object is of type 'unknown'. |
| Fresh release-prerequisite checks | python scripts/test-ingress.py → 3/3 pass; real standalone Compose path also tested; official downloaded Linux binary digest verified; tracked-secret scan and diff check pass |
Fresh packaging regression at 23cc250 |
Explicit installed .NET 9.0.317 SDK: Release build + 22/22 PDF admission tests pass, then 915/915 selected backend tests pass (same documented external-DNS IMAP exclusion). Results: .artifacts/redesign-audit/backend.trx |
| Actual CI push verification | Runs 736/737 exposed missing Compose/token prerequisites; corrected. Run 738 passed Compose/safety/extension/parser/API build, then exposed Linux PDF test-fixture packaging collision. Follow-up result belongs in release log |
| Fresh Linux backend confirmation | Run 741, 2024c37, passed 916/916 backend cases, zero skipped, after test packaging/runtime-location and TLS EOF-or-no-read portability corrections. This includes the locally excluded DNS-dependent case. Application behavior and all security assertions remain protected; deployment has separate gates |
Subsequent authorized release correction, a861ca4 |
Next 16.3.4/sharp 0.35.4/js-yaml 3.15.2 resolve three blocking dependency entries: installed npm audit zero vulnerabilities. Fresh 298 frontend / 18 browser pass, plus 13 interview tests after the test-only TS2571 correction. Standalone tsc, lint and production static build pass. Exact commands and failed-before evidence remain in the B06 release log; this is release repair, not a redesign implementation |
Final CI retry, run 743 at 27657f3 |
916 backend / 298 frontend pass, zero backend skips; Compose/safety/parser, dependency audits, lint and production builds pass. Browser gate: 6 passed / 12 failed, beginning with worker SIGSEGV, then retry timeout and closed-browser navigation errors. Deploy skipped. Repeated process crashes reached the bounded stop condition; runner-host evidence is required before another release attempt. See exact result and diagnostic handoff. Local browser success is not a replacement for CI |
| Live/container boundary | Local Docker engine unavailable; F04 production evidence remains incomplete. No audit claim of real proxy-chain success |
The selected broader backend suite was repeated for the PDF fixture packaging change; the frontend suite was not repeated merely for documentation edits. Preserve the distinction between prior unchanged-source evidence, newly executed checks and actual CI failures. Run 739 subsequently failed earlier in the unchanged API compiler with csc.dll exit 139 on both existing attempts; it did not reach the corrected test-project build. No test gate was bypassed.
Exact TypeScript root cause
Interview test:120 originally read .content from mockedApi.post.mock.calls[0][1]. Axios's mocked generic request-data argument is typed unknown; the test dereferenced it without narrowing. The runtime assertion passed because Babel removes types. The production component's emitted behavior was not shown broken by this test diagnostic.
tsconfig includes src, including tests. CI runs Jest/lint/Next build but has no explicit full standalone tsc --noEmit gate. The patched Next 16.3.4 release build independently failed on this exact diagnostic. Authorized release repair a861ca4 replaced the property dereference with an object matcher, retaining both positive prompt and negative invented-content assertions. Fresh standalone tsc, 13 interview tests and Next build now pass. The original Phase 1 reproduction above remains historical evidence. Phase 2 still needs a deliberate standalone CI gate; no strictness or test coverage was weakened.
Missing regression proof before redesign
| Priority | Add or preserve evidence |
|---|---|
| First | Stable type-check gate; B02 stale/queued mutation + cross-tab unmount as shared-client acceptance; legacy URL/overlay/full-page parity |
| First | Populated CV editor/profile/job detail plus open menus/dialogs/error/conflict states in EN/NB, light/dark, mobile/desktop; preserve underlying draft/history assertions |
| First | AI suggestions rejected/accepted distinctly; actual profile values unchanged when editing a CV/cover letter; unsupported/locked capabilities behave honestly |
| First | Typed date values, JSON import/export and B05 CSV bytes; attachments/private/public download distinctions; package history remains frozen |
| Before mail migration | Draft revisions, uncertain send/new attempt, provider reconnect/read failure, ownership and explicit send confirmation; use synthetic/sandbox providers |
| Before admin migration | Non-admin denied APIs, role revocation and last-admin guards, sensitive diagnostics excluded from personal pages |
| Before public release | Keyboard + NVDA/Narrator, preview scroll/focus, zoom/reflow, forced colors, real mobile keyboard and touch; provider/production gates separately |
Axe currently scans /, /login, /dashboard, /jobs, /kanban, /career, /settings, /admin/system, mostly after body/main appears, in English. Missing builder library/editor, job detail, discovery, offers, mail/review, public CV, account security, registration/reset/verification, operations, admin users/audit and interactive loaded states must be selected intentionally. Do not convert a green shell sample into a WCAG compliance claim.
Recommended later commands: locked dependency restore; Release backend build/test; full Jest; standalone tsc; lint; production frontend build; general Playwright static-export suite; explicit PDF/rate/ingress configurations; Compose validator and git diff --check. Use the environment/setup commands from the completion reports rather than guessing SDK paths or running probes against production.