1b8f8c1391
Test backoffice (smb-crm) / test (push) Has been cancelled
Easy!Appointments re-fires appointment_save on reschedule with the same EA-<id> booking_id, so add_entity's plain INSERT 500s on the PK conflict. Switch to ON CONFLICT (pk) DO UPDATE for every entity except activity_log (no client-supplied pk), logging add vs update accordingly. Extended to all keyed entities per the issue body, while preserving created_at/ received_at on redelivery for leads/clients/credentials so a redelivered webhook can't clobber the original creation time. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>