Export is currently one file per call (export_file), manually triggered. Import has an import_new diff loop that fetches everything not yet imported; export has no symmetric equivalent.
Scope
- Add
export_new(connection, credentials) mirroring import_new: list workspace files that belong to the connection and are not yet exported, push each to the remote store, tolerate per-file failures.
- Record export provenance so re-runs skip already-exported files (import records
source_connection_id / source_key; export needs an analogous marker, e.g. an exported-at / destination-key record).
- Wire it into the shared
run_transfer path and the sync handler for export-mode connections.
Why deferred
The current PR focuses on import. Export shipped as single-file/manual to keep scope bounded. This makes export a first-class "sync" symmetric with import.
Tracked from docs/connection-sync-gaps.md (#8).
Export is currently one file per call (
export_file), manually triggered. Import has animport_newdiff loop that fetches everything not yet imported; export has no symmetric equivalent.Scope
export_new(connection, credentials)mirroringimport_new: list workspace files that belong to the connection and are not yet exported, push each to the remote store, tolerate per-file failures.source_connection_id/source_key; export needs an analogous marker, e.g. an exported-at / destination-key record).run_transferpath and the sync handler for export-mode connections.Why deferred
The current PR focuses on import. Export shipped as single-file/manual to keep scope bounded. This makes export a first-class "sync" symmetric with import.
Tracked from docs/connection-sync-gaps.md (#8).