Better
- Improved Intercom data fidelity. Timestamps arrive as real dates instead of raw epoch numbers, article and collection parents publish as links rather than bare ids, a conversation's initiating message expands into its own columns (subject, body, author email) instead of one JSON blob, and an article's State lands as a select field with its real options.
- Attio's Industry column, social links (Twitter, LinkedIn, Facebook, Instagram, AngelList), and avatars now show by default. Industry was previously hidden from both the grid and the column picker. Takes effect on the next pull.
- A run's status line describes what it's doing now rather than what it just finished. "Pulling Companies, 1,200 records fetched" instead of a tally from the step before, and the per-folder breakdown marks the folder actually in flight.
Fixed
- Intercom pulls were silently dropping records. Articles and collections page over a sort whose ties break differently on every request, so records at a page boundary got skipped, and full-scan delete detection then turned those skips into deletes at the destination. A pull now verifies its own coverage against Intercom's record total and re-walks if anything is missing; a walk it still can't verify fails the pull rather than handing over an incomplete snapshot.
- One dangling link no longer fails a whole table. Stripe's deleted customers can't be listed, but their ids live on forever in charges and invoices, which took down all four customer-referencing tables on a large Stripe to Notion export. An unresolvable link is now left empty and the record publishes. The warning also names the actual reason: deleted upstream, not yet synced, or unreachable.
- OAuth tokens expiring mid-job broke long publishes. One run shipped 29,637 of 130,570 records and hit 401s on the rest. All twelve OAuth connectors now refresh their token in flight, and simultaneous refreshes on one connection no longer race each other into a state needing a manual reconnect.
- A publish whose worker got recycled started over from scratch on retry, abandoning what it had already shipped. One run stranded 47k records that way. Retried publishes now pick up the plan already in progress.
- Publishing a large staged export could spend 20 minutes rebuilding a branch byte-identical to the one it already had, then die on a timeout before moving a single record. Fixed.
Under the hood
- Closed out a batch of findings from our latest penetration test.
- Garbage collection improvements.
- The old connection-relative
@/reference format is gone. There's one accepted form now, and anything else fails with a message naming the workspace's real connection folders.