Files
jobtrackingapp/docs/redesign/phase-2/BASELINE_DEFECTS.md
T
cesnimda d6d3dd977d test(redesign): establish preservation baseline
Map 57 capability groups before restructuring. Add behavioral regression coverage and a standalone TypeScript gate; retain the native SQLite package failure as separate baseline debt.
2026-09-10 12:53:06 +02:00

7.7 KiB
Raw Blame History

Phase 2 baseline defects and intentional gaps

Application source is unchanged from 2d0f131. No defect below was fixed as part of the preservation checkpoint.

P2-D01 — SQLite tailoring and submitted-package capture fail

Confirmed in the disposable running local API, not production. The new browser regression creates a real non-admin account, canonical profile, company/job, attached CV, cover letter and UTF-8 attachment. It opens the existing legacy job URL, then clicks Freeze current package in the CV section (not the cover-letter section).

Observed:

Request Result
Profile/job/CV/letter/file fixture writes Successful, including B02 session preconditions
GET job submitted-packages 200, empty list
GET job tailoring 500
POST job submitted-packages 500; no successful package row shown
API exception System.NotSupportedException: SQLite does not support expressions of type 'DateTimeOffset' in ORDER BY clauses.

Stack evidence points to ApplicationAssetsService, GetTailoringPlanAsync (ordering verified CareerEvidence by UpdatedAtUtc at line 182), and SubmittedApplicationPackageService, CaptureAsync (ordering variants by UpdatedAtUtc at line 67). These paths do not use the SQLite-safe ordering used in some nearby services. Existing SqliteDateTimeOffsetCompatibilityTests exercise other ordering paths; they do not certify these two. Existing SubmittedApplicationPackageTests prove snapshot/owner/failure contracts with test seams, not successful native SQLite execution of this query.

The new desired success test is retained with an explicit test.fail annotation activated after fixture and navigation setup, only for the observed capture HTTP 500. Playwright reports an expected failure as expected execution; this is not a successfully frozen package. Post-capture checks for unchanged archived HTML/letter and exact attachment bytes after deleting the current source are present but not reached. Do not count them as achieved coverage. A successful capture runs all later assertions as ordinary tests; setup, non-500 responses and subsequent archive failures cannot be masked by the annotation. Remove the narrow annotation and update this classification only with the separately scoped fix and successful native evidence.

Initial fixture error: the first draft looked for package capture under the cover-letter tab; inspection showed the existing capture lives under CV, and the test was corrected. That locator error is not an application defect.

Scope/next owner: a separate bounded provider-compatibility repair and native storage verification before any package/tailoring redesign. Preserve timestamps/ownership and MariaDB behavior; no schema change is presumed. Phase 2 neither changes ordering nor claims the same failure in MariaDB/production. All original 916 backend and 298 frontend cases remain retained.

Local diagnostic command (PowerShell, from job-tracker-ui, after the documented build):

$env:DEBUG='pw:webserver'
node node_modules/@playwright/test/cli.js test e2e/redesign-preservation.spec.ts

The full debug log is local ignored evidence, .artifacts/phase2-browser-focused.log; it is not committed wholesale. It contains synthetic accounts only. The exception/request facts above are the durable evidence. Use the normal commands in README to reproduce with an isolated data directory; never substitute production URLs.

P2-O01 — one rules-save HTTP 500, not independently reproduced

The first browser run sent the valid rule object with appliedFollowUpDays=5 and received 500; a subsequent GET still returned 14. The visible draft retained 5. Response contained a generic problem and trace ID; that run did not retain the server exception, so the cause is unknown.

An isolated authenticated direct PUT then returned 204 and persisted 5. A repeat of the original mobile→desktop browser save with explicit response observation also returned 204 and persisted 5. No rules regression is expected-failed or skipped. Both successful browser/direct saves remain ordinary permanent tests. Do not claim a confirmed root cause from one transient result. If it recurs, collect the server exception/trace before proposing a fix. Failed notification-save UI retention is independently covered with a deterministic transport failure.

Audit precision: workspace overlay and admin route

The current source has a reusable ApplicationWorkspace with override/onClose/full-page-link props, but the production call-site search finds only its normal full-page wrapper. Preserve the reusable contract; do not claim the test named application-workspace-overlay exercises a mounted production quick-preview host. A future overlay needs its own close/dirty/focus tests before adoption.

Non-admin navigation hides admin destinations. A crafted admin URL can render the page shell; the API returns 403 and no user list is exposed. The browser test verifies this established boundary, not a nonexistent frontend route-denial screen.

Existing debt remains separate

The Phase 1 risks, baseline summary and validated queue remain authoritative for prior findings:

  • Stale CV revision overwrites, creation idempotency, calendar/timezone correctness, restore/rollback readiness, billing/deletion and operational failures are not resolved by redesign tests.
  • Shared contrast/focus, builder preview scrolling and incomplete loaded accessibility/manual testing remain open. No axe/WCAG certification is added.
  • Historical TS2571 was corrected before Phase 2; it does not recur. This checkpoint adds the explicit full src/app standalone type gate without relaxing strictness. Its existing tsconfig scope includes Jest files, not all Playwright/config files.
  • Main CI run 743's worker SIGSEGV/retry timeout/closed-browser failures and skipped deployment remain unresolved runner evidence. A local passing suite and feature-branch push do not close this release blocker.
  • B06 implementation complete; F04 remains open. Actual Traefik peer, nginx/API runtime listeners, firewall/NAT/IPv6 exposure, forwarded client IP, DNS/TLS/redirect and restart behavior still need the operator handoff. No production credentials accessed or live tests run here.

Intentional gaps by deadline

Deadline Evidence still required
Before shell/Jobs restructuring Mobile drawer focus/return, saved view CRUD, bulk partial failures/trash restore, capture/legacy entries; matrix E07/J04/J05/J06/W01
Before CV/package restructuring Native capture/tailoring success, item-specific override reset/source edit, browser history restore, loaded preview keyboard and template/control combinations; C07–C10/W05/W07
Before career import restructuring Low-confidence selection/discard, real unusual document extraction and error recovery; C03
Before mail/settings/admin restructuring Provider sandbox reconnect/delivery; persisted draft conflict/uncertain-send retained; session list UI, audit undo/restore, dashboard toggle ownership; E05/M01–M06/S02/A02
Before public release Manual assistive technology/touch/zoom/reflow; EN/NB and both themes; provider/DNS/TLS/firewall/backup restoration; original CI runner remediation

These gaps permit Phase 3 planning, not unguarded production restructuring of the affected capability.