`POST /api/workspace/repo_sync/preview` — clone/pull + parse + classify without mutating DB, vault, audit log, or last-sync metadata.
const url = 'https://example.com/api/workspace/repo_sync/preview';const options = {method: 'POST'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/workspace/repo_sync/previewResponses
Section titled “Responses”Dry-run pull summary. Same core outcome rows as PullSummary, but without
DB/vault writes and with SOPS file selection metadata for the UI wizard.
object
ADR 0030 UX2-F – per-entity last-write-wins conflicts: the DB row was
newer than the incoming commit, so the pull would SKIP it. Surfaced so
the conflict view can diff the kept-local vs the incoming-remote content.
Populated for the text entities a content diff makes sense for (scripts +
apps); a workflow-graph skip is recorded in outcomes only.
One last-write-wins conflict on a pull preview. local_* is the kept DB
state; remote_* is the incoming repo state that was skipped. Timestamps are
RFC3339 strings so the web client parses them with a single Date ctor.
object
The event-shape that every push and pull emits on success. Carries
event_id + timestamp per the wire-format contract — the keyset-assert
regression test in interfaces::http::dto locks that contract for the
workflow-event stream; this struct does the same for repo-sync events.
object
The git commit sha the sync attempt operated against — None when no commit was made (push with no diff).
repo_sync_push_completed / repo_sync_pull_completed.
RFC3339 timestamp (UTC). The string form keeps the wire format language-agnostic; the web client parses it back to a Date.
One row per entity affected by a pull.
object
Set for skipped / failed rows; absent for the happy path.
Closed catalogue of sync targets a log row can reference.
object
object
Example
{ "outcomes": [ { "target_kind": "workflow" } ]}