Skip to content

v0.2.1 — hardening: fail-open plan gate, doctor compat, working MCPB

Choose a tag to compare

@github-actions github-actions released this 14 Jul 13:00
93c0290

A hardening release closing the deferred findings from the pre-0.2.0 Codex GPT-5.6 review, each re-verified by an independent multi-LLM review pass before merge. No new features; the review_plan tool and the ExitPlanMode plan gate are unchanged in behavior — they're now harder to break.

Plan gate (#27, closes #21 / #22)

  • The Claude Code plugin shim now runs only the exact package version paired with the plugin — no global binary, no mutable @latest tag on the ExitPlanMode critical path.
  • Every operational failure (offline npx, missing node/npx, unset HOME, malformed output, timeout) fails open: emits { "systemMessage": "… Plan proceeds unreviewed." } and exits 0. A plan is never blocked by an inspectrum error.
  • Untrusted hook input is bounded: stdin is capped at 128 KB during streaming; planFilePath is confined to the Claude plans directory with lstat + realpath + O_NOFOLLOW + dev/ino TOCTOU recheck + owner check, and read through a 64 KB cap. FIFOs, devices, symlinks, and oversized files are rejected — fail-open.

Doctor (#30, closes #24)

  • Codex CLI compatibility gate: requires >= 0.99.0 with a semver-correct per-component compare (0.100.0 > 0.99.0), prereleases handled per semver.
  • Aliased Codex reviewers (e.g. [reviewers.codex-high] backend = "codex") now resolve to the backend binary for the health probe, matching the review path — inspectrum doctor no longer reports a false "not found" for a working reviewer.
  • Version parsing tolerates ANSI colour, wrapper banners, npm update notices, and +build metadata around the version line.
  • The Claude plugin hook check is optional — absent/disabled/unreadable degrades to a warning, never a hard failure.
  • Removed the dead limits.plan_max_chars config key; existing configs that still carry it continue to load.

Distribution (#29, closes #23)

  • Repaired the Claude Desktop MCPB. The v0.2.0 bundle was incomplete and would not run; the v0.2.1 bundle is autonomous — it ships dist/, the generated manifest.json, and the full production node_modules, and runs under node ${__dirname}/dist/cli.js with zero runtime install. Verified by speaking MCP (initialize + tools/list) to it with no npm/npx on PATH.
  • Deterministic builds: two fresh builds (CI on Linux, local on macOS) produce a byte-identical archive.
  • MCPB manifest version is generated from package.json; a contract test gates version consistency across package.json, package-lock.json, .claude-plugin/plugin.json.
  • macOS-only (compatibility.platforms: ["darwin"], node >= 20). Release CI validates the bundle with the official @anthropic-ai/mcpb tooling, inspects the ZIP, and runs an MCP smoke before attaching it.

Install

# Claude Code plugin
claude plugin marketplace add yannmenec/inspectrum
claude plugin install inspectrum@inspectrum

# MCP server (any host)
npx -y inspectrum@0.2.1

Claude Desktop (macOS): download inspectrum-0.2.1.mcpb below, open it, confirm. The earlier v0.2.0 bundle was incomplete — use the v0.2.1 asset.

Full changelog: v0.2.0...v0.2.1