trpc-query-that-mutates-violates-idempotency-contract
tRPC query procedures are assumed idempotent (safe to retry, cache, call from GET). Placing write operations (e.g., creating notifications) inside a query procedure violates this contract and causes silent side-effects on repeated reads or cache refreshes. Reminder-check logic that writes notification rows must be a mutation procedure, not a query. Treat the tRPC query/mutation distinction as a hard API contract, not a cosmetic choice.