Description
An employee hire_date stored as 2023-05-15 renders as "May 14, 2023" in the detail panel. Classic date-only bug: new Date('2023-05-15') parses as UTC midnight, which is the previous day in any negative-offset timezone (observed in PDT, 2026-07-14, during People Map T10 verification).
Current State
hire_date is a TEXT ISO date in SQLite. Somewhere in the employee detail rendering the date-only string goes through a Date parse + locale formatter, shifting it back a day. Tenure math may be off by a day too wherever the same parse is used.
Suggested Fix
Verification
Automation Hints
scope: src/components/, src/lib/
do-not-touch: src-tauri/
approach: extract-and-move
risk: low
max-files-changed: 6
blocked-by: none
bail-if: dates are shifted at write time (DB values wrong) rather than render time
Priority
Medium
Description
An employee hire_date stored as
2023-05-15renders as "May 14, 2023" in the detail panel. Classic date-only bug:new Date('2023-05-15')parses as UTC midnight, which is the previous day in any negative-offset timezone (observed in PDT, 2026-07-14, during People Map T10 verification).Current State
hire_dateis a TEXT ISO date in SQLite. Somewhere in the employee detail rendering the date-only string goes through a Date parse + locale formatter, shifting it back a day. Tenure math may be off by a day too wherever the same parse is used.Suggested Fix
new Date(applied to date-only fields (hire_date, review_date, termination_date)new Date(y, m-1, d))Verification
npm testpasses (add a case: '2023-05-15' renders as May 15, 2023 regardless of TZ)npx tsc --noEmitcleanAutomation Hints
scope: src/components/, src/lib/
do-not-touch: src-tauri/
approach: extract-and-move
risk: low
max-files-changed: 6
blocked-by: none
bail-if: dates are shifted at write time (DB values wrong) rather than render time
Priority
Medium