Files
openapi/plugin/openapi.yaml
T
zeekayandHanzo Dev 2237e4b445 plugin: author the /v1/admin/plugins surface cloud already serves
`generated/hanzo.json` — the measured reading of the binary's own router —
carried four operations the contract never named: `GET /v1/admin/plugins` and
`POST /v1/admin/plugins/{name}/{enable,disable,reload}`, registered by
`clients/plugin` as zip typed ops.

Undeclared is unreachable. Not from an SDK, and not from `hanzo`: the CLI's
`genspec` ITERATES this master and consults the live route table only to
REFUTE, so a path absent here can never enter the CLI spec no matter what the
server serves. The server having shipped them is exactly half the contract.

They belong in `plugin/`, not `admin/`. `admin/` is the aggregator subsystem
(`clients/admin`), whose own description says it reads identity from IAM and
money from commerce; a process supervisor is neither. `affiliates/`, `authors/`
and `referrals/` already establish the convention — a subsystem authors its own
`/v1/admin/<subsystem>` operator paths beside its public ones.

Prose, operationIds and parameters are verbatim from the emitted spec. The
response schemas are NAMED instead of inlined — ListOut → Host → PluginStatus →
PluginUsage, ActionOut → Result — each field carrying the doc comment of the Go
type it encodes, and `since` typed as a date-time string rather than the empty
object a `time.Time` renders as through reflection.

audit.py: all four move from `undeclared` to covered.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-28 09:37:57 -07:00

18 KiB