Added
- Prompt-cache misses now say why, and mixed injections split by source (refs #1071)
- Quick-mode session_start now logs which steps it skipped (closes #1911)
- Runner parsers are now held to real binary output (refs #1937)
- A runner that reads nothing out of a failing tool's output now leaves a record (closes #1948)
- Mechanical lint batch: actionlint, PR-title lint, markdownlint, OSV scan (refs #1844)
- Vale prose lint with a vendored Google style base (refs #1844)
- Husky-managed local git hooks (closes #1804)
- latency.log now says whether the LSP pool reused a client or spawned one (closes #1934)
- Dogfood sessions on pi-lens's own repo now activate the oxlint, spellcheck, yamllint, and taplo runner lanes (refs #1844)
- Memory-sample observability upgrades (refs #1999)
- Opaque-write recovery for bash commands (refs #2000 phase 2)
- Collect-later delivery for slow auxiliary LSP servers (closes #2001, refs #2002)
- Freshness kernel: one comparator, one verdict type for staleness gates (closes #1739)
- Shared fault-injection test kit (closes #1838)
- Adversarial garbage battery for every CLI lint runner (closes #1839)
Changed
- pi-lens formats its own TypeScript with oxfmt (refs #1844)
- Opaque-write recovery goes git-first (refs #2000)
- ONE mutation seam:
RuntimeCoordinator.recordProjectMutation(refs #2000 phase 1)
Fixed
- Search credit ignores pipe truncation (closes #1908)
- Cascade tier-3 registry now resets at session_start (closes #1910)
- Read-guard eviction telemetry is now always on (closes #1913)
- agent_settled no longer crashes with extension_error when the session is replaced mid-run
- A session event on a replaced session no longer reports a pi-lens handler error (closes #1925)
- Git installs start about 750ms faster (refs #1926)
- Updating pi-lens no longer costs a five-second first session (refs #1926)
- A session swap that starves
session_startorcontextis now counted, not misreported as a pi-lens crash (closes #1929) - Diagnostics scans stop logging a phantom ast-grep cache-stats record (closes #1935)
cache_contextno longer logs an unusableunknownprefix pair on nearly every record (closes #1938)- Review-graph Tier-3 build never grew the tree cache past the 50-entry default (closes #1941)
- A demoted blocker no longer shouts STOP, and it stops re-serving forever (closes #1944)
- The oxlint runner now surfaces warning-severity findings instead of discarding them (closes #1947)
- Merge-train warden's
update-branchkick 403s under branch protection (#1959) - The blind review-graph read no longer drops a valid snapshot on a HEAD-only move (closes #1961)
- A settled review-graph build no longer suppresses every later build, and
project_reportonly claims a retry when one started (closes #1962) - A language server that dies mid-session now records why, and the liveness probe stops provoking the deaths (closes #1969)
- Log writer reopens and retries once on a failed write instead of dropping records silently (refs #1970)
- Warmup and workspace-scan walkers gate by file extension before consulting the ignore matcher, cutting a 31.7s stall to sub-second on repos with large ignored file piles (closes #1974, reported by @0xkite)
- oxfmt no longer fails on a file its own config ignores (refs #1844)
- ESLint warnings are no longer discarded (closes #1954)
- Registered tools now always have descriptions in child/subagent sessions (closes #1988)
- mode=full no longer replays stale mid-edit blockers (refs #1993)
- Cache-miss attribution stays useful in long sessions (closes #1996)
- Project snapshots no longer rewrite unchanged same-generation bodies (closes #1997)
- Classify oxlint no-match results as expected skips (closes #1998)
- Project-snapshot persistence validates gzip body integrity before skipping (closes #2008)
- Installer verify loop broken at the root (closes #2015)
- Windows
.cmd/.batspawns no longer fail when System32 is absent from the child PATH (closes #2023) - Register remaining agent-facing delivery surfaces (#2028)
- Wall-clock budget tests get a quiet serial phase (closes #1920)
🙏 Thanks
Thanks to the external contributors in this release: