fix(maintenance): address review findings on maintenance updates master
- Reject null dates: a bare z.coerce.date() turns JSON null into 1970-01-01. Service inputs reject null before coercing, REST update schemas take an ISO 8601 date-time, tRPC takes a Date. - Backfill updated_by from the legacy column before falling back to created_by so edits by another user keep their editor. - Maintenance emails carry the from - to window instead of a bare start. - Audit the first update written by the importer. - Dashboard: lock the composer while publishing and keep isPending through the refetch; nested links in a table row keep their own click; the update sheet forwards trigger props. - Drop the unused maintenance update load from getUptime. - Keep multi-line update messages inside their Markdown list item. - Docs: tool counts, add_maintenance_update in the notify contract, notified:false on plans without subscribers. - Tests: REST GET asserts the body; dispatcher asserts the window.