trpc-query-procedures-must-be-idempotent-reads-only

tRPC query procedures (GET semantics) must be pure reads. Using a query procedure to write notifications or trigger side effects (e.g., reminders.checkDueTomorrow writing notification rows) violates the GET/query idempotency contract and causes reminders to fire only when a user manually calls the endpoint. Scheduled side-effect logic must live in mutation procedures triggered by a cron, not in queries.