fix: refresh session-store cache when file size changes within same mtime tick

The session-store cache used only mtime for invalidation. In fast CI
runs (especially under bun), test writes to the session store can
complete within the same filesystem mtime granularity (~1s on HFS+/ext4),
so the cache returns stale data. This caused non-deterministic failures
in model precedence tests where a session override written to disk was
not observed by the next loadSessionStore() call.

Fix: add file size as a secondary cache invalidation signal. The cache
now checks both mtimeMs and sizeBytes — if either differs from the
cached values, it reloads from disk.

Changes:
- cache-utils.ts: add getFileSizeBytes() helper
- sessions/store.ts: extend SessionStoreCacheEntry with sizeBytes field,
  check size in cache-hit path, populate size on cache writes
- sessions.cache.test.ts: add regression test for same-mtime rewrite
This commit is contained in:
Josh Lehman
2026-03-02 13:33:08 -08:00
committed by Peter Steinberger
parent f9025c3f55
commit 1212328c8d
3 changed files with 53 additions and 2 deletions

View File

@@ -25,3 +25,11 @@ export function getFileMtimeMs(filePath: string): number | undefined {
return undefined;
}
}
export function getFileSizeBytes(filePath: string): number | undefined {
try {
return fs.statSync(filePath).size;
} catch {
return undefined;
}
}