Files
session-viewer/tests/unit
teernisse f15a1b1b58 Add persistent metadata cache with atomic writes
Introduce MetadataCache class in metadata-cache.ts that persists extracted
session metadata to ~/.cache/session-viewer/metadata.json for fast warm
starts across server restarts.

Key features:

- Invalidation keyed on (mtimeMs, size): If either changes, entry is
  re-extracted via Tier 3 parsing. This catches both content changes
  and file truncation/corruption.

- Dirty-flag write-behind: Only writes to disk when entries have changed,
  coalescing multiple discovery passes into a single write operation.

- Atomic writes: Uses temp file + rename pattern to prevent corruption
  from crashes during write. Safe for concurrent server restarts.

- Stale entry pruning: Removes entries for files that no longer exist
  on disk during the save operation.

- Graceful degradation: Missing or corrupt cache file triggers fallback
  to Tier 3 extraction for all files (cache rebuilt on next save).

Cache file format:
{
  "version": 1,
  "entries": {
    "/path/to/session.jsonl": {
      "mtimeMs": 1234567890,
      "size": 12345,
      "messageCount": 42,
      "firstPrompt": "...",
      "summary": "...",
      "firstTimestamp": "...",
      "lastTimestamp": "..."
    }
  }
}

Test coverage includes:
- Cache hit/miss/invalidation behavior
- Dirty flag triggers write only when entries changed
- Concurrent save coalescing
- Stale entry pruning on save

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-28 00:53:05 -05:00
..