Skip to content

fix(get_products): coerce string brand to BrandReference per AdCP v3 shorthand (4.3 gap) #1324

Description

@ChrisHuie

Gap

Storyboard runner sends brand: "https://test.example" (string shorthand
form). Our _get_products_impl expects BrandReference (dict with
domain key). AdCP v3 accepts both forms — string is shorthand that
must be coerced server-side to BrandReference(domain=<string>).

Currently the string form fails Pydantic validation at the boundary.
Blocks the storyboard's primary brand-discovery flow.

Documented at #1247 gap #2 (storyboard compliance gap analysis).

Why it matters

  • Spec compliance: AdCP v3 explicitly allows both shorthand and full
    reference forms
  • Blocks storyboard from reaching downstream get_products scenarios

Contract for "done"

  • _get_products_impl (or its boundary input model) coerces a
    string brand into BrandReference(domain=brand_string) before
    validation
  • Dict form {"domain": "..."} continues to work unchanged
  • Behavioral test exercises both forms produce identical downstream
    output
  • Storyboard's brand-discovery scenarios pass against this code path

Out of scope

  • Brand-resolution semantics (this is purely about shape coercion)
  • A2A or REST transports (only MCP is in storyboard scope)

Metadata

Metadata

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

Status
Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions