v0.2.1 — hardening: fail-open plan gate, doctor compat, working MCPB
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
@latesttag on the ExitPlanMode critical path. - Every operational failure (offline npx, missing
node/npx, unsetHOME, 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;
planFilePathis confined to the Claude plans directory withlstat+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 doctorno longer reports a false "not found" for a working reviewer. - Version parsing tolerates ANSI colour, wrapper banners, npm update notices, and
+buildmetadata 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_charsconfig 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 generatedmanifest.json, and the full productionnode_modules, and runs undernode ${__dirname}/dist/cli.jswith zero runtime install. Verified by speaking MCP (initialize+tools/list) to it with no npm/npx onPATH. - 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 acrosspackage.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/mcpbtooling, 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.1Claude 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