Skip to main content
← Back to list
01Issue
BugShippedExtensionsPublic
Assigneesstack72

Relationships

#1556 s3-datastore: localHasAllRemoteEntries uses bare rel instead of localRelPath, always returns false in namespaced mode

Opened by stack72 · 8/7/2026· Shipped 8/8/2026

Summary

localHasAllRemoteEntries() at s3_cache_sync.ts:2957 uses assertSafePath(this.cachePath, rel) instead of assertSafePath(this.cachePath, this.localRelPath(rel)). Since index entries use bare keys (namespace prefix stripped), the stat targets {cachePath}/data/model/1/raw instead of {cachePath}/{namespace}/data/model/1/raw. The method always returns false in namespaced mode.

Impact

  1. Sidecar is never marked clean after push in namespaced mode — every subsequent push re-walks the entire cache instead of taking the fast 'nothing dirty' path.
  2. Every subsequent pull re-fetches the remote index instead of trusting the local sidecar ETag.
  3. dirtyPathsOverflowed is never cleared (lines 2296-2297, 2347-2348, 2719-2720), keeping the delete-detection logic permanently armed after it triggers once.

Location

s3_cache_sync.ts line 2957. Called in 8 places across pushChanged and commitPush writeback paths.

Fix

Change line 2957 from: const localPath = assertSafePath(this.cachePath, rel); to: const localPath = assertSafePath(this.cachePath, this.localRelPath(rel));

Found during triage of swamp-club#1554.

02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED+ 1 MOREASSIGNED+ 2 MOREREVIEW+ 4 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

8/8/2026, 12:04:02 AM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack728/7/2026, 10:25:41 PM

Sign in to post a ripple.