Files
jobtrackingapp/docs/redesign/phase-5/p5-15/p5-15-01/DEFECTS.md
T

14 KiB

P5-15-01 functional defect register

Current R-03 disposition: Analytics authentication repair closes AUTH-01 for the verified complete safe return-path scope. The unchanged original assertion is RED→GREEN; all134ordinary browser cases, both separate diagnostics, safe-target/foreign404/account-disposal and existing saved-search/Rules journeys pass. Current open totals for the three original reproduced defects: P0=0/P1=0/P2=0/P3=0. This does not close separate debt/evidence gaps or grant whole-group PASS. Production remains NO-GO; P5-15-02 has not begun. R-02 disposition and original observed failures below remain historical.

Historical R-02 disposition: Rules draft repair closed SETTINGS-01 for verified internal draft retention and related Save/validation/failure/retry/Discard/account isolation. DISCOVERY-01 remained scoped CLOSED by R-01. AUTH-01 remained P2/OPEN; reproduced open totals at R-02:P0=0/P1=0/P2=1/P3=0. Fresh complete R-02 ordinary browser128pass/1fail and diagnostics2/2 retained the remaining real failure. Production and P5-15-02 remained NO-GO. Unknown historical Rules/notification/language500 causes and CV intermittent observation remain open.

Historical R-01 disposition: DISCOVERY-01 is CLOSED for the verified SQLite listing/error/recovery defect by the bounded repair. Live deployed-provider qualification and complete PRES-J02 delivery/device acceptance remain open. AUTH-01 and SETTINGS-01 remained P2/OPEN at R-01; reproduced open counts wereP0=0/P1=0/P2=2/P3=0. Original reproduction/severity/evidence below remain historical; closing this defect does not erase release blockers or grant full-group PASS.

Audit source 932b962b9038ddb5ad59b982c0199475bfb50454. Findings use synthetic accounts and disposable local data; no production account, provider or infrastructure is exercised. An audit finding is not automatically a regression introduced by Phase 5. Application source is unchanged here; neither source inspection nor an InMemory pass can override a native failure.

P0 means serious security/data loss; P1 an important broken workflow; P2 limited/recoverable functional failure; P3 minor inconsistency. Missing evidence is a gap, not a defect. The original debt register remains authoritative for separately carried items. This register assigns concrete remediation; it does not authorize or perform it.

P5-15-01-DISCOVERY-01 — Saved-search listing fails on SQLite

Confirmed P1 at audit / CLOSED by R-01 for the verified SQLite defect. PRES-J02; /discover; GET /api/job-discovery/saved-searches. The original local SQLite workflow was NO-GO; see the successor native proof. Production release remains blocked by its separate readiness/provider verification obligations; a SQLite exception is not proof of the deployed MariaDB result.

Field Evidence-based finding
Expected List the authenticated owner's saved searches, newest update first, with retained result counts and run/pause/delete/dismiss access; an empty account returns an empty successful list
Actual Real normal and admin route entry return HTTP 500, including an empty account. JobDiscoveryPage catches the load error without feedback and leaves the list empty
Reproduce Use the ordinary Playwright disposable Development/SQLite server; log in with a synthetic normal or admin account; open /discover; observe the genuine saved-search GET. The added native route census asserts success and retains the failure
Native evidence Installed-provider proof fingerprints the initially collected HTTP/translation evidence; final census preserves all 192 observations, repeated normal/admin entry+refresh500s and current failure-trace fingerprints. Intermediate trace paths may have been replaced by later owning-suite runs; historical fingerprints are collection-time evidence. No NAV request is needed
Root cause Current ListSavedSearches orders unconverted DateTimeOffset UpdatedAtUtc. Installed EF Core SQLite rejects that ORDER BY during translation. An ignored translation-only harness reproduces the exact exception with the database connection Closed
Coverage gap Existing discovery/saved-alert controller tests pass using EF InMemory; existing SQLite compatibility cases do not cover this query. The responsive discovery browser fixture substitutes search/import responses and does not prove saved-search persistence
User impact Persisted searches and their controls cannot be recovered through the list on refresh; a successful current-session creation is insufficient. Search results from NAV are a separate capability
Data/security impact No demonstrated deletion, corrupted stored rows, owner bypass or cross-account disclosure. The failure precedes SQL execution; availability and silent feedback are the demonstrated defects
Proposed repair Backend discovery owner: reuse the existing provider-compatible ordered-read pattern while retaining owner filtering, result relationships, cancellation and DTO semantics; report load failure/retry without presenting it as an empty list
Required regression Real disposable SQLite: empty list; two dated owned searches plus foreign search; exact descending owned IDs/counts; native normal/admin entry+refresh; prove no provider call. Verify deployed provider separately
Checkpoint Independently scoped P5-15-04 remediation, before accepting the affected workflow. No repair is rolled into this audit
Provenance The controller/model/consumer and test sources match the audit checkpoint. No evidence establishes which earlier release introduced it; do not label it a new redesign regression

Confirmed P2 at audit / CLOSED by R-03 for the verified authentication-return scope. PRES-E02/E07 route continuity; representative /analytics?months=6 → public entry → login. The historical failure table below remains intact. Successor proof retains the original failed URL, corrected exact destination/selected period, encoded query/hash, history/expiry/logout and native foreign404/tampered-target checks. The repair captures the complete destination at App's existing guard and validates it at Login completion; it does not change Analytics data or server authorization. Real providers, challenge/AT/device/production acceptance remain open; E02 is PARTIAL, not PASS. This recoverable context failure did not grant permissions or lose saved application content.

