Added
- Review-graph symbols now carry an owner-qualified display name, and
calls/referencesedges gain two more resolution tiers lsp_diagnostics/lens_diagnosticssweeps now warm up the primary server once before the per-file loop starts, instead of the first few files eating cold-spawn-adjacent timeouts- Registry-independent backstop orphan sweep
- Review-graph symbol-node IDs are now collision-safe
docs/is now included in the published npm package- pi-lens can now measure its own total CPU/RAM footprint — host process, every live LSP child, and every transient analyzer spawn
- Cross-process LSP budget — first prototype of #449 slice 2
lens_diagnostics mode=fullbreaks its confirmed/unconfirmed LSP-sweep tally down per primary server, and separates primary-vs-auxiliary findingslens_diagnostics mode=fullno longer renders a timed-out (or errored) per-file LSP check as false-cleanlsp_diagnosticsdirectory-mode file cap raised from 50 to 100lsp_diagnostics/lens_diagnosticscan now render a genuinely confirmed "clean" for classictypescript-language-server, not just "unconfirmed"lens_diagnostics mode=fullruns gitleaks on any git repo, not only ones with an explicit gitleaks config- A genuine
silentOnCleandrift finding now files/updates a persistent tracking issue instead of only riding along in the routine docs-refresh PR - opengrep moved off the full-workspace LSP sweep onto a dedicated CLI extractor
lens_diagnostics mode=fullnow fetches the heavyweight project analyzers FRESH instead of reading a possibly-hours-stale cachemodule_reportflags middle-man / delegate-only classes- Retroactive changelog entry:
runtimeInstall+ canonical-bin discovery for gopls/csharp-ls/fsautocomplete (Go + .NET slice of #241) - Nightly compat-smoke now pins avtc-pi-subagent's env vocabulary too
- Regression coverage for confusable-hyphen normalization in the read-guard's content comparison
- Persistent
bus-events.logforpilens:files:touched/pilens:diagnosticspublish outcomes - MCP auto session_start is now visible and self-healing
read_symbolself-healing misses + doc-comment inclusion + duplicate-name disambiguation- Shared
makeRunnerCtx()test helper for dispatch-runner tests - Auto-install lua-language-server via the archive-tree bundle machinery
lsp_diagnosticsseparates primary-server confirmation from auxiliary-scanner findings, plus a newserverScopeparamlens_diagnostics mode=full/lsp_diagnosticsno longer burns a full per-file wait on EVERY markdown file in a sweep- Test-runner support for PHPUnit and mix test (ExUnit)
Performance
- Pinned
jscpdbumped from3.5.10to5.0.12 KnipClient.runAnalyze()now caches between runs- zizmor is no longer an LSP candidate for non-GitHub-Actions YAML files
Changed
- Unify the directory-walk decision shared by the three source walkers
- Adopt pi's dynamic tooling for situational ast-grep/lsp-navigation tools
- Auxiliary-LSP profile lookup: shared blocking/semantic policy + memoized source lookup
dead-code-client.tsandknip-client.tsno longer each hand-roll their own copy of the "climb up looking for a project-root marker" looplsp_diagnostics' batch/directory scan now serializes touches within a single LSP server the same waylens_diagnostics mode=fullhas since #387
Fixed
nested-ternary/long-parameter-list/no-dupe-class-membershad ZERO coverage in the ast-grep NAPI fallback runner on.tsfiles- ast-grep NAPI fallback runner no longer silently drops a rule's
utils:block - ast-grep
-jstwin rules no longer double-fire on.tsfiles in the in-process NAPI runner - Dynamic tool deactivation for the 5 situational tools now actually runs, instead of failing silently on every session_start
lsp_diagnostics'sserverScope: "primary"actually skips auxiliary scanners now, and the common case drops back to one LSP round trip per file instead of two- Per-edit test-runner findings: fixed a broad vitest include glob producing vacuous
0p/0f"passes" on plain source files, and stopped silently discarding real results when the turn advanced mid-run lens_diagnostics mode=full's workspace sweep no longer front-loads an entire server group'sdidOpenburst in one uninterrupted pass- Launching Pi from
$HOMEand then editing an absolute-path file in another repo could block Pi's event loop for 470-500+ SECONDS while the cascade pipeline walked the entire home directory - A genuine LSP server crash could go completely unlogged when the JSON-RPC connection tore down before the process's own
exitevent fired runWorkspaceDiagnostics's batch pre-open pass (#608) could hang an entire full-workspace sweep un-abortablylens_diagnostics mode=fullnow runs the heavyweight-analyzer fresh-fetch CONCURRENTLY with the LSP sweep instead of after it, fixing a real-world case where all 7 analyzers went coldlens_diagnostics mode=full/lsp_diagnosticsfull-workspace sweeps no longer defeat #271's watched-files debounce, fixing a 0%-100% run-to-run false-timeout rate- Managed npm tools now re-install when their
packageNameversion pin changes // nosemgrepinline suppression now honored bylsp_diagnostics/lens_diagnostics, not just per-edit dispatchhigh-fan-out/high-complexityno longer false-positive ondescribe()/it()test bodiesfact-rulesdiagnostics now stamptool: "fact-rules"instead of their own rule id, fixing scattered turn-summary groupingclientScope: "all"(the standalonelsp_diagnosticstool andlens_diagnostics_full) now gets per-server-aware diagnostics timeouts instead of one flat cap for every spawned server- A timed-out LSP diagnostics check no longer presents as a confirmed-clean result and no longer erases known-good diagnostic state
lens_diagnosticsmode=full andlsp_diagnosticsnow reconcile fresh scan results into the footer/widget-state cache- Native TS7 no longer inherits classic typescript-language-server's
silentOnCleancascade fast path - LSP diagnostics no longer briefly cache stale results after rapid edits
recordDiagnosticsdrops superseded writes to the widget-state diagnostics cache (same race class as #555)- Dropped the redundant
ast_dumptool registration bus-events.logregistered with the log-cleanup retention sweep, andMANAGED_LOG_FILESreplaced with auto-derivation- Test runner now resolves mirrored test-tree layouts