v0.17.5
Changelog
Features
- bdfa538 feat(topology)!: record call sites and resolve Go cross-file call edges
- 43c9669 feat(topology): consume durable call edges (#419)
- d5b8b27 feat(topology): package-level reachability from entry points (PLAN-371)
Fixes
- 6618467 fix(cli): gate replayed session-ID adoption on the persisted proxy pairing (PLAN-296)
- 9f3bd63 fix(cli): make run_task's target remedy keep the caller's own command (PLAN-374 r1)
- a228cfd fix(cli): print Starting... and the daemon PID on plumb restart
- 0e5d5cc fix(cli): reconcile a stored task command that spells out its {target} default (PLAN-374)
- cc389fb fix(daemon): hot-reload project config to every attached session via a per-workspace watcher
- 27c37da fix(scripts): fail a CHANGELOG entry landing in a section released since the fork
- 0c00385 fix(scripts): report R4's pure-addition carve-out and stop the report contradicting itself
- d8ca710 fix(session): a refused per-agent re-pin commits nothing; the log is its trace
- f14b265 fix(session): commit session_start's linkage only on success; trace per-agent refusals
- 4158bf9 fix(session): retain external identity across session-ID adoption (PLAN-404)
- 31267c9 fix(session_start): resolve the caller's identity before the workspace re-pin
- 162fec3 fix(tools): call_hierarchy is the eighth PLAN-403 site — give its fallback a live context and headroom
- 304bd28 fix(tools): let read_symbol fall back when gopls is slow, not just broken (PLAN-390)
- fa4bd64 fix(tools): refuse an ambiguous move_symbol name on whichever tree answered (PLAN-403)
- 5e04fee fix(tools): run the symbol tools' tree-sitter fallback on a live context (PLAN-403)
- 6a0fae0 fix(tools): stop quoting a wait that never happened, and two guards that could not fire
- 3e5b83f fix(tools): tell the agent the server was SLOW, not absent, in the read-tool fallback banner (PLAN-403)
- 61187c7 fix(topology): HasGoSignal must not trust a bare KindImport node (PLAN-371)
- 9a9154a fix(topology): count intra-file call edges by source, not by circumstance
- 14eba42 fix(topology): exclude derived call edges by source, and make the call census reconcile
- d31e5c3 fix(topology): finish the ceiling split — the byte cap too, and say when a walk is cut (PLAN-407)
- cd66c6f fix(topology): gate Go-only refusal on a language signal, not edge count (PLAN-371)
- cf77989 fix(topology): make derived edges durable across re-index (#418)
- cf74d32 fix(topology): reachability review fixes — test-edge scoping, Go-only refusal, races (PLAN-371)
- f994b93 fix(topology): stop clamping an in-process traversal budget with the tool-argument ceiling (PLAN-407)
- a12eff8 fix: PLAN-414 review — watcher self-heals on .plumb swap, retry gate, teardown race
Others
- 8410b0d chore(changelog): re-file under 0.17.3; drop the now-dead isShared gate
- 6fd0b34 docs(changelog): disclose the no-topology trade-off in the PLAN-390 entry
- f97fc01 docs(changelog): name the corpus the call-graph census was measured on
- e79e9ec docs(session): the shardFor gate comment no longer names a removed symbol
- 511ad1e docs(topology): the inert byte ceiling was this PR's first round, not the original state
- 4c11834 refactor(config)!: remove the [commands] keys that gated execute_shell_command
- baa8b29 refactor(tools)!: retire execute_shell_command from the registered tool surface
- 31207c0 test(cli): close two guards mutation showed were uncovered
- dde7ec4 test(cli): drop the shell-refusal fixture along with the tool it pinned
- 3611933 test(cli): guard that a REFUSED agent never becomes the attach-time identity
- b30ae28 test(cli): guard that session_start is actually handed the declared-agent channel
- 409186b test(cli): make the drifter the second declared agent in TestMultiAgentPin
- 88efd95 test(cli): pin the per-agent refusal trace lifecycle, mark and heal
- 5b31f32 test(smoke): drive the PLAN-390 cold-server case deterministically over the wire
- c0a6810 test(smoke): drive the PLAN-403 write path against the never-answering server
- 58a7bc7 test(tools): give each slow-LSP subtest its own caller deadline, and tighten the warm bound
- a400be2 test(tools): guard the PLAN-403 fallback in both directions, and on disk
- f071c6a test(tools): guard the slow-server disclosure and the rounded budget it quotes
- c366095 test(tools): pin the advertised max_bytes ceiling at both tool call sites
- cce85eb test(tools): query workspace_symbols by prefix so the assertion cannot pass on the echo
- bb928d3 test(topology): fix unreachable-sort test that could not fail (PLAN-371)
- d802696 test(topology): isolate HasGoSignal's two clauses (PLAN-371)
- 5e392d8 test(topology): pin the package-dir language filter the census depends on
Install
Homebrew (macOS + Linux):
brew install plumbkit/plumb/plumbDirect download: grab the archive for your OS/arch below, extract it, and
put the plumb binary on your PATH.
| Platform | Archive |
|---|---|
| macOS, Apple Silicon (M-series) | plumb_0.17.5_darwin_arm64.tar.gz |
| macOS, Intel | plumb_0.17.5_darwin_amd64.tar.gz |
| Linux, Intel/AMD 64-bit | plumb_0.17.5_linux_amd64.tar.gz |
| Linux, ARM 64-bit | plumb_0.17.5_linux_arm64.tar.gz |
Verify your download against checksums.txt.
macOS note: these binaries are not yet code-signed. On a direct download
Gatekeeper may block the first run — clear the quarantine flag once:
xattr -dr com.apple.quarantine ./plumb. Homebrew installs are unaffected.