Skip to content

Frontend & widget conformance#

Summary matrix#

Requirement Level Reference
FrontendService is GetCapabilities / Configure / Describe only MUST frontend-protocol.md
No Attach stream on frontend or widget MUST README.md
Four surfaces: input, state, metadata, transcript MUST README.md
SessionState fixed schema, per-session MUST frontend-protocol.md
SubmitInput returns turn_id MUST frontend-protocol.md
MetadataBlock closed body oneof; Tone token scale; never delete MUST frontend-protocol.md
StreamDeltas out-of-band re: bus; kernel does not batch MUST frontend-protocol.md
RenderTree transcript only; no Region/PlacedContent MUST render-tree.md
Every RenderNode variant graceful fallback MUST render-tree.md
Multi-attach; first-response-wins on plan/interactive MUST frontend-protocol.md
Widget screen presence via PublishMetadata MUST widget-protocol.md
Structured FrontendError / WidgetError taxonomies MUST this file

Error taxonomy#

Frontend and widget errors use structured category enums on gRPC status details (.claude/rules/grpc.md). Region-unsupported categories are retired (reserved field numbers on the wire).

Acceptance criterion#

The design is only proven when a second frontend — even a deliberately minimal HTTP one — renders the same SessionState and the same metadata blocks with the same functionality. Unit tests cannot substitute for that. Shipping a second frontend is not required for wire/spec completion of this revision, but the contracts MUST make it possible without a TUI region vocabulary.