Added
- Add Typst language support (refs #3037)
- Opt-in compact LSP status line (
ui.compactLspStatus,--lens-compact-lsp-status) (refs #3099) - Opt-in off mode for the LSP status line (
ui.hideLspStatus,--lens-hide-lsp-status) (closes #3099) - Allow an explicit analysis root below the home ceiling (closes #2053)
- Detect tests that drive the registry against the run-shared
PI_LENS_HOME(refs #3042, #3050) - Opt Typst (tinymist) into the nightly LSP clean-gate (refs #3037, #3164)
Changed
- Auto-rerun the second infra kill on one head, and sweep master-only workflow lanes (refs #2042, #3043)
- Record per-cgroup memory/PID/PSI samples and a 200ms watch cadence in CI (refs #2042)
- Clarify merge-time defect-shape catalog allocation and add two contract screens (refs #2996)
- Merge-train and reviewer contracts gain five rules from the 2026-09-12 train (refs #2996)
- External reports are assessed against the code and their load-bearing questions answered before dispatch (refs #3001)
- Deny
TMPDIR=.probe-homein the Bash guard hook and forbid raw commit-ish Git spawns undertests/(refs #3026, #3050) - Skip unchanged PR-body lint on synchronize (refs #3030)
- Fold the ast-grep catalog source-walk onto one effective-catalog helper (refs #3053)
- Fold the tree-sitter query loader onto
js-yaml(refs #3054) - Cut the two heaviest test files' peak memory by 8.4 GB and gate the budget (refs #3058)
- Enforce the DegradationKind union against every emitted kind (refs #3071)
- Bound the Unit tests job with
timeout-minutes(refs #3111) - Bound every remaining workflow job with a measured
timeout-minutes(refs #3111, closes #3123) - Close two gaps in the DegradationKind coverage sweep (refs #3071, #3138, closes #3140)
- Check PR-body claims with Markdown-aware sentence units (refs #2904)
- Verify PR-body code citations (refs #2904)
- Recognise PR test references by shape and placement (refs #2904)
- Keep PR-body fixture setup in process (refs #3016)
- Contracts from the 2026-09-10 merge train.
- Retro 2026-09-15 outputs
- Retrospective contract
- Keep incomplete observation evidence separate from mutation attribution (refs #2984)
- Pin the availability gate's three known text-anchoring blind spots.
Removed
decideClassifierActioninci-failure-classifier.mjs(refs #3086)
Fixed
- Never signal a pid pi-lens does not own (refs #2042)
- Bind cached project findings to the bytes they were scanned from (refs #2154)
- Keep advisory tool names host-aware (refs #2535)
- Add explicit fake LSP pull/push ordering controls (refs #2824)
- Scope project-diagnostics runner retirement by analyzed file coverage (refs #2887)
- Isolate registry consumers and restore probe-home state (refs #2912)
- Drain and track lens-map fixtures (refs #2912)
- Handle PEP 668 pip hosts (closes #2916)
- Complete slice-2 session guard cleanup (refs #2939)
- Guard long-lived containers against unbounded growth (refs #2981, refs #2988)
- Keep bridge bookkeeping alive across session transitions (closes #2992)
- Discover monorepo-root ESLint and Oxlint configs across nested
package.jsonboundaries (refs #3017) - Install managed archive tools with format-aware extraction (refs #3020)
- Make the formatter's no-config indentation fallback stable (refs #3038)
- Honor a rule's own
ignorespaths over LSP (refs #3041) - Fixed
tests/index-vanished-instance-wiring.test.tsreddening in the CI Unit - Stop indent-retarget from basing deeper nesting on a block comment's alignment (closes #3052)
- Exclude template-literal interiors from the formatter's indentation fallback (closes #3059)
- Re-arm the tree-sitter query parse-failure record every session (refs #3070)
- Governance sweeps no longer race a scratch test file written into
tests/(closes #3082, closes #3092) - Isolate test orphan-backstop state (refs #3083)
lens_diagnostics source=lsphonors your marks, rule policy and inline ignores (closes #3088, closes #3041, refs #3047)- Drain stdin to EOF in the guard-bash PreToolUse hook instead of a single
readFileSync(0)(#3089) with-memory-watchsurvives a full stdout pipe instead of dying on it (closes #3097)- A mis-cased path and a normalized read now share one anchor on POSIX (refs #3098, refs #3090)
- The turn-end late-auxiliary advisory and the cold-neighbour cascade run honor a disposition mark (#3102)
- Vanished-file diagnostic reaches the run log on a passing suite (refs #3107)
- Reclaim stale
tmp-hygiene-baseline-<run>.jsonfiles on the existing backstop stale arm (refs #3109, #2912, #3100) - Retry the mem-watch write-failure note through the same channel that retries every other line, with a bound of its own (closes #3110, closes #3115)
- Nested agent-data trees no longer cost a project its startup scan, and a project-scope
tools.<name>.enabledis no longer called invalid (fixes #3112) - Stop indent-retarget from basing deeper nesting on a template literal's alignment (closes #3116)
- Recognise regex literals in the indentation template-lexer's conservative state (refs #3120)
- A global-only
actionableWarnings.autoFix.maxFixeswritten in a project.pi-lens.jsonis no longer dropped in silence (fixes #3131) - The in-lane per-edit cascade block honors a disposition mark (#3157)
- A file created under a spelling the filesystem re-cases keeps its write record (refs #3163)
- The release workflow's publish toolchain is now exercised before a release (closes #2940)
- PR-body test-reference check stops flagging commands, output, and prose (closes #3013)
- Keep fork pull requests out of token-capped CI writes (closes #2993)
- Widget disposition reconciliation is admission-ordered (refs #1616)
- Share explicit analysis-root validation across heavyweight diagnostics consumers (refs #2053).
- Preserve the analysed file state across concurrent writes (refs #2499)
- Directory-target observed codemods are analysed over rewritten files (closes #2500)
- Measure stale async test-runner verdicts (refs #2542)
- Pin backstop assertions to their sweep row (closes #2669)
- Register only the read range the host delivered (refs #2802)
- Keep CI verdict labels fresh across pushes (refs #2856)
- Project data directory slug carries a path hash (closes #2874)
- Require a SQL sink signal for TypeScript SQL injection findings (closes #2909)
- Marker-root freshness (refs #2922)
- Unify test filename classification (refs #2928)
- Opengrep scan refusal reporting (closes #2943)
- Anchor the test-runner child on the module its command runs in (refs #2944)
- Keep side-effect autofixes out of target identity (refs #2957)
- Harden backstop retry regression coverage (refs #2958)
- Keep findings when a partial scan has no coverage paths (refs #2962)
- Share language markers across runner cwd resolution (closes #2965, closes #2966, closes #2964)
- Bound the spawn usage sampler's concurrency, rate and lifetime (refs #2968)
- Classify CUDA/HIP
.cuhheaders (refs #2986) - Decline ktlint autofix when project agreement is unavailable (refs #3000)
- Require project tool agreement before autonomous writes (refs #3005)
- Confirm same-size all-LSP blocker rewrites (refs #3011)
- Adopt NDJSON rotation bounds across extension reloads (closes #3012)
- Compile against
@types/node26.5.1 (refs #3026) - Require chart topology for Helm YAML classification (refs #3034)
- Stale inline blockers from non-LSP analyzers (closes #2982)
- Classify YAML files under Helm
templates/directories as Helm templates - Put pnpm 11's resolved global bin directory (
$PNPM_HOME/bin) on PATH in - Fix install-smoke's pnpm global-bin setup for pnpm 11 projects declaring npm by writing the setting globally in both pi-load and …
- Restrict install-smoke pull-request runs to the
masterbase branch and - Fix per-hook tool-result budget classification, formatter attribution, and deferred-format delivery.
- Keep lifecycle hooks within per-hook wall budgets (refs #2523)
- Keep latency-logger test mocks faithful to production exports (refs #2281)
- vi-mock export sweep reads
importOriginal<T>()as a pass-through - Stop the /lens-perf occupancy guard flaking under CI contention (closes #2886)
- Keep deferred fixture roots tracked until their final drained cleanup pass (refs #2912)
- Drain deferred jscpd fixture cleanup (refs #2912)
- Remove test scratch directories on exit (refs #2912)
- Spawn-cwd scanner derives one vocabulary from the seam and freezes (closes #2927)
- Keep the #2992 regression probe out of system temp (refs #2912)
- Isolate
instance-reaper-unreffrom the run-sharedPI_LENS_HOME(refs #3050)
🙏 Thanks
Thanks to the external contributors in this release: