Timezone (all users EST):
- lib/utils: hardcode APP_TIME_ZONE (America/New_York) in formatDate/
formatRenewalDate, add formatDateTime and todayInAppTimeZone helpers
- Replace every ad-hoc toLocaleDateString/toLocaleString call across the app
(task notes, audit log, backups, shape import, renewal groups, client
detail) with the shared EST-aware helpers
- Fix UTC "today" bug in date-input defaults/min/max (completion date,
reminder date) that rolled to the next calendar day after ~7-8pm ET
Task provenance:
- Task card info icon (now visible to all users, not just privileged) shows
full origin: template, level, renewal anchor, due-date math, and who/what
generated the task
- Include template.daysOffset and creator in task queries
Setup N/A:
- New setupNaAt/setupNaReason fields on Client; mark/restore UI and API to
exclude non-Shape/lost-business clients from the setup queue everywhere
it's counted (queue page, API, manager dashboard, metrics gauge)
Task generation fixes:
- auto-generate: client-level branch now gated on the renewal anchor's
(group/policy) createdAt instead of the client's, so pre-go-live clients
with new post-go-live groups are no longer skipped forever
- New auto-assign-tasks sweep run after every sync to assign advocates to
tasks created by paths that don't assign directly (e.g. setup wizard)