Added
- Read SonarCloud's master quality gate and open vulnerabilities in the nightly tool-smoke workflow, failing loudly for quality … (closes #3319)
- Report shadowed global config files (closes #3299)
- Read (and edit) the global config from the host's config dir (refs #2457)
- Added an advisory CI lane that runs the existing capped targeted-test selector on every pull request and publishes its selection … (refs #3215)
- Durable CI test history.
Changed
- Folded three hand-rolled path-key transformations in the LSP server, LSP
- Extracted the turn-end govulncheck delivery (the 🛡️ Go CVE advisory tier) out
- Extracted the turn-end secrets delivery (the gitleaks and trivy-secrets
- Type-aware async and optional-chain checks now lint the test population (refs #3244)
- Restrict tool-smoke drift ticket side effects to scheduled and default-branch runs while preserving branch-dispatch reports.
- Internal-only maintenance: extend the socket listener sweep to reusable test support fixtures and remove an inert MCP socket …
- Reuse the shared directory-mtime freshness predicate for project-config discovery.
- Mechanise train lessons (refs #3426)
- Close the pre-4.3.0 docs gap audit (closes #3431)
- Make nightly LSP capability documentation deterministic and skip byte-identical refresh PRs.
- Glossary, witness, and seam contracts (refs #3259, refs #3260)
- Docs: require exact-pin sweeps on the merge with master (refs #3259, refs #3260)
- Trigger-based agent guidance (refs #3259)
- Docs contract pre-flight and reviewer/fixer mechanics (refs #3260)
- Docs: the winning global-config-location table (every combination of
PI_LENS_CONFIG_PATH, the legacy file and the agent-dir … (closes #3250) - AGENTS.md points at the engineering-principles repository first, and a vendored copy of PRINCIPLES.md lives at …
- The three cached scanner lanes turn_end reads
- Pin the glossary synonym-retirement inventory (refs #3259)
- Every
parseToolRunrunner now documents its nonzero exit table, its - Improve nightly LSP clean-gate fixture coverage for project-backed Vue, Svelte, F#, and Mix workspaces.
- Refreshed measured LSP clean-transition markers: cue retains its publish
- The lint workflow installs yamllint with
--only-binary=:all:, so pip can never fall back to running a source distribution's … - Release-QA rows for the global config location and the shadowed-global record (refs #2608)
Fixed
elixir-checknow decides whether a compiler diagnostic belongs to the- Share actionlint and Credo runner outcome parsing (refs #1816)
- Share ESLint and golangci-lint runner outcome parsing (refs #1816)
- The marker-root seam's "a nearer project marker created below an
lens_diagnostics mode=fullno longer retires retained opengrep findings- Make the mutation-diff lane actually evaluate mutants: mutate only the diff's changed lines, give instrumented related tests …
- The
suppressed: Nchip counts a mark for as long as the mark stands (closes #3183) - A blocking finding whose cited file no longer exists is now retracted from
- CSS, SCSS, LESS, SASS and Prisma files get LSP diagnostics again (refs #3217)
- Keep the subagent compatibility smoke aligned with pi-subagents' compiled contract source layout.
- Preserve opaque mutation ownership (refs #3226)
- Nested bundled rule ignores (refs #3240)
- Turn-end scanner-cache reads no longer block the hook (refs #3274)
go vetfindings for the file you just edited are no longer dropped when- The go-vet filesystem case-identity regression test is explicitly admitted to
- Runner diagnostics are attributed to the edited file through one seam:
gleam checkdiagnostics andruffautofix findings are now attributed to the- Gleam diagnostics now carry their error or warning title and inline label instead of codespan's border glyph, and locationless … (refs #3293)
- LSP workspace-edit changed paths are compared with the dispatched file through
- The LSP clean gate now reuses the handshake layer's per-server availability decision, so unavailable servers remain ⚠ while … (refs #3309)
- Added real LSP gate-entry coverage for handshake-census admission and handler-owned unavailability.
- A language server that answers
didOpenwith an empty diagnostic set while it - Launch fish-lsp through its stdio transport so standalone Fish diagnostics reach the LSP smoke gate (refs #3311).
- Prepare LSP smoke fixtures before gating C#, F#, Elixir, Expert, and Vue diagnostics, and give csharp-ls the measured 6s …
- A tool the installer finds on
PATHis now probed with that tool's own - The tmp-fixture hygiene census now judges only the temp entries the running
- Provision the pinned
fishexecutable in the nightly tool-smoke runner sofish-lspcan complete its handshake and clean-gate … scripts/ci-verdict.mjsnow reads every check-run page and reports an exact rerun command for a latest cancelled check (closes … (closes #3373)- A child process that writes without limit can no longer terminate the Pi
- Fix
ci-verdictrerun hints to pass the workflow run id instead of the check-run job id. - A degradation row whose subject is blank now reads
unknowninstead of - A pi session serving warm diagnostics to a peer no longer dies when a client
- Elixir diagnostics refresh again after an edit (refs #3405)
- Non-core tree-sitter grammars on a compiled host (closes #3409)
- LSP root detection no longer trusts a resolved project root for the rest of
- Revalidate Git repository identity when repository metadata is created or removed during a process (closes #3417).
lens_diagnostics mode=fullpointed circular-dependency findings at a file that does not exist (closes #3428)- The turn-end circular-dependency pass keyed nested files by paths that do not exist (closes #3435)
- The madge circular-dependency pass reported a "skipped local file" count that was always zero (closes #3436)
- Keep preserved LSP capability rows and bullets deterministic across locales.
- Share runner outcome parsing for ktlint and PHP lint so nonzero findings are
- Share runner outcome parsing for Dart Analyze and Elixir Check (refs #1816)
- Share compiler runner outcome parsing (refs #1816)
- Share compiler runner outcome parsing (refs #1816)
- Consolidate RuboCop and Ruff run outcomes (refs #1816)
- Carry Spotless ktfmt styles into the standalone formatter (closes #2481)
- Worker-side test diagnostics now reach passing-run logs (closes #3128)
- Skip formatter style inference when indentation exists only inside masked comment or template interiors.
- The temporary-fixture hygiene sweep now waits for live test owners to finish
- Three Python ast-grep rules no longer false-positive (closes #3211)
- Parse inline suppression reasons (closes #3213)
- GitHub CLI authentication for release tools (closes #3221)
no-assert-tuplenow checks only the assertion condition (closes #3223).- Avoid unsupported Windows SIGHUP re-raise (refs #3239)
- Honor
lens_diagnostic_markon turn-end unresolved blockers (refs #3246) - Filter the built actionable-warnings advisory (closes #3270, refs #3248)
- The commit gate honors a turn-end disposition mark (refs #3248)
- Apply stored dispositions at six more turn-end surfaces (refs #3248)
- Two case-distinct workspaces no longer share one warm-IPC endpoint (closes #3255)
- The finding-delivery governance detector no longer lets an arm-shaped
--lens-guardno longer blocks everygit commitfor the rest of a session- Restore strictness in the actionable-warnings advisory (refs #3248)
- Runner parsers now attribute a diagnostic only when the tool-reported path
- Gate Terraform and Svelte tool-smoke fixtures with seeded diagnostics, correcting the Terraform defect seed and the Svelte … (refs #3311)
- Install
cmake-formatascmakelang[yaml]so it can read a - Align shown-inline telemetry with deleted-path filtering (closes #3361)
- Make the hook-await exemption rekey script work on Node builds without built-in TypeScript support.
- Nightly LSP docs refreshes now ignore date-only changes and never open refresh PRs from branch dispatches (closes #3380).
- Bounded every remaining stream
datahandler that grew a string without a - Scope clean-signal probe publishes to the server measured by each row, and reset the vue capability-matrix row that had counted …
- Prevented the Elixir smoke row from reporting a fallback Expert handshake as ElixirLS success.
- Files over the shared LSP content bound now receive an explicit message from
lens_diagnostics(source=lsp) instead of being … - The installer now gives users the same jscpd 5.3.0 version used by pi-lens itself.
- Await in-flight jscpd scans before test fixture cleanup so deferred report-directory work cannot leave temporary roots behind.
- Await LSP workspace-diagnostics service shutdown before removing sweep test fixtures.
- Keep nightly fish runner provisioning resilient to distro package version bumps by installing the apt package unpinned.
- Ignore abbreviations, versions, and file paths in the PR-body Why sentence check (refs #3262)
- The tool-smoke workflow's SonarCloud master-gate read now runs only on the nightly schedule and on master, so a branch dispatch …
🙏 Thanks
Thanks to the external contributors in this release:
- @AngriestBird — #3368, #3369, #3370, #3371
- @Don-Yin — #3224
- @georgeharker — #3251