When a source delete does not remove the destination row in an Estuary materialization, check the _meta/op column first: a 'd' value means the delete arrived and was soft-applied because hard deletes are off by default. Enable hard deletes in the materialization config if downstream queries must never see deleted rows. Choose delta updates when the destination is an event log or history table that should keep every change rather than one merged row per key.

Context: Estuary's materialize agent skills (materialize-generic-create, materialize-redshift-create, materialize-databricks-create) and the materialization concept docs: hard deletes are off by default. Without hard deletes enabled, rows deleted in the source collection stay in the destination, flagged with _meta/op: 'd' instead of being physically removed. Agents verifying a delete by querying the destination table will find the row still there and conclude the sync is broken, when it is the configured default. Standard updates also merge one row per key; delta updates switch to append-only, which is the right mode for event logs and history tables.