Summary
Following the great work in #1654 (named slot unions + Format.assets typed), 6.19.0 introduces a runtime-Zod regression on the per-asset-type requirements bag. In 6.18.0 the codegen produced typed Zod schemas (ImageAssetRequirementsSchema, TextAssetRequirementsSchema, …); in 6.19.0 those Zod schemas are gone, and the requirements field inside each Individual<Type>AssetSchema is now z.optional(z.any()).
The TS types for the requirement bags are unchanged (ImageAssetRequirements, TextAssetRequirements, etc. still live in core.generated.ts and are referenced correctly by Individual<Type>Asset interfaces). The regression is only on the runtime Zod side.
Evidence
From @adcp/sdk@6.19.0/dist/lib/types/schemas.generated.d.ts:
export declare const IndividualImageAssetSchema: z.ZodIntersection<
z.ZodObject<{ /* base slot fields */ }, z.core.$loose>,
z.ZodObject<{
asset_type: z.ZodLiteral<"image">;
requirements: z.ZodOptional<z.ZodAny>; // ← was ImageAssetRequirementsSchema in 6.18
}, z.core.$loose>
>;
export declare const AssetRequirementsSchema: z.ZodUnion<readonly [
z.ZodAny, z.ZodAny, z.ZodAny, z.ZodAny, z.ZodAny, z.ZodAny,
z.ZodAny, z.ZodAny, z.ZodAny, z.ZodAny, z.ZodAny, z.ZodAny
]>;
Compare 6.18, where TextAssetRequirementsSchema (and the 11 siblings) were fully typed Zod objects with min_length, max_length, character_pattern, prohibited_terms, etc., and AssetRequirementsSchema was a proper z.ZodUnion of those 12 objects.
The per-asset-type *AssetRequirementsSchema exports are also gone from 6.19 (replaced by the Individual<Type>AssetSchema slot wrappers). Downstream consumers that previously imported them — including agentic-api in scope3data/agentic-api#2366 — fail to resolve.
Impact
Likely cause
Speculation, but the slot-level intersection pattern in #1654 may have tripped the ts-to-zod codegen on the per-type requirement objects, falling back to z.any() for the requirements field. The TS types were unaffected because they don't go through the same codegen path.
Ask
Restore typed Zod for requirements in each Individual<Type>AssetSchema (and the parallel Group<Type>AssetSchema). Either by re-exporting the per-type *AssetRequirementsSchema and referencing them inside the slot schemas, or by inlining the requirement shape directly in each slot schema's intersection.
Cross-link: AdCP protocol context adcontextprotocol/adcp#3305 (Creative Formats v2 RFC, validate_input scaffolding).
Versions
@adcp/sdk@6.19.0 exhibits the regression. @adcp/sdk@6.18.0 does not — those typed schemas existed there.
Summary
Following the great work in #1654 (named slot unions +
Format.assetstyped), 6.19.0 introduces a runtime-Zod regression on the per-asset-typerequirementsbag. In 6.18.0 the codegen produced typed Zod schemas (ImageAssetRequirementsSchema,TextAssetRequirementsSchema, …); in 6.19.0 those Zod schemas are gone, and therequirementsfield inside eachIndividual<Type>AssetSchemais nowz.optional(z.any()).The TS types for the requirement bags are unchanged (
ImageAssetRequirements,TextAssetRequirements, etc. still live incore.generated.tsand are referenced correctly byIndividual<Type>Assetinterfaces). The regression is only on the runtime Zod side.Evidence
From
@adcp/sdk@6.19.0/dist/lib/types/schemas.generated.d.ts:Compare 6.18, where
TextAssetRequirementsSchema(and the 11 siblings) were fully typed Zod objects withmin_length,max_length,character_pattern,prohibited_terms, etc., andAssetRequirementsSchemawas a properz.ZodUnionof those 12 objects.The per-asset-type
*AssetRequirementsSchemaexports are also gone from 6.19 (replaced by theIndividual<Type>AssetSchemaslot wrappers). Downstream consumers that previously imported them — including agentic-api in scope3data/agentic-api#2366 — fail to resolve.Impact
requirementsat runtime.{asset_type: "text", requirements: { max_animation_duration_ms: 5000 }}parses cleanly even thoughmax_animation_duration_msis an image-only field.AssetRequirementsSchemais unusable as a standalone validator — it's structurallyz.any().Likely cause
Speculation, but the slot-level intersection pattern in #1654 may have tripped the
ts-to-zodcodegen on the per-type requirement objects, falling back toz.any()for therequirementsfield. The TS types were unaffected because they don't go through the same codegen path.Ask
Restore typed Zod for
requirementsin eachIndividual<Type>AssetSchema(and the parallelGroup<Type>AssetSchema). Either by re-exporting the per-type*AssetRequirementsSchemaand referencing them inside the slot schemas, or by inlining the requirement shape directly in each slot schema's intersection.Cross-link: AdCP protocol context adcontextprotocol/adcp#3305 (Creative Formats v2 RFC, validate_input scaffolding).
Versions
@adcp/sdk@6.19.0exhibits the regression.@adcp/sdk@6.18.0does not — those typed schemas existed there.