This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+13 more
Affected surfaces
ReleasePort's take
Moderate signalThe `rename_symbol` command now automatically applies edits and returns a summary instead of requiring caller‑side application. A file‑corruption bug in this command when using GCF output format has been fixed.
Why it matters: Breaking change: callers must adjust to receive only summaries (severity 80). Bugfix prevents data loss in `rename_symbol` with GCF format (severity 40).
Summary
AI summaryUpdates Tests, non-dry-run, and https://github.com/V0idk across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | High |
`rename_symbol` now applies edits itself and returns a summary, removing caller-side application. `rename_symbol` now applies edits itself and returns a summary, removing caller-side application. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Low |
Adds `confidence: "low"` reporting for unindexed speculative results in `evaluate_session` and `preview_edit`. Adds `confidence: "low"` reporting for unindexed speculative results in `evaluate_session` and `preview_edit`. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Dependency | Low |
Upgraded gcf-go to v1.5.0, adding nested-null losslessness and deterministic graph edge ordering. Upgraded gcf-go to v1.5.0, adding nested-null losslessness and deterministic graph edge ordering. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Bugfix | Medium |
Fixes file-corruption bug in `rename_symbol` when using GCF output format. Fixes file-corruption bug in `rename_symbol` when using GCF output format. Source: llm_adapter@2026-07-14 Confidence: low |
— |
Full changelog
Fixes a file-corruption bug in rename_symbol (#12, reported by @V0idk), makes speculative confidence honest about still-indexing servers, and upgrades gcf-go to v1.5.0.
Fixed
- rename_symbol file corruption (#12):
rename_symbol(non-dry-run) used to return the raw WorkspaceEdit and rely on the caller copying it back intoapply_edit— the only edit tool that did so;replace_symbol_body,insert_after_symbol,insert_before_symbol, andsafe_delete_symbolall apply server-side. That round-trip corrupted files: underAGENT_LSP_OUTPUT_FORMAT=gcfthe edit was GCF-encoded (a summary format that flattens each TextEdit's range into positional path columns likerange>end>characterand requires the verbatimnewTextto be copied out of tool output and back into a tool argument), so LLM callers transposed the range offsets and truncated a largenewText, overwriting the file. gcf-go itself encodes and decodes these WorkspaceEdits losslessly (verified), so this was an agent-lsp wire-format and round-trip bug, not a gcf-go bug. Reported by @V0idk.
Changed
- BREAKING:
rename_symbolnow applies the edit itself and returns a summary instead of returning a WorkspaceEdit for the caller to apply. The result isRenamed to "X" across N location(s) in M file(s): ...plus a post-rename diagnostics count, consistent with the other edit tools — the WorkspaceEdit never leaves the server as data to reconstruct, which eliminates the round-trip that corrupted files (#12). A separateapply_editcall after a non-dry-run rename is no longer needed (or wanted);apply_editremains for its text-match mode. Thedry_run=truepreview is unchanged in intent (returns the edit for inspection) but now serializes as self-labeling JSON regardless ofAGENT_LSP_OUTPUT_FORMAT, plus file/location counts. Thelsp-renameskill's execute phase is updated accordingly. - gcf-go upgraded to v1.5.0. Brings nested-null flatten losslessness (a nested object null at an intermediate level, e.g.
{meta:{owner:null}}, is no longer silently dropped on round-trip) and deterministic graph edge ordering (edges sorted by source, then target, then type). Generic-profile delta encoding and labeled streaming trailer counts are available as opt-in APIs; agent-lsp does not use them yet, so default output is byte-identical. No API changes required.
Added
confidence: "low"for unindexed speculative results.evaluate_session/preview_editnow reportconfidence: "low"when a clean result (net_delta <= 0) is read while the language server still has active$/progresswork (indexing, cache priming,cargo check). Previously such results were reported asconfidence: "high", so a still-priming server (notably rust-analyzer) could return a false all-clear — "no errors introduced" when the diagnostics simply had not been computed yet. Results that surface errors (net_delta > 0) are never downgraded, since diagnostics do not appear spuriously. NewLSPClient.HasActiveProgress()exposes the signal.
Tests
- Added a live end-to-end regression (
TestRenameSymbol_LiveGopls) that drives a realtextDocument/renamethrough gopls and the full handler, asserting the file is renamed on disk and the tool returns a summary with no raw edit leaked. Skips cleanly when gopls is absent; CI'sunit-and-smokejob now installs gopls so it runs there. Added unit coverage for the apply path against the pathological single-big-edit shape from #12 (TestApplyWorkspaceEdit_*), the JSON edit-encoding guard (TestEncodeResultJSON_*), and the rename summary counter (TestSummarizeWorkspaceEdit_*).
Breaking Changes
- `rename_symbol` now applies edits itself and returns a summary instead of returning a WorkspaceEdit for the caller to apply.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About blackwell-systems/agent-lsp
Stateful MCP server over real language servers. 50 tools, 30 CI-verified languages, 20 agent workflows. Persistent sessions keep the index warm across files and projects. Speculative execution simulates edits in memory before writing to disk.
Related context
Related tools
Earlier breaking changes
- v0.11.0 `get_change_impact` renamed to `blast_radius`. Same handler, same parameters, new name.
Beta — feedback welcome: [email protected]