24 lines
3.1 KiB
Markdown
24 lines
3.1 KiB
Markdown
# Preserve an unapplied job's missing application date
|
|
|
|
Source/verifier: `138f1ee69c2a1c2f3e039cc1219f53465afb59ef`.
|
|
|
|
The backend `JobApplication.DateApplied` contract explicitly preserves null before submission, preventing fabricated dates from feeding follow-up, ghosting and application-volume analytics. Edit Job's loading converter instead substituted today's UTC date for missing or invalid values. An unrelated edit could therefore submit an invented application date.
|
|
|
|
The converter now leaves missing/invalid values empty. The existing save path submits null. Valid legacy timestamp conversion is unchanged and remains a separately tracked precision/timezone question. No data migration, backend API or status transition changed.
|
|
|
|
Static backend follow-through: `JobApplicationsController.Update` calls `JobLifecycleEvents.SyncAppliedDateWithHistory`, and `JobPipeline.SyncAppliedDate` already clears Applied dates for prospect stages. This guards stored Saved dates independently of the UI. The reproduced defect is the fabricated form value and outgoing request; corrupted stored dates or analytics were not reproduced. The lifecycle wrapper can record a cleared-date event when it receives a fabricated value. Its runtime event behaviour was not exercised by these intercepted browser checks.
|
|
|
|
## Evidence
|
|
|
|
- RED: three cases (null, empty, invalid) failed against the original converter; seven existing calendar cases passed.
|
|
- PASSED: 14 cases across calendar-day and Edit revision suites, executed with `TZ=America/Los_Angeles`. Three new cases edit a Saved job's title and assert unchanged Saved status, revision7 and null date. Existing seven date cases and four revision cases overlap prior evidence.
|
|
- PASSED: build/TypeScript and scoped ESLint.
|
|
- PASSED: nine real-widget journeys, 36 accessibility captures and 27 intercepted fixture writes. Three timezone contexts each exercised EN/light/1440 mouse, NB/dark/390 touch and NB/light/768 touch. Each journey additionally loaded a Saved/null fixture, showed an empty Applied on field, edited the title and submitted Saved/null with revision7. Existing live locale, selected company, theme, seven date controls and Add defaults remained covered. Zero page errors/unavailable reads; external fonts blocked.
|
|
- The refreshed mobile Bokmål Saved/null screenshot was visually inspected. No invented date appears in the form.
|
|
|
|
The earlier nine-journey date/shared-control runs overlap this extended matrix. These are finite paired configurations and intercepted API traffic, not real persistence, analytics, native-device or provider qualification.
|
|
|
|
Evidence: `evidence/unapplied-date/`; source/evidence/export bindings: `UNAPPLIED_DATE_SOURCE_MANIFEST.json`. Final owner A3, human/native, integrated security and release gates remain open. Physical CV/PDF rendering is unaffected.
|
|
|
|
Rollback: revert the two converter fallback changes; no schema or stored data is modified by the patch itself. Reverting would restore the known fabricated-date defect. Existing null dates remain null in storage until a real authorised write; no historical data repair was attempted.
|