fix: require account on update_media_buy, flatten preview_creative schema#2179
fix: require account on update_media_buy, flatten preview_creative schema#2179
Conversation
…hema (#2174, #2175) - Add account as required field on update_media_buy for governance and account resolution parity with create_media_buy - Replace preview_creative oneOf union with flat object using request_type discriminant and if/then conditional validation - Add validate function for preview_creative in meta-tool registry - Update training agent tool definitions to match canonical schemas - Update all doc examples with account field Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
bokelley
left a comment
There was a problem hiding this comment.
Reviewed from the @adcp/client side. Both changes look correct and we've already picked them up:
-
update_media_buy account: We updated
hasAccount: truein createAdcpServer's tool metadata. Account resolution now runs automatically on update_media_buy, matching create_media_buy. -
preview_creative flattening: Once we regenerate schemas from the updated spec,
PreviewCreativeRequestSchemabecomes az.object()and we can addpreviewCreativetoCreativeHandlersin createAdcpServer. Currently blocked on schema regen (tracked in our PR).
One minor note: in task-handlers.ts line 2566, request_type is typed as optional (request_type?: 'single' | 'batch' | 'variant') but the schema now has required: ['request_type']. The runtime validation catches it, but the TypeScript type should match. Not blocking.
The validate function for preview_creative (checking mode-specific required fields) is a nice touch — mirrors exactly what the JSON Schema if/then does, but at the application level for better error messages.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
Implements two pre-3.0 schema changes discovered during
createAdcpServerimplementation (#537):accountfield toupdate_media_buy— enables automated governance and account resolution on the most financially sensitive mutation tool, matchingcreate_media_buy's shapepreview_creativefromoneOfunion (3 variants) into a single object withrequest_typediscriminant — every tool now works withserver.tool(name, schema.shape, handler)Changes
Schema (
static/schemas/source/):update-media-buy-request.json: addedaccount(required) referencingaccount-ref.jsonpreview-creative-request.json: replacedoneOfwith flat object +allOfconditional validation (if/thenfor mode-specific required fields)Server (
server/src/):adcp-tools.ts: addedaccountvalidation onupdate_media_buy, addedvalidatefunction forpreview_creativemode-specific requirements, updated quick-reference hint texttraining-agent/task-handlers.ts: addedaccountto required array, updatedpreview_creativetool definition (addedvariantto enum, renamedcreatives→requests, added missing fields), added variant mode handlerDocs (
docs/):update_media_buy.mdx: addedaccountto parameter table, updated all 15 code examples (JS, Python, JSON)preview_creative.mdx: replaced 3 per-mode parameter tables with single flat tableCloses #2174, closes #2175.
Test plan
@adcp/clientstoryboardmedia_buy_state_machine.yamlsample_requests are updated to includeaccount(separate client PR)🤖 Generated with Claude Code