Skip to content

v9.1.0

Choose a tag to compare

@aao-ipr-bot aao-ipr-bot released this 25 Oct 14:05
83da9d8

9.1.0 (2026-10-25)

Features

  • media-buy: persist and echo create context on get_media_buys (#1600) (4083dc5), closes #1575

Bug Fixes

  • a2a: echo request context on unknown-skill and unexpected-error tasks (#1597) (7b44d8d), closes #1573
  • a2a: keep integers integral in echoed context across the protobuf Struct (#1594) (bf6d966), closes #1572
  • reporting-storage: surface ownership migration errors from startup (51365c9)
  • reporting: name the cause of a reporting startup failure (a202a3c), closes #1561
  • server: mirror a raised AdcpError into the payload errors array (#1592) (cd0319b), closes #1558
  • targeting: bridge package forecast request inputs (#1598) (7cd667f)
  • tasks: echo the poll's own context on tasks/get (#1599) (f1f7593), closes #1574
  • types: inherit the generated creatives ceiling on PackageRequest (#1579) (6f13ce0)
  • types: leave unset optional fields off the wire from any parent (#1591) (1086cd9), closes #1587

Behaviour note

  • Never-null fields now omit None from every serializer (#1587 / #1591). Optional fields whose schema forbids null (the ones 9.0.0 started refusing a JSON null for) now drop an unset None from any parent model, container or RootModel, so the SDK's own JSON round-trips. One consequence: model_dump(exclude_none=False) no longer emits null for those fields. If you hash that output (ETags, digests), expect the hashes to change. A subclass field_serializer that substitutes a default for None on such a field no longer runs for None. Fields whose schema admits null are unchanged, and opaque context / ext objects keep their null values on every dump path (#1575).