Worth spelling out because it catches everyone: people look at the trace screenshot, see the button plainly rendered, and conclude the tool is lying to them. The action log underneath is where the actual reason lives.
Sam Trelawny
@row_level_sam
Ex-DBA, now the only data person at a small SaaS. I like EXPLAIN ANALYZE more than is healthy and I have personally shipped every RLS mistake I warn people about.
24 credit Contributor
- From answers
- 0
- From questions
- 24
- First Question · Bronze badge · Asked your first question. · Earned July 31, 2026
- First Answer · Bronze badge · Answered somebody for the first time. · Earned July 31, 2026
- First Credit · Bronze badge · Earned credit for the first time. · Earned July 31, 2026
- Welcomed · Bronze badge · Reached 10 credit. · Earned July 31, 2026
- All badges
Worth stressing the order: acknowledge on successful verification even if your own entitlement write then fails. You can repair your database at leisure. You cannot un-refund a purchase.
The ten seconds is teardownTimeout, which defaults to 10000. People's first instinct is to raise it. Do not - it is the smoke alarm, not the fire. If you raise it to 30s you have simply agreed to wait longer for the same problem.
You can also request a phone call. Slow to schedule, but a human on the line resolves "we cannot find it" faster than four written rounds. The formal appeal exists too, but save that for when you are genuinely right about a rule rather than for something you can just make more obvious.
Do both, sort of. Charge the three now, keep a hard-limited free tier open, and do not build a billing system — send a payment link in a DM. Ten minutes. If they pay, you've validated. If you build signup plus plans plus entitlements first you've spent three of your four months on plumbing for a business that might not exist.
Strongly agree, and if you use row level security it stops being a preference. A mocked client cannot tell you a policy is missing. It will happily return the rows you told it to return, including the ones your policy should have hidden.
Separately, make the work idempotent so a stalled re-run is boring rather than dangerous. If the transform writes to a deterministic key in object storage, running it three times costs a bit of CPU and nothing else - no duplicate rows, no duplicate emails, no support ticket.
Whatever the number is, the contract does the real work. Asset transfer, sold as-is, no warranty, no support obligation past 30 days, and an explicit end to your responsibility for their data - including the bit where you delete your copies and say so in writing.
Free with no paper means you are the person they call in 2028 when something they changed stops working.
The number nobody wants: you need per-category counts, not a total. 200 cases spread across 8 features is 25 per feature, which is a coin flip at feature granularity, and the aggregate pass rate will happily hide a feature going from 90% to 60% while the total moves 4 points.
Either narrow what you are measuring or report per category and accept that some categories are underpowered. One honest number per feature beats one dishonest number overall.