Skip to content

Releases: grloper/plumbgraph

v1.1.0

Choose a tag to compare

@grloper grloper released this 11 Oct 14:38
abdbf7e

Breaking changes

  • Verify report schema is now 2. Consumers must read the separate outcomes: pass, findings failure, incomplete analysis, and non-certifying baseline maintenance.
  • --update-baseline now exits 1: it is maintenance, not a passing verification.
  • --fail-on applies only to dead code that is explicitly opted in; dead code is advisory by default.
  • MCP baseline writes require --allow-baseline-update (baseline-write authority is separate from execution).

Changed

  • Verify schema 2 separates pass, findings failure, incomplete analysis, and non-certifying baseline maintenance. Required failures and invalid Git bases no longer pass.
  • Independent per-check enforcement; dead code is advisory by default. CLI/MCP library mode and policy agree; baseline-write authority is separate from execution.
  • Pinned Git baseline mode, atomic maintenance, explicit baseline read errors, preserved unobserved provider entries, complete totals and coverage caveats.
  • Provider exit/output failure handling and an offline gate regression corpus.
  • Init checks actual Git worktree status rather than any ancestor named .git.
  • See migration details before upgrading gate consumers.

Limits (honest)

  • No native Windows or macOS validation of 1.1.0; only Linux was verified for this release (see README for what was tested earlier on Windows).
  • Trusted verification mode has documented limits: see docs/VERIFY.md. Tier-0 analysis is name-based; a pass covers only the selected checks.
  • The attached binary is linux-x64, built locally with cargo build --release --locked (not CI-built). Verify with sha256sum -c SHA256SUMS.txt.

Plumbgraph v1.0.3

Choose a tag to compare

@grloper grloper released this 10 Oct 10:08
9446ac8

Fixes for false positives and install problems found by running 1.0.2 on a real Unity project (Assets/UYF).

Fixed

  • Unity: message methods (LateUpdate, FixedUpdate, OnDisable, ...) on a partial class are entry points when any part declares a Unity base (MonoBehaviour, ScriptableObject, NetworkBehaviour, EditorWindow, ...), even when the base is declared in another file. Parts are merged per type within one Assets/ root; the other parts of the type are then live too. Indirect bases (Hero : CharacterBase : MonoBehaviour) are resolved through classes in the index. dead-code --verbose prints unity-message@partial-merged ... for every suppressed message.
  • Unity: a message-named method on a class whose Unity base cannot be decided (base type not in the index) under Assets/ is now reported as MEDIUM at most, with the reason unity-message-name-but-host-type-unresolved, instead of being silently live (partial classes) or HIGH. A class whose bases all resolve to non-Unity classes (DerivedState : PlainBase) is no longer treated as a component, so its Update(float dt) stays reportable.
  • Unity: ScriptableWizard is an editor base; OnWizardCreate, OnWizardUpdate, OnWizardOtherButton are messages.

Added

  • dead-code prints two notes when C# files under Assets/ are indexed (Unity pack active; do not mass-delete HIGH findings) and --help links the Unity pack limitations. docs/PACKS.md documents the Unity gaps (scenes/prefabs/UnityEvents, string-based invocation, animation events, Addressables/Resources, scip-dotnet, multiple asmdefs).
  • plumb mcp startup line on stderr includes the version and pid.
  • plumb doctor warns (Windows) when it cannot overwrite its own executable, e.g. because an MCP host still runs plumb mcp.
  • Docs: stop MCP hosts before cargo install on Windows (or use --root); plumb mcp --root should point at the workspace you are working on.

Changed

  • Index schema 4 / extractor 9 (new unity column on symbols): existing indexes are rebuilt once.
  • DeadCodeResult (JSON) has an optional notes array.

Already correct in 1.0.2 (regression tests added only)

  • A plain class with Update(float dt) and no base class is not an engine callback; ordinary methods that merely contain "Update" are not entry points; same-file MonoBehaviour.Update is suppressed; a private unreferenced helper on a MonoBehaviour is reported; [MenuItem], [InitializeOnLoad], [InitializeOnLoadMethod], [RuntimeInitializeOnLoadMethod], Editor and EditorWindow handling; MCP initialize already carried serverInfo.version (now asserted).

Plumbgraph v1.0.2

Choose a tag to compare

@grloper grloper released this 10 Oct 09:17
3c7b8a0
  • Docs only: README now matches the released version, the tested Windows scope, supported weakening languages and known limits.

Plumbgraph v1.0.1

Choose a tag to compare

@grloper grloper released this 10 Oct 09:04
5d3c8e0

Fixes for problems found by using v1.0.0 on real projects (Windows, Unity). Not released; the crate version is still 1.0.0.

