trpc-query-must-not-write-side-effects

tRPC queries map to HTTP GET and carry an idempotency contract — calling them multiple times must not change state. Using a query procedure (like reminders.checkDueTomorrow) to write notification records violates this contract and also means the side effect only fires when a client explicitly calls the endpoint, not on a schedule.