Refused (403)
https://rowstile.dev/problems/refused is the type of the problem body (RFC 9457) the SDKs answer with when the database refused a write: a rule stopped an insert, an update or a delete, and rowstile said which rule and why.
json
{
"type": "https://rowstile.dev/problems/refused",
"title": "Forbidden",
"status": 403,
"detail": "the database's message",
"table": "app.files",
"command": "update",
"why": ["the lines of the explanation"],
"code": "AZ709"
}tableandcommand: the rule that refused it. The table is named as the policy names it, with its schema (public.Notefor a Prisma modelNote), whichever rule refused: a table's, or a column's. The command isinsert,updateordelete, orselectfor a row that was written and may not be read back. Both arenullfor a refusal that is no rule's: a share by someone who may not share.why: the reason, as the database explained it (empty when it gave none).code: AZ709, a write refused by a rule. Another refusal has the database's own code: AZ705 for a share.
Where it comes from: Refused.problem() in both SDKs; rowstile.fastapi answers with it (FastAPI), and so do route() and action() in @rowstile/next (Next.js) and problemOf(e) for any other framework (Node).