== Stale vs fresh on read == PASS stale entry returns a miss PASS stale entry is deleted on read PASS fresh entry is returned PASS fresh entry remains on disk == Corrupt entries == PASS corrupt entry returns a miss PASS corrupt entry is deleted == GC removes old preview generations == PASS old preview generation removed PASS recent preview generation kept == Striped lock mapping == PASS same namespace+key maps to the same stripe PASS stripe index is within [0, stripes) PASS stripe lock filename contains no raw key/token PASS a legacy per-key lock name maps into the cache dir only PASS two distinct keys can map to the same stripe (acceptable sharing) PASS stripe count clamps low→16, high→4096, invalid→256 PASS stripe 5 has the same filename under stripe counts 16, 256 and 4096 PASS the fixed-width filename is lock-stripe-0005.lock PASS the maximum stripe index (4095) fits the fixed width PASS 10,000 distinct keys create at most `stripes` lock files PASS repeated failed loads create no per-key (legacy) lock files == GC preserves stripe locks == PASS stripe locks exist after use PASS GC never unlinks stripe locks (age pressure) PASS file-count enforcement evicts content but keeps stripe locks == Legacy per-key lock migration == PASS request-time GC does NOT delete legacy per-key locks PASS request-time GC keeps stripe locks too PASS explicit purge removes all legacy per-key locks PASS explicit purge preserves stripe locks == Max-size eviction (oldest first) == PASS oldest oversized entry evicted PASS newer entries retained == Symlink / namespace safety == PASS GC never follows a symlink to delete the outside target PASS the stray symlink itself is removed PASS malicious namespace stays inside the cache dir == Safe degradation == PASS gc never throws PASS cache_put still succeeds with GC forced on == Bounded growth under token spraying == PASS total ICS cache size is bounded after GC == File-count cap (locks counted, never evicted) == PASS oldest content evicted first under the file-count cap PASS newest content retained under the file-count cap PASS stripe locks are never evicted by the file-count cap == GC without a successful write == PASS GC on lock release removes stale content without any put == Multiprocess striped-lock concurrency == FAIL worker process acquired the stripe lock FAIL a held stripe lock blocks another process on the same stripe FAIL worker released cleanly (exit 0) PASS after release the same stripe is free again PASS this process can now acquire the previously-held stripe == Cleanup CLI exit codes and privacy == PASS empty readable cache → exit 0 PASS non-empty readable cache → exit 0 PASS cleanup prints aggregate stats PASS cleanup output contains no raw token PASS cleanup output contains no cache-key hash PASS cleanup output contains no 64-hex filename PASS cleanup output does not print the cache path PASS unusable cache directory → exit 2 PASS cache_stats(nonexistent) returns null (not an empty array) 3 self-test(s) FAILED.