v1.3.0 — Change Validation: a deterministic verdict on every change
NetCopilot can now judge a network change, not just describe it.
The trap this release closes: after a change, the success check is usually chosen by whoever (or whatever) made the change — a local ping, a quick glance — and it passes. From anywhere else, things are broken. An agent grading its own homework picks the test it can pass. The antidote is a verdict chosen by policy, before the fact, and computed deterministically — never by the model.
✅ Change validation — pass / warn / fail
Declare what was supposed to change; NetCopilot diffs the pre-change and post-change snapshots and judges the drift:
- fail — a new
critical/highfinding appeared (regardless of scope), or any drift touches only devices outside the declared scope. - warn — new minor findings, drift with no declared scope, or changes that can't be attributed to a device — honest uncertainty, surfaced instead of silently dropped, and never escalated into a false fail.
- pass — every change touches the declared scope and nothing new broke.
The policy is explicit and documented — the policy is the spec. No LLM anywhere in the verdict path: same inputs, same verdict, every time. Operational noise (the drift feature's volatile/info field contract) never affects the result, and resolved findings are reported as the good news they are.
One engine, three surfaces
- MCP tool
validate_change— the 26th tool. Declared scope as an argument; the verdict travels to any MCP client as structured content. It appeared on the external server surface with zero server changes — the registry-generated surface from v1.2.0 doing exactly what it promised. - CLI pipeline gate —
netcopilot validate --after <run> [--before <run>] [--scope dev1,dev2]exits0/1/2= pass/warn/fail, so a change pipeline can gate on it directly:netcopilot validate --after $(post_change_run) --scope core-sw-01 || rollback
- Dashboard banner — the Audit-tab drift view now opens with an automatic green/amber/red verdict and its reasons, above the change list it already showed. In-app menu (
list_capabilities) updated accordingly.
Numbers
- Tests: 963 → 1000 passed
- MCP tools: 25 → 26 (external surface followed automatically)
- New verdict engine: pure function, every policy rule pinned by its own test; verdict schema frozen (external consumers can build on it)
Full changelog: v1.2.0...v1.3.0