feat(maglevc): JSON output for all commands (-json)

Enable App.JSON and add -json on golang-cli v1.4.0, mirroring evpnc so
the two CLIs' JSON contract is identical: show/query -> data, set/action
-> {}, failure -> {"error": "..."}.

- show/query commands branch on cli.IsJSON() -> emit the protobuf via
  cli.EmitJSON; text keeps the tabwriter painters (which robot tests
  parse via show, not via setter output).
- action commands (pause/resume/enable/disable, set weight, sync,
  config reload) are now silent on success in text too — "we did what
  you asked" needs no confirmation — and print "{}" in JSON via wrapJSON.
- config check stays informative (it is a query): text "config ok" /
  error, JSON the CheckConfig report.
- errors: formatError returns {"error": "..."} in JSON mode.
- watch streams its own JSON events (no trailing {}).

Robot tests assert backend state via `show`, not setter stdout, so the
dropped confirmations don't affect them. Builds on linux and openbsd.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-05 23:31:21 +02:00
parent 76fbe2eee0
commit d9a8ca6fb8
7 changed files with 153 additions and 62 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ module git.ipng.ch/ipng/vpp-maglev
go 1.25.0
require (
git.ipng.ch/ipng/golang-cli v1.3.0
git.ipng.ch/ipng/golang-cli v1.4.0
github.com/charmbracelet/bubbletea v1.3.10
github.com/charmbracelet/lipgloss v1.1.0
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0