Pillar: co-development.
WHY — Framing the deliverable as "API surface (axum/tonic)" is a trap: those are the most boringly production-grade, least differentiating parts of any Rust stack, and claiming them as WAVE value reads as padding. What is genuinely unowned and genuinely hard is the contract: what a viewport is as a resource, what a scope means, what a meter emits, what an activation decision returns. WAVE's differentiation is contract-first generation, not framework typing.
GROUNDED — openapi.yaml — 2,744 lines, 34 path groups — is already the SSOT generating 5 SDK languages (sdks/sdk-{typescript,python,go,ruby,rust}). The single-source-of-truth discipline is proven in code: wave-gateway/src/scopes.ts:116 PROTOCOL_RESOURCES feeds both SKU-to-scope grants (catalog.ts:58) and per-protocol meters (usage.ts:102) so scope and billing cannot drift; scopes.ts:58 gates 139 /v1 groups; scopes.ts:22 denies any unmapped path, and a live probe confirms fail-closed behaviour end to end. The gRPC half is honestly G0: zero .proto files tree-wide, verified 2026-07-24.
BOUNDARY — WAVE does not own a third party's internal module API, an AI director's decision API, or NMOS/Catena/Ember+ schema authoring — that is the standards pillar, and it is claimed as the authorization and mapping layer, never as an implementation vendor. Do not claim gRPC production experience — there are no .proto service definitions in this tree and that is a five-minute check.
TAXONOMY — Third-party platform engineers; WAVE SDK consumers across 5 languages; broadcast integrators writing against an appliance; and every agent class — director, egress and metering agents all read this contract rather than a private API.
GATE — Entry G0 for the gRPC surface, G1 GROUNDED for the REST/OpenAPI surface, since the SSOT and generators exist and ship today → target G3.
DONE-WHEN — A new egress .proto plus the OpenAPI delta generate, in CI, both a compiling tonic server stub and a compiling sdk-rust client; and a round-trip test drives viewport.list / viewport.subscribe / meter.report against a mock and asserts the same wire shape from both generators. CI log captured as the receipt.
DEPENDENCIES — Consumes the viewport-ID codec grammar and the egress trait's type names so the wire contract and the linkable trait do not disagree.
Pillar: co-development.
WHY — Framing the deliverable as "API surface (axum/tonic)" is a trap: those are the most boringly production-grade, least differentiating parts of any Rust stack, and claiming them as WAVE value reads as padding. What is genuinely unowned and genuinely hard is the contract: what a viewport is as a resource, what a scope means, what a meter emits, what an activation decision returns. WAVE's differentiation is contract-first generation, not framework typing.
GROUNDED —
openapi.yaml— 2,744 lines, 34 path groups — is already the SSOT generating 5 SDK languages (sdks/sdk-{typescript,python,go,ruby,rust}). The single-source-of-truth discipline is proven in code:wave-gateway/src/scopes.ts:116PROTOCOL_RESOURCESfeeds both SKU-to-scope grants (catalog.ts:58) and per-protocol meters (usage.ts:102) so scope and billing cannot drift;scopes.ts:58gates 139/v1groups;scopes.ts:22denies any unmapped path, and a live probe confirms fail-closed behaviour end to end. The gRPC half is honestly G0: zero.protofiles tree-wide, verified 2026-07-24.BOUNDARY — WAVE does not own a third party's internal module API, an AI director's decision API, or NMOS/Catena/Ember+ schema authoring — that is the standards pillar, and it is claimed as the authorization and mapping layer, never as an implementation vendor. Do not claim gRPC production experience — there are no
.protoservice definitions in this tree and that is a five-minute check.TAXONOMY — Third-party platform engineers; WAVE SDK consumers across 5 languages; broadcast integrators writing against an appliance; and every agent class — director, egress and metering agents all read this contract rather than a private API.
GATE — Entry G0 for the gRPC surface, G1 GROUNDED for the REST/OpenAPI surface, since the SSOT and generators exist and ship today → target G3.
DONE-WHEN — A new egress
.protoplus the OpenAPI delta generate, in CI, both a compilingtonicserver stub and a compilingsdk-rustclient; and a round-trip test drivesviewport.list/viewport.subscribe/meter.reportagainst a mock and asserts the same wire shape from both generators. CI log captured as the receipt.DEPENDENCIES — Consumes the viewport-ID codec grammar and the egress trait's type names so the wire contract and the linkable trait do not disagree.