# Supabase Realtime not receiving events: publication, replica identity, and the filter

## TL;DR

Insert a row that matches the filter and watch the event arrive with the expected payload. Update it and delete it, confirming old values appear only when replica identity is full. Then test as a user whose policies deny the row and confirm nothing arrives.

Use this when you run into the situation in the title.

**When not to use this skill:** unrelated tasks. It covers only the procedure above.

## Steps

1. Confirm the table is in the publication: `alter publication supabase_realtime add table your_table;`, or check the toggle in the dashboard Publications settings. Tables are not in the publication by default. This is cause number one.

2. Confirm the subscriber's RLS allows it. Realtime authorizes every event against the subscriber's SELECT policies. Subscribe as the user and check: no SELECT policy means no events, silently.

3. Check the filter syntax. `filter: 'room_id=eq.42'` must match the documented `column=operator.value` form exactly. A malformed filter matches nothing and reports no error.

4. For UPDATE and DELETE events, check replica identity. By default only the new record is sent; for the old values set `alter table your_table replica identity full;`. "Events arrive but the payload is empty" is this.

5. Confirm the change actually commits. Events fire on commit, not on statement. An uncommitted transaction or a rolled-back test insert produces nothing, correctly.

## Compatibility

Tool: Supabase. The steps above apply to the commands named in them. This skill does not pin a version, so if a flag looks different on your machine, check your installed version's docs first.

## Details

# Realtime receives nothing: the server-side checklist

The client setup is usually fine. Work this list on the database side before touching client code.

## Verification
