⚡ Write-path performance overhaul
- Cascade diagnostics no longer block the write pipeline (#450) — the impact/neighbor analysis that only feeds turn-end context now runs concurrently after each edit and is settled at turn_end with a bounded wait. This alone was ~26% of every edit.
- Review-graph seq fast path (#451) — the per-edit O(project) walk+stat freshness sweep is skipped when pi-lens's own sequence state proves only observed edits occurred (periodic full re-verify catches external changes;
PI_LENS_GRAPH_SEQ_FASTPATH=0disables). Graph build p50: 157ms → ~60ms. - Reverse-dependency index reuse (#459) — the index is a pure function of the review graph, so cache-hit graph builds now reuse it instead of rebuilding O(edges) + rewriting the snapshot on every cascade run. Freshness keys on a new
ReviewGraph.buildGenerationstamp that is race-safe under the now-overlapping deferred cascades (PI_LENS_REVERSE_DEPS_REUSE=0disables). - Write-path micro batch + logger consolidation (#453, #454) — ESLint autofix in a single spawn (was dry-run + fix, double cold-start), LSP quick-fix lookups in parallel, and all eight NDJSON debug loggers on one buffered async writer — no more synchronous
appendFileSyncon the hot path.
✨ Added
lens_diagnostics/ MCPpilens_diagnosticsacceptpaths(#461) — scope any mode to an explicit file/directory list.mode=full+pathsactively scans exactly those files (LSP sweep + in-process runners route to the list instead of walking the project) — built for wrappers like "check exactly the git-staged files". Thanks @LeonardoRick for the well-scoped request.serverOverrides— per-serverinitializationOptionsin project config (#434) — align pi-lens's LSP servers with your editor setup (e.g. rust-analyzercheck.command: "clippy") via.pi-lens/lsp.json, deep-merged onto built-in defaults. Contributed by @vkarasen.- Nightly LSP capability matrix is now self-maintaining (#460, #390) — a phase-aware clean-signal probe classifies every server's diagnostic behavior on clean files (versioned publish / version-less publish / silent), and the nightly merges regenerated capability docs back via auto-PR without ever regressing rows the CI host can't measure.
🛠 Fixed
- Review-graph snapshots are git-worktree-safe (#300) — snapshots are stamped with HEAD + worktree root (pure-fs resolution, linked-worktree aware) and dropped on mismatch at the blind read path, so a worktree re-created at the same path can't serve the previous branch's symbols. The build path stays content-verified, so a plain
git commitnever forces a rebuild. lens_diagnostics mode=fullhonors inline# pi-lens-ignorecomments (#442)- The opengrep/Semgrep runner honors
# nosemgrepsuppression (#441) no-init-returnno longer flags factory functions (#439);python-assert-productionno longer fires in test files (#440)
Full changelog: CHANGELOG.md