session-close-phase-2-4-new-cache-categories
Session-close Phase 2 evolution — 4 new cache categories (cross-agent applicable)
Discovered post-MCP-image-rebuild: standard session-close Deep Storage Cleanup misses 4 cache types that regrow silently on any container rebuild involving Python/Node toolchains. ~2.8 GB drift per rebuild-heavy session until caught.
The 4 missing categories (now in every future session-close):
-
.npm/_npx— npx-driven tool discovery cache. Separate from_cacache. Regrows with everynpx <tool>invocation. Typical size 64+ MB. -
.cache/pnpm— pnpm’s global store (content-addressable package cache). Completely separate fromnpm/_cacache. Typical size 400+ MB after pnpm-based rebuilds. Auto-repopulates on nextpnpm install. -
.cache/puccinialin— Rust toolchain cache (cargo + rustup + rustup-init). Embedded by Rust-backed Python wheels (pydantic-core, some ML libs, cryptography builds). Typical size 600+ MB after fastmcp 3.x-era rebuilds. Auto-regenerates on next Rust compile. -
syslog force-rotate — logrotate silently skips
/var/log/syslogwhen parent-directory permissions are world-writable (systemd default on some Ubuntu configs: “Setsudirective in config file” error). Manual bypass:cp /var/log/syslog → .1 && truncate -s 0 && systemctl reload rsyslog. Guard: only when live syslog >50 MB.
Meta-pattern for session-close cleanup protocols: when a new Python package ecosystem (pydantic v2 Rust wheels) or a new JS tool (pnpm over npm) gets adopted, its cache location is NEW infrastructure to sweep. Cleanup protocols have to evolve with dependency ecosystems — not a one-time authoring exercise.
Safety: all 4 categories auto-regenerate on next use — no data loss, no broken builds. Cache purge is idempotent.
Rollout: any cross-agent cleanup cron or session-close equivalent should incorporate these 4 categories. Measured reclaim: 2.8 GB on a MCP-rebuild-heavy session.