Field Evidence-based finding
Expected After successful login, return to the requested safe local destination with its meaningful query state; the requested six-month Analytics period remains selected
Actual Browser reaches /analytics without months=6; the default period replaces the requested period. The desired-state regression remains failed, never marked expected or skipped
Reproduce Anonymous browser opens /analytics?months=6; use landing Sign in; authenticate a synthetic account; inspect destination and period control
Root cause App saves location.pathname as state.from; Landing forwards it and Login validates/navigates that path. Search/hash are already absent before Login receives it
Evidence Added anonymous native census completes the route-entry/refresh checks, then fails the exact post-login URL assertion. Source characterization agrees with the earlier route plan
User impact User must reconstruct the requested reporting context. The same auth-guard source also creates a risk for other query-addressed workflows, but this audit does not claim native failures for every possible query
Data/security impact No demonstrated tenant bypass, unsafe external redirect, record mutation or content loss; retain safe-local-target validation in any repair
Proposed repair Identity/shell owner: preserve the intended safe local pathname/search/hash at the existing auth boundary; retain state/permission/invalidation rules
Required regression Anonymous→login and expired-session return to Analytics period and owned Job section/Jobs filter; reject unsafe/external targets; maintain Back/Forward and account disposal
Checkpoint Separate bounded P5-15-04 repair. Do not change auth/application behavior in this audit
Provenance This path-only limitation was explicitly recorded during P5-15-00; native reproduction confirms the debt, not a newly introduced audit regression

P5-15-01-SETTINGS-01 — Unsaved Rules draft disappears on tab change

Confirmed P2 at audit / CLOSED by R-02 for the verified Settings-session draft/save/error scope. PRES-S03; /settings Follow-ups→Notifications→Follow-ups. The original failed observation below remains historical. R-02 retains the single draft above the unmounting tabs and proves explicit Save/error/retry/discard/account behaviour; unknown backend500 causes and other Settings acceptance stay open. This was silent loss of an in-progress edit, not deletion or corruption of persisted rules.

Field Evidence-based finding
Expected An unsaved rule draft survives ordinary settings-tab navigation, or the user receives a deliberate dirty-state warning before discarding it
Actual The rule starts at 14; user edits it to 5; tab round trip displays 14 without warning. API readback remains 14, with zero rule writes
Reproduce Sign in with disposable synthetic account; open Settings→Follow-ups; change Applied follow-up days to 5; open Notifications; return to Follow-ups without Save
Evidence Separate native preferences.spec.ts desired-behavior case fails; browser summary records original/draft/displayed/readback values, zero writes, HTTP200 and failure evidence fingerprints
Root cause Inactive SettingsView.TabPanel returns null; RulesSettingsCard owns draft state locally. Unmount loses the draft, and remount reloads the persisted rules
Coverage gap Existing native Settings fixture edits across widths while mounted, saves, then changes tabs; it never protects an unsaved tab round trip
User impact User must re-enter edits and may assume they saved or retained them. No demonstrated persisted-record loss, duplicate write, revision corruption or account leakage
Proposed repair Settings owner: retain the draft at the existing settings owner or use the established dirty-navigation contract. Preserve per-section Save/API semantics and do not invent autosave
Regression required Unsaved tab and mobile-section round trip, explicit Save/reload, failure/retry and intentional discard; no accidental rule write merely from navigation
Checkpoint Separate bounded P5-15-04 remediation; no application fix is performed in this audit

Carried findings and bounded native diagnosis

The two standalone preference diagnostics assert intended behavior without success mocks, expected-failure flags or retries. Their actual outcomes belong in the final audit evidence; discovery of a 500 must not be normalized into a pass. Initial config-start and locator mistakes are harness errors, separately retained, not application defects.

Item Current disposition / required action
Unsaved Rules draft on tab change Original native P2 SETTINGS-01 is retained historically; R-02 proves the scoped repair without closing unrelated persistence reliability
Language/notification preference writes Three native overlap rounds succeeded, including six writes, twelve concurrent reads, persisted readback and reload. Historical language PUT500 and notification SQLite/concurrency failures remain open; not reproduced in this bounded run is not fixed. No cause for the historical language500 is established; overlapping Identity writes remain a hypothesis
Company modal failure feedback; command/attachment initial focus races Earlier finite failure observations remain open. Current passing keyboard/modal fixtures do not prove the historical race or outside-modal feedback debt closed; P5-15-02 triage and 04 owner repair as needed
Board scaling and physical touch Finite 250-ID parity is functional evidence only; full-result memory/request/DOM growth and real device drag remain unqualified. No arbitrary capacity threshold is invented
CV production fonts/photos; actual assistive technology and software keyboard Verification gaps; not demonstrated functional failures. P5-15-02/03 and named human/device/operator evidence required
P5-13 and followMode compose UI Approved deferrals, not accidental dead controls. P5-13 remains unqualified/Production-withheld; metadata-only followMode survives the current route contract
F04, current backup/restore, production config/schema/keys and rollback Existing release blockers remain NOT VERIFIED. No deployment/production checks or main push are performed here

No P0 is demonstrated by the collected evidence. That is a bounded finding, not an exhaustive security certification. At the original audit, P1 saved-search verification and dependent activity were blocked; R-01 now supplies the scoped repair proof; independent audit evidence can still be collected safely.

Original audit finding totals: P0 0 / P1 1 / P2 2 / P3 0. Historical open totals after R-01: P0 0 / P1 0 / P2 2 / P3 0; historical R-02 totals were P0 0 / P1 0 / P2 1 / P3 0. These are three distinct original failures, not the same count as failing browser cases: normal/admin cases shared DISCOVERY-01; AUTH-01 occupies the anonymous case; SETTINGS-01 was a separate diagnostic. Carried failures/evidence gaps are additional debt, not silently closed or counted as newly reproduced defects.