01Read the write response
Capture status, Supabase error code, message, table, and operation.
What the result tells you: A 403 or 42501 is authorization; a successful response with stale UI is state or query invalidation.
Appears when: Data not saving / 403 / RLS
The UI may be optimistic even when the database write is rejected. Inspect the actual insert or update response, then verify the session, target table, payload ownership fields, and RLS policy instead of assuming the form submission succeeded.
# Make write failures visibleShow a truthful error state and keep the returned code in logs.# Define ownership server-sideDerive trusted user or tenant identity from the authenticated context.# Correct the operation-specific policyRepair INSERT or UPDATE permissions without opening unrelated rows.# Read the saved record backVerify persistence after refresh and under the same RLS context.Preserve the current working revision, change one proven boundary, and verify the published path in a clean session.
Capture status, Supabase error code, message, table, and operation.
What the result tells you: A 403 or 42501 is authorization; a successful response with stale UI is state or query invalidation.
Confirm the user id and tenant fields in the proposed row match the authenticated context.
What the result tells you: Null or client-supplied ownership values commonly conflict with RLS.
A form may create on first use and update later; those are separate policy decisions.
What the result tells you: One operation can work while the other is legitimately denied.
| Likely cause | What proves it | First safe action |
|---|---|---|
| Write error is hidden by the UI | A 403 or 42501 is authorization; a successful response with stale UI is state or query invalidation. | Make write failures visible |
| RLS ownership mismatch | Null or client-supplied ownership values commonly conflict with RLS. | Define ownership server-side |
| Only one operation is allowed | One operation can work while the other is legitimately denied. | Correct the operation-specific policy |
| Wrong project or table | A 403 or 42501 is authorization; a successful response with stale UI is state or query invalidation. | Read the saved record back |
The UI may be optimistic even when the database write is rejected. Inspect the actual insert or update response, then verify the session, target table, payload ownership fields, and RLS policy instead of assuming the form submission succeeded.
The generated form reports success without checking the returned error.
The row user or tenant field does not satisfy the active policy.
INSERT exists but UPDATE does not, or the reverse.
Freeze generated changes, restore the last known working version, reproduce one request, collect the browser and platform logs, and change one layer at a time.
The interface may update optimistically or ignore the database error. The network response is the source of truth.
Yes. RLS evaluates operation-specific rules, and updates also interact with row visibility.
Do not trust arbitrary ownership from the browser. Validate or derive tenant identity from authenticated membership.
Free decision aid
Get a senior view of the constraint, the evidence you have, and the next decision that removes the most risk.
No email required for this decision aid. Dismiss once and this popup stays closed for the session.