Fixed

  • Windows: plumb doctor (and enrich, rule-engine detection in verify --run) reported every provider as missing because lookup used the bare name (cargo), never cargo.exe / tsc.cmd. Bare names are now tried with the PATHEXT extensions that std::process::Command can start (.com, .exe, .bat, .cmd); Unix lookup is unchanged.
  • plumb init printed a Codex config.toml snippet with a \\?\C:\... path inside a TOML basic string, which does not parse. The verbatim prefix is stripped (\\?\UNC\ becomes \\) and the path is written as a TOML literal string, or an escaped basic string when it contains ' or control characters. Report paths no longer show \\?\ either.
  • plumb map --budget N was rejected; --budget is now a visible alias of --tokens.
  • plumb init and .gitignore: --dry-run shows the lines it would add; it writes .plumbgraph/* + !.plumbgraph/allow.toml (the previous .plumbgraph/ made the committed allow-list impossible to commit); any existing rule mentioning .plumbgraph (including !.plumbgraph/) is respected; it works in a subdirectory of a repository; CRLF files keep CRLF; a .gitignore that is not UTF-8 (for example UTF-16 from PowerShell 5) is no longer read as empty and overwritten.

Added

  • C# / Unity dead-code entry points: MonoBehaviour/ScriptableObject/NetworkBehaviour/StateMachineBehaviour/UIBehaviour messages (Awake, Start, Update, OnTriggerEnter2D, ...), Unity attributes ([RuntimeInitializeOnLoadMethod], [MenuItem], [InitializeOnLoad], ...), and Unity callback interfaces (ISerializationCallbackReceiver, IHasCustomMenu, UI EventSystem handlers). Public methods of Unity classes stay findings with a 0.25 penalty and a UnityEvent / Animation Event fp_risk. Rules and limits: docs/PACKS.md. On Unity's open-project-1 scripts (commit 608eac9) dead-code findings went from 371 to 166 (medium 97 to 28); on Newtonsoft.Json (52fa3ae) they are identical before and after (204).
  • plumb init --no-gitignore.
  • README: Windows install and PATH setup, and exactly what was tested on Windows.

Changed

  • Index schema 3 / extractor 8 (new framework_risk column): existing indexes are rebuilt once.

Plumbgraph v1.0.0

Choose a tag to compare

@grloper grloper released this 10 Oct 07:59
98f17c1

Plumbgraph v1.0.0

Source-only GitHub release. Not published to crates.io.

Know your code. Verify the change. Plumbgraph is a local code-intelligence and pre-submit verification tool for AI coding agents (CLI plumb, MCP server over stdio).

Highlights

  • plumb verify: one verdict over dead code, hallucinated/undeclared dependencies, test weakening, diagnostics, semgrep and ast-grep, diffed against plumb-baseline.json so only new findings fail. External tools run only with --run.
  • plumb map (PageRank-ranked, hard token budget) and plumb impact (transitive callers, tests to run).
  • Languages: Python, JavaScript, TypeScript/TSX, Rust, Go, Java, C# (tier-0, tree-sitter); SCIP overlay for compiler-grade references where you have an index.
  • MCP: 13 tools and 3 resources; tested with the official TypeScript SDK and the MCP inspector CLI.
  • Provider orchestration (plumb doctor, plumb enrich), plumb init for agent config.
  • Every finding carries source and confidence; deps allow-list entries require a written reason.

Since the v1.0 candidate (this release PR)

  • Version 1.0.0 everywhere (plumb --version).
  • Dead-code false-positive fixes found by hand review of chi and gson: Rust {NAME} format captures, Java main/C# Main, Java serialization hooks, annotation-driven framework methods; app-mode hint to use --lib for libraries. The index cache rebuilds automatically on upgrade.
  • [[deps_allow]] in .plumbgraph/allow.toml (path glob, optional package, mandatory reason). plumb verify . on plumbgraph itself now passes.
  • plumb verify --fail-on none reports REPORT-ONLY instead of FAIL.
  • New logo, social preview, README, demo recordings generated from real runs, architecture and MCP docs.

Validated end to end (see docs/VALIDATION.md)

  • Real repos: requests, express, ripgrep, cobra, gson, Newtonsoft.Json, kubernetes (13,558 of 31,421 tracked files were source files and got indexed, in 41 s, no OOM), vscode (14.6k files; 60 s), Wraith, classroom-archiver.
  • Fixed from that testing: large-repo memory and speed, weakening detection for Go/Java/C#, alias-import false positives, bounded check-deps/verify output, MCP map token cost, closed-pipe crashes.
  • Seeded weakening recall 12/12 on Python, JS, Rust, Go and C#; Java skips and deletions 4/4 each, loosened assertions untested.

Known limitations (read before relying on it)

  • Name-based analysis without a SCIP index; dead-code precision on libraries in app mode was 1/40 on chi (use --lib); recall on real code is unmeasured. See docs/EVALUATION.md.
  • scip-go/scip-java/scip-dotnet/rust-analyzer SCIP were not run; no Windows testing; MCP agent hosts not tested; no prompts capability.
  • Distribution is source-only: no binaries, no crate.

Full changelog: CHANGELOG.md.