Summary
Settings → Display → Time format → 24-hour does not apply across the app. Many screens still show AM/PM.
Cause
Clock times only respect the setting when rendered through formatTime / formatTimeRange in frontend/apps/web/lib/display.ts and the component passes timeFormat from usePreference("display.timeFormat", …).
Today that happens only in:
frontend/apps/web/app/calendar/page.tsx (Appointments table time column)
frontend/apps/web/components/AppointmentListDialog.tsx (appointment list rows)
All other time UI ignores display.timeFormat.
Defects
-
StageHistoryDialog (frontend/apps/web/components/StageHistoryDialog.tsx): timestamps use Intl.DateTimeFormat("en-US", { … hour, minute }) without hour12. Default for that locale is 12-hour. display.locale is not used.
-
Schedule-X (frontend/apps/web/app/calendar/page.tsx, frontend/apps/web/app/dashboard/CalendarStrip.tsx): month grid, agenda, and dashboard week strip render event times inside the library. That path does not use formatTime / formatTimeRange or display.timeFormat. CalendarStrip also does not use display.locale.
Requirements
- Every user-visible clock time must follow
display.timeFormat and display.locale (shared helpers in display.ts or equivalent, with explicit hour12).
- Third-party calendars must be configured or customized so event times follow the same rules.
- StageHistoryDialog must stop using a hardcoded
en-US formatter without hour12.
Acceptance criteria
- With 24-hour selected: no AM/PM in stage history, Schedule-X surfaces, dashboard week strip, or any other time label in the app.
- With 12-hour selected: AM/PM where appropriate.
- Changing locale in Settings does not leave hardcoded
en-US formatters on dated/time strings meant to respect that setting.
Summary
Settings → Display → Time format → 24-hour does not apply across the app. Many screens still show AM/PM.
Cause
Clock times only respect the setting when rendered through
formatTime/formatTimeRangeinfrontend/apps/web/lib/display.tsand the component passestimeFormatfromusePreference("display.timeFormat", …).Today that happens only in:
frontend/apps/web/app/calendar/page.tsx(Appointments table time column)frontend/apps/web/components/AppointmentListDialog.tsx(appointment list rows)All other time UI ignores
display.timeFormat.Defects
StageHistoryDialog(frontend/apps/web/components/StageHistoryDialog.tsx): timestamps useIntl.DateTimeFormat("en-US", { … hour, minute })withouthour12. Default for that locale is 12-hour.display.localeis not used.Schedule-X (
frontend/apps/web/app/calendar/page.tsx,frontend/apps/web/app/dashboard/CalendarStrip.tsx): month grid, agenda, and dashboard week strip render event times inside the library. That path does not useformatTime/formatTimeRangeordisplay.timeFormat.CalendarStripalso does not usedisplay.locale.Requirements
display.timeFormatanddisplay.locale(shared helpers indisplay.tsor equivalent, with explicithour12).en-USformatter withouthour12.Acceptance criteria
en-USformatters on dated/time strings meant to respect that setting.