8.2 KiB
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
Successor evidence: P5-08b readiness repairs the two native SQLite ordering paths and executes the formerly unreachable frozen-content, exact-file, ownership and native ZIP readback assertions. Its final validation records the expected-to-actual browser transition. The reproduction below is historical Phase 2 evidence and is preserved unchanged.
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.