New
- See exactly what a publish changed. Expand a publish job in the Runs view and it lists every file the publish changed, marked added, modified, or deleted, with a count per status. Added and modified paths link straight to the file, so you can go from "this run touched 40 records" to the record itself in one click.
- "View diff" on a row opens the record's before and after, side by side by default, with the number of changed fields in the header. Inline is a click away if you'd rather read it top to bottom.
- Formatting-only changes read as such. The diff compares values in their comparable form, so a field the destination service merely re-rendered (a timestamp in a different format, an empty string where you sent nothing) reads as "Formatting only" rather than burying the edits you actually made.
Better
- Single-record review is instant. Approve, Reject, and Discard on one record in the desktop app now flip immediately instead of taking about a second each. Working through a long list of changes one record at a time no longer feels like waiting on a network round trip.
- Partial publishes report as partial. A publish where some records land and others don't now reports per connection, with the published and failed counts, and the records that went live are named as such, so a mixed outcome is no longer mistaken for all-good or all-failed.
- Published records get readable filenames. Records created by a publish are named by the connector the same way pulled records are, so a Notion or Attio destination no longer fills up with
<recordId>.json. Applies to newly published creates; existing files keep their names.
Fixed
- Live Exports into Airtable, Postgres, Supabase, and Google Sheets re-published records on every run when the only difference was how the destination spells an empty field or re-renders a timestamp. Those runs now publish only the records that actually changed.
- A Postgres or Supabase column with mixed-case
ASin its name, likeCertified AS Organic, arrived at the destination lowercased toas. The column name now round-trips intact.
Under the hood
- Two read-only endpoints back the new publish diffs: a paginated list of the files a publish changed, and a before/after for one record. Both are on the API and the
scratchmdCLI, and both diff the commits either side of the publish, so they report what landed rather than what was planned. - A routine run can be triggered with every pull step forced to full, which is the only mode that reconciles records deleted or archived in the destination.
- Publish failures caused by a destination record that's been deleted or archived now carry a stable error code, so a surface can key friendly copy off it instead of matching on connector message text.