Symptom guide / Saving and deleting
A delete that does not delete
An item vanishes after you click Delete, then returns when you refresh the page.
Create a throwaway item owned by your test account and copy its id if the app shows one. Never use an important record for this check. You are looking for evidence of a completed deletion, not just a change in the list currently drawn on screen. Keep the original name and id so you can distinguish the same item from a newly created copy.
01 / Procedure
The two-minute check.
- Watch the delete action.
Open Chrome’s Inspect menu, select Network and clear the request list. Delete the throwaway item once. Select the new request associated with that item and read the method, URL, status and Response. Note any reported error or affected record id.
- Check what the next read returns.
Reload the list with Network open. Inspect the list request’s Response and look for the original id. If it is returned, the app can still read that record; the disappearing row alone did not prove deletion.
- Look at the stored record.
Open the correct database project and locate the original id. Read whether the row is still present or has a field marking it deleted. Do not manually remove it yet, since that would erase the evidence needed to explain the failed button.
- Compare ownership and policy.
Compare the test account with the record’s owner. If the app uses Supabase, inspect the table’s DELETE policy and the SELECT policy that makes the row visible. Check the owner condition instead of disabling row level security.
02 / Evidence
Read the result.
WORKSA fresh read no longer returns the disposable item in the promised list.
BROKENThe original item returns after the app claims deletion.
FAKEDThe button only hides the item while claiming a persistent delete.
03 / Repair
Causes and fixes.
Ranked in the order to investigate, not by claimed frequency.
- The interface hides the row without completing a delete.
Wait for the delete operation and handle its error before presenting success. If the request fails, keep the item visible or restore it with a clear failure message.
- The request targets no permitted matching row.
Correct the record id, owner filter or operation-specific access policy. Check that the intended test row is visible and deletable by its owner while another user cannot delete it.
- The app uses soft deletion but reads all rows.
If the product intentionally marks items as deleted, make list reads honor that field. State whether deletion means hiding a record or permanently removing it, then test that promised behavior.
04 / Limits
Edge cases.
- A successful HTTP status can accompany an operation that matched no rows. Read the result and perform the fresh read before stamping the journey as passed.
- A cached list may show a removed item. Compare the database record and the fresh response to avoid changing a working delete because of an old screen.
When to stop and hand it over
Hand it over if ownership rules are unclear, related records make the deletion fail, or the product needs an irreversible purge. Supply the disposable id and redacted request result. Keep real customer data out of the experiment.
05 / Questions
Before the next attempt.
Should I delete the row in the dashboard?
That can remove the symptom without repairing the button. Keep the disposable row until you understand the request.
Does hiding a row count as deletion?
Only if that is the behavior the product promises. A permanent-delete claim needs stronger evidence than a hidden list item.