Skip to main content
← Back to list
01Issue
BugClosedSwamp CLIPublic
AssigneesNone

Relationships

#2368 s3/gcs datastore: pullChanged clears localDirty but keeps dirtyPaths, so a pending delete can be skipped by the push fast path

Opened by stack72 · 9/22/2026

Found while triaging swamp-club#2353, and independently by the extension work on it. Extension-side (@swamp/s3-datastore and @swamp/gcs-datastore).

Problem

pullChanged resets the sync sidecar's localDirty flag but leaves dirtyPaths in place. tryFastPushChanged only checks localDirty, so a push after that pull hits the fast path and never processes the recorded dirty paths. A dirty path left behind by a crashed process, or recorded before an intervening pull, is silently dropped.

Evidence

Reproduced on localstack with swamp 20260915.001037.0-sha.c42457d4 and @swamp/s3-datastore 2026.08.28.1. One data delete was never pushed: the trace showed preparePush.fastpath hit and commitPush v2noop, while .datastore-sync-state.json had localDirty false and dirtyPaths still listing the deleted report paths. The machine's next pull re-downloaded the data (toPull=25).

Expected

Either a pull must not clear localDirty while dirtyPaths is non-empty, or the push fast path must treat a non-empty dirtyPaths (or bulkInvalidated) as dirty.

02Bog Flow
✓OPEN○TRIAGED○IN PROGRESS◉CLOSED

Closed

9/22/2026, 9:23:50 PM

No activity in this phase yet.

03Sludge Pulse

Sign in to post a ripple.