Part of #54. No code change now — this is the standing record of a policy decision and the pointer to revisit it.
Current policy (keep)
Apply treats createSurface as a deliberate no-op (render/composite.go:21-26, :38-42): the wire theme (primaryColor, iconUrl, agentDisplayName) is superseded by host theming via WithStyles, and catalogId is ignored because a2tea's catalog is compiled in. This matches the spec today — the theme property is z.any().optional() and even the reference web basic catalog is not wired to consume it. The design is explicitly open upstream: a2ui-project/a2ui#1118.
When to revisit
If #1118 resolves toward a typed, agent-influenced theme contract, add an opt-in mapping rather than changing the default:
// Host decides if/how agent theme data influences styles. Never applied
// unless the host opts in.
render.WithThemeMapper(func(t a2ui.Theme, base Styles) Styles)
- Default behavior stays: no mapper → theme ignored, host wins.
Theme.AdditionalProperties map[string]any (v09/common.go:41-46) is the escape hatch to watch — upstream experiments will likely land there first.
- Whatever happens,
DefaultStyles() stays monochrome and the no-color test stays.
Acceptance
Close when either (a) #1118 resolves and we've decided to implement or explicitly declined with a doc note in wire-format.md, or (b) the theme property is removed/stabilized upstream in a way that makes this moot.
Part of #54. No code change now — this is the standing record of a policy decision and the pointer to revisit it.
Current policy (keep)
ApplytreatscreateSurfaceas a deliberate no-op (render/composite.go:21-26,:38-42): the wiretheme(primaryColor,iconUrl,agentDisplayName) is superseded by host theming viaWithStyles, andcatalogIdis ignored because a2tea's catalog is compiled in. This matches the spec today — thethemeproperty isz.any().optional()and even the reference web basic catalog is not wired to consume it. The design is explicitly open upstream: a2ui-project/a2ui#1118.When to revisit
If #1118 resolves toward a typed, agent-influenced theme contract, add an opt-in mapping rather than changing the default:
Theme.AdditionalProperties map[string]any(v09/common.go:41-46) is the escape hatch to watch — upstream experiments will likely land there first.DefaultStyles()stays monochrome and the no-color test stays.Acceptance
Close when either (a) #1118 resolves and we've decided to implement or explicitly declined with a doc note in wire-format.md, or (b) the theme property is removed/stabilized upstream in a way that makes this moot.