2026-05-28-prevent-broken-sync-mappings
Coverage warnings on your identity field
Pick the wrong identity field and the destination ends up with duplicate records or empty profiles. The sync form now checks the fill rate of whatever source field you mapped to your identity. If too many source records leave that field blank, you get an inline warning that explains the impact, suggests a better-covered alternative from your source schema, and asks for an explicit confirmation before you save. The same hint shows up on the fill-rate badge so it stays visible after the sync is created.
Identity field coverage is evaluated against the source's actual field stats, not just type metadata
Low-coverage warnings recommend a specific replacement field when one exists
The create and edit forms both block on confirmation, so a low-coverage identity choice is always an intentional one
Read-only destination fields are now disabled in the mapping
When you pick a destination field that the target system marks as read-only, the dropdown now grays it out and the row shows a warning border. You stop wasting a run discovering that HubSpot, Stripe, or your CRM was never going to accept writes into that column. Read-only fields that the destination still allows as identity matchers stay selectable.
Read-only destination fields appear disabled, with a label explaining why
Mappings that already exist on a read-only field surface a warning so you can fix them
Identity matching against read-only fields still works where the destination supports it
Picking syncs for a schedule got faster
The schedule form replaced its single autocomplete with a grouped picker. Syncs are organized by source integration, each group can be collapsed or selected as a whole, and a search box filters across names and integration types. Schedules with five or more source integrations auto-collapse groups that have nothing selected, so a hundred-sync account stays scannable.
Toggle all syncs from one source with a single group checkbox
Selected syncs persist visibly at the top while you filter the rest
The picker prefetches integration metadata for every sync you might select, so labels and icons load instantly
Jump from a sync's health stats to the run that broke
The last-run chip on the sync health card is now a link to that exact run's detail page. When a sync goes yellow or red, one click takes you to the run that failed instead of the runs list. Healthy chips stay visual-only.
The chip routes to
/sync/{id}/runs/{runId}for the most recent runColor and status text remain identical, so existing scanning patterns still work