Skip to content

Latest commit

 

History

History
78 lines (63 loc) · 9.94 KB

File metadata and controls

78 lines (63 loc) · 9.94 KB

Roadmap

Plumb is pre-1.0. The core — concurrency-safe, atomic, transactional writes; the crash-resilient daemon; the tree-sitter topology index; and per-project memory — is in daily use. The road to 1.0 is about proving it beyond the validated core and smoothing distribution, not rewriting it.

How we get to 1.0

Rather than jump from 0.9 straight to 1.0, Plumb ships a series of focused minor releases — 0.10 through 0.19 — each with one coherent theme. 0.19.x is the last 0.x release. 1.0 follows it as a deliberate stability commitment, not a feature milestone.

Why the runway: a 1.0 makes implicit promises about behaviour stability and language breadth. We want to earn those in the open — validating the experimental language adapters against real binaries, hardening the daemon, and smoothing install and distribution — before we make them. Native Windows support is intentionally not a 1.0 gate; it lands in 1.1.

Version Theme Focus
0.10 Distribution + honest claims Homebrew install (brew install plumbkit/plumb/plumb) (✓ shipped — GoReleaser build + plumbkit/homebrew-plumb tap); semantic re-rank for topology search promoted to GA (✓ done — supported, opt-in, API/BYO-endpoint only; documented in docs/configuration.md); this roadmap published (✓ done — published as docs/roadmap.md); in-repo claims trued-up (TypeScript adapter now validated (✓ validated — typescript-language-server 5.3.0 passes both real-binary integration tests once the publishDiagnostics client capability is advertised), Linux CI green (✓ done — verify + real-binary integration jobs run on ubuntu-latest in CI)).
0.11 Validate experimental adapters Retest zls (✓ validated 2026-06-17 — passes both real-binary integration tests once the publishDiagnostics client capability is advertised; the pull-diagnostics hypothesis was wrong) and Kotlin (✓ validated 2026-08-11 — by SWAPPING the server: fwcd/kotlin-language-server never passed, and the backend is now JetBrains' Kotlin/kotlin-lsp 262.9593.0, which passes both real-binary integration tests on a resolvable Gradle project. Two things had to change with it: the fixture, which must be a build that actually RESOLVES rather than merely a directory of files, and the promotion rule, which now accepts the diagnostics round-trip by whichever model the server advertises — kotlin-lsp is the first that never pushes) against real binaries, then promote them from experimental to validated (#13).
0.12 Swift on Xcode Build Server Protocol guidance and trusted, default-off auto-configuration (buildServer.json via xcode-build-server) for bare .xcodeproj/.xcworkspace roots (✓ shipped — safe marker/scheme selection, scoped SourceKit-LSP restart, honest lifecycle states, and real-Xcode cold/built/restart coverage; Plumb never builds the project automatically).
0.13 Daemon robustness (✓ delivered) Crash-safety around plumb's own git writes (✓ done — per-repo serialisation lock, graceful-shutdown drain, attributable stale-lock reaper); lock-free liveness probe (#15) (✓ done — tools/list snapshots under the lock, then filters and marshals outside it, so ping/daemon_info stay responsive under write contention); per-connection write deadline, language-server pool self-heal (a slow-failing first start — and restartSwift — is evicted and retried rather than reused behind a structural fallback), and provably-bounded daemon shutdown (concurrent store closes under a budget that sums to 9 s against the 10 s watchdog, plus notify pile-up observability) (✓ all shipped).
0.14 Agent ergonomics (✓ delivered) Client-aware tool profiles (shipped); configurable workspace access wired through client setup (✓ done — --allow-dir/PLUMB_ALLOWED_DIRS grant extra read-write roots per connection, transported through the resilient-proxy handshake); enable a language server live without a restart (✓ shipped — plumb enable-lsp <language> flips the running daemon's effective language set live and its server attaches lazily on the next matching file; the last open 0.14 item). Plus a wave of shipped tool-surface work: LSP cold-start warm-up signalling, high-confidence parameter auto-correction, recoverable-error self-heal, get_definition-by-name topology fallback, unified-diff output for find_replace/rename_symbol, the file_status dirty/last-writer probe, undo_edit (safe single-level write revert), anchor-bounded edit_file, optional session purpose tags, post-write cross-file diagnostics (flags an edit that breaks another file), session-state persistence across a daemon restart, the run_task/agent_config tools for stored build/test commands and opt-in agent-writable config, move_symbol (relocate a whole declaration between files in a package), the symbol-edit steering that routes whole-declaration changes to the coordinate-free replace_symbol_body/insert_before_symbol/insert_after_symbol/safe_delete_symbol family, configurable [ui.keys] TUI shortcuts, the negotiated pull-diagnostics mode (opt-in [lsp.<lang>] diagnostics = "pull", push remains the default, hybrid-aware), and minimal_diff_review (a deterministic, advisory overbuild review of the working diff, paired with the plumb-minimal-change skill).
0.15 Honesty + config surface A trustworthy tokens-saved metric (✓ shipped — two-axis capability/efficiency model, "estimated (model vN)" labelling); full settings-screen coverage of every config field with inline help (✓ shipped — buildSettingItems emits a row per config field with one-line help, centralised in the internal/config/fields.go registry).
0.16 Stabilisation + cross-platform proving Bug cleanup (#4, #2 (✓ fixed 2026-06-17 — theme picker now writes a sparse ui.theme key, no env/default baking), #14 (✓ fixed — the test now waits on an index-complete signal; green under -race)); the client smoke suite proven on Linux (✓ — the clientsmoke handshake tier now runs green on Linux, not just macOS); community Linux testing across distros and desktops (#9).
0.17 Distribution + discoverability MCP Registry (✓ publish pipeline wired — release.yml stamps server.json and publishes via GitHub OIDC) and GitHub MCP Registry listings; curated-list submissions; a public-exposure polish pass (version/registry lockstep (✓ done — TestServerJSONVersionMatchesVERSION pins server.json to VERSION), doc-count accuracy (✓ trued up each release and pinned by TestDocToolCountMatchesRegistry)).
0.18 Proof + docs Measured tool-comparison use cases; demo assets (runnable two-agents and crash-resilience demos + the rendered respawn GIF shipped in 0.13.0); a documentation accuracy pass.
0.19 Soak + feedback — last 0.x Fixes and real-world soak rather than a formal tagged release candidate: Plumb ships rolling 0.x patches, so this is a feedback window across several patch releases — not an RC gate — before committing to 1.0.
1.0 General availability The stability commitment and the validated-core promise — concurrency-safe writes, the resilient daemon, topology, and memory.

Themes are buckets, not a strict release order — an item ships when it's ready. Several 0.13–0.15 theme items (the daemon-robustness hardening, the live enable-lsp, move_symbol, and the symbol-edit steering) landed in 0.12.x patches ahead of their nominal minor, which is why rows can read as delivered early. 0.13.0 was tagged 2026-07-24, closing the daemon-robustness theme, and 0.14.0 on 2026-07-25, formalising the agent-ergonomics theme with minimal_diff_review as its headline addition.

Shipped outside any themed row

Two capabilities landed as standalone surfaces rather than under a themed minor:

  • plumb web — a daemon-hosted, loopback-only web UI (Svelte 5 + ECharts/uPlot) with full TUI parity (Dashboard, Sessions, Memory, Logs, scope-aware Settings). See docs/web.md and the [web] config section.
  • [collab] cross-agent sharing (shipped in 0.10) — three config-gated, advisory tiers for agents that share one daemon on a machine: peer awareness (daemon-observed writes), intents + a mailbox (share_intent / leave_note), and on-demand knowledge handoff (share_findings). Everything beyond tier-1 awareness is opt-in, all of it is advisory (never blocks a write) and strictly per-workspace. See the [collab] config section.

Neither fits a 0.1x theme above because neither was planned as part of the road to 1.0 — they're called out here so a reader scanning this roadmap knows they exist.

After 1.0

  • 1.1 — Native Windows support. Port the daemon's Unix-socket transport to named pipes or loopback TCP — preserving the resilient reconnecting proxy and per-connection isolation — and add a Windows CI matrix (#8).
  • Tree-sitter cleanup. Retire the WASM tree-sitter fallback paths once the canonical-grammar extractors (Swift implicitly-unwrapped optionals, TypeScript typed-arrow TSX) have soaked in the field.

A note on pacing

The later minors (roughly 0.16–0.19) are deliberately lighter — stabilisation, real-world proving, and soak — rather than padded feature dumps. 0.19.x in particular is a soak window: bug-fix patches while we gather field feedback, so that 1.0's stability guarantees are something we've already demonstrated by the time we make them.

Issues and ideas are welcome — see CONTRIBUTING.md.