main
4
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
a361b88677 |
engine: an operation is named for its product, and its summary is for the caller
CI/CD / gate (push) Canceled after 0s
CI/CD / containment (push) Canceled after 0s
CI/CD / image (push) Canceled after 0s
CI/CD / rollout (push) Canceled after 0s
CI/CD / reach (push) Canceled after 0s
CI/CD / fanout (push) Canceled after 0s
CI/CD / receipt (push) Canceled after 0s
An operation id is the generated SDK METHOD NAME and the CLI COMMAND, and a summary is what the MCP tool list shows a model choosing between tools. This plane stated neither, so both were defaults, and both defaults were wrong in a way only a caller sees. zip derives an unstated id from the path, so the four ops published `get_v1_engine_status`, `get_v1_engine_models`, `get_v1_engine_model`, `get_v1_engine_system` — path mangling where the rest of the fleet publishes the product and the noun. The risk product's thirty-one operations are `riskScore`, `riskState`, `riskDatasets`, `riskLabelCoverage`; these are now `engineStatus`, `engineModels`, `engineModel`, `engineSystem`, which is also the rule this package already applied to its own SCHEMA names and only to those. A summary defaults to the first sentence of the Go doc comment, and a Go doc comment opens with the Go IDENTIFIER — so the published summaries read "Status reports whether the engine deployment is reachable", "Models lists the models the engine serves", "Model reads one model's load state". A Go symbol name was the first word a CLI user, an SDK reader and a model picking a tool saw. Each op now states a summary written in the imperative for the person calling it, and the doc comment stays a Go doc comment that zipdoc still lifts as the description: two audiences, two sentences, one declaration. FORWARDS-ONLY, and it costs nothing: this plane has no customers on it. No alias, no redirect, no compat shim. Regenerating from source changes exactly four operation ids. No path is added or removed, no (path, method) pair moves, no schema changes, and openapi/floor.json is byte-identical because the operation count did not move. Co-authored-by: Hanzo Dev <dev@hanzo.ai> |
||
|
|
7e3bb4af9b |
describe: regenerate the woven document so the prose fix reaches the wire
`make describe` — zipdoc lifts the doc comments, each app projects its own router, the weave composes them. Path count is unchanged at 1058: this moves prose, not surface. It also picks up drift nobody had regenerated: apps/git's zipdoc_gen.go was missing the import/inbound/mirror ops' prose entirely, and apps/admin's had gone stale. Both were invisible because the weave only proves the subsets compose with each other — the drift gate is what regenerates from source. Co-authored-by: Hanzo Dev <dev@hanzo.ai> |
||
|
|
fe782d1bec |
docs: the last seven openers, and none of them was about the customer
These are the remainder of the rule |
||
|
|
eafc8a8267 |
engine: revive the product at /v1/engine — typed passthrough to the hanzoai/engine runtime
The product repo (hanzoai/engine, Rust — `hanzo serve`, the OpenAI- and Anthropic-compatible inference server) stays the one implementation; cloud mounts its MANAGEMENT plane over an HTTP seam, apps/flow's posture: four typed ops proxying what the server genuinely answers today — the model table with load state, one model's state (a GET here over the product's POST-read seam, since its ids carry slashes), the host/GPU inventory with build capabilities, and a reachability lens carrying the build revision — each proven against a live hanzo-server end to end (live_test.go re-proves the loop on demand against a real serving process; the fake upstream pins the measured wire, plain-text /health included). Inference is deliberately NOT here: the fleet's ONE metered inference door is the OpenAI-compatible /v1 surface (apps/ai + the zen claim); a second completion door under /v1/engine would split billing, and the ledger pins it. The deployment is ONE shared runtime with no per-org primitive, so every read is a platform fact behind the IAM gate (validated principal or 403, before any upstream byte) and every mutation the server exposes (models/unload, reload, tune, re_isq, system/doctor) is REFUSED: an org-scoped route onto a shared runtime hands each tenant every other tenant's availability. The rest of the 22-path authored intent (deleted unserved in openapi d86248f) stays refused: clusters/jobs/ray/pipelines/gpus/serve-endpoints described a GPU cluster manager this product never was — those families live on the cluster plane (/v1/clusters, /v1/train/jobs, /v1/ml/models) where they are real. The ledger is a measured gate (typed_wire_test.go intentRefused), not a comment. Co-authored-by: Hanzo Dev <dev@hanzo.ai> |