v0.14.0 — scoped registration (PROXIMO_SURFACES)
Scoped registration — load only the planes you use.
PROXIMO_SURFACES=pve,exec registers just those surfaces' tools (that pair = 194 of 352; pbs,exec = 38) — unpicked planes are pruned from the MCP registry before serving, so they never reach your client's context window at all. A structural gate, not a runtime refusal.
- Surfaces:
pve·pbs·pmg·pdm·exec(comma-separated, case-insensitive) - Unset = all 352 tools, zero behavior change — the same opt-in contract as every Proximo control
audit_verifyis never scopeable away — PROVE stays- A typo'd surface name refuses startup (exit 1, names the valid set) rather than silently serving a surface you didn't pick
- A completeness test fails CI if a future tool falls outside every surface
Also in this release:
- The README now leads with a live demo — recorded against a real PVE 9.2 host with a read-only token (
doctorpreflight → a destructive delete returning its PLAN with named blast radius, nothing executed →audit_verifygreen). Reproducible:scripts/demo/demo.py. - A mutation-checked regression test pinning that the
proximo doctorreport never carries secret values (the CodeQL #75 dismissal, backed by proof). - Dependency floors raised to the versions the suite actually tests (starlette ≥1.3.1, cryptography ≥49, pytest-asyncio ≥1.4).
Full suite 5,079 green (3 by-design skips), ruff + pyright clean. Tool count unchanged: 352.
Honesty note, as always: the suite is mock/in-process — it proves shapes; the live-Proxmox proofs are a separate by-hand harness (see README "Status — the arena record"). PROXIMO_SURFACES is context hygiene and surface reduction, not an authorization control — your token's ACL remains the real boundary.