diff --git a/schemas/cache/a2ui/bound-value.json b/schemas/cache/3.0/a2ui/bound-value.json similarity index 100% rename from schemas/cache/a2ui/bound-value.json rename to schemas/cache/3.0/a2ui/bound-value.json diff --git a/schemas/cache/a2ui/component.json b/schemas/cache/3.0/a2ui/component.json similarity index 100% rename from schemas/cache/a2ui/component.json rename to schemas/cache/3.0/a2ui/component.json diff --git a/schemas/cache/a2ui/si-catalog.json b/schemas/cache/3.0/a2ui/si-catalog.json similarity index 100% rename from schemas/cache/a2ui/si-catalog.json rename to schemas/cache/3.0/a2ui/si-catalog.json diff --git a/schemas/cache/a2ui/surface.json b/schemas/cache/3.0/a2ui/surface.json similarity index 100% rename from schemas/cache/a2ui/surface.json rename to schemas/cache/3.0/a2ui/surface.json diff --git a/schemas/cache/a2ui/user-action.json b/schemas/cache/3.0/a2ui/user-action.json similarity index 100% rename from schemas/cache/a2ui/user-action.json rename to schemas/cache/3.0/a2ui/user-action.json diff --git a/schemas/cache/account/get-account-financials-request.json b/schemas/cache/3.0/account/get-account-financials-request.json similarity index 100% rename from schemas/cache/account/get-account-financials-request.json rename to schemas/cache/3.0/account/get-account-financials-request.json diff --git a/schemas/cache/account/get-account-financials-response.json b/schemas/cache/3.0/account/get-account-financials-response.json similarity index 100% rename from schemas/cache/account/get-account-financials-response.json rename to schemas/cache/3.0/account/get-account-financials-response.json diff --git a/schemas/cache/account/list-accounts-request.json b/schemas/cache/3.0/account/list-accounts-request.json similarity index 100% rename from schemas/cache/account/list-accounts-request.json rename to schemas/cache/3.0/account/list-accounts-request.json diff --git a/schemas/cache/account/list-accounts-response.json b/schemas/cache/3.0/account/list-accounts-response.json similarity index 100% rename from schemas/cache/account/list-accounts-response.json rename to schemas/cache/3.0/account/list-accounts-response.json diff --git a/schemas/cache/account/report-usage-request.json b/schemas/cache/3.0/account/report-usage-request.json similarity index 100% rename from schemas/cache/account/report-usage-request.json rename to schemas/cache/3.0/account/report-usage-request.json diff --git a/schemas/cache/account/report-usage-response.json b/schemas/cache/3.0/account/report-usage-response.json similarity index 100% rename from schemas/cache/account/report-usage-response.json rename to schemas/cache/3.0/account/report-usage-response.json diff --git a/schemas/cache/account/sync-accounts-request.json b/schemas/cache/3.0/account/sync-accounts-request.json similarity index 100% rename from schemas/cache/account/sync-accounts-request.json rename to schemas/cache/3.0/account/sync-accounts-request.json diff --git a/schemas/cache/account/sync-accounts-response.json b/schemas/cache/3.0/account/sync-accounts-response.json similarity index 100% rename from schemas/cache/account/sync-accounts-response.json rename to schemas/cache/3.0/account/sync-accounts-response.json diff --git a/schemas/cache/account/sync-governance-request.json b/schemas/cache/3.0/account/sync-governance-request.json similarity index 100% rename from schemas/cache/account/sync-governance-request.json rename to schemas/cache/3.0/account/sync-governance-request.json diff --git a/schemas/cache/account/sync-governance-response.json b/schemas/cache/3.0/account/sync-governance-response.json similarity index 100% rename from schemas/cache/account/sync-governance-response.json rename to schemas/cache/3.0/account/sync-governance-response.json diff --git a/schemas/cache/adagents.json b/schemas/cache/3.0/adagents.json similarity index 100% rename from schemas/cache/adagents.json rename to schemas/cache/3.0/adagents.json diff --git a/schemas/cache/brand.json b/schemas/cache/3.0/brand.json similarity index 100% rename from schemas/cache/brand.json rename to schemas/cache/3.0/brand.json diff --git a/schemas/cache/brand/acquire-rights-request.json b/schemas/cache/3.0/brand/acquire-rights-request.json similarity index 100% rename from schemas/cache/brand/acquire-rights-request.json rename to schemas/cache/3.0/brand/acquire-rights-request.json diff --git a/schemas/cache/brand/acquire-rights-response.json b/schemas/cache/3.0/brand/acquire-rights-response.json similarity index 100% rename from schemas/cache/brand/acquire-rights-response.json rename to schemas/cache/3.0/brand/acquire-rights-response.json diff --git a/schemas/cache/brand/creative-approval-request.json b/schemas/cache/3.0/brand/creative-approval-request.json similarity index 100% rename from schemas/cache/brand/creative-approval-request.json rename to schemas/cache/3.0/brand/creative-approval-request.json diff --git a/schemas/cache/brand/creative-approval-response.json b/schemas/cache/3.0/brand/creative-approval-response.json similarity index 100% rename from schemas/cache/brand/creative-approval-response.json rename to schemas/cache/3.0/brand/creative-approval-response.json diff --git a/schemas/cache/brand/get-brand-identity-request.json b/schemas/cache/3.0/brand/get-brand-identity-request.json similarity index 100% rename from schemas/cache/brand/get-brand-identity-request.json rename to schemas/cache/3.0/brand/get-brand-identity-request.json diff --git a/schemas/cache/brand/get-brand-identity-response.json b/schemas/cache/3.0/brand/get-brand-identity-response.json similarity index 100% rename from schemas/cache/brand/get-brand-identity-response.json rename to schemas/cache/3.0/brand/get-brand-identity-response.json diff --git a/schemas/cache/brand/get-rights-request.json b/schemas/cache/3.0/brand/get-rights-request.json similarity index 100% rename from schemas/cache/brand/get-rights-request.json rename to schemas/cache/3.0/brand/get-rights-request.json diff --git a/schemas/cache/brand/get-rights-response.json b/schemas/cache/3.0/brand/get-rights-response.json similarity index 100% rename from schemas/cache/brand/get-rights-response.json rename to schemas/cache/3.0/brand/get-rights-response.json diff --git a/schemas/cache/brand/revocation-notification.json b/schemas/cache/3.0/brand/revocation-notification.json similarity index 100% rename from schemas/cache/brand/revocation-notification.json rename to schemas/cache/3.0/brand/revocation-notification.json diff --git a/schemas/cache/brand/rights-pricing-option.json b/schemas/cache/3.0/brand/rights-pricing-option.json similarity index 100% rename from schemas/cache/brand/rights-pricing-option.json rename to schemas/cache/3.0/brand/rights-pricing-option.json diff --git a/schemas/cache/brand/rights-terms.json b/schemas/cache/3.0/brand/rights-terms.json similarity index 100% rename from schemas/cache/brand/rights-terms.json rename to schemas/cache/3.0/brand/rights-terms.json diff --git a/schemas/cache/brand/update-rights-request.json b/schemas/cache/3.0/brand/update-rights-request.json similarity index 100% rename from schemas/cache/brand/update-rights-request.json rename to schemas/cache/3.0/brand/update-rights-request.json diff --git a/schemas/cache/brand/update-rights-response.json b/schemas/cache/3.0/brand/update-rights-response.json similarity index 100% rename from schemas/cache/brand/update-rights-response.json rename to schemas/cache/3.0/brand/update-rights-response.json diff --git a/schemas/cache/bundled/content-standards/calibrate-content-request.json b/schemas/cache/3.0/bundled/content-standards/calibrate-content-request.json similarity index 100% rename from schemas/cache/bundled/content-standards/calibrate-content-request.json rename to schemas/cache/3.0/bundled/content-standards/calibrate-content-request.json diff --git a/schemas/cache/bundled/content-standards/calibrate-content-response.json b/schemas/cache/3.0/bundled/content-standards/calibrate-content-response.json similarity index 100% rename from schemas/cache/bundled/content-standards/calibrate-content-response.json rename to schemas/cache/3.0/bundled/content-standards/calibrate-content-response.json diff --git a/schemas/cache/bundled/content-standards/create-content-standards-request.json b/schemas/cache/3.0/bundled/content-standards/create-content-standards-request.json similarity index 100% rename from schemas/cache/bundled/content-standards/create-content-standards-request.json rename to schemas/cache/3.0/bundled/content-standards/create-content-standards-request.json diff --git a/schemas/cache/bundled/content-standards/create-content-standards-response.json b/schemas/cache/3.0/bundled/content-standards/create-content-standards-response.json similarity index 100% rename from schemas/cache/bundled/content-standards/create-content-standards-response.json rename to schemas/cache/3.0/bundled/content-standards/create-content-standards-response.json diff --git a/schemas/cache/bundled/content-standards/get-content-standards-request.json b/schemas/cache/3.0/bundled/content-standards/get-content-standards-request.json similarity index 100% rename from schemas/cache/bundled/content-standards/get-content-standards-request.json rename to schemas/cache/3.0/bundled/content-standards/get-content-standards-request.json diff --git a/schemas/cache/bundled/content-standards/get-content-standards-response.json b/schemas/cache/3.0/bundled/content-standards/get-content-standards-response.json similarity index 100% rename from schemas/cache/bundled/content-standards/get-content-standards-response.json rename to schemas/cache/3.0/bundled/content-standards/get-content-standards-response.json diff --git a/schemas/cache/bundled/content-standards/get-media-buy-artifacts-request.json b/schemas/cache/3.0/bundled/content-standards/get-media-buy-artifacts-request.json similarity index 100% rename from schemas/cache/bundled/content-standards/get-media-buy-artifacts-request.json rename to schemas/cache/3.0/bundled/content-standards/get-media-buy-artifacts-request.json diff --git a/schemas/cache/bundled/content-standards/get-media-buy-artifacts-response.json b/schemas/cache/3.0/bundled/content-standards/get-media-buy-artifacts-response.json similarity index 100% rename from schemas/cache/bundled/content-standards/get-media-buy-artifacts-response.json rename to schemas/cache/3.0/bundled/content-standards/get-media-buy-artifacts-response.json diff --git a/schemas/cache/bundled/content-standards/list-content-standards-request.json b/schemas/cache/3.0/bundled/content-standards/list-content-standards-request.json similarity index 100% rename from schemas/cache/bundled/content-standards/list-content-standards-request.json rename to schemas/cache/3.0/bundled/content-standards/list-content-standards-request.json diff --git a/schemas/cache/bundled/content-standards/list-content-standards-response.json b/schemas/cache/3.0/bundled/content-standards/list-content-standards-response.json similarity index 100% rename from schemas/cache/bundled/content-standards/list-content-standards-response.json rename to schemas/cache/3.0/bundled/content-standards/list-content-standards-response.json diff --git a/schemas/cache/bundled/content-standards/update-content-standards-request.json b/schemas/cache/3.0/bundled/content-standards/update-content-standards-request.json similarity index 100% rename from schemas/cache/bundled/content-standards/update-content-standards-request.json rename to schemas/cache/3.0/bundled/content-standards/update-content-standards-request.json diff --git a/schemas/cache/bundled/content-standards/update-content-standards-response.json b/schemas/cache/3.0/bundled/content-standards/update-content-standards-response.json similarity index 100% rename from schemas/cache/bundled/content-standards/update-content-standards-response.json rename to schemas/cache/3.0/bundled/content-standards/update-content-standards-response.json diff --git a/schemas/cache/bundled/content-standards/validate-content-delivery-request.json b/schemas/cache/3.0/bundled/content-standards/validate-content-delivery-request.json similarity index 100% rename from schemas/cache/bundled/content-standards/validate-content-delivery-request.json rename to schemas/cache/3.0/bundled/content-standards/validate-content-delivery-request.json diff --git a/schemas/cache/bundled/content-standards/validate-content-delivery-response.json b/schemas/cache/3.0/bundled/content-standards/validate-content-delivery-response.json similarity index 100% rename from schemas/cache/bundled/content-standards/validate-content-delivery-response.json rename to schemas/cache/3.0/bundled/content-standards/validate-content-delivery-response.json diff --git a/schemas/cache/bundled/core/tasks-get-request.json b/schemas/cache/3.0/bundled/core/tasks-get-request.json similarity index 100% rename from schemas/cache/bundled/core/tasks-get-request.json rename to schemas/cache/3.0/bundled/core/tasks-get-request.json diff --git a/schemas/cache/bundled/core/tasks-get-response.json b/schemas/cache/3.0/bundled/core/tasks-get-response.json similarity index 100% rename from schemas/cache/bundled/core/tasks-get-response.json rename to schemas/cache/3.0/bundled/core/tasks-get-response.json diff --git a/schemas/cache/bundled/core/tasks-list-request.json b/schemas/cache/3.0/bundled/core/tasks-list-request.json similarity index 100% rename from schemas/cache/bundled/core/tasks-list-request.json rename to schemas/cache/3.0/bundled/core/tasks-list-request.json diff --git a/schemas/cache/bundled/core/tasks-list-response.json b/schemas/cache/3.0/bundled/core/tasks-list-response.json similarity index 100% rename from schemas/cache/bundled/core/tasks-list-response.json rename to schemas/cache/3.0/bundled/core/tasks-list-response.json diff --git a/schemas/cache/bundled/creative/get-creative-delivery-request.json b/schemas/cache/3.0/bundled/creative/get-creative-delivery-request.json similarity index 100% rename from schemas/cache/bundled/creative/get-creative-delivery-request.json rename to schemas/cache/3.0/bundled/creative/get-creative-delivery-request.json diff --git a/schemas/cache/bundled/creative/get-creative-delivery-response.json b/schemas/cache/3.0/bundled/creative/get-creative-delivery-response.json similarity index 100% rename from schemas/cache/bundled/creative/get-creative-delivery-response.json rename to schemas/cache/3.0/bundled/creative/get-creative-delivery-response.json diff --git a/schemas/cache/bundled/creative/get-creative-features-request.json b/schemas/cache/3.0/bundled/creative/get-creative-features-request.json similarity index 100% rename from schemas/cache/bundled/creative/get-creative-features-request.json rename to schemas/cache/3.0/bundled/creative/get-creative-features-request.json diff --git a/schemas/cache/bundled/creative/get-creative-features-response.json b/schemas/cache/3.0/bundled/creative/get-creative-features-response.json similarity index 100% rename from schemas/cache/bundled/creative/get-creative-features-response.json rename to schemas/cache/3.0/bundled/creative/get-creative-features-response.json diff --git a/schemas/cache/bundled/creative/list-creative-formats-request.json b/schemas/cache/3.0/bundled/creative/list-creative-formats-request.json similarity index 100% rename from schemas/cache/bundled/creative/list-creative-formats-request.json rename to schemas/cache/3.0/bundled/creative/list-creative-formats-request.json diff --git a/schemas/cache/bundled/creative/list-creative-formats-response.json b/schemas/cache/3.0/bundled/creative/list-creative-formats-response.json similarity index 100% rename from schemas/cache/bundled/creative/list-creative-formats-response.json rename to schemas/cache/3.0/bundled/creative/list-creative-formats-response.json diff --git a/schemas/cache/bundled/creative/list-creatives-request.json b/schemas/cache/3.0/bundled/creative/list-creatives-request.json similarity index 100% rename from schemas/cache/bundled/creative/list-creatives-request.json rename to schemas/cache/3.0/bundled/creative/list-creatives-request.json diff --git a/schemas/cache/bundled/creative/list-creatives-response.json b/schemas/cache/3.0/bundled/creative/list-creatives-response.json similarity index 100% rename from schemas/cache/bundled/creative/list-creatives-response.json rename to schemas/cache/3.0/bundled/creative/list-creatives-response.json diff --git a/schemas/cache/bundled/creative/preview-creative-request.json b/schemas/cache/3.0/bundled/creative/preview-creative-request.json similarity index 100% rename from schemas/cache/bundled/creative/preview-creative-request.json rename to schemas/cache/3.0/bundled/creative/preview-creative-request.json diff --git a/schemas/cache/bundled/creative/preview-creative-response.json b/schemas/cache/3.0/bundled/creative/preview-creative-response.json similarity index 100% rename from schemas/cache/bundled/creative/preview-creative-response.json rename to schemas/cache/3.0/bundled/creative/preview-creative-response.json diff --git a/schemas/cache/bundled/creative/sync-creatives-request.json b/schemas/cache/3.0/bundled/creative/sync-creatives-request.json similarity index 100% rename from schemas/cache/bundled/creative/sync-creatives-request.json rename to schemas/cache/3.0/bundled/creative/sync-creatives-request.json diff --git a/schemas/cache/bundled/creative/sync-creatives-response.json b/schemas/cache/3.0/bundled/creative/sync-creatives-response.json similarity index 100% rename from schemas/cache/bundled/creative/sync-creatives-response.json rename to schemas/cache/3.0/bundled/creative/sync-creatives-response.json diff --git a/schemas/cache/bundled/media-buy/build-creative-request.json b/schemas/cache/3.0/bundled/media-buy/build-creative-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/build-creative-request.json rename to schemas/cache/3.0/bundled/media-buy/build-creative-request.json diff --git a/schemas/cache/bundled/media-buy/build-creative-response.json b/schemas/cache/3.0/bundled/media-buy/build-creative-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/build-creative-response.json rename to schemas/cache/3.0/bundled/media-buy/build-creative-response.json diff --git a/schemas/cache/bundled/media-buy/create-media-buy-request.json b/schemas/cache/3.0/bundled/media-buy/create-media-buy-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/create-media-buy-request.json rename to schemas/cache/3.0/bundled/media-buy/create-media-buy-request.json diff --git a/schemas/cache/bundled/media-buy/create-media-buy-response.json b/schemas/cache/3.0/bundled/media-buy/create-media-buy-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/create-media-buy-response.json rename to schemas/cache/3.0/bundled/media-buy/create-media-buy-response.json diff --git a/schemas/cache/bundled/media-buy/get-media-buy-delivery-request.json b/schemas/cache/3.0/bundled/media-buy/get-media-buy-delivery-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/get-media-buy-delivery-request.json rename to schemas/cache/3.0/bundled/media-buy/get-media-buy-delivery-request.json diff --git a/schemas/cache/bundled/media-buy/get-media-buy-delivery-response.json b/schemas/cache/3.0/bundled/media-buy/get-media-buy-delivery-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/get-media-buy-delivery-response.json rename to schemas/cache/3.0/bundled/media-buy/get-media-buy-delivery-response.json diff --git a/schemas/cache/bundled/media-buy/get-media-buys-request.json b/schemas/cache/3.0/bundled/media-buy/get-media-buys-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/get-media-buys-request.json rename to schemas/cache/3.0/bundled/media-buy/get-media-buys-request.json diff --git a/schemas/cache/bundled/media-buy/get-media-buys-response.json b/schemas/cache/3.0/bundled/media-buy/get-media-buys-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/get-media-buys-response.json rename to schemas/cache/3.0/bundled/media-buy/get-media-buys-response.json diff --git a/schemas/cache/bundled/media-buy/get-products-request.json b/schemas/cache/3.0/bundled/media-buy/get-products-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/get-products-request.json rename to schemas/cache/3.0/bundled/media-buy/get-products-request.json diff --git a/schemas/cache/bundled/media-buy/get-products-response.json b/schemas/cache/3.0/bundled/media-buy/get-products-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/get-products-response.json rename to schemas/cache/3.0/bundled/media-buy/get-products-response.json diff --git a/schemas/cache/bundled/media-buy/list-creative-formats-request.json b/schemas/cache/3.0/bundled/media-buy/list-creative-formats-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/list-creative-formats-request.json rename to schemas/cache/3.0/bundled/media-buy/list-creative-formats-request.json diff --git a/schemas/cache/bundled/media-buy/list-creative-formats-response.json b/schemas/cache/3.0/bundled/media-buy/list-creative-formats-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/list-creative-formats-response.json rename to schemas/cache/3.0/bundled/media-buy/list-creative-formats-response.json diff --git a/schemas/cache/bundled/media-buy/log-event-request.json b/schemas/cache/3.0/bundled/media-buy/log-event-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/log-event-request.json rename to schemas/cache/3.0/bundled/media-buy/log-event-request.json diff --git a/schemas/cache/bundled/media-buy/log-event-response.json b/schemas/cache/3.0/bundled/media-buy/log-event-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/log-event-response.json rename to schemas/cache/3.0/bundled/media-buy/log-event-response.json diff --git a/schemas/cache/bundled/media-buy/package-request.json b/schemas/cache/3.0/bundled/media-buy/package-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/package-request.json rename to schemas/cache/3.0/bundled/media-buy/package-request.json diff --git a/schemas/cache/bundled/media-buy/provide-performance-feedback-request.json b/schemas/cache/3.0/bundled/media-buy/provide-performance-feedback-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/provide-performance-feedback-request.json rename to schemas/cache/3.0/bundled/media-buy/provide-performance-feedback-request.json diff --git a/schemas/cache/bundled/media-buy/provide-performance-feedback-response.json b/schemas/cache/3.0/bundled/media-buy/provide-performance-feedback-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/provide-performance-feedback-response.json rename to schemas/cache/3.0/bundled/media-buy/provide-performance-feedback-response.json diff --git a/schemas/cache/bundled/media-buy/sync-audiences-request.json b/schemas/cache/3.0/bundled/media-buy/sync-audiences-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/sync-audiences-request.json rename to schemas/cache/3.0/bundled/media-buy/sync-audiences-request.json diff --git a/schemas/cache/bundled/media-buy/sync-audiences-response.json b/schemas/cache/3.0/bundled/media-buy/sync-audiences-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/sync-audiences-response.json rename to schemas/cache/3.0/bundled/media-buy/sync-audiences-response.json diff --git a/schemas/cache/bundled/media-buy/sync-catalogs-request.json b/schemas/cache/3.0/bundled/media-buy/sync-catalogs-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/sync-catalogs-request.json rename to schemas/cache/3.0/bundled/media-buy/sync-catalogs-request.json diff --git a/schemas/cache/bundled/media-buy/sync-catalogs-response.json b/schemas/cache/3.0/bundled/media-buy/sync-catalogs-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/sync-catalogs-response.json rename to schemas/cache/3.0/bundled/media-buy/sync-catalogs-response.json diff --git a/schemas/cache/bundled/media-buy/sync-event-sources-request.json b/schemas/cache/3.0/bundled/media-buy/sync-event-sources-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/sync-event-sources-request.json rename to schemas/cache/3.0/bundled/media-buy/sync-event-sources-request.json diff --git a/schemas/cache/bundled/media-buy/sync-event-sources-response.json b/schemas/cache/3.0/bundled/media-buy/sync-event-sources-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/sync-event-sources-response.json rename to schemas/cache/3.0/bundled/media-buy/sync-event-sources-response.json diff --git a/schemas/cache/bundled/media-buy/update-media-buy-request.json b/schemas/cache/3.0/bundled/media-buy/update-media-buy-request.json similarity index 100% rename from schemas/cache/bundled/media-buy/update-media-buy-request.json rename to schemas/cache/3.0/bundled/media-buy/update-media-buy-request.json diff --git a/schemas/cache/bundled/media-buy/update-media-buy-response.json b/schemas/cache/3.0/bundled/media-buy/update-media-buy-response.json similarity index 100% rename from schemas/cache/bundled/media-buy/update-media-buy-response.json rename to schemas/cache/3.0/bundled/media-buy/update-media-buy-response.json diff --git a/schemas/cache/bundled/property/create-property-list-request.json b/schemas/cache/3.0/bundled/property/create-property-list-request.json similarity index 100% rename from schemas/cache/bundled/property/create-property-list-request.json rename to schemas/cache/3.0/bundled/property/create-property-list-request.json diff --git a/schemas/cache/bundled/property/create-property-list-response.json b/schemas/cache/3.0/bundled/property/create-property-list-response.json similarity index 100% rename from schemas/cache/bundled/property/create-property-list-response.json rename to schemas/cache/3.0/bundled/property/create-property-list-response.json diff --git a/schemas/cache/bundled/property/delete-property-list-request.json b/schemas/cache/3.0/bundled/property/delete-property-list-request.json similarity index 100% rename from schemas/cache/bundled/property/delete-property-list-request.json rename to schemas/cache/3.0/bundled/property/delete-property-list-request.json diff --git a/schemas/cache/bundled/property/delete-property-list-response.json b/schemas/cache/3.0/bundled/property/delete-property-list-response.json similarity index 100% rename from schemas/cache/bundled/property/delete-property-list-response.json rename to schemas/cache/3.0/bundled/property/delete-property-list-response.json diff --git a/schemas/cache/bundled/property/get-property-list-request.json b/schemas/cache/3.0/bundled/property/get-property-list-request.json similarity index 100% rename from schemas/cache/bundled/property/get-property-list-request.json rename to schemas/cache/3.0/bundled/property/get-property-list-request.json diff --git a/schemas/cache/bundled/property/get-property-list-response.json b/schemas/cache/3.0/bundled/property/get-property-list-response.json similarity index 100% rename from schemas/cache/bundled/property/get-property-list-response.json rename to schemas/cache/3.0/bundled/property/get-property-list-response.json diff --git a/schemas/cache/bundled/property/list-property-lists-request.json b/schemas/cache/3.0/bundled/property/list-property-lists-request.json similarity index 100% rename from schemas/cache/bundled/property/list-property-lists-request.json rename to schemas/cache/3.0/bundled/property/list-property-lists-request.json diff --git a/schemas/cache/bundled/property/list-property-lists-response.json b/schemas/cache/3.0/bundled/property/list-property-lists-response.json similarity index 100% rename from schemas/cache/bundled/property/list-property-lists-response.json rename to schemas/cache/3.0/bundled/property/list-property-lists-response.json diff --git a/schemas/cache/bundled/property/update-property-list-request.json b/schemas/cache/3.0/bundled/property/update-property-list-request.json similarity index 100% rename from schemas/cache/bundled/property/update-property-list-request.json rename to schemas/cache/3.0/bundled/property/update-property-list-request.json diff --git a/schemas/cache/bundled/property/update-property-list-response.json b/schemas/cache/3.0/bundled/property/update-property-list-response.json similarity index 100% rename from schemas/cache/bundled/property/update-property-list-response.json rename to schemas/cache/3.0/bundled/property/update-property-list-response.json diff --git a/schemas/cache/bundled/property/validate-property-delivery-request.json b/schemas/cache/3.0/bundled/property/validate-property-delivery-request.json similarity index 100% rename from schemas/cache/bundled/property/validate-property-delivery-request.json rename to schemas/cache/3.0/bundled/property/validate-property-delivery-request.json diff --git a/schemas/cache/bundled/property/validate-property-delivery-response.json b/schemas/cache/3.0/bundled/property/validate-property-delivery-response.json similarity index 100% rename from schemas/cache/bundled/property/validate-property-delivery-response.json rename to schemas/cache/3.0/bundled/property/validate-property-delivery-response.json diff --git a/schemas/cache/bundled/protocol/get-adcp-capabilities-request.json b/schemas/cache/3.0/bundled/protocol/get-adcp-capabilities-request.json similarity index 100% rename from schemas/cache/bundled/protocol/get-adcp-capabilities-request.json rename to schemas/cache/3.0/bundled/protocol/get-adcp-capabilities-request.json diff --git a/schemas/cache/bundled/protocol/get-adcp-capabilities-response.json b/schemas/cache/3.0/bundled/protocol/get-adcp-capabilities-response.json similarity index 100% rename from schemas/cache/bundled/protocol/get-adcp-capabilities-response.json rename to schemas/cache/3.0/bundled/protocol/get-adcp-capabilities-response.json diff --git a/schemas/cache/bundled/signals/activate-signal-request.json b/schemas/cache/3.0/bundled/signals/activate-signal-request.json similarity index 100% rename from schemas/cache/bundled/signals/activate-signal-request.json rename to schemas/cache/3.0/bundled/signals/activate-signal-request.json diff --git a/schemas/cache/bundled/signals/activate-signal-response.json b/schemas/cache/3.0/bundled/signals/activate-signal-response.json similarity index 100% rename from schemas/cache/bundled/signals/activate-signal-response.json rename to schemas/cache/3.0/bundled/signals/activate-signal-response.json diff --git a/schemas/cache/bundled/signals/get-signals-request.json b/schemas/cache/3.0/bundled/signals/get-signals-request.json similarity index 100% rename from schemas/cache/bundled/signals/get-signals-request.json rename to schemas/cache/3.0/bundled/signals/get-signals-request.json diff --git a/schemas/cache/bundled/signals/get-signals-response.json b/schemas/cache/3.0/bundled/signals/get-signals-response.json similarity index 100% rename from schemas/cache/bundled/signals/get-signals-response.json rename to schemas/cache/3.0/bundled/signals/get-signals-response.json diff --git a/schemas/cache/bundled/sponsored-intelligence/si-get-offering-request.json b/schemas/cache/3.0/bundled/sponsored-intelligence/si-get-offering-request.json similarity index 100% rename from schemas/cache/bundled/sponsored-intelligence/si-get-offering-request.json rename to schemas/cache/3.0/bundled/sponsored-intelligence/si-get-offering-request.json diff --git a/schemas/cache/bundled/sponsored-intelligence/si-get-offering-response.json b/schemas/cache/3.0/bundled/sponsored-intelligence/si-get-offering-response.json similarity index 100% rename from schemas/cache/bundled/sponsored-intelligence/si-get-offering-response.json rename to schemas/cache/3.0/bundled/sponsored-intelligence/si-get-offering-response.json diff --git a/schemas/cache/bundled/sponsored-intelligence/si-initiate-session-request.json b/schemas/cache/3.0/bundled/sponsored-intelligence/si-initiate-session-request.json similarity index 100% rename from schemas/cache/bundled/sponsored-intelligence/si-initiate-session-request.json rename to schemas/cache/3.0/bundled/sponsored-intelligence/si-initiate-session-request.json diff --git a/schemas/cache/bundled/sponsored-intelligence/si-initiate-session-response.json b/schemas/cache/3.0/bundled/sponsored-intelligence/si-initiate-session-response.json similarity index 100% rename from schemas/cache/bundled/sponsored-intelligence/si-initiate-session-response.json rename to schemas/cache/3.0/bundled/sponsored-intelligence/si-initiate-session-response.json diff --git a/schemas/cache/bundled/sponsored-intelligence/si-send-message-request.json b/schemas/cache/3.0/bundled/sponsored-intelligence/si-send-message-request.json similarity index 100% rename from schemas/cache/bundled/sponsored-intelligence/si-send-message-request.json rename to schemas/cache/3.0/bundled/sponsored-intelligence/si-send-message-request.json diff --git a/schemas/cache/bundled/sponsored-intelligence/si-send-message-response.json b/schemas/cache/3.0/bundled/sponsored-intelligence/si-send-message-response.json similarity index 100% rename from schemas/cache/bundled/sponsored-intelligence/si-send-message-response.json rename to schemas/cache/3.0/bundled/sponsored-intelligence/si-send-message-response.json diff --git a/schemas/cache/bundled/sponsored-intelligence/si-terminate-session-request.json b/schemas/cache/3.0/bundled/sponsored-intelligence/si-terminate-session-request.json similarity index 100% rename from schemas/cache/bundled/sponsored-intelligence/si-terminate-session-request.json rename to schemas/cache/3.0/bundled/sponsored-intelligence/si-terminate-session-request.json diff --git a/schemas/cache/bundled/sponsored-intelligence/si-terminate-session-response.json b/schemas/cache/3.0/bundled/sponsored-intelligence/si-terminate-session-response.json similarity index 100% rename from schemas/cache/bundled/sponsored-intelligence/si-terminate-session-response.json rename to schemas/cache/3.0/bundled/sponsored-intelligence/si-terminate-session-response.json diff --git a/schemas/cache/collection/base-collection-source.json b/schemas/cache/3.0/collection/base-collection-source.json similarity index 100% rename from schemas/cache/collection/base-collection-source.json rename to schemas/cache/3.0/collection/base-collection-source.json diff --git a/schemas/cache/collection/collection-list-changed-webhook.json b/schemas/cache/3.0/collection/collection-list-changed-webhook.json similarity index 100% rename from schemas/cache/collection/collection-list-changed-webhook.json rename to schemas/cache/3.0/collection/collection-list-changed-webhook.json diff --git a/schemas/cache/collection/collection-list-filters.json b/schemas/cache/3.0/collection/collection-list-filters.json similarity index 100% rename from schemas/cache/collection/collection-list-filters.json rename to schemas/cache/3.0/collection/collection-list-filters.json diff --git a/schemas/cache/collection/collection-list.json b/schemas/cache/3.0/collection/collection-list.json similarity index 100% rename from schemas/cache/collection/collection-list.json rename to schemas/cache/3.0/collection/collection-list.json diff --git a/schemas/cache/collection/create-collection-list-request.json b/schemas/cache/3.0/collection/create-collection-list-request.json similarity index 100% rename from schemas/cache/collection/create-collection-list-request.json rename to schemas/cache/3.0/collection/create-collection-list-request.json diff --git a/schemas/cache/collection/create-collection-list-response.json b/schemas/cache/3.0/collection/create-collection-list-response.json similarity index 100% rename from schemas/cache/collection/create-collection-list-response.json rename to schemas/cache/3.0/collection/create-collection-list-response.json diff --git a/schemas/cache/collection/delete-collection-list-request.json b/schemas/cache/3.0/collection/delete-collection-list-request.json similarity index 100% rename from schemas/cache/collection/delete-collection-list-request.json rename to schemas/cache/3.0/collection/delete-collection-list-request.json diff --git a/schemas/cache/collection/delete-collection-list-response.json b/schemas/cache/3.0/collection/delete-collection-list-response.json similarity index 100% rename from schemas/cache/collection/delete-collection-list-response.json rename to schemas/cache/3.0/collection/delete-collection-list-response.json diff --git a/schemas/cache/collection/get-collection-list-request.json b/schemas/cache/3.0/collection/get-collection-list-request.json similarity index 100% rename from schemas/cache/collection/get-collection-list-request.json rename to schemas/cache/3.0/collection/get-collection-list-request.json diff --git a/schemas/cache/collection/get-collection-list-response.json b/schemas/cache/3.0/collection/get-collection-list-response.json similarity index 100% rename from schemas/cache/collection/get-collection-list-response.json rename to schemas/cache/3.0/collection/get-collection-list-response.json diff --git a/schemas/cache/collection/list-collection-lists-request.json b/schemas/cache/3.0/collection/list-collection-lists-request.json similarity index 100% rename from schemas/cache/collection/list-collection-lists-request.json rename to schemas/cache/3.0/collection/list-collection-lists-request.json diff --git a/schemas/cache/collection/list-collection-lists-response.json b/schemas/cache/3.0/collection/list-collection-lists-response.json similarity index 100% rename from schemas/cache/collection/list-collection-lists-response.json rename to schemas/cache/3.0/collection/list-collection-lists-response.json diff --git a/schemas/cache/collection/update-collection-list-request.json b/schemas/cache/3.0/collection/update-collection-list-request.json similarity index 100% rename from schemas/cache/collection/update-collection-list-request.json rename to schemas/cache/3.0/collection/update-collection-list-request.json diff --git a/schemas/cache/collection/update-collection-list-response.json b/schemas/cache/3.0/collection/update-collection-list-response.json similarity index 100% rename from schemas/cache/collection/update-collection-list-response.json rename to schemas/cache/3.0/collection/update-collection-list-response.json diff --git a/schemas/cache/compliance/comply-test-controller-request.json b/schemas/cache/3.0/compliance/comply-test-controller-request.json similarity index 100% rename from schemas/cache/compliance/comply-test-controller-request.json rename to schemas/cache/3.0/compliance/comply-test-controller-request.json diff --git a/schemas/cache/compliance/comply-test-controller-response.json b/schemas/cache/3.0/compliance/comply-test-controller-response.json similarity index 100% rename from schemas/cache/compliance/comply-test-controller-response.json rename to schemas/cache/3.0/compliance/comply-test-controller-response.json diff --git a/schemas/cache/content-standards/artifact-webhook-payload.json b/schemas/cache/3.0/content-standards/artifact-webhook-payload.json similarity index 100% rename from schemas/cache/content-standards/artifact-webhook-payload.json rename to schemas/cache/3.0/content-standards/artifact-webhook-payload.json diff --git a/schemas/cache/content-standards/artifact.json b/schemas/cache/3.0/content-standards/artifact.json similarity index 100% rename from schemas/cache/content-standards/artifact.json rename to schemas/cache/3.0/content-standards/artifact.json diff --git a/schemas/cache/content-standards/calibrate-content-request.json b/schemas/cache/3.0/content-standards/calibrate-content-request.json similarity index 100% rename from schemas/cache/content-standards/calibrate-content-request.json rename to schemas/cache/3.0/content-standards/calibrate-content-request.json diff --git a/schemas/cache/content-standards/calibrate-content-response.json b/schemas/cache/3.0/content-standards/calibrate-content-response.json similarity index 100% rename from schemas/cache/content-standards/calibrate-content-response.json rename to schemas/cache/3.0/content-standards/calibrate-content-response.json diff --git a/schemas/cache/content-standards/content-standards.json b/schemas/cache/3.0/content-standards/content-standards.json similarity index 100% rename from schemas/cache/content-standards/content-standards.json rename to schemas/cache/3.0/content-standards/content-standards.json diff --git a/schemas/cache/content-standards/create-content-standards-request.json b/schemas/cache/3.0/content-standards/create-content-standards-request.json similarity index 100% rename from schemas/cache/content-standards/create-content-standards-request.json rename to schemas/cache/3.0/content-standards/create-content-standards-request.json diff --git a/schemas/cache/content-standards/create-content-standards-response.json b/schemas/cache/3.0/content-standards/create-content-standards-response.json similarity index 100% rename from schemas/cache/content-standards/create-content-standards-response.json rename to schemas/cache/3.0/content-standards/create-content-standards-response.json diff --git a/schemas/cache/content-standards/get-content-standards-request.json b/schemas/cache/3.0/content-standards/get-content-standards-request.json similarity index 100% rename from schemas/cache/content-standards/get-content-standards-request.json rename to schemas/cache/3.0/content-standards/get-content-standards-request.json diff --git a/schemas/cache/content-standards/get-content-standards-response.json b/schemas/cache/3.0/content-standards/get-content-standards-response.json similarity index 100% rename from schemas/cache/content-standards/get-content-standards-response.json rename to schemas/cache/3.0/content-standards/get-content-standards-response.json diff --git a/schemas/cache/content-standards/get-media-buy-artifacts-request.json b/schemas/cache/3.0/content-standards/get-media-buy-artifacts-request.json similarity index 100% rename from schemas/cache/content-standards/get-media-buy-artifacts-request.json rename to schemas/cache/3.0/content-standards/get-media-buy-artifacts-request.json diff --git a/schemas/cache/content-standards/get-media-buy-artifacts-response.json b/schemas/cache/3.0/content-standards/get-media-buy-artifacts-response.json similarity index 100% rename from schemas/cache/content-standards/get-media-buy-artifacts-response.json rename to schemas/cache/3.0/content-standards/get-media-buy-artifacts-response.json diff --git a/schemas/cache/content-standards/list-content-standards-request.json b/schemas/cache/3.0/content-standards/list-content-standards-request.json similarity index 100% rename from schemas/cache/content-standards/list-content-standards-request.json rename to schemas/cache/3.0/content-standards/list-content-standards-request.json diff --git a/schemas/cache/content-standards/list-content-standards-response.json b/schemas/cache/3.0/content-standards/list-content-standards-response.json similarity index 100% rename from schemas/cache/content-standards/list-content-standards-response.json rename to schemas/cache/3.0/content-standards/list-content-standards-response.json diff --git a/schemas/cache/content-standards/update-content-standards-request.json b/schemas/cache/3.0/content-standards/update-content-standards-request.json similarity index 100% rename from schemas/cache/content-standards/update-content-standards-request.json rename to schemas/cache/3.0/content-standards/update-content-standards-request.json diff --git a/schemas/cache/content-standards/update-content-standards-response.json b/schemas/cache/3.0/content-standards/update-content-standards-response.json similarity index 100% rename from schemas/cache/content-standards/update-content-standards-response.json rename to schemas/cache/3.0/content-standards/update-content-standards-response.json diff --git a/schemas/cache/content-standards/validate-content-delivery-request.json b/schemas/cache/3.0/content-standards/validate-content-delivery-request.json similarity index 100% rename from schemas/cache/content-standards/validate-content-delivery-request.json rename to schemas/cache/3.0/content-standards/validate-content-delivery-request.json diff --git a/schemas/cache/content-standards/validate-content-delivery-response.json b/schemas/cache/3.0/content-standards/validate-content-delivery-response.json similarity index 100% rename from schemas/cache/content-standards/validate-content-delivery-response.json rename to schemas/cache/3.0/content-standards/validate-content-delivery-response.json diff --git a/schemas/cache/core/account-ref.json b/schemas/cache/3.0/core/account-ref.json similarity index 100% rename from schemas/cache/core/account-ref.json rename to schemas/cache/3.0/core/account-ref.json diff --git a/schemas/cache/core/account.json b/schemas/cache/3.0/core/account.json similarity index 100% rename from schemas/cache/core/account.json rename to schemas/cache/3.0/core/account.json diff --git a/schemas/cache/core/activation-key.json b/schemas/cache/3.0/core/activation-key.json similarity index 100% rename from schemas/cache/core/activation-key.json rename to schemas/cache/3.0/core/activation-key.json diff --git a/schemas/cache/core/ad-inventory-config.json b/schemas/cache/3.0/core/ad-inventory-config.json similarity index 100% rename from schemas/cache/core/ad-inventory-config.json rename to schemas/cache/3.0/core/ad-inventory-config.json diff --git a/schemas/cache/core/agent-encryption-key.json b/schemas/cache/3.0/core/agent-encryption-key.json similarity index 100% rename from schemas/cache/core/agent-encryption-key.json rename to schemas/cache/3.0/core/agent-encryption-key.json diff --git a/schemas/cache/core/agent-signing-key.json b/schemas/cache/3.0/core/agent-signing-key.json similarity index 100% rename from schemas/cache/core/agent-signing-key.json rename to schemas/cache/3.0/core/agent-signing-key.json diff --git a/schemas/cache/core/app-item.json b/schemas/cache/3.0/core/app-item.json similarity index 100% rename from schemas/cache/core/app-item.json rename to schemas/cache/3.0/core/app-item.json diff --git a/schemas/cache/core/assets/asset-union.json b/schemas/cache/3.0/core/assets/asset-union.json similarity index 100% rename from schemas/cache/core/assets/asset-union.json rename to schemas/cache/3.0/core/assets/asset-union.json diff --git a/schemas/cache/core/assets/audio-asset.json b/schemas/cache/3.0/core/assets/audio-asset.json similarity index 100% rename from schemas/cache/core/assets/audio-asset.json rename to schemas/cache/3.0/core/assets/audio-asset.json diff --git a/schemas/cache/core/assets/brief-asset.json b/schemas/cache/3.0/core/assets/brief-asset.json similarity index 100% rename from schemas/cache/core/assets/brief-asset.json rename to schemas/cache/3.0/core/assets/brief-asset.json diff --git a/schemas/cache/core/assets/catalog-asset.json b/schemas/cache/3.0/core/assets/catalog-asset.json similarity index 100% rename from schemas/cache/core/assets/catalog-asset.json rename to schemas/cache/3.0/core/assets/catalog-asset.json diff --git a/schemas/cache/core/assets/css-asset.json b/schemas/cache/3.0/core/assets/css-asset.json similarity index 100% rename from schemas/cache/core/assets/css-asset.json rename to schemas/cache/3.0/core/assets/css-asset.json diff --git a/schemas/cache/core/assets/daast-asset.json b/schemas/cache/3.0/core/assets/daast-asset.json similarity index 100% rename from schemas/cache/core/assets/daast-asset.json rename to schemas/cache/3.0/core/assets/daast-asset.json diff --git a/schemas/cache/core/assets/html-asset.json b/schemas/cache/3.0/core/assets/html-asset.json similarity index 100% rename from schemas/cache/core/assets/html-asset.json rename to schemas/cache/3.0/core/assets/html-asset.json diff --git a/schemas/cache/core/assets/image-asset.json b/schemas/cache/3.0/core/assets/image-asset.json similarity index 100% rename from schemas/cache/core/assets/image-asset.json rename to schemas/cache/3.0/core/assets/image-asset.json diff --git a/schemas/cache/core/assets/javascript-asset.json b/schemas/cache/3.0/core/assets/javascript-asset.json similarity index 100% rename from schemas/cache/core/assets/javascript-asset.json rename to schemas/cache/3.0/core/assets/javascript-asset.json diff --git a/schemas/cache/core/assets/markdown-asset.json b/schemas/cache/3.0/core/assets/markdown-asset.json similarity index 100% rename from schemas/cache/core/assets/markdown-asset.json rename to schemas/cache/3.0/core/assets/markdown-asset.json diff --git a/schemas/cache/core/assets/text-asset.json b/schemas/cache/3.0/core/assets/text-asset.json similarity index 100% rename from schemas/cache/core/assets/text-asset.json rename to schemas/cache/3.0/core/assets/text-asset.json diff --git a/schemas/cache/core/assets/url-asset.json b/schemas/cache/3.0/core/assets/url-asset.json similarity index 100% rename from schemas/cache/core/assets/url-asset.json rename to schemas/cache/3.0/core/assets/url-asset.json diff --git a/schemas/cache/core/assets/vast-asset.json b/schemas/cache/3.0/core/assets/vast-asset.json similarity index 100% rename from schemas/cache/core/assets/vast-asset.json rename to schemas/cache/3.0/core/assets/vast-asset.json diff --git a/schemas/cache/core/assets/video-asset.json b/schemas/cache/3.0/core/assets/video-asset.json similarity index 100% rename from schemas/cache/core/assets/video-asset.json rename to schemas/cache/3.0/core/assets/video-asset.json diff --git a/schemas/cache/core/assets/webhook-asset.json b/schemas/cache/3.0/core/assets/webhook-asset.json similarity index 100% rename from schemas/cache/core/assets/webhook-asset.json rename to schemas/cache/3.0/core/assets/webhook-asset.json diff --git a/schemas/cache/core/async-response-data.json b/schemas/cache/3.0/core/async-response-data.json similarity index 100% rename from schemas/cache/core/async-response-data.json rename to schemas/cache/3.0/core/async-response-data.json diff --git a/schemas/cache/core/attribution-window.json b/schemas/cache/3.0/core/attribution-window.json similarity index 100% rename from schemas/cache/core/attribution-window.json rename to schemas/cache/3.0/core/attribution-window.json diff --git a/schemas/cache/core/audience-member.json b/schemas/cache/3.0/core/audience-member.json similarity index 100% rename from schemas/cache/core/audience-member.json rename to schemas/cache/3.0/core/audience-member.json diff --git a/schemas/cache/core/audience-selector.json b/schemas/cache/3.0/core/audience-selector.json similarity index 100% rename from schemas/cache/core/audience-selector.json rename to schemas/cache/3.0/core/audience-selector.json diff --git a/schemas/cache/core/brand-id.json b/schemas/cache/3.0/core/brand-id.json similarity index 100% rename from schemas/cache/core/brand-id.json rename to schemas/cache/3.0/core/brand-id.json diff --git a/schemas/cache/core/brand-ref.json b/schemas/cache/3.0/core/brand-ref.json similarity index 100% rename from schemas/cache/core/brand-ref.json rename to schemas/cache/3.0/core/brand-ref.json diff --git a/schemas/cache/core/business-entity.json b/schemas/cache/3.0/core/business-entity.json similarity index 100% rename from schemas/cache/core/business-entity.json rename to schemas/cache/3.0/core/business-entity.json diff --git a/schemas/cache/core/cancellation-policy.json b/schemas/cache/3.0/core/cancellation-policy.json similarity index 100% rename from schemas/cache/core/cancellation-policy.json rename to schemas/cache/3.0/core/cancellation-policy.json diff --git a/schemas/cache/core/catalog-field-mapping.json b/schemas/cache/3.0/core/catalog-field-mapping.json similarity index 100% rename from schemas/cache/core/catalog-field-mapping.json rename to schemas/cache/3.0/core/catalog-field-mapping.json diff --git a/schemas/cache/core/catalog.json b/schemas/cache/3.0/core/catalog.json similarity index 100% rename from schemas/cache/core/catalog.json rename to schemas/cache/3.0/core/catalog.json diff --git a/schemas/cache/core/catchment.json b/schemas/cache/3.0/core/catchment.json similarity index 100% rename from schemas/cache/core/catchment.json rename to schemas/cache/3.0/core/catchment.json diff --git a/schemas/cache/core/collection-distribution.json b/schemas/cache/3.0/core/collection-distribution.json similarity index 100% rename from schemas/cache/core/collection-distribution.json rename to schemas/cache/3.0/core/collection-distribution.json diff --git a/schemas/cache/core/collection-list-ref.json b/schemas/cache/3.0/core/collection-list-ref.json similarity index 100% rename from schemas/cache/core/collection-list-ref.json rename to schemas/cache/3.0/core/collection-list-ref.json diff --git a/schemas/cache/core/collection-selector.json b/schemas/cache/3.0/core/collection-selector.json similarity index 100% rename from schemas/cache/core/collection-selector.json rename to schemas/cache/3.0/core/collection-selector.json diff --git a/schemas/cache/core/collection.json b/schemas/cache/3.0/core/collection.json similarity index 100% rename from schemas/cache/core/collection.json rename to schemas/cache/3.0/core/collection.json diff --git a/schemas/cache/core/content-rating.json b/schemas/cache/3.0/core/content-rating.json similarity index 100% rename from schemas/cache/core/content-rating.json rename to schemas/cache/3.0/core/content-rating.json diff --git a/schemas/cache/core/context.json b/schemas/cache/3.0/core/context.json similarity index 100% rename from schemas/cache/core/context.json rename to schemas/cache/3.0/core/context.json diff --git a/schemas/cache/core/creative-asset.json b/schemas/cache/3.0/core/creative-asset.json similarity index 100% rename from schemas/cache/core/creative-asset.json rename to schemas/cache/3.0/core/creative-asset.json diff --git a/schemas/cache/core/creative-assignment.json b/schemas/cache/3.0/core/creative-assignment.json similarity index 100% rename from schemas/cache/core/creative-assignment.json rename to schemas/cache/3.0/core/creative-assignment.json diff --git a/schemas/cache/core/creative-brief.json b/schemas/cache/3.0/core/creative-brief.json similarity index 100% rename from schemas/cache/core/creative-brief.json rename to schemas/cache/3.0/core/creative-brief.json diff --git a/schemas/cache/core/creative-consumption.json b/schemas/cache/3.0/core/creative-consumption.json similarity index 100% rename from schemas/cache/core/creative-consumption.json rename to schemas/cache/3.0/core/creative-consumption.json diff --git a/schemas/cache/core/creative-filters.json b/schemas/cache/3.0/core/creative-filters.json similarity index 100% rename from schemas/cache/core/creative-filters.json rename to schemas/cache/3.0/core/creative-filters.json diff --git a/schemas/cache/core/creative-item.json b/schemas/cache/3.0/core/creative-item.json similarity index 100% rename from schemas/cache/core/creative-item.json rename to schemas/cache/3.0/core/creative-item.json diff --git a/schemas/cache/core/creative-manifest.json b/schemas/cache/3.0/core/creative-manifest.json similarity index 100% rename from schemas/cache/core/creative-manifest.json rename to schemas/cache/3.0/core/creative-manifest.json diff --git a/schemas/cache/core/creative-policy.json b/schemas/cache/3.0/core/creative-policy.json similarity index 100% rename from schemas/cache/core/creative-policy.json rename to schemas/cache/3.0/core/creative-policy.json diff --git a/schemas/cache/core/creative-variable.json b/schemas/cache/3.0/core/creative-variable.json similarity index 100% rename from schemas/cache/core/creative-variable.json rename to schemas/cache/3.0/core/creative-variable.json diff --git a/schemas/cache/core/creative-variant.json b/schemas/cache/3.0/core/creative-variant.json similarity index 100% rename from schemas/cache/core/creative-variant.json rename to schemas/cache/3.0/core/creative-variant.json diff --git a/schemas/cache/core/data-provider-signal-selector.json b/schemas/cache/3.0/core/data-provider-signal-selector.json similarity index 100% rename from schemas/cache/core/data-provider-signal-selector.json rename to schemas/cache/3.0/core/data-provider-signal-selector.json diff --git a/schemas/cache/core/date-range.json b/schemas/cache/3.0/core/date-range.json similarity index 100% rename from schemas/cache/core/date-range.json rename to schemas/cache/3.0/core/date-range.json diff --git a/schemas/cache/core/datetime-range.json b/schemas/cache/3.0/core/datetime-range.json similarity index 100% rename from schemas/cache/core/datetime-range.json rename to schemas/cache/3.0/core/datetime-range.json diff --git a/schemas/cache/core/daypart-target.json b/schemas/cache/3.0/core/daypart-target.json similarity index 100% rename from schemas/cache/core/daypart-target.json rename to schemas/cache/3.0/core/daypart-target.json diff --git a/schemas/cache/core/deadline-policy.json b/schemas/cache/3.0/core/deadline-policy.json similarity index 100% rename from schemas/cache/core/deadline-policy.json rename to schemas/cache/3.0/core/deadline-policy.json diff --git a/schemas/cache/core/delivery-forecast.json b/schemas/cache/3.0/core/delivery-forecast.json similarity index 100% rename from schemas/cache/core/delivery-forecast.json rename to schemas/cache/3.0/core/delivery-forecast.json diff --git a/schemas/cache/core/delivery-metrics.json b/schemas/cache/3.0/core/delivery-metrics.json similarity index 100% rename from schemas/cache/core/delivery-metrics.json rename to schemas/cache/3.0/core/delivery-metrics.json diff --git a/schemas/cache/core/deployment.json b/schemas/cache/3.0/core/deployment.json similarity index 100% rename from schemas/cache/core/deployment.json rename to schemas/cache/3.0/core/deployment.json diff --git a/schemas/cache/core/destination-item.json b/schemas/cache/3.0/core/destination-item.json similarity index 100% rename from schemas/cache/core/destination-item.json rename to schemas/cache/3.0/core/destination-item.json diff --git a/schemas/cache/core/destination.json b/schemas/cache/3.0/core/destination.json similarity index 100% rename from schemas/cache/core/destination.json rename to schemas/cache/3.0/core/destination.json diff --git a/schemas/cache/core/diagnostic-issue.json b/schemas/cache/3.0/core/diagnostic-issue.json similarity index 100% rename from schemas/cache/core/diagnostic-issue.json rename to schemas/cache/3.0/core/diagnostic-issue.json diff --git a/schemas/cache/core/duration.json b/schemas/cache/3.0/core/duration.json similarity index 100% rename from schemas/cache/core/duration.json rename to schemas/cache/3.0/core/duration.json diff --git a/schemas/cache/core/education-item.json b/schemas/cache/3.0/core/education-item.json similarity index 100% rename from schemas/cache/core/education-item.json rename to schemas/cache/3.0/core/education-item.json diff --git a/schemas/cache/core/error.json b/schemas/cache/3.0/core/error.json similarity index 100% rename from schemas/cache/core/error.json rename to schemas/cache/3.0/core/error.json diff --git a/schemas/cache/core/event-custom-data.json b/schemas/cache/3.0/core/event-custom-data.json similarity index 100% rename from schemas/cache/core/event-custom-data.json rename to schemas/cache/3.0/core/event-custom-data.json diff --git a/schemas/cache/core/event-source-health.json b/schemas/cache/3.0/core/event-source-health.json similarity index 100% rename from schemas/cache/core/event-source-health.json rename to schemas/cache/3.0/core/event-source-health.json diff --git a/schemas/cache/core/event.json b/schemas/cache/3.0/core/event.json similarity index 100% rename from schemas/cache/core/event.json rename to schemas/cache/3.0/core/event.json diff --git a/schemas/cache/core/ext.json b/schemas/cache/3.0/core/ext.json similarity index 100% rename from schemas/cache/core/ext.json rename to schemas/cache/3.0/core/ext.json diff --git a/schemas/cache/core/feature-requirement.json b/schemas/cache/3.0/core/feature-requirement.json similarity index 100% rename from schemas/cache/core/feature-requirement.json rename to schemas/cache/3.0/core/feature-requirement.json diff --git a/schemas/cache/core/flight-item.json b/schemas/cache/3.0/core/flight-item.json similarity index 100% rename from schemas/cache/core/flight-item.json rename to schemas/cache/3.0/core/flight-item.json diff --git a/schemas/cache/core/forecast-point.json b/schemas/cache/3.0/core/forecast-point.json similarity index 100% rename from schemas/cache/core/forecast-point.json rename to schemas/cache/3.0/core/forecast-point.json diff --git a/schemas/cache/core/forecast-range.json b/schemas/cache/3.0/core/forecast-range.json similarity index 100% rename from schemas/cache/core/forecast-range.json rename to schemas/cache/3.0/core/forecast-range.json diff --git a/schemas/cache/core/format-id.json b/schemas/cache/3.0/core/format-id.json similarity index 100% rename from schemas/cache/core/format-id.json rename to schemas/cache/3.0/core/format-id.json diff --git a/schemas/cache/core/format.json b/schemas/cache/3.0/core/format.json similarity index 100% rename from schemas/cache/core/format.json rename to schemas/cache/3.0/core/format.json diff --git a/schemas/cache/core/frequency-cap.json b/schemas/cache/3.0/core/frequency-cap.json similarity index 100% rename from schemas/cache/core/frequency-cap.json rename to schemas/cache/3.0/core/frequency-cap.json diff --git a/schemas/cache/core/generation-credential.json b/schemas/cache/3.0/core/generation-credential.json similarity index 100% rename from schemas/cache/core/generation-credential.json rename to schemas/cache/3.0/core/generation-credential.json diff --git a/schemas/cache/core/geo-breakdown-support.json b/schemas/cache/3.0/core/geo-breakdown-support.json similarity index 100% rename from schemas/cache/core/geo-breakdown-support.json rename to schemas/cache/3.0/core/geo-breakdown-support.json diff --git a/schemas/cache/core/hotel-item.json b/schemas/cache/3.0/core/hotel-item.json similarity index 100% rename from schemas/cache/core/hotel-item.json rename to schemas/cache/3.0/core/hotel-item.json diff --git a/schemas/cache/core/identifier.json b/schemas/cache/3.0/core/identifier.json similarity index 100% rename from schemas/cache/core/identifier.json rename to schemas/cache/3.0/core/identifier.json diff --git a/schemas/cache/core/industry-identifier.json b/schemas/cache/3.0/core/industry-identifier.json similarity index 100% rename from schemas/cache/core/industry-identifier.json rename to schemas/cache/3.0/core/industry-identifier.json diff --git a/schemas/cache/core/insertion-order.json b/schemas/cache/3.0/core/insertion-order.json similarity index 100% rename from schemas/cache/core/insertion-order.json rename to schemas/cache/3.0/core/insertion-order.json diff --git a/schemas/cache/core/installment-deadlines.json b/schemas/cache/3.0/core/installment-deadlines.json similarity index 100% rename from schemas/cache/core/installment-deadlines.json rename to schemas/cache/3.0/core/installment-deadlines.json diff --git a/schemas/cache/core/installment.json b/schemas/cache/3.0/core/installment.json similarity index 100% rename from schemas/cache/core/installment.json rename to schemas/cache/3.0/core/installment.json diff --git a/schemas/cache/core/job-item.json b/schemas/cache/3.0/core/job-item.json similarity index 100% rename from schemas/cache/core/job-item.json rename to schemas/cache/3.0/core/job-item.json diff --git a/schemas/cache/core/limited-series.json b/schemas/cache/3.0/core/limited-series.json similarity index 100% rename from schemas/cache/core/limited-series.json rename to schemas/cache/3.0/core/limited-series.json diff --git a/schemas/cache/core/material-deadline.json b/schemas/cache/3.0/core/material-deadline.json similarity index 100% rename from schemas/cache/core/material-deadline.json rename to schemas/cache/3.0/core/material-deadline.json diff --git a/schemas/cache/core/mcp-webhook-payload.json b/schemas/cache/3.0/core/mcp-webhook-payload.json similarity index 100% rename from schemas/cache/core/mcp-webhook-payload.json rename to schemas/cache/3.0/core/mcp-webhook-payload.json diff --git a/schemas/cache/core/measurement-readiness.json b/schemas/cache/3.0/core/measurement-readiness.json similarity index 100% rename from schemas/cache/core/measurement-readiness.json rename to schemas/cache/3.0/core/measurement-readiness.json diff --git a/schemas/cache/core/measurement-terms.json b/schemas/cache/3.0/core/measurement-terms.json similarity index 100% rename from schemas/cache/core/measurement-terms.json rename to schemas/cache/3.0/core/measurement-terms.json diff --git a/schemas/cache/core/measurement-window.json b/schemas/cache/3.0/core/measurement-window.json similarity index 100% rename from schemas/cache/core/measurement-window.json rename to schemas/cache/3.0/core/measurement-window.json diff --git a/schemas/cache/core/media-buy-features.json b/schemas/cache/3.0/core/media-buy-features.json similarity index 100% rename from schemas/cache/core/media-buy-features.json rename to schemas/cache/3.0/core/media-buy-features.json diff --git a/schemas/cache/core/media-buy.json b/schemas/cache/3.0/core/media-buy.json similarity index 100% rename from schemas/cache/core/media-buy.json rename to schemas/cache/3.0/core/media-buy.json diff --git a/schemas/cache/core/offering-asset-group.json b/schemas/cache/3.0/core/offering-asset-group.json similarity index 100% rename from schemas/cache/core/offering-asset-group.json rename to schemas/cache/3.0/core/offering-asset-group.json diff --git a/schemas/cache/core/offering.json b/schemas/cache/3.0/core/offering.json similarity index 100% rename from schemas/cache/core/offering.json rename to schemas/cache/3.0/core/offering.json diff --git a/schemas/cache/core/optimization-goal.json b/schemas/cache/3.0/core/optimization-goal.json similarity index 100% rename from schemas/cache/core/optimization-goal.json rename to schemas/cache/3.0/core/optimization-goal.json diff --git a/schemas/cache/core/outcome-measurement.json b/schemas/cache/3.0/core/outcome-measurement.json similarity index 100% rename from schemas/cache/core/outcome-measurement.json rename to schemas/cache/3.0/core/outcome-measurement.json diff --git a/schemas/cache/core/overlay.json b/schemas/cache/3.0/core/overlay.json similarity index 100% rename from schemas/cache/core/overlay.json rename to schemas/cache/3.0/core/overlay.json diff --git a/schemas/cache/core/package.json b/schemas/cache/3.0/core/package.json similarity index 100% rename from schemas/cache/core/package.json rename to schemas/cache/3.0/core/package.json diff --git a/schemas/cache/core/pagination-request.json b/schemas/cache/3.0/core/pagination-request.json similarity index 100% rename from schemas/cache/core/pagination-request.json rename to schemas/cache/3.0/core/pagination-request.json diff --git a/schemas/cache/core/pagination-response.json b/schemas/cache/3.0/core/pagination-response.json similarity index 100% rename from schemas/cache/core/pagination-response.json rename to schemas/cache/3.0/core/pagination-response.json diff --git a/schemas/cache/core/performance-feedback.json b/schemas/cache/3.0/core/performance-feedback.json similarity index 100% rename from schemas/cache/core/performance-feedback.json rename to schemas/cache/3.0/core/performance-feedback.json diff --git a/schemas/cache/core/performance-standard.json b/schemas/cache/3.0/core/performance-standard.json similarity index 100% rename from schemas/cache/core/performance-standard.json rename to schemas/cache/3.0/core/performance-standard.json diff --git a/schemas/cache/core/placement-definition.json b/schemas/cache/3.0/core/placement-definition.json similarity index 100% rename from schemas/cache/core/placement-definition.json rename to schemas/cache/3.0/core/placement-definition.json diff --git a/schemas/cache/core/placement.json b/schemas/cache/3.0/core/placement.json similarity index 100% rename from schemas/cache/core/placement.json rename to schemas/cache/3.0/core/placement.json diff --git a/schemas/cache/core/planned-delivery.json b/schemas/cache/3.0/core/planned-delivery.json similarity index 100% rename from schemas/cache/core/planned-delivery.json rename to schemas/cache/3.0/core/planned-delivery.json diff --git a/schemas/cache/core/price.json b/schemas/cache/3.0/core/price.json similarity index 100% rename from schemas/cache/core/price.json rename to schemas/cache/3.0/core/price.json diff --git a/schemas/cache/core/pricing-option.json b/schemas/cache/3.0/core/pricing-option.json similarity index 100% rename from schemas/cache/core/pricing-option.json rename to schemas/cache/3.0/core/pricing-option.json diff --git a/schemas/cache/core/product-allocation.json b/schemas/cache/3.0/core/product-allocation.json similarity index 100% rename from schemas/cache/core/product-allocation.json rename to schemas/cache/3.0/core/product-allocation.json diff --git a/schemas/cache/core/product-filters.json b/schemas/cache/3.0/core/product-filters.json similarity index 100% rename from schemas/cache/core/product-filters.json rename to schemas/cache/3.0/core/product-filters.json diff --git a/schemas/cache/core/product.json b/schemas/cache/3.0/core/product.json similarity index 100% rename from schemas/cache/core/product.json rename to schemas/cache/3.0/core/product.json diff --git a/schemas/cache/core/property-id.json b/schemas/cache/3.0/core/property-id.json similarity index 100% rename from schemas/cache/core/property-id.json rename to schemas/cache/3.0/core/property-id.json diff --git a/schemas/cache/core/property-list-ref.json b/schemas/cache/3.0/core/property-list-ref.json similarity index 100% rename from schemas/cache/core/property-list-ref.json rename to schemas/cache/3.0/core/property-list-ref.json diff --git a/schemas/cache/core/property-tag.json b/schemas/cache/3.0/core/property-tag.json similarity index 100% rename from schemas/cache/core/property-tag.json rename to schemas/cache/3.0/core/property-tag.json diff --git a/schemas/cache/core/property.json b/schemas/cache/3.0/core/property.json similarity index 100% rename from schemas/cache/core/property.json rename to schemas/cache/3.0/core/property.json diff --git a/schemas/cache/core/proposal.json b/schemas/cache/3.0/core/proposal.json similarity index 100% rename from schemas/cache/core/proposal.json rename to schemas/cache/3.0/core/proposal.json diff --git a/schemas/cache/core/protocol-envelope.json b/schemas/cache/3.0/core/protocol-envelope.json similarity index 100% rename from schemas/cache/core/protocol-envelope.json rename to schemas/cache/3.0/core/protocol-envelope.json diff --git a/schemas/cache/core/provenance.json b/schemas/cache/3.0/core/provenance.json similarity index 100% rename from schemas/cache/core/provenance.json rename to schemas/cache/3.0/core/provenance.json diff --git a/schemas/cache/core/publisher-property-selector.json b/schemas/cache/3.0/core/publisher-property-selector.json similarity index 100% rename from schemas/cache/core/publisher-property-selector.json rename to schemas/cache/3.0/core/publisher-property-selector.json diff --git a/schemas/cache/core/push-notification-config.json b/schemas/cache/3.0/core/push-notification-config.json similarity index 100% rename from schemas/cache/core/push-notification-config.json rename to schemas/cache/3.0/core/push-notification-config.json diff --git a/schemas/cache/core/real-estate-item.json b/schemas/cache/3.0/core/real-estate-item.json similarity index 100% rename from schemas/cache/core/real-estate-item.json rename to schemas/cache/3.0/core/real-estate-item.json diff --git a/schemas/cache/core/reference-asset.json b/schemas/cache/3.0/core/reference-asset.json similarity index 100% rename from schemas/cache/core/reference-asset.json rename to schemas/cache/3.0/core/reference-asset.json diff --git a/schemas/cache/core/reporting-capabilities.json b/schemas/cache/3.0/core/reporting-capabilities.json similarity index 100% rename from schemas/cache/core/reporting-capabilities.json rename to schemas/cache/3.0/core/reporting-capabilities.json diff --git a/schemas/cache/core/reporting-webhook.json b/schemas/cache/3.0/core/reporting-webhook.json similarity index 100% rename from schemas/cache/core/reporting-webhook.json rename to schemas/cache/3.0/core/reporting-webhook.json diff --git a/schemas/cache/core/requirements/asset-requirements.json b/schemas/cache/3.0/core/requirements/asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/asset-requirements.json rename to schemas/cache/3.0/core/requirements/asset-requirements.json diff --git a/schemas/cache/core/requirements/audio-asset-requirements.json b/schemas/cache/3.0/core/requirements/audio-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/audio-asset-requirements.json rename to schemas/cache/3.0/core/requirements/audio-asset-requirements.json diff --git a/schemas/cache/core/requirements/catalog-field-binding.json b/schemas/cache/3.0/core/requirements/catalog-field-binding.json similarity index 100% rename from schemas/cache/core/requirements/catalog-field-binding.json rename to schemas/cache/3.0/core/requirements/catalog-field-binding.json diff --git a/schemas/cache/core/requirements/catalog-requirements.json b/schemas/cache/3.0/core/requirements/catalog-requirements.json similarity index 100% rename from schemas/cache/core/requirements/catalog-requirements.json rename to schemas/cache/3.0/core/requirements/catalog-requirements.json diff --git a/schemas/cache/core/requirements/css-asset-requirements.json b/schemas/cache/3.0/core/requirements/css-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/css-asset-requirements.json rename to schemas/cache/3.0/core/requirements/css-asset-requirements.json diff --git a/schemas/cache/core/requirements/daast-asset-requirements.json b/schemas/cache/3.0/core/requirements/daast-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/daast-asset-requirements.json rename to schemas/cache/3.0/core/requirements/daast-asset-requirements.json diff --git a/schemas/cache/core/requirements/html-asset-requirements.json b/schemas/cache/3.0/core/requirements/html-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/html-asset-requirements.json rename to schemas/cache/3.0/core/requirements/html-asset-requirements.json diff --git a/schemas/cache/core/requirements/image-asset-requirements.json b/schemas/cache/3.0/core/requirements/image-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/image-asset-requirements.json rename to schemas/cache/3.0/core/requirements/image-asset-requirements.json diff --git a/schemas/cache/core/requirements/javascript-asset-requirements.json b/schemas/cache/3.0/core/requirements/javascript-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/javascript-asset-requirements.json rename to schemas/cache/3.0/core/requirements/javascript-asset-requirements.json diff --git a/schemas/cache/core/requirements/markdown-asset-requirements.json b/schemas/cache/3.0/core/requirements/markdown-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/markdown-asset-requirements.json rename to schemas/cache/3.0/core/requirements/markdown-asset-requirements.json diff --git a/schemas/cache/core/requirements/offering-asset-constraint.json b/schemas/cache/3.0/core/requirements/offering-asset-constraint.json similarity index 100% rename from schemas/cache/core/requirements/offering-asset-constraint.json rename to schemas/cache/3.0/core/requirements/offering-asset-constraint.json diff --git a/schemas/cache/core/requirements/text-asset-requirements.json b/schemas/cache/3.0/core/requirements/text-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/text-asset-requirements.json rename to schemas/cache/3.0/core/requirements/text-asset-requirements.json diff --git a/schemas/cache/core/requirements/url-asset-requirements.json b/schemas/cache/3.0/core/requirements/url-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/url-asset-requirements.json rename to schemas/cache/3.0/core/requirements/url-asset-requirements.json diff --git a/schemas/cache/core/requirements/vast-asset-requirements.json b/schemas/cache/3.0/core/requirements/vast-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/vast-asset-requirements.json rename to schemas/cache/3.0/core/requirements/vast-asset-requirements.json diff --git a/schemas/cache/core/requirements/video-asset-requirements.json b/schemas/cache/3.0/core/requirements/video-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/video-asset-requirements.json rename to schemas/cache/3.0/core/requirements/video-asset-requirements.json diff --git a/schemas/cache/core/requirements/webhook-asset-requirements.json b/schemas/cache/3.0/core/requirements/webhook-asset-requirements.json similarity index 100% rename from schemas/cache/core/requirements/webhook-asset-requirements.json rename to schemas/cache/3.0/core/requirements/webhook-asset-requirements.json diff --git a/schemas/cache/core/response.json b/schemas/cache/3.0/core/response.json similarity index 100% rename from schemas/cache/core/response.json rename to schemas/cache/3.0/core/response.json diff --git a/schemas/cache/core/rights-constraint.json b/schemas/cache/3.0/core/rights-constraint.json similarity index 100% rename from schemas/cache/core/rights-constraint.json rename to schemas/cache/3.0/core/rights-constraint.json diff --git a/schemas/cache/core/seller-agent-ref.json b/schemas/cache/3.0/core/seller-agent-ref.json similarity index 100% rename from schemas/cache/core/seller-agent-ref.json rename to schemas/cache/3.0/core/seller-agent-ref.json diff --git a/schemas/cache/core/signal-definition.json b/schemas/cache/3.0/core/signal-definition.json similarity index 100% rename from schemas/cache/core/signal-definition.json rename to schemas/cache/3.0/core/signal-definition.json diff --git a/schemas/cache/core/signal-filters.json b/schemas/cache/3.0/core/signal-filters.json similarity index 100% rename from schemas/cache/core/signal-filters.json rename to schemas/cache/3.0/core/signal-filters.json diff --git a/schemas/cache/core/signal-id.json b/schemas/cache/3.0/core/signal-id.json similarity index 100% rename from schemas/cache/core/signal-id.json rename to schemas/cache/3.0/core/signal-id.json diff --git a/schemas/cache/core/signal-pricing-option.json b/schemas/cache/3.0/core/signal-pricing-option.json similarity index 100% rename from schemas/cache/core/signal-pricing-option.json rename to schemas/cache/3.0/core/signal-pricing-option.json diff --git a/schemas/cache/core/signal-pricing.json b/schemas/cache/3.0/core/signal-pricing.json similarity index 100% rename from schemas/cache/core/signal-pricing.json rename to schemas/cache/3.0/core/signal-pricing.json diff --git a/schemas/cache/core/signal-targeting.json b/schemas/cache/3.0/core/signal-targeting.json similarity index 100% rename from schemas/cache/core/signal-targeting.json rename to schemas/cache/3.0/core/signal-targeting.json diff --git a/schemas/cache/core/special.json b/schemas/cache/3.0/core/special.json similarity index 100% rename from schemas/cache/core/special.json rename to schemas/cache/3.0/core/special.json diff --git a/schemas/cache/core/start-timing.json b/schemas/cache/3.0/core/start-timing.json similarity index 100% rename from schemas/cache/core/start-timing.json rename to schemas/cache/3.0/core/start-timing.json diff --git a/schemas/cache/core/store-item.json b/schemas/cache/3.0/core/store-item.json similarity index 100% rename from schemas/cache/core/store-item.json rename to schemas/cache/3.0/core/store-item.json diff --git a/schemas/cache/core/talent.json b/schemas/cache/3.0/core/talent.json similarity index 100% rename from schemas/cache/core/talent.json rename to schemas/cache/3.0/core/talent.json diff --git a/schemas/cache/core/targeting.json b/schemas/cache/3.0/core/targeting.json similarity index 100% rename from schemas/cache/core/targeting.json rename to schemas/cache/3.0/core/targeting.json diff --git a/schemas/cache/core/tasks-get-request.json b/schemas/cache/3.0/core/tasks-get-request.json similarity index 100% rename from schemas/cache/core/tasks-get-request.json rename to schemas/cache/3.0/core/tasks-get-request.json diff --git a/schemas/cache/core/tasks-get-response.json b/schemas/cache/3.0/core/tasks-get-response.json similarity index 100% rename from schemas/cache/core/tasks-get-response.json rename to schemas/cache/3.0/core/tasks-get-response.json diff --git a/schemas/cache/core/tasks-list-request.json b/schemas/cache/3.0/core/tasks-list-request.json similarity index 100% rename from schemas/cache/core/tasks-list-request.json rename to schemas/cache/3.0/core/tasks-list-request.json diff --git a/schemas/cache/core/tasks-list-response.json b/schemas/cache/3.0/core/tasks-list-response.json similarity index 100% rename from schemas/cache/core/tasks-list-response.json rename to schemas/cache/3.0/core/tasks-list-response.json diff --git a/schemas/cache/core/user-match.json b/schemas/cache/3.0/core/user-match.json similarity index 100% rename from schemas/cache/core/user-match.json rename to schemas/cache/3.0/core/user-match.json diff --git a/schemas/cache/core/vehicle-item.json b/schemas/cache/3.0/core/vehicle-item.json similarity index 100% rename from schemas/cache/core/vehicle-item.json rename to schemas/cache/3.0/core/vehicle-item.json diff --git a/schemas/cache/core/vendor-pricing-option.json b/schemas/cache/3.0/core/vendor-pricing-option.json similarity index 100% rename from schemas/cache/core/vendor-pricing-option.json rename to schemas/cache/3.0/core/vendor-pricing-option.json diff --git a/schemas/cache/core/x-entity-types.json b/schemas/cache/3.0/core/x-entity-types.json similarity index 100% rename from schemas/cache/core/x-entity-types.json rename to schemas/cache/3.0/core/x-entity-types.json diff --git a/schemas/cache/creative/asset-types/index.json b/schemas/cache/3.0/creative/asset-types/index.json similarity index 100% rename from schemas/cache/creative/asset-types/index.json rename to schemas/cache/3.0/creative/asset-types/index.json diff --git a/schemas/cache/creative/creative-feature-result.json b/schemas/cache/3.0/creative/creative-feature-result.json similarity index 100% rename from schemas/cache/creative/creative-feature-result.json rename to schemas/cache/3.0/creative/creative-feature-result.json diff --git a/schemas/cache/creative/get-creative-delivery-request.json b/schemas/cache/3.0/creative/get-creative-delivery-request.json similarity index 100% rename from schemas/cache/creative/get-creative-delivery-request.json rename to schemas/cache/3.0/creative/get-creative-delivery-request.json diff --git a/schemas/cache/creative/get-creative-delivery-response.json b/schemas/cache/3.0/creative/get-creative-delivery-response.json similarity index 100% rename from schemas/cache/creative/get-creative-delivery-response.json rename to schemas/cache/3.0/creative/get-creative-delivery-response.json diff --git a/schemas/cache/creative/get-creative-features-request.json b/schemas/cache/3.0/creative/get-creative-features-request.json similarity index 100% rename from schemas/cache/creative/get-creative-features-request.json rename to schemas/cache/3.0/creative/get-creative-features-request.json diff --git a/schemas/cache/creative/get-creative-features-response.json b/schemas/cache/3.0/creative/get-creative-features-response.json similarity index 100% rename from schemas/cache/creative/get-creative-features-response.json rename to schemas/cache/3.0/creative/get-creative-features-response.json diff --git a/schemas/cache/creative/list-creative-formats-request.json b/schemas/cache/3.0/creative/list-creative-formats-request.json similarity index 100% rename from schemas/cache/creative/list-creative-formats-request.json rename to schemas/cache/3.0/creative/list-creative-formats-request.json diff --git a/schemas/cache/creative/list-creative-formats-response.json b/schemas/cache/3.0/creative/list-creative-formats-response.json similarity index 100% rename from schemas/cache/creative/list-creative-formats-response.json rename to schemas/cache/3.0/creative/list-creative-formats-response.json diff --git a/schemas/cache/creative/list-creatives-request.json b/schemas/cache/3.0/creative/list-creatives-request.json similarity index 100% rename from schemas/cache/creative/list-creatives-request.json rename to schemas/cache/3.0/creative/list-creatives-request.json diff --git a/schemas/cache/creative/list-creatives-response.json b/schemas/cache/3.0/creative/list-creatives-response.json similarity index 100% rename from schemas/cache/creative/list-creatives-response.json rename to schemas/cache/3.0/creative/list-creatives-response.json diff --git a/schemas/cache/creative/preview-creative-request.json b/schemas/cache/3.0/creative/preview-creative-request.json similarity index 100% rename from schemas/cache/creative/preview-creative-request.json rename to schemas/cache/3.0/creative/preview-creative-request.json diff --git a/schemas/cache/creative/preview-creative-response.json b/schemas/cache/3.0/creative/preview-creative-response.json similarity index 100% rename from schemas/cache/creative/preview-creative-response.json rename to schemas/cache/3.0/creative/preview-creative-response.json diff --git a/schemas/cache/creative/preview-render.json b/schemas/cache/3.0/creative/preview-render.json similarity index 100% rename from schemas/cache/creative/preview-render.json rename to schemas/cache/3.0/creative/preview-render.json diff --git a/schemas/cache/creative/sync-creatives-async-response-input-required.json b/schemas/cache/3.0/creative/sync-creatives-async-response-input-required.json similarity index 100% rename from schemas/cache/creative/sync-creatives-async-response-input-required.json rename to schemas/cache/3.0/creative/sync-creatives-async-response-input-required.json diff --git a/schemas/cache/creative/sync-creatives-async-response-submitted.json b/schemas/cache/3.0/creative/sync-creatives-async-response-submitted.json similarity index 100% rename from schemas/cache/creative/sync-creatives-async-response-submitted.json rename to schemas/cache/3.0/creative/sync-creatives-async-response-submitted.json diff --git a/schemas/cache/creative/sync-creatives-async-response-working.json b/schemas/cache/3.0/creative/sync-creatives-async-response-working.json similarity index 100% rename from schemas/cache/creative/sync-creatives-async-response-working.json rename to schemas/cache/3.0/creative/sync-creatives-async-response-working.json diff --git a/schemas/cache/creative/sync-creatives-request.json b/schemas/cache/3.0/creative/sync-creatives-request.json similarity index 100% rename from schemas/cache/creative/sync-creatives-request.json rename to schemas/cache/3.0/creative/sync-creatives-request.json diff --git a/schemas/cache/creative/sync-creatives-response.json b/schemas/cache/3.0/creative/sync-creatives-response.json similarity index 100% rename from schemas/cache/creative/sync-creatives-response.json rename to schemas/cache/3.0/creative/sync-creatives-response.json diff --git a/schemas/cache/enums/account-scope.json b/schemas/cache/3.0/enums/account-scope.json similarity index 100% rename from schemas/cache/enums/account-scope.json rename to schemas/cache/3.0/enums/account-scope.json diff --git a/schemas/cache/enums/account-status.json b/schemas/cache/3.0/enums/account-status.json similarity index 100% rename from schemas/cache/enums/account-status.json rename to schemas/cache/3.0/enums/account-status.json diff --git a/schemas/cache/enums/action-source.json b/schemas/cache/3.0/enums/action-source.json similarity index 100% rename from schemas/cache/enums/action-source.json rename to schemas/cache/3.0/enums/action-source.json diff --git a/schemas/cache/enums/adcp-protocol.json b/schemas/cache/3.0/enums/adcp-protocol.json similarity index 100% rename from schemas/cache/enums/adcp-protocol.json rename to schemas/cache/3.0/enums/adcp-protocol.json diff --git a/schemas/cache/enums/adjustment-kind.json b/schemas/cache/3.0/enums/adjustment-kind.json similarity index 100% rename from schemas/cache/enums/adjustment-kind.json rename to schemas/cache/3.0/enums/adjustment-kind.json diff --git a/schemas/cache/enums/advertiser-industry.json b/schemas/cache/3.0/enums/advertiser-industry.json similarity index 100% rename from schemas/cache/enums/advertiser-industry.json rename to schemas/cache/3.0/enums/advertiser-industry.json diff --git a/schemas/cache/enums/age-verification-method.json b/schemas/cache/3.0/enums/age-verification-method.json similarity index 100% rename from schemas/cache/enums/age-verification-method.json rename to schemas/cache/3.0/enums/age-verification-method.json diff --git a/schemas/cache/enums/assessment-status.json b/schemas/cache/3.0/enums/assessment-status.json similarity index 100% rename from schemas/cache/enums/assessment-status.json rename to schemas/cache/3.0/enums/assessment-status.json diff --git a/schemas/cache/enums/asset-content-type.json b/schemas/cache/3.0/enums/asset-content-type.json similarity index 100% rename from schemas/cache/enums/asset-content-type.json rename to schemas/cache/3.0/enums/asset-content-type.json diff --git a/schemas/cache/enums/attribution-model.json b/schemas/cache/3.0/enums/attribution-model.json similarity index 100% rename from schemas/cache/enums/attribution-model.json rename to schemas/cache/3.0/enums/attribution-model.json diff --git a/schemas/cache/enums/audience-source.json b/schemas/cache/3.0/enums/audience-source.json similarity index 100% rename from schemas/cache/enums/audience-source.json rename to schemas/cache/3.0/enums/audience-source.json diff --git a/schemas/cache/enums/audience-status.json b/schemas/cache/3.0/enums/audience-status.json similarity index 100% rename from schemas/cache/enums/audience-status.json rename to schemas/cache/3.0/enums/audience-status.json diff --git a/schemas/cache/enums/audio-channel-layout.json b/schemas/cache/3.0/enums/audio-channel-layout.json similarity index 100% rename from schemas/cache/enums/audio-channel-layout.json rename to schemas/cache/3.0/enums/audio-channel-layout.json diff --git a/schemas/cache/enums/auth-scheme.json b/schemas/cache/3.0/enums/auth-scheme.json similarity index 100% rename from schemas/cache/enums/auth-scheme.json rename to schemas/cache/3.0/enums/auth-scheme.json diff --git a/schemas/cache/enums/available-metric.json b/schemas/cache/3.0/enums/available-metric.json similarity index 100% rename from schemas/cache/enums/available-metric.json rename to schemas/cache/3.0/enums/available-metric.json diff --git a/schemas/cache/enums/billing-party.json b/schemas/cache/3.0/enums/billing-party.json similarity index 100% rename from schemas/cache/enums/billing-party.json rename to schemas/cache/3.0/enums/billing-party.json diff --git a/schemas/cache/enums/binary-verdict.json b/schemas/cache/3.0/enums/binary-verdict.json similarity index 100% rename from schemas/cache/enums/binary-verdict.json rename to schemas/cache/3.0/enums/binary-verdict.json diff --git a/schemas/cache/enums/brand-agent-type.json b/schemas/cache/3.0/enums/brand-agent-type.json similarity index 100% rename from schemas/cache/enums/brand-agent-type.json rename to schemas/cache/3.0/enums/brand-agent-type.json diff --git a/schemas/cache/enums/canceled-by.json b/schemas/cache/3.0/enums/canceled-by.json similarity index 100% rename from schemas/cache/enums/canceled-by.json rename to schemas/cache/3.0/enums/canceled-by.json diff --git a/schemas/cache/enums/catalog-action.json b/schemas/cache/3.0/enums/catalog-action.json similarity index 100% rename from schemas/cache/enums/catalog-action.json rename to schemas/cache/3.0/enums/catalog-action.json diff --git a/schemas/cache/enums/catalog-item-status.json b/schemas/cache/3.0/enums/catalog-item-status.json similarity index 100% rename from schemas/cache/enums/catalog-item-status.json rename to schemas/cache/3.0/enums/catalog-item-status.json diff --git a/schemas/cache/enums/catalog-type.json b/schemas/cache/3.0/enums/catalog-type.json similarity index 100% rename from schemas/cache/enums/catalog-type.json rename to schemas/cache/3.0/enums/catalog-type.json diff --git a/schemas/cache/enums/channels.json b/schemas/cache/3.0/enums/channels.json similarity index 100% rename from schemas/cache/enums/channels.json rename to schemas/cache/3.0/enums/channels.json diff --git a/schemas/cache/enums/cloud-storage-protocol.json b/schemas/cache/3.0/enums/cloud-storage-protocol.json similarity index 100% rename from schemas/cache/enums/cloud-storage-protocol.json rename to schemas/cache/3.0/enums/cloud-storage-protocol.json diff --git a/schemas/cache/enums/co-branding-requirement.json b/schemas/cache/3.0/enums/co-branding-requirement.json similarity index 100% rename from schemas/cache/enums/co-branding-requirement.json rename to schemas/cache/3.0/enums/co-branding-requirement.json diff --git a/schemas/cache/enums/collection-cadence.json b/schemas/cache/3.0/enums/collection-cadence.json similarity index 100% rename from schemas/cache/enums/collection-cadence.json rename to schemas/cache/3.0/enums/collection-cadence.json diff --git a/schemas/cache/enums/collection-kind.json b/schemas/cache/3.0/enums/collection-kind.json similarity index 100% rename from schemas/cache/enums/collection-kind.json rename to schemas/cache/3.0/enums/collection-kind.json diff --git a/schemas/cache/enums/collection-relationship.json b/schemas/cache/3.0/enums/collection-relationship.json similarity index 100% rename from schemas/cache/enums/collection-relationship.json rename to schemas/cache/3.0/enums/collection-relationship.json diff --git a/schemas/cache/enums/collection-status.json b/schemas/cache/3.0/enums/collection-status.json similarity index 100% rename from schemas/cache/enums/collection-status.json rename to schemas/cache/3.0/enums/collection-status.json diff --git a/schemas/cache/enums/consent-basis.json b/schemas/cache/3.0/enums/consent-basis.json similarity index 100% rename from schemas/cache/enums/consent-basis.json rename to schemas/cache/3.0/enums/consent-basis.json diff --git a/schemas/cache/enums/content-id-type.json b/schemas/cache/3.0/enums/content-id-type.json similarity index 100% rename from schemas/cache/enums/content-id-type.json rename to schemas/cache/3.0/enums/content-id-type.json diff --git a/schemas/cache/enums/content-rating-system.json b/schemas/cache/3.0/enums/content-rating-system.json similarity index 100% rename from schemas/cache/enums/content-rating-system.json rename to schemas/cache/3.0/enums/content-rating-system.json diff --git a/schemas/cache/enums/creative-action.json b/schemas/cache/3.0/enums/creative-action.json similarity index 100% rename from schemas/cache/enums/creative-action.json rename to schemas/cache/3.0/enums/creative-action.json diff --git a/schemas/cache/enums/creative-agent-capability.json b/schemas/cache/3.0/enums/creative-agent-capability.json similarity index 100% rename from schemas/cache/enums/creative-agent-capability.json rename to schemas/cache/3.0/enums/creative-agent-capability.json diff --git a/schemas/cache/enums/creative-approval-status.json b/schemas/cache/3.0/enums/creative-approval-status.json similarity index 100% rename from schemas/cache/enums/creative-approval-status.json rename to schemas/cache/3.0/enums/creative-approval-status.json diff --git a/schemas/cache/enums/creative-identifier-type.json b/schemas/cache/3.0/enums/creative-identifier-type.json similarity index 100% rename from schemas/cache/enums/creative-identifier-type.json rename to schemas/cache/3.0/enums/creative-identifier-type.json diff --git a/schemas/cache/enums/creative-quality.json b/schemas/cache/3.0/enums/creative-quality.json similarity index 100% rename from schemas/cache/enums/creative-quality.json rename to schemas/cache/3.0/enums/creative-quality.json diff --git a/schemas/cache/enums/creative-sort-field.json b/schemas/cache/3.0/enums/creative-sort-field.json similarity index 100% rename from schemas/cache/enums/creative-sort-field.json rename to schemas/cache/3.0/enums/creative-sort-field.json diff --git a/schemas/cache/enums/creative-status.json b/schemas/cache/3.0/enums/creative-status.json similarity index 100% rename from schemas/cache/enums/creative-status.json rename to schemas/cache/3.0/enums/creative-status.json diff --git a/schemas/cache/enums/daast-tracking-event.json b/schemas/cache/3.0/enums/daast-tracking-event.json similarity index 100% rename from schemas/cache/enums/daast-tracking-event.json rename to schemas/cache/3.0/enums/daast-tracking-event.json diff --git a/schemas/cache/enums/daast-version.json b/schemas/cache/3.0/enums/daast-version.json similarity index 100% rename from schemas/cache/enums/daast-version.json rename to schemas/cache/3.0/enums/daast-version.json diff --git a/schemas/cache/enums/day-of-week.json b/schemas/cache/3.0/enums/day-of-week.json similarity index 100% rename from schemas/cache/enums/day-of-week.json rename to schemas/cache/3.0/enums/day-of-week.json diff --git a/schemas/cache/enums/delegation-authority.json b/schemas/cache/3.0/enums/delegation-authority.json similarity index 100% rename from schemas/cache/enums/delegation-authority.json rename to schemas/cache/3.0/enums/delegation-authority.json diff --git a/schemas/cache/enums/delivery-type.json b/schemas/cache/3.0/enums/delivery-type.json similarity index 100% rename from schemas/cache/enums/delivery-type.json rename to schemas/cache/3.0/enums/delivery-type.json diff --git a/schemas/cache/enums/demographic-system.json b/schemas/cache/3.0/enums/demographic-system.json similarity index 100% rename from schemas/cache/enums/demographic-system.json rename to schemas/cache/3.0/enums/demographic-system.json diff --git a/schemas/cache/enums/derivative-type.json b/schemas/cache/3.0/enums/derivative-type.json similarity index 100% rename from schemas/cache/enums/derivative-type.json rename to schemas/cache/3.0/enums/derivative-type.json diff --git a/schemas/cache/enums/device-platform.json b/schemas/cache/3.0/enums/device-platform.json similarity index 100% rename from schemas/cache/enums/device-platform.json rename to schemas/cache/3.0/enums/device-platform.json diff --git a/schemas/cache/enums/device-type.json b/schemas/cache/3.0/enums/device-type.json similarity index 100% rename from schemas/cache/enums/device-type.json rename to schemas/cache/3.0/enums/device-type.json diff --git a/schemas/cache/enums/digital-source-type.json b/schemas/cache/3.0/enums/digital-source-type.json similarity index 100% rename from schemas/cache/enums/digital-source-type.json rename to schemas/cache/3.0/enums/digital-source-type.json diff --git a/schemas/cache/enums/dimension-unit.json b/schemas/cache/3.0/enums/dimension-unit.json similarity index 100% rename from schemas/cache/enums/dimension-unit.json rename to schemas/cache/3.0/enums/dimension-unit.json diff --git a/schemas/cache/enums/disclosure-persistence.json b/schemas/cache/3.0/enums/disclosure-persistence.json similarity index 100% rename from schemas/cache/enums/disclosure-persistence.json rename to schemas/cache/3.0/enums/disclosure-persistence.json diff --git a/schemas/cache/enums/disclosure-position.json b/schemas/cache/3.0/enums/disclosure-position.json similarity index 100% rename from schemas/cache/enums/disclosure-position.json rename to schemas/cache/3.0/enums/disclosure-position.json diff --git a/schemas/cache/enums/distance-unit.json b/schemas/cache/3.0/enums/distance-unit.json similarity index 100% rename from schemas/cache/enums/distance-unit.json rename to schemas/cache/3.0/enums/distance-unit.json diff --git a/schemas/cache/enums/distribution-identifier-type.json b/schemas/cache/3.0/enums/distribution-identifier-type.json similarity index 100% rename from schemas/cache/enums/distribution-identifier-type.json rename to schemas/cache/3.0/enums/distribution-identifier-type.json diff --git a/schemas/cache/enums/error-code.json b/schemas/cache/3.0/enums/error-code.json similarity index 100% rename from schemas/cache/enums/error-code.json rename to schemas/cache/3.0/enums/error-code.json diff --git a/schemas/cache/enums/escalation-severity.json b/schemas/cache/3.0/enums/escalation-severity.json similarity index 100% rename from schemas/cache/enums/escalation-severity.json rename to schemas/cache/3.0/enums/escalation-severity.json diff --git a/schemas/cache/enums/event-type.json b/schemas/cache/3.0/enums/event-type.json similarity index 100% rename from schemas/cache/enums/event-type.json rename to schemas/cache/3.0/enums/event-type.json diff --git a/schemas/cache/enums/exclusivity.json b/schemas/cache/3.0/enums/exclusivity.json similarity index 100% rename from schemas/cache/enums/exclusivity.json rename to schemas/cache/3.0/enums/exclusivity.json diff --git a/schemas/cache/enums/feature-check-status.json b/schemas/cache/3.0/enums/feature-check-status.json similarity index 100% rename from schemas/cache/enums/feature-check-status.json rename to schemas/cache/3.0/enums/feature-check-status.json diff --git a/schemas/cache/enums/feed-format.json b/schemas/cache/3.0/enums/feed-format.json similarity index 100% rename from schemas/cache/enums/feed-format.json rename to schemas/cache/3.0/enums/feed-format.json diff --git a/schemas/cache/enums/feedback-source.json b/schemas/cache/3.0/enums/feedback-source.json similarity index 100% rename from schemas/cache/enums/feedback-source.json rename to schemas/cache/3.0/enums/feedback-source.json diff --git a/schemas/cache/enums/forecast-method.json b/schemas/cache/3.0/enums/forecast-method.json similarity index 100% rename from schemas/cache/enums/forecast-method.json rename to schemas/cache/3.0/enums/forecast-method.json diff --git a/schemas/cache/enums/forecast-range-unit.json b/schemas/cache/3.0/enums/forecast-range-unit.json similarity index 100% rename from schemas/cache/enums/forecast-range-unit.json rename to schemas/cache/3.0/enums/forecast-range-unit.json diff --git a/schemas/cache/enums/forecastable-metric.json b/schemas/cache/3.0/enums/forecastable-metric.json similarity index 100% rename from schemas/cache/enums/forecastable-metric.json rename to schemas/cache/3.0/enums/forecastable-metric.json diff --git a/schemas/cache/enums/format-id-parameter.json b/schemas/cache/3.0/enums/format-id-parameter.json similarity index 100% rename from schemas/cache/enums/format-id-parameter.json rename to schemas/cache/3.0/enums/format-id-parameter.json diff --git a/schemas/cache/enums/frame-rate-type.json b/schemas/cache/3.0/enums/frame-rate-type.json similarity index 100% rename from schemas/cache/enums/frame-rate-type.json rename to schemas/cache/3.0/enums/frame-rate-type.json diff --git a/schemas/cache/enums/frequency-cap-scope.json b/schemas/cache/3.0/enums/frequency-cap-scope.json similarity index 100% rename from schemas/cache/enums/frequency-cap-scope.json rename to schemas/cache/3.0/enums/frequency-cap-scope.json diff --git a/schemas/cache/enums/genre-taxonomy.json b/schemas/cache/3.0/enums/genre-taxonomy.json similarity index 100% rename from schemas/cache/enums/genre-taxonomy.json rename to schemas/cache/3.0/enums/genre-taxonomy.json diff --git a/schemas/cache/enums/geo-level.json b/schemas/cache/3.0/enums/geo-level.json similarity index 100% rename from schemas/cache/enums/geo-level.json rename to schemas/cache/3.0/enums/geo-level.json diff --git a/schemas/cache/enums/gop-type.json b/schemas/cache/3.0/enums/gop-type.json similarity index 100% rename from schemas/cache/enums/gop-type.json rename to schemas/cache/3.0/enums/gop-type.json diff --git a/schemas/cache/enums/governance-decision.json b/schemas/cache/3.0/enums/governance-decision.json similarity index 100% rename from schemas/cache/enums/governance-decision.json rename to schemas/cache/3.0/enums/governance-decision.json diff --git a/schemas/cache/enums/governance-domain.json b/schemas/cache/3.0/enums/governance-domain.json similarity index 100% rename from schemas/cache/enums/governance-domain.json rename to schemas/cache/3.0/enums/governance-domain.json diff --git a/schemas/cache/enums/governance-mode.json b/schemas/cache/3.0/enums/governance-mode.json similarity index 100% rename from schemas/cache/enums/governance-mode.json rename to schemas/cache/3.0/enums/governance-mode.json diff --git a/schemas/cache/enums/governance-phase.json b/schemas/cache/3.0/enums/governance-phase.json similarity index 100% rename from schemas/cache/enums/governance-phase.json rename to schemas/cache/3.0/enums/governance-phase.json diff --git a/schemas/cache/enums/history-entry-type.json b/schemas/cache/3.0/enums/history-entry-type.json similarity index 100% rename from schemas/cache/enums/history-entry-type.json rename to schemas/cache/3.0/enums/history-entry-type.json diff --git a/schemas/cache/enums/http-method.json b/schemas/cache/3.0/enums/http-method.json similarity index 100% rename from schemas/cache/enums/http-method.json rename to schemas/cache/3.0/enums/http-method.json diff --git a/schemas/cache/enums/identifier-types.json b/schemas/cache/3.0/enums/identifier-types.json similarity index 100% rename from schemas/cache/enums/identifier-types.json rename to schemas/cache/3.0/enums/identifier-types.json diff --git a/schemas/cache/enums/installment-status.json b/schemas/cache/3.0/enums/installment-status.json similarity index 100% rename from schemas/cache/enums/installment-status.json rename to schemas/cache/3.0/enums/installment-status.json diff --git a/schemas/cache/enums/javascript-module-type.json b/schemas/cache/3.0/enums/javascript-module-type.json similarity index 100% rename from schemas/cache/enums/javascript-module-type.json rename to schemas/cache/3.0/enums/javascript-module-type.json diff --git a/schemas/cache/enums/landing-page-requirement.json b/schemas/cache/3.0/enums/landing-page-requirement.json similarity index 100% rename from schemas/cache/enums/landing-page-requirement.json rename to schemas/cache/3.0/enums/landing-page-requirement.json diff --git a/schemas/cache/enums/makegood-remedy.json b/schemas/cache/3.0/enums/makegood-remedy.json similarity index 100% rename from schemas/cache/enums/makegood-remedy.json rename to schemas/cache/3.0/enums/makegood-remedy.json diff --git a/schemas/cache/enums/markdown-flavor.json b/schemas/cache/3.0/enums/markdown-flavor.json similarity index 100% rename from schemas/cache/enums/markdown-flavor.json rename to schemas/cache/3.0/enums/markdown-flavor.json diff --git a/schemas/cache/enums/match-id-type.json b/schemas/cache/3.0/enums/match-id-type.json similarity index 100% rename from schemas/cache/enums/match-id-type.json rename to schemas/cache/3.0/enums/match-id-type.json diff --git a/schemas/cache/enums/match-type.json b/schemas/cache/3.0/enums/match-type.json similarity index 100% rename from schemas/cache/enums/match-type.json rename to schemas/cache/3.0/enums/match-type.json diff --git a/schemas/cache/enums/media-buy-status.json b/schemas/cache/3.0/enums/media-buy-status.json similarity index 100% rename from schemas/cache/enums/media-buy-status.json rename to schemas/cache/3.0/enums/media-buy-status.json diff --git a/schemas/cache/enums/media-buy-valid-action.json b/schemas/cache/3.0/enums/media-buy-valid-action.json similarity index 100% rename from schemas/cache/enums/media-buy-valid-action.json rename to schemas/cache/3.0/enums/media-buy-valid-action.json diff --git a/schemas/cache/enums/metric-type.json b/schemas/cache/3.0/enums/metric-type.json similarity index 100% rename from schemas/cache/enums/metric-type.json rename to schemas/cache/3.0/enums/metric-type.json diff --git a/schemas/cache/enums/metro-system.json b/schemas/cache/3.0/enums/metro-system.json similarity index 100% rename from schemas/cache/enums/metro-system.json rename to schemas/cache/3.0/enums/metro-system.json diff --git a/schemas/cache/enums/moov-atom-position.json b/schemas/cache/3.0/enums/moov-atom-position.json similarity index 100% rename from schemas/cache/enums/moov-atom-position.json rename to schemas/cache/3.0/enums/moov-atom-position.json diff --git a/schemas/cache/enums/notification-type.json b/schemas/cache/3.0/enums/notification-type.json similarity index 100% rename from schemas/cache/enums/notification-type.json rename to schemas/cache/3.0/enums/notification-type.json diff --git a/schemas/cache/enums/outcome-type.json b/schemas/cache/3.0/enums/outcome-type.json similarity index 100% rename from schemas/cache/enums/outcome-type.json rename to schemas/cache/3.0/enums/outcome-type.json diff --git a/schemas/cache/enums/pacing.json b/schemas/cache/3.0/enums/pacing.json similarity index 100% rename from schemas/cache/enums/pacing.json rename to schemas/cache/3.0/enums/pacing.json diff --git a/schemas/cache/enums/payment-terms.json b/schemas/cache/3.0/enums/payment-terms.json similarity index 100% rename from schemas/cache/enums/payment-terms.json rename to schemas/cache/3.0/enums/payment-terms.json diff --git a/schemas/cache/enums/performance-standard-metric.json b/schemas/cache/3.0/enums/performance-standard-metric.json similarity index 100% rename from schemas/cache/enums/performance-standard-metric.json rename to schemas/cache/3.0/enums/performance-standard-metric.json diff --git a/schemas/cache/enums/policy-category.json b/schemas/cache/3.0/enums/policy-category.json similarity index 100% rename from schemas/cache/enums/policy-category.json rename to schemas/cache/3.0/enums/policy-category.json diff --git a/schemas/cache/enums/policy-enforcement.json b/schemas/cache/3.0/enums/policy-enforcement.json similarity index 100% rename from schemas/cache/enums/policy-enforcement.json rename to schemas/cache/3.0/enums/policy-enforcement.json diff --git a/schemas/cache/enums/postal-system.json b/schemas/cache/3.0/enums/postal-system.json similarity index 100% rename from schemas/cache/enums/postal-system.json rename to schemas/cache/3.0/enums/postal-system.json diff --git a/schemas/cache/enums/preview-output-format.json b/schemas/cache/3.0/enums/preview-output-format.json similarity index 100% rename from schemas/cache/enums/preview-output-format.json rename to schemas/cache/3.0/enums/preview-output-format.json diff --git a/schemas/cache/enums/pricing-model.json b/schemas/cache/3.0/enums/pricing-model.json similarity index 100% rename from schemas/cache/enums/pricing-model.json rename to schemas/cache/3.0/enums/pricing-model.json diff --git a/schemas/cache/enums/production-quality.json b/schemas/cache/3.0/enums/production-quality.json similarity index 100% rename from schemas/cache/enums/production-quality.json rename to schemas/cache/3.0/enums/production-quality.json diff --git a/schemas/cache/enums/property-type.json b/schemas/cache/3.0/enums/property-type.json similarity index 100% rename from schemas/cache/enums/property-type.json rename to schemas/cache/3.0/enums/property-type.json diff --git a/schemas/cache/enums/proposal-status.json b/schemas/cache/3.0/enums/proposal-status.json similarity index 100% rename from schemas/cache/enums/proposal-status.json rename to schemas/cache/3.0/enums/proposal-status.json diff --git a/schemas/cache/enums/publisher-identifier-types.json b/schemas/cache/3.0/enums/publisher-identifier-types.json similarity index 100% rename from schemas/cache/enums/publisher-identifier-types.json rename to schemas/cache/3.0/enums/publisher-identifier-types.json diff --git a/schemas/cache/enums/purchase-type.json b/schemas/cache/3.0/enums/purchase-type.json similarity index 100% rename from schemas/cache/enums/purchase-type.json rename to schemas/cache/3.0/enums/purchase-type.json diff --git a/schemas/cache/enums/reach-unit.json b/schemas/cache/3.0/enums/reach-unit.json similarity index 100% rename from schemas/cache/enums/reach-unit.json rename to schemas/cache/3.0/enums/reach-unit.json diff --git a/schemas/cache/enums/reporting-frequency.json b/schemas/cache/3.0/enums/reporting-frequency.json similarity index 100% rename from schemas/cache/enums/reporting-frequency.json rename to schemas/cache/3.0/enums/reporting-frequency.json diff --git a/schemas/cache/enums/response-type.json b/schemas/cache/3.0/enums/response-type.json similarity index 100% rename from schemas/cache/enums/response-type.json rename to schemas/cache/3.0/enums/response-type.json diff --git a/schemas/cache/enums/restricted-attribute.json b/schemas/cache/3.0/enums/restricted-attribute.json similarity index 100% rename from schemas/cache/enums/restricted-attribute.json rename to schemas/cache/3.0/enums/restricted-attribute.json diff --git a/schemas/cache/enums/right-type.json b/schemas/cache/3.0/enums/right-type.json similarity index 100% rename from schemas/cache/enums/right-type.json rename to schemas/cache/3.0/enums/right-type.json diff --git a/schemas/cache/enums/right-use.json b/schemas/cache/3.0/enums/right-use.json similarity index 100% rename from schemas/cache/enums/right-use.json rename to schemas/cache/3.0/enums/right-use.json diff --git a/schemas/cache/enums/rights-billing-period.json b/schemas/cache/3.0/enums/rights-billing-period.json similarity index 100% rename from schemas/cache/enums/rights-billing-period.json rename to schemas/cache/3.0/enums/rights-billing-period.json diff --git a/schemas/cache/enums/scan-type.json b/schemas/cache/3.0/enums/scan-type.json similarity index 100% rename from schemas/cache/enums/scan-type.json rename to schemas/cache/3.0/enums/scan-type.json diff --git a/schemas/cache/enums/si-session-status.json b/schemas/cache/3.0/enums/si-session-status.json similarity index 100% rename from schemas/cache/enums/si-session-status.json rename to schemas/cache/3.0/enums/si-session-status.json diff --git a/schemas/cache/enums/signal-catalog-type.json b/schemas/cache/3.0/enums/signal-catalog-type.json similarity index 100% rename from schemas/cache/enums/signal-catalog-type.json rename to schemas/cache/3.0/enums/signal-catalog-type.json diff --git a/schemas/cache/enums/signal-source.json b/schemas/cache/3.0/enums/signal-source.json similarity index 100% rename from schemas/cache/enums/signal-source.json rename to schemas/cache/3.0/enums/signal-source.json diff --git a/schemas/cache/enums/signal-value-type.json b/schemas/cache/3.0/enums/signal-value-type.json similarity index 100% rename from schemas/cache/enums/signal-value-type.json rename to schemas/cache/3.0/enums/signal-value-type.json diff --git a/schemas/cache/enums/snapshot-unavailable-reason.json b/schemas/cache/3.0/enums/snapshot-unavailable-reason.json similarity index 100% rename from schemas/cache/enums/snapshot-unavailable-reason.json rename to schemas/cache/3.0/enums/snapshot-unavailable-reason.json diff --git a/schemas/cache/enums/sort-direction.json b/schemas/cache/3.0/enums/sort-direction.json similarity index 100% rename from schemas/cache/enums/sort-direction.json rename to schemas/cache/3.0/enums/sort-direction.json diff --git a/schemas/cache/enums/sort-metric.json b/schemas/cache/3.0/enums/sort-metric.json similarity index 100% rename from schemas/cache/enums/sort-metric.json rename to schemas/cache/3.0/enums/sort-metric.json diff --git a/schemas/cache/enums/special-category.json b/schemas/cache/3.0/enums/special-category.json similarity index 100% rename from schemas/cache/enums/special-category.json rename to schemas/cache/3.0/enums/special-category.json diff --git a/schemas/cache/enums/specialism.json b/schemas/cache/3.0/enums/specialism.json similarity index 100% rename from schemas/cache/enums/specialism.json rename to schemas/cache/3.0/enums/specialism.json diff --git a/schemas/cache/enums/talent-role.json b/schemas/cache/3.0/enums/talent-role.json similarity index 100% rename from schemas/cache/enums/talent-role.json rename to schemas/cache/3.0/enums/talent-role.json diff --git a/schemas/cache/enums/task-status.json b/schemas/cache/3.0/enums/task-status.json similarity index 100% rename from schemas/cache/enums/task-status.json rename to schemas/cache/3.0/enums/task-status.json diff --git a/schemas/cache/enums/task-type.json b/schemas/cache/3.0/enums/task-type.json similarity index 100% rename from schemas/cache/enums/task-type.json rename to schemas/cache/3.0/enums/task-type.json diff --git a/schemas/cache/enums/transport-mode.json b/schemas/cache/3.0/enums/transport-mode.json similarity index 100% rename from schemas/cache/enums/transport-mode.json rename to schemas/cache/3.0/enums/transport-mode.json diff --git a/schemas/cache/enums/travel-time-unit.json b/schemas/cache/3.0/enums/travel-time-unit.json similarity index 100% rename from schemas/cache/enums/travel-time-unit.json rename to schemas/cache/3.0/enums/travel-time-unit.json diff --git a/schemas/cache/enums/uid-type.json b/schemas/cache/3.0/enums/uid-type.json similarity index 100% rename from schemas/cache/enums/uid-type.json rename to schemas/cache/3.0/enums/uid-type.json diff --git a/schemas/cache/enums/universal-macro.json b/schemas/cache/3.0/enums/universal-macro.json similarity index 100% rename from schemas/cache/enums/universal-macro.json rename to schemas/cache/3.0/enums/universal-macro.json diff --git a/schemas/cache/enums/update-frequency.json b/schemas/cache/3.0/enums/update-frequency.json similarity index 100% rename from schemas/cache/enums/update-frequency.json rename to schemas/cache/3.0/enums/update-frequency.json diff --git a/schemas/cache/enums/url-asset-type.json b/schemas/cache/3.0/enums/url-asset-type.json similarity index 100% rename from schemas/cache/enums/url-asset-type.json rename to schemas/cache/3.0/enums/url-asset-type.json diff --git a/schemas/cache/enums/validation-mode.json b/schemas/cache/3.0/enums/validation-mode.json similarity index 100% rename from schemas/cache/enums/validation-mode.json rename to schemas/cache/3.0/enums/validation-mode.json diff --git a/schemas/cache/enums/vast-tracking-event.json b/schemas/cache/3.0/enums/vast-tracking-event.json similarity index 100% rename from schemas/cache/enums/vast-tracking-event.json rename to schemas/cache/3.0/enums/vast-tracking-event.json diff --git a/schemas/cache/enums/vast-version.json b/schemas/cache/3.0/enums/vast-version.json similarity index 100% rename from schemas/cache/enums/vast-version.json rename to schemas/cache/3.0/enums/vast-version.json diff --git a/schemas/cache/enums/viewability-standard.json b/schemas/cache/3.0/enums/viewability-standard.json similarity index 100% rename from schemas/cache/enums/viewability-standard.json rename to schemas/cache/3.0/enums/viewability-standard.json diff --git a/schemas/cache/enums/wcag-level.json b/schemas/cache/3.0/enums/wcag-level.json similarity index 100% rename from schemas/cache/enums/wcag-level.json rename to schemas/cache/3.0/enums/wcag-level.json diff --git a/schemas/cache/enums/webhook-response-type.json b/schemas/cache/3.0/enums/webhook-response-type.json similarity index 100% rename from schemas/cache/enums/webhook-response-type.json rename to schemas/cache/3.0/enums/webhook-response-type.json diff --git a/schemas/cache/enums/webhook-security-method.json b/schemas/cache/3.0/enums/webhook-security-method.json similarity index 100% rename from schemas/cache/enums/webhook-security-method.json rename to schemas/cache/3.0/enums/webhook-security-method.json diff --git a/schemas/cache/error-details/account-setup-required.json b/schemas/cache/3.0/error-details/account-setup-required.json similarity index 100% rename from schemas/cache/error-details/account-setup-required.json rename to schemas/cache/3.0/error-details/account-setup-required.json diff --git a/schemas/cache/error-details/audience-too-small.json b/schemas/cache/3.0/error-details/audience-too-small.json similarity index 100% rename from schemas/cache/error-details/audience-too-small.json rename to schemas/cache/3.0/error-details/audience-too-small.json diff --git a/schemas/cache/error-details/budget-too-low.json b/schemas/cache/3.0/error-details/budget-too-low.json similarity index 100% rename from schemas/cache/error-details/budget-too-low.json rename to schemas/cache/3.0/error-details/budget-too-low.json diff --git a/schemas/cache/error-details/conflict.json b/schemas/cache/3.0/error-details/conflict.json similarity index 100% rename from schemas/cache/error-details/conflict.json rename to schemas/cache/3.0/error-details/conflict.json diff --git a/schemas/cache/error-details/creative-rejected.json b/schemas/cache/3.0/error-details/creative-rejected.json similarity index 100% rename from schemas/cache/error-details/creative-rejected.json rename to schemas/cache/3.0/error-details/creative-rejected.json diff --git a/schemas/cache/error-details/policy-violation.json b/schemas/cache/3.0/error-details/policy-violation.json similarity index 100% rename from schemas/cache/error-details/policy-violation.json rename to schemas/cache/3.0/error-details/policy-violation.json diff --git a/schemas/cache/error-details/rate-limited.json b/schemas/cache/3.0/error-details/rate-limited.json similarity index 100% rename from schemas/cache/error-details/rate-limited.json rename to schemas/cache/3.0/error-details/rate-limited.json diff --git a/schemas/cache/error-details/vendor-error-codes.json b/schemas/cache/3.0/error-details/vendor-error-codes.json similarity index 100% rename from schemas/cache/error-details/vendor-error-codes.json rename to schemas/cache/3.0/error-details/vendor-error-codes.json diff --git a/schemas/cache/extensions/extension-meta.json b/schemas/cache/3.0/extensions/extension-meta.json similarity index 100% rename from schemas/cache/extensions/extension-meta.json rename to schemas/cache/3.0/extensions/extension-meta.json diff --git a/schemas/cache/extensions/index.json b/schemas/cache/3.0/extensions/index.json similarity index 100% rename from schemas/cache/extensions/index.json rename to schemas/cache/3.0/extensions/index.json diff --git a/schemas/cache/governance/attribute-definition.json b/schemas/cache/3.0/governance/attribute-definition.json similarity index 100% rename from schemas/cache/governance/attribute-definition.json rename to schemas/cache/3.0/governance/attribute-definition.json diff --git a/schemas/cache/governance/audience-constraints.json b/schemas/cache/3.0/governance/audience-constraints.json similarity index 100% rename from schemas/cache/governance/audience-constraints.json rename to schemas/cache/3.0/governance/audience-constraints.json diff --git a/schemas/cache/governance/check-governance-request.json b/schemas/cache/3.0/governance/check-governance-request.json similarity index 100% rename from schemas/cache/governance/check-governance-request.json rename to schemas/cache/3.0/governance/check-governance-request.json diff --git a/schemas/cache/governance/check-governance-response.json b/schemas/cache/3.0/governance/check-governance-response.json similarity index 100% rename from schemas/cache/governance/check-governance-response.json rename to schemas/cache/3.0/governance/check-governance-response.json diff --git a/schemas/cache/governance/get-plan-audit-logs-request.json b/schemas/cache/3.0/governance/get-plan-audit-logs-request.json similarity index 100% rename from schemas/cache/governance/get-plan-audit-logs-request.json rename to schemas/cache/3.0/governance/get-plan-audit-logs-request.json diff --git a/schemas/cache/governance/get-plan-audit-logs-response.json b/schemas/cache/3.0/governance/get-plan-audit-logs-response.json similarity index 100% rename from schemas/cache/governance/get-plan-audit-logs-response.json rename to schemas/cache/3.0/governance/get-plan-audit-logs-response.json diff --git a/schemas/cache/governance/policy-category-definition.json b/schemas/cache/3.0/governance/policy-category-definition.json similarity index 100% rename from schemas/cache/governance/policy-category-definition.json rename to schemas/cache/3.0/governance/policy-category-definition.json diff --git a/schemas/cache/governance/policy-entry.json b/schemas/cache/3.0/governance/policy-entry.json similarity index 100% rename from schemas/cache/governance/policy-entry.json rename to schemas/cache/3.0/governance/policy-entry.json diff --git a/schemas/cache/governance/policy-ref.json b/schemas/cache/3.0/governance/policy-ref.json similarity index 100% rename from schemas/cache/governance/policy-ref.json rename to schemas/cache/3.0/governance/policy-ref.json diff --git a/schemas/cache/governance/report-plan-outcome-request.json b/schemas/cache/3.0/governance/report-plan-outcome-request.json similarity index 100% rename from schemas/cache/governance/report-plan-outcome-request.json rename to schemas/cache/3.0/governance/report-plan-outcome-request.json diff --git a/schemas/cache/governance/report-plan-outcome-response.json b/schemas/cache/3.0/governance/report-plan-outcome-response.json similarity index 100% rename from schemas/cache/governance/report-plan-outcome-response.json rename to schemas/cache/3.0/governance/report-plan-outcome-response.json diff --git a/schemas/cache/governance/sync-plans-request.json b/schemas/cache/3.0/governance/sync-plans-request.json similarity index 100% rename from schemas/cache/governance/sync-plans-request.json rename to schemas/cache/3.0/governance/sync-plans-request.json diff --git a/schemas/cache/governance/sync-plans-response.json b/schemas/cache/3.0/governance/sync-plans-response.json similarity index 100% rename from schemas/cache/governance/sync-plans-response.json rename to schemas/cache/3.0/governance/sync-plans-response.json diff --git a/schemas/cache/index.json b/schemas/cache/3.0/index.json similarity index 100% rename from schemas/cache/index.json rename to schemas/cache/3.0/index.json diff --git a/schemas/cache/manifest.json b/schemas/cache/3.0/manifest.json similarity index 100% rename from schemas/cache/manifest.json rename to schemas/cache/3.0/manifest.json diff --git a/schemas/cache/manifest.schema.json b/schemas/cache/3.0/manifest.schema.json similarity index 100% rename from schemas/cache/manifest.schema.json rename to schemas/cache/3.0/manifest.schema.json diff --git a/schemas/cache/media-buy/build-creative-async-response-input-required.json b/schemas/cache/3.0/media-buy/build-creative-async-response-input-required.json similarity index 100% rename from schemas/cache/media-buy/build-creative-async-response-input-required.json rename to schemas/cache/3.0/media-buy/build-creative-async-response-input-required.json diff --git a/schemas/cache/media-buy/build-creative-async-response-submitted.json b/schemas/cache/3.0/media-buy/build-creative-async-response-submitted.json similarity index 100% rename from schemas/cache/media-buy/build-creative-async-response-submitted.json rename to schemas/cache/3.0/media-buy/build-creative-async-response-submitted.json diff --git a/schemas/cache/media-buy/build-creative-async-response-working.json b/schemas/cache/3.0/media-buy/build-creative-async-response-working.json similarity index 100% rename from schemas/cache/media-buy/build-creative-async-response-working.json rename to schemas/cache/3.0/media-buy/build-creative-async-response-working.json diff --git a/schemas/cache/media-buy/build-creative-request.json b/schemas/cache/3.0/media-buy/build-creative-request.json similarity index 100% rename from schemas/cache/media-buy/build-creative-request.json rename to schemas/cache/3.0/media-buy/build-creative-request.json diff --git a/schemas/cache/media-buy/build-creative-response.json b/schemas/cache/3.0/media-buy/build-creative-response.json similarity index 100% rename from schemas/cache/media-buy/build-creative-response.json rename to schemas/cache/3.0/media-buy/build-creative-response.json diff --git a/schemas/cache/media-buy/create-media-buy-async-response-input-required.json b/schemas/cache/3.0/media-buy/create-media-buy-async-response-input-required.json similarity index 100% rename from schemas/cache/media-buy/create-media-buy-async-response-input-required.json rename to schemas/cache/3.0/media-buy/create-media-buy-async-response-input-required.json diff --git a/schemas/cache/media-buy/create-media-buy-async-response-submitted.json b/schemas/cache/3.0/media-buy/create-media-buy-async-response-submitted.json similarity index 100% rename from schemas/cache/media-buy/create-media-buy-async-response-submitted.json rename to schemas/cache/3.0/media-buy/create-media-buy-async-response-submitted.json diff --git a/schemas/cache/media-buy/create-media-buy-async-response-working.json b/schemas/cache/3.0/media-buy/create-media-buy-async-response-working.json similarity index 100% rename from schemas/cache/media-buy/create-media-buy-async-response-working.json rename to schemas/cache/3.0/media-buy/create-media-buy-async-response-working.json diff --git a/schemas/cache/media-buy/create-media-buy-request.json b/schemas/cache/3.0/media-buy/create-media-buy-request.json similarity index 100% rename from schemas/cache/media-buy/create-media-buy-request.json rename to schemas/cache/3.0/media-buy/create-media-buy-request.json diff --git a/schemas/cache/media-buy/create-media-buy-response.json b/schemas/cache/3.0/media-buy/create-media-buy-response.json similarity index 100% rename from schemas/cache/media-buy/create-media-buy-response.json rename to schemas/cache/3.0/media-buy/create-media-buy-response.json diff --git a/schemas/cache/media-buy/get-media-buy-delivery-request.json b/schemas/cache/3.0/media-buy/get-media-buy-delivery-request.json similarity index 100% rename from schemas/cache/media-buy/get-media-buy-delivery-request.json rename to schemas/cache/3.0/media-buy/get-media-buy-delivery-request.json diff --git a/schemas/cache/media-buy/get-media-buy-delivery-response.json b/schemas/cache/3.0/media-buy/get-media-buy-delivery-response.json similarity index 100% rename from schemas/cache/media-buy/get-media-buy-delivery-response.json rename to schemas/cache/3.0/media-buy/get-media-buy-delivery-response.json diff --git a/schemas/cache/media-buy/get-media-buys-request.json b/schemas/cache/3.0/media-buy/get-media-buys-request.json similarity index 100% rename from schemas/cache/media-buy/get-media-buys-request.json rename to schemas/cache/3.0/media-buy/get-media-buys-request.json diff --git a/schemas/cache/media-buy/get-media-buys-response.json b/schemas/cache/3.0/media-buy/get-media-buys-response.json similarity index 100% rename from schemas/cache/media-buy/get-media-buys-response.json rename to schemas/cache/3.0/media-buy/get-media-buys-response.json diff --git a/schemas/cache/media-buy/get-products-async-response-input-required.json b/schemas/cache/3.0/media-buy/get-products-async-response-input-required.json similarity index 100% rename from schemas/cache/media-buy/get-products-async-response-input-required.json rename to schemas/cache/3.0/media-buy/get-products-async-response-input-required.json diff --git a/schemas/cache/media-buy/get-products-async-response-submitted.json b/schemas/cache/3.0/media-buy/get-products-async-response-submitted.json similarity index 100% rename from schemas/cache/media-buy/get-products-async-response-submitted.json rename to schemas/cache/3.0/media-buy/get-products-async-response-submitted.json diff --git a/schemas/cache/media-buy/get-products-async-response-working.json b/schemas/cache/3.0/media-buy/get-products-async-response-working.json similarity index 100% rename from schemas/cache/media-buy/get-products-async-response-working.json rename to schemas/cache/3.0/media-buy/get-products-async-response-working.json diff --git a/schemas/cache/media-buy/get-products-request.json b/schemas/cache/3.0/media-buy/get-products-request.json similarity index 100% rename from schemas/cache/media-buy/get-products-request.json rename to schemas/cache/3.0/media-buy/get-products-request.json diff --git a/schemas/cache/media-buy/get-products-response.json b/schemas/cache/3.0/media-buy/get-products-response.json similarity index 100% rename from schemas/cache/media-buy/get-products-response.json rename to schemas/cache/3.0/media-buy/get-products-response.json diff --git a/schemas/cache/media-buy/list-creative-formats-request.json b/schemas/cache/3.0/media-buy/list-creative-formats-request.json similarity index 100% rename from schemas/cache/media-buy/list-creative-formats-request.json rename to schemas/cache/3.0/media-buy/list-creative-formats-request.json diff --git a/schemas/cache/media-buy/list-creative-formats-response.json b/schemas/cache/3.0/media-buy/list-creative-formats-response.json similarity index 100% rename from schemas/cache/media-buy/list-creative-formats-response.json rename to schemas/cache/3.0/media-buy/list-creative-formats-response.json diff --git a/schemas/cache/media-buy/log-event-request.json b/schemas/cache/3.0/media-buy/log-event-request.json similarity index 100% rename from schemas/cache/media-buy/log-event-request.json rename to schemas/cache/3.0/media-buy/log-event-request.json diff --git a/schemas/cache/media-buy/log-event-response.json b/schemas/cache/3.0/media-buy/log-event-response.json similarity index 100% rename from schemas/cache/media-buy/log-event-response.json rename to schemas/cache/3.0/media-buy/log-event-response.json diff --git a/schemas/cache/media-buy/package-request.json b/schemas/cache/3.0/media-buy/package-request.json similarity index 100% rename from schemas/cache/media-buy/package-request.json rename to schemas/cache/3.0/media-buy/package-request.json diff --git a/schemas/cache/media-buy/package-update.json b/schemas/cache/3.0/media-buy/package-update.json similarity index 100% rename from schemas/cache/media-buy/package-update.json rename to schemas/cache/3.0/media-buy/package-update.json diff --git a/schemas/cache/media-buy/provide-performance-feedback-request.json b/schemas/cache/3.0/media-buy/provide-performance-feedback-request.json similarity index 100% rename from schemas/cache/media-buy/provide-performance-feedback-request.json rename to schemas/cache/3.0/media-buy/provide-performance-feedback-request.json diff --git a/schemas/cache/media-buy/provide-performance-feedback-response.json b/schemas/cache/3.0/media-buy/provide-performance-feedback-response.json similarity index 100% rename from schemas/cache/media-buy/provide-performance-feedback-response.json rename to schemas/cache/3.0/media-buy/provide-performance-feedback-response.json diff --git a/schemas/cache/media-buy/sync-audiences-request.json b/schemas/cache/3.0/media-buy/sync-audiences-request.json similarity index 100% rename from schemas/cache/media-buy/sync-audiences-request.json rename to schemas/cache/3.0/media-buy/sync-audiences-request.json diff --git a/schemas/cache/media-buy/sync-audiences-response.json b/schemas/cache/3.0/media-buy/sync-audiences-response.json similarity index 100% rename from schemas/cache/media-buy/sync-audiences-response.json rename to schemas/cache/3.0/media-buy/sync-audiences-response.json diff --git a/schemas/cache/media-buy/sync-catalogs-async-response-input-required.json b/schemas/cache/3.0/media-buy/sync-catalogs-async-response-input-required.json similarity index 100% rename from schemas/cache/media-buy/sync-catalogs-async-response-input-required.json rename to schemas/cache/3.0/media-buy/sync-catalogs-async-response-input-required.json diff --git a/schemas/cache/media-buy/sync-catalogs-async-response-submitted.json b/schemas/cache/3.0/media-buy/sync-catalogs-async-response-submitted.json similarity index 100% rename from schemas/cache/media-buy/sync-catalogs-async-response-submitted.json rename to schemas/cache/3.0/media-buy/sync-catalogs-async-response-submitted.json diff --git a/schemas/cache/media-buy/sync-catalogs-async-response-working.json b/schemas/cache/3.0/media-buy/sync-catalogs-async-response-working.json similarity index 100% rename from schemas/cache/media-buy/sync-catalogs-async-response-working.json rename to schemas/cache/3.0/media-buy/sync-catalogs-async-response-working.json diff --git a/schemas/cache/media-buy/sync-catalogs-request.json b/schemas/cache/3.0/media-buy/sync-catalogs-request.json similarity index 100% rename from schemas/cache/media-buy/sync-catalogs-request.json rename to schemas/cache/3.0/media-buy/sync-catalogs-request.json diff --git a/schemas/cache/media-buy/sync-catalogs-response.json b/schemas/cache/3.0/media-buy/sync-catalogs-response.json similarity index 100% rename from schemas/cache/media-buy/sync-catalogs-response.json rename to schemas/cache/3.0/media-buy/sync-catalogs-response.json diff --git a/schemas/cache/media-buy/sync-event-sources-request.json b/schemas/cache/3.0/media-buy/sync-event-sources-request.json similarity index 100% rename from schemas/cache/media-buy/sync-event-sources-request.json rename to schemas/cache/3.0/media-buy/sync-event-sources-request.json diff --git a/schemas/cache/media-buy/sync-event-sources-response.json b/schemas/cache/3.0/media-buy/sync-event-sources-response.json similarity index 100% rename from schemas/cache/media-buy/sync-event-sources-response.json rename to schemas/cache/3.0/media-buy/sync-event-sources-response.json diff --git a/schemas/cache/media-buy/update-media-buy-async-response-input-required.json b/schemas/cache/3.0/media-buy/update-media-buy-async-response-input-required.json similarity index 100% rename from schemas/cache/media-buy/update-media-buy-async-response-input-required.json rename to schemas/cache/3.0/media-buy/update-media-buy-async-response-input-required.json diff --git a/schemas/cache/media-buy/update-media-buy-async-response-submitted.json b/schemas/cache/3.0/media-buy/update-media-buy-async-response-submitted.json similarity index 100% rename from schemas/cache/media-buy/update-media-buy-async-response-submitted.json rename to schemas/cache/3.0/media-buy/update-media-buy-async-response-submitted.json diff --git a/schemas/cache/media-buy/update-media-buy-async-response-working.json b/schemas/cache/3.0/media-buy/update-media-buy-async-response-working.json similarity index 100% rename from schemas/cache/media-buy/update-media-buy-async-response-working.json rename to schemas/cache/3.0/media-buy/update-media-buy-async-response-working.json diff --git a/schemas/cache/media-buy/update-media-buy-request.json b/schemas/cache/3.0/media-buy/update-media-buy-request.json similarity index 100% rename from schemas/cache/media-buy/update-media-buy-request.json rename to schemas/cache/3.0/media-buy/update-media-buy-request.json diff --git a/schemas/cache/media-buy/update-media-buy-response.json b/schemas/cache/3.0/media-buy/update-media-buy-response.json similarity index 100% rename from schemas/cache/media-buy/update-media-buy-response.json rename to schemas/cache/3.0/media-buy/update-media-buy-response.json diff --git a/schemas/cache/pricing-options/cpa-option.json b/schemas/cache/3.0/pricing-options/cpa-option.json similarity index 100% rename from schemas/cache/pricing-options/cpa-option.json rename to schemas/cache/3.0/pricing-options/cpa-option.json diff --git a/schemas/cache/pricing-options/cpc-option.json b/schemas/cache/3.0/pricing-options/cpc-option.json similarity index 100% rename from schemas/cache/pricing-options/cpc-option.json rename to schemas/cache/3.0/pricing-options/cpc-option.json diff --git a/schemas/cache/pricing-options/cpcv-option.json b/schemas/cache/3.0/pricing-options/cpcv-option.json similarity index 100% rename from schemas/cache/pricing-options/cpcv-option.json rename to schemas/cache/3.0/pricing-options/cpcv-option.json diff --git a/schemas/cache/pricing-options/cpm-option.json b/schemas/cache/3.0/pricing-options/cpm-option.json similarity index 100% rename from schemas/cache/pricing-options/cpm-option.json rename to schemas/cache/3.0/pricing-options/cpm-option.json diff --git a/schemas/cache/pricing-options/cpp-option.json b/schemas/cache/3.0/pricing-options/cpp-option.json similarity index 100% rename from schemas/cache/pricing-options/cpp-option.json rename to schemas/cache/3.0/pricing-options/cpp-option.json diff --git a/schemas/cache/pricing-options/cpv-option.json b/schemas/cache/3.0/pricing-options/cpv-option.json similarity index 100% rename from schemas/cache/pricing-options/cpv-option.json rename to schemas/cache/3.0/pricing-options/cpv-option.json diff --git a/schemas/cache/pricing-options/flat-rate-option.json b/schemas/cache/3.0/pricing-options/flat-rate-option.json similarity index 100% rename from schemas/cache/pricing-options/flat-rate-option.json rename to schemas/cache/3.0/pricing-options/flat-rate-option.json diff --git a/schemas/cache/pricing-options/price-breakdown.json b/schemas/cache/3.0/pricing-options/price-breakdown.json similarity index 100% rename from schemas/cache/pricing-options/price-breakdown.json rename to schemas/cache/3.0/pricing-options/price-breakdown.json diff --git a/schemas/cache/pricing-options/price-guidance.json b/schemas/cache/3.0/pricing-options/price-guidance.json similarity index 100% rename from schemas/cache/pricing-options/price-guidance.json rename to schemas/cache/3.0/pricing-options/price-guidance.json diff --git a/schemas/cache/pricing-options/time-option.json b/schemas/cache/3.0/pricing-options/time-option.json similarity index 100% rename from schemas/cache/pricing-options/time-option.json rename to schemas/cache/3.0/pricing-options/time-option.json diff --git a/schemas/cache/pricing-options/vcpm-option.json b/schemas/cache/3.0/pricing-options/vcpm-option.json similarity index 100% rename from schemas/cache/pricing-options/vcpm-option.json rename to schemas/cache/3.0/pricing-options/vcpm-option.json diff --git a/schemas/cache/property/authorization-result.json b/schemas/cache/3.0/property/authorization-result.json similarity index 100% rename from schemas/cache/property/authorization-result.json rename to schemas/cache/3.0/property/authorization-result.json diff --git a/schemas/cache/property/base-property-source.json b/schemas/cache/3.0/property/base-property-source.json similarity index 100% rename from schemas/cache/property/base-property-source.json rename to schemas/cache/3.0/property/base-property-source.json diff --git a/schemas/cache/property/create-property-list-request.json b/schemas/cache/3.0/property/create-property-list-request.json similarity index 100% rename from schemas/cache/property/create-property-list-request.json rename to schemas/cache/3.0/property/create-property-list-request.json diff --git a/schemas/cache/property/create-property-list-response.json b/schemas/cache/3.0/property/create-property-list-response.json similarity index 100% rename from schemas/cache/property/create-property-list-response.json rename to schemas/cache/3.0/property/create-property-list-response.json diff --git a/schemas/cache/property/delete-property-list-request.json b/schemas/cache/3.0/property/delete-property-list-request.json similarity index 100% rename from schemas/cache/property/delete-property-list-request.json rename to schemas/cache/3.0/property/delete-property-list-request.json diff --git a/schemas/cache/property/delete-property-list-response.json b/schemas/cache/3.0/property/delete-property-list-response.json similarity index 100% rename from schemas/cache/property/delete-property-list-response.json rename to schemas/cache/3.0/property/delete-property-list-response.json diff --git a/schemas/cache/property/delivery-record.json b/schemas/cache/3.0/property/delivery-record.json similarity index 100% rename from schemas/cache/property/delivery-record.json rename to schemas/cache/3.0/property/delivery-record.json diff --git a/schemas/cache/property/get-property-list-request.json b/schemas/cache/3.0/property/get-property-list-request.json similarity index 100% rename from schemas/cache/property/get-property-list-request.json rename to schemas/cache/3.0/property/get-property-list-request.json diff --git a/schemas/cache/property/get-property-list-response.json b/schemas/cache/3.0/property/get-property-list-response.json similarity index 100% rename from schemas/cache/property/get-property-list-response.json rename to schemas/cache/3.0/property/get-property-list-response.json diff --git a/schemas/cache/property/list-property-lists-request.json b/schemas/cache/3.0/property/list-property-lists-request.json similarity index 100% rename from schemas/cache/property/list-property-lists-request.json rename to schemas/cache/3.0/property/list-property-lists-request.json diff --git a/schemas/cache/property/list-property-lists-response.json b/schemas/cache/3.0/property/list-property-lists-response.json similarity index 100% rename from schemas/cache/property/list-property-lists-response.json rename to schemas/cache/3.0/property/list-property-lists-response.json diff --git a/schemas/cache/property/property-error.json b/schemas/cache/3.0/property/property-error.json similarity index 100% rename from schemas/cache/property/property-error.json rename to schemas/cache/3.0/property/property-error.json diff --git a/schemas/cache/property/property-feature-definition.json b/schemas/cache/3.0/property/property-feature-definition.json similarity index 100% rename from schemas/cache/property/property-feature-definition.json rename to schemas/cache/3.0/property/property-feature-definition.json diff --git a/schemas/cache/property/property-feature-result.json b/schemas/cache/3.0/property/property-feature-result.json similarity index 100% rename from schemas/cache/property/property-feature-result.json rename to schemas/cache/3.0/property/property-feature-result.json diff --git a/schemas/cache/property/property-feature-value.json b/schemas/cache/3.0/property/property-feature-value.json similarity index 100% rename from schemas/cache/property/property-feature-value.json rename to schemas/cache/3.0/property/property-feature-value.json diff --git a/schemas/cache/property/property-feature.json b/schemas/cache/3.0/property/property-feature.json similarity index 100% rename from schemas/cache/property/property-feature.json rename to schemas/cache/3.0/property/property-feature.json diff --git a/schemas/cache/property/property-list-changed-webhook.json b/schemas/cache/3.0/property/property-list-changed-webhook.json similarity index 100% rename from schemas/cache/property/property-list-changed-webhook.json rename to schemas/cache/3.0/property/property-list-changed-webhook.json diff --git a/schemas/cache/property/property-list-filters.json b/schemas/cache/3.0/property/property-list-filters.json similarity index 100% rename from schemas/cache/property/property-list-filters.json rename to schemas/cache/3.0/property/property-list-filters.json diff --git a/schemas/cache/property/property-list.json b/schemas/cache/3.0/property/property-list.json similarity index 100% rename from schemas/cache/property/property-list.json rename to schemas/cache/3.0/property/property-list.json diff --git a/schemas/cache/property/update-property-list-request.json b/schemas/cache/3.0/property/update-property-list-request.json similarity index 100% rename from schemas/cache/property/update-property-list-request.json rename to schemas/cache/3.0/property/update-property-list-request.json diff --git a/schemas/cache/property/update-property-list-response.json b/schemas/cache/3.0/property/update-property-list-response.json similarity index 100% rename from schemas/cache/property/update-property-list-response.json rename to schemas/cache/3.0/property/update-property-list-response.json diff --git a/schemas/cache/property/validate-property-delivery-request.json b/schemas/cache/3.0/property/validate-property-delivery-request.json similarity index 100% rename from schemas/cache/property/validate-property-delivery-request.json rename to schemas/cache/3.0/property/validate-property-delivery-request.json diff --git a/schemas/cache/property/validate-property-delivery-response.json b/schemas/cache/3.0/property/validate-property-delivery-response.json similarity index 100% rename from schemas/cache/property/validate-property-delivery-response.json rename to schemas/cache/3.0/property/validate-property-delivery-response.json diff --git a/schemas/cache/property/validation-result.json b/schemas/cache/3.0/property/validation-result.json similarity index 100% rename from schemas/cache/property/validation-result.json rename to schemas/cache/3.0/property/validation-result.json diff --git a/schemas/cache/protocol/get-adcp-capabilities-request.json b/schemas/cache/3.0/protocol/get-adcp-capabilities-request.json similarity index 100% rename from schemas/cache/protocol/get-adcp-capabilities-request.json rename to schemas/cache/3.0/protocol/get-adcp-capabilities-request.json diff --git a/schemas/cache/protocol/get-adcp-capabilities-response.json b/schemas/cache/3.0/protocol/get-adcp-capabilities-response.json similarity index 100% rename from schemas/cache/protocol/get-adcp-capabilities-response.json rename to schemas/cache/3.0/protocol/get-adcp-capabilities-response.json diff --git a/schemas/cache/signals/activate-signal-request.json b/schemas/cache/3.0/signals/activate-signal-request.json similarity index 100% rename from schemas/cache/signals/activate-signal-request.json rename to schemas/cache/3.0/signals/activate-signal-request.json diff --git a/schemas/cache/signals/activate-signal-response.json b/schemas/cache/3.0/signals/activate-signal-response.json similarity index 100% rename from schemas/cache/signals/activate-signal-response.json rename to schemas/cache/3.0/signals/activate-signal-response.json diff --git a/schemas/cache/signals/get-signals-request.json b/schemas/cache/3.0/signals/get-signals-request.json similarity index 100% rename from schemas/cache/signals/get-signals-request.json rename to schemas/cache/3.0/signals/get-signals-request.json diff --git a/schemas/cache/signals/get-signals-response.json b/schemas/cache/3.0/signals/get-signals-response.json similarity index 100% rename from schemas/cache/signals/get-signals-response.json rename to schemas/cache/3.0/signals/get-signals-response.json diff --git a/schemas/cache/sponsored-intelligence/si-capabilities.json b/schemas/cache/3.0/sponsored-intelligence/si-capabilities.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-capabilities.json rename to schemas/cache/3.0/sponsored-intelligence/si-capabilities.json diff --git a/schemas/cache/sponsored-intelligence/si-get-offering-request.json b/schemas/cache/3.0/sponsored-intelligence/si-get-offering-request.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-get-offering-request.json rename to schemas/cache/3.0/sponsored-intelligence/si-get-offering-request.json diff --git a/schemas/cache/sponsored-intelligence/si-get-offering-response.json b/schemas/cache/3.0/sponsored-intelligence/si-get-offering-response.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-get-offering-response.json rename to schemas/cache/3.0/sponsored-intelligence/si-get-offering-response.json diff --git a/schemas/cache/sponsored-intelligence/si-identity.json b/schemas/cache/3.0/sponsored-intelligence/si-identity.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-identity.json rename to schemas/cache/3.0/sponsored-intelligence/si-identity.json diff --git a/schemas/cache/sponsored-intelligence/si-initiate-session-request.json b/schemas/cache/3.0/sponsored-intelligence/si-initiate-session-request.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-initiate-session-request.json rename to schemas/cache/3.0/sponsored-intelligence/si-initiate-session-request.json diff --git a/schemas/cache/sponsored-intelligence/si-initiate-session-response.json b/schemas/cache/3.0/sponsored-intelligence/si-initiate-session-response.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-initiate-session-response.json rename to schemas/cache/3.0/sponsored-intelligence/si-initiate-session-response.json diff --git a/schemas/cache/sponsored-intelligence/si-send-message-request.json b/schemas/cache/3.0/sponsored-intelligence/si-send-message-request.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-send-message-request.json rename to schemas/cache/3.0/sponsored-intelligence/si-send-message-request.json diff --git a/schemas/cache/sponsored-intelligence/si-send-message-response.json b/schemas/cache/3.0/sponsored-intelligence/si-send-message-response.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-send-message-response.json rename to schemas/cache/3.0/sponsored-intelligence/si-send-message-response.json diff --git a/schemas/cache/sponsored-intelligence/si-terminate-session-request.json b/schemas/cache/3.0/sponsored-intelligence/si-terminate-session-request.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-terminate-session-request.json rename to schemas/cache/3.0/sponsored-intelligence/si-terminate-session-request.json diff --git a/schemas/cache/sponsored-intelligence/si-terminate-session-response.json b/schemas/cache/3.0/sponsored-intelligence/si-terminate-session-response.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-terminate-session-response.json rename to schemas/cache/3.0/sponsored-intelligence/si-terminate-session-response.json diff --git a/schemas/cache/sponsored-intelligence/si-ui-element.json b/schemas/cache/3.0/sponsored-intelligence/si-ui-element.json similarity index 100% rename from schemas/cache/sponsored-intelligence/si-ui-element.json rename to schemas/cache/3.0/sponsored-intelligence/si-ui-element.json diff --git a/schemas/cache/tmp/available-package.json b/schemas/cache/3.0/tmp/available-package.json similarity index 100% rename from schemas/cache/tmp/available-package.json rename to schemas/cache/3.0/tmp/available-package.json diff --git a/schemas/cache/tmp/context-match-request.json b/schemas/cache/3.0/tmp/context-match-request.json similarity index 100% rename from schemas/cache/tmp/context-match-request.json rename to schemas/cache/3.0/tmp/context-match-request.json diff --git a/schemas/cache/tmp/context-match-response.json b/schemas/cache/3.0/tmp/context-match-response.json similarity index 100% rename from schemas/cache/tmp/context-match-response.json rename to schemas/cache/3.0/tmp/context-match-response.json diff --git a/schemas/cache/tmp/error.json b/schemas/cache/3.0/tmp/error.json similarity index 100% rename from schemas/cache/tmp/error.json rename to schemas/cache/3.0/tmp/error.json diff --git a/schemas/cache/tmp/identity-match-request.json b/schemas/cache/3.0/tmp/identity-match-request.json similarity index 100% rename from schemas/cache/tmp/identity-match-request.json rename to schemas/cache/3.0/tmp/identity-match-request.json diff --git a/schemas/cache/tmp/identity-match-response.json b/schemas/cache/3.0/tmp/identity-match-response.json similarity index 100% rename from schemas/cache/tmp/identity-match-response.json rename to schemas/cache/3.0/tmp/identity-match-response.json diff --git a/schemas/cache/tmp/offer-price.json b/schemas/cache/3.0/tmp/offer-price.json similarity index 100% rename from schemas/cache/tmp/offer-price.json rename to schemas/cache/3.0/tmp/offer-price.json diff --git a/schemas/cache/tmp/offer.json b/schemas/cache/3.0/tmp/offer.json similarity index 100% rename from schemas/cache/tmp/offer.json rename to schemas/cache/3.0/tmp/offer.json diff --git a/schemas/cache/tmp/provider-registration.json b/schemas/cache/3.0/tmp/provider-registration.json similarity index 100% rename from schemas/cache/tmp/provider-registration.json rename to schemas/cache/3.0/tmp/provider-registration.json diff --git a/scripts/fix_schema_refs.py b/scripts/fix_schema_refs.py index 9509b6309..73e11eb96 100755 --- a/scripts/fix_schema_refs.py +++ b/scripts/fix_schema_refs.py @@ -6,11 +6,32 @@ which need to be converted to relative file paths for datamodel-codegen. """ +import importlib.util import json import sys from pathlib import Path -SCHEMAS_DIR = Path(__file__).parent.parent / "schemas" / "cache" +REPO_ROOT = Path(__file__).parent.parent + + +# Load ``resolve_bundle_key`` from its source file rather than via the +# ``adcp`` package — the package's ``__init__`` eagerly imports generated +# Pydantic models, which may be mid-regen when these scripts run. +def _load_resolve_bundle_key(): + src = REPO_ROOT / "src" / "adcp" / "validation" / "version.py" + spec = importlib.util.spec_from_file_location("_adcp_bundle_key", src) + assert spec is not None and spec.loader is not None + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod.resolve_bundle_key + + +resolve_bundle_key = _load_resolve_bundle_key() + +_VERSION_FILE = REPO_ROOT / "src" / "adcp" / "ADCP_VERSION" +_BUNDLE_KEY = resolve_bundle_key(_VERSION_FILE.read_text().strip()) + +SCHEMAS_DIR = REPO_ROOT / "schemas" / "cache" / _BUNDLE_KEY def convert_ref_to_relative(ref: str, current_file: Path) -> str: diff --git a/scripts/generate_types.py b/scripts/generate_types.py index 30451f422..6a83372c7 100755 --- a/scripts/generate_types.py +++ b/scripts/generate_types.py @@ -19,7 +19,30 @@ # Paths REPO_ROOT = Path(__file__).parent.parent -SCHEMAS_DIR = REPO_ROOT / "schemas" / "cache" + + +# Load ``resolve_bundle_key`` from its source file (importlib) rather than +# via ``from adcp.validation.version import ...``. The package import would +# trigger ``adcp/__init__.py``, which eagerly imports generated Pydantic +# models — but this script runs *during* regeneration, when those models +# may be in a half-regenerated state. +def _load_resolve_bundle_key(): + import importlib.util + + src = REPO_ROOT / "src" / "adcp" / "validation" / "version.py" + spec = importlib.util.spec_from_file_location("_adcp_bundle_key", src) + assert spec is not None and spec.loader is not None + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod.resolve_bundle_key + + +resolve_bundle_key = _load_resolve_bundle_key() + +_VERSION_FILE = REPO_ROOT / "src" / "adcp" / "ADCP_VERSION" +_BUNDLE_KEY = resolve_bundle_key(_VERSION_FILE.read_text().strip()) + +SCHEMAS_DIR = REPO_ROOT / "schemas" / "cache" / _BUNDLE_KEY OUTPUT_DIR = REPO_ROOT / "src" / "adcp" / "types" / "generated_poc" TEMP_DIR = REPO_ROOT / ".schema_temp" DELTAS_FILE = REPO_ROOT / "SCHEMA_DELTAS.md" diff --git a/scripts/post_generate_fixes.py b/scripts/post_generate_fixes.py index 3f9ca43f6..69e64bacf 100644 --- a/scripts/post_generate_fixes.py +++ b/scripts/post_generate_fixes.py @@ -16,13 +16,34 @@ from __future__ import annotations import ast +import importlib.util import json import re from pathlib import Path REPO_ROOT = Path(__file__).parent.parent + + +# Load ``resolve_bundle_key`` from its source file rather than via the +# ``adcp`` package — this script runs after datamodel-codegen produces a +# fresh ``generated_poc/`` tree, before the post-fixes that make it +# importable. ``adcp/__init__.py`` would crash on the unfixed models. +def _load_resolve_bundle_key(): + src = REPO_ROOT / "src" / "adcp" / "validation" / "version.py" + spec = importlib.util.spec_from_file_location("_adcp_bundle_key", src) + assert spec is not None and spec.loader is not None + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod.resolve_bundle_key + + +resolve_bundle_key = _load_resolve_bundle_key() + +_VERSION_FILE = REPO_ROOT / "src" / "adcp" / "ADCP_VERSION" +_BUNDLE_KEY = resolve_bundle_key(_VERSION_FILE.read_text().strip()) + OUTPUT_DIR = REPO_ROOT / "src" / "adcp" / "types" / "generated_poc" -SCHEMA_DIR = REPO_ROOT / "schemas" / "cache" +SCHEMA_DIR = REPO_ROOT / "schemas" / "cache" / _BUNDLE_KEY def add_model_validator_to_product(): diff --git a/scripts/sync_schemas.py b/scripts/sync_schemas.py index d43c7994f..5b9ef3b59 100755 --- a/scripts/sync_schemas.py +++ b/scripts/sync_schemas.py @@ -47,6 +47,27 @@ CACHE_DIR = REPO_ROOT / "schemas" / "cache" SKILLS_DIR = REPO_ROOT / "skills" VERSION_FILE = REPO_ROOT / "src" / "adcp" / "ADCP_VERSION" + + +# Load ``resolve_bundle_key`` directly from its source file. Going through +# the package (``from adcp.validation.version import ...``) would trigger +# ``adcp/__init__.py``, which eagerly imports generated Pydantic models — +# during ``make regenerate-schemas`` those models are mid-regeneration and +# may not be importable yet (chicken-and-egg). ``importlib.util`` loads +# the module file in isolation, no package init. +def _load_resolve_bundle_key(): + import importlib.util + + src = REPO_ROOT / "src" / "adcp" / "validation" / "version.py" + spec = importlib.util.spec_from_file_location("_adcp_bundle_key", src) + assert spec is not None and spec.loader is not None + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod.resolve_bundle_key + + +resolve_bundle_key = _load_resolve_bundle_key() + _ADCP_BASE = os.environ.get("ADCP_BASE_URL", "https://adcontextprotocol.org").rstrip("/") # Reject overrides ending in /protocol — appending our own /protocol below # would silently produce //protocol and 404 against any sensible CDN. Fail @@ -205,8 +226,12 @@ def _extract_bundle( return bundle_root, tmpdir -def replace_cache_from_bundle(bundle_root: Path) -> int: - """Extract the bundle's `schemas/` tree into CACHE_DIR, replacing its contents. +def replace_cache_from_bundle(bundle_root: Path, bundle_key: str) -> int: + """Extract the bundle's ``schemas/`` tree into ``CACHE_DIR/{bundle_key}/``. + + Per-version layout: ``schemas/cache/3.0/``, ``schemas/cache/2.5/``, + ``schemas/cache/3.1.0-beta.1/``. Replaces only the target bundle key's + subtree, leaving sibling versions intact. Returns the number of files written. """ @@ -214,12 +239,13 @@ def replace_cache_from_bundle(bundle_root: Path) -> int: if not schemas_src.is_dir(): raise RuntimeError(f"Bundle missing expected directory: {bundle_root.name}/schemas/") - if CACHE_DIR.exists(): - shutil.rmtree(CACHE_DIR) - CACHE_DIR.parent.mkdir(parents=True, exist_ok=True) - shutil.copytree(schemas_src, CACHE_DIR) + dest = CACHE_DIR / bundle_key + if dest.exists(): + shutil.rmtree(dest) + dest.parent.mkdir(parents=True, exist_ok=True) + shutil.copytree(schemas_src, dest) - return sum(1 for _ in CACHE_DIR.rglob("*") if _.is_file()) + return sum(1 for _ in dest.rglob("*") if _.is_file()) def sync_skills_from_bundle(bundle_root: Path, skills_dir: Path) -> int: @@ -346,9 +372,17 @@ def main() -> None: print(f"\n✗ Failed to extract bundle: {exc}", file=sys.stderr) sys.exit(1) + # Always key the cache by the SDK's pinned target, not the effective + # version. When ``effective_version == "latest"`` (fallback because + # the pinned bundle isn't published yet), ``resolve_bundle_key`` would + # reject the literal string; more importantly, the loader looks up by + # the SDK pin, so writing latest's contents under the target's bundle + # key is what makes the loader find them. + bundle_key = resolve_bundle_key(target_version) + with tmpdir: try: - schema_count = replace_cache_from_bundle(bundle_root) + schema_count = replace_cache_from_bundle(bundle_root, bundle_key) except (OSError, shutil.Error, RuntimeError) as exc: print(f"\n✗ Failed to extract schemas: {exc}", file=sys.stderr) sys.exit(1) @@ -365,7 +399,8 @@ def main() -> None: if not args.no_skills: print(f"✓ Successfully synced {skill_count} skill files") print(f" Effective version: adcp-{effective_version}") - print(f" Schema location: {CACHE_DIR}") + print(f" Bundle key: {bundle_key}") + print(f" Schema location: {CACHE_DIR / bundle_key}") if not args.no_skills: print(f" Skills location: {SKILLS_DIR}") diff --git a/src/adcp/validation/schema_loader.py b/src/adcp/validation/schema_loader.py index afa5374b1..a1e056faa 100644 --- a/src/adcp/validation/schema_loader.py +++ b/src/adcp/validation/schema_loader.py @@ -4,13 +4,21 @@ schemas that async response variants ``$ref``, then compiles validators lazily by ``(tool_name, direction)``. -Schemas are discovered via two paths: - -* **Installed package** — ``importlib.resources.files("adcp") / "_schemas"`` - populated by ``scripts/bundle_schemas.py`` before wheel build. -* **Dev checkout** — ``/schemas/cache/`` (where ``scripts/sync_schemas.py`` - writes the canonical bundle). Tried when the packaged copy is absent, so - editable installs against a fresh clone validate against the repo's schemas. +Schemas live under a per-version bundle key (see +:func:`adcp.validation.version.resolve_bundle_key`) so multiple AdCP spec +versions can coexist on disk. The loader today resolves the cache for the +SDK's pinned ``ADCP_VERSION``; the per-request version arg lands in +Stage 2. + +Discovery paths (first hit wins): + +* **Installed package** — ``importlib.resources.files("adcp") / "_schemas" + / {bundle_key}`` populated by ``scripts/bundle_schemas.py`` before wheel + build. +* **Dev checkout** — ``/schemas/cache/{bundle_key}/`` (where + ``scripts/sync_schemas.py`` writes the canonical bundle). Tried when the + packaged copy is absent, so editable installs against a fresh clone + validate against the repo's schemas. """ from __future__ import annotations @@ -23,6 +31,8 @@ from pathlib import Path from typing import Any, Literal +from adcp.validation.version import resolve_bundle_key + logger = logging.getLogger(__name__) # Serialize first-time init and validator compilation. Concurrent callers @@ -48,15 +58,29 @@ def exists(self) -> bool: return self.bundled.is_dir() -def _resolve_schema_root() -> _SchemaRoot | None: - """Locate the schema tree. Packaged copy wins; fall back to repo layout. +def _sdk_pinned_bundle_key() -> str: + """Bundle key for the SDK's compile-time-pinned AdCP version. + + Reads the packaged ``ADCP_VERSION`` file and collapses it via + :func:`resolve_bundle_key`. Cached at import time so the lookup + happens once. + """ + from adcp._version import _read_packaged_version + + return resolve_bundle_key(_read_packaged_version()) + + +def _resolve_schema_root(bundle_key: str | None = None) -> _SchemaRoot | None: + """Locate the schema tree for ``bundle_key`` (default: SDK pin). + Packaged copy wins; falls back to repo layout for editable installs. Returns ``None`` when neither location is populated — the validator degrades to ``skipped`` for every tool, matching the TS behavior for tools outside the AdCP catalog. """ + key = bundle_key if bundle_key is not None else _sdk_pinned_bundle_key() try: - packaged = files("adcp") / "_schemas" + packaged = files("adcp") / "_schemas" / key with as_file(packaged) as p: packaged_path = Path(p) if (packaged_path / "bundled").is_dir(): @@ -66,7 +90,7 @@ def _resolve_schema_root() -> _SchemaRoot | None: here = Path(__file__).resolve() for ancestor in here.parents: - candidate = ancestor / "schemas" / "cache" + candidate = ancestor / "schemas" / "cache" / key if (candidate / "bundled").is_dir(): return _SchemaRoot(candidate) if ancestor.parent == ancestor: diff --git a/src/adcp/validation/version.py b/src/adcp/validation/version.py new file mode 100644 index 000000000..7898e8c10 --- /dev/null +++ b/src/adcp/validation/version.py @@ -0,0 +1,45 @@ +"""Bundle-key resolution for per-version schema validation. + +The schema cache is laid out as ``schemas/cache/{bundle_key}/`` so multiple +AdCP spec versions can coexist on disk and at runtime. ``bundle_key`` is +derived from a version string with these rules: + +* Stable releases collapse to ``MAJOR.MINOR`` so ``3.0.0`` / ``3.0.7`` / + ``3.0.42`` all resolve to ``3.0``. Adopter pins to patch granularity + inside a minor pick up patch fixes without a cache reshuffle. +* Prereleases keep their full identifier — ``3.1.0-beta.1`` resolves to + ``3.1.0-beta.1`` (not ``3.1``). Prereleases ship with breaking changes + vs. the matching stable, so each one is its own cache bucket. + +Mirrors ``resolveBundleKey()`` in the TypeScript SDK +(``src/lib/validation/schema-loader.ts``). +""" + +from __future__ import annotations + +import re + +# ``MAJOR.MINOR.PATCH`` with an optional ``-PRERELEASE`` tail. Build +# metadata (``+SHA``) is intentionally not in the SDK contract — adopters +# pin to release identifiers. +_SEMVER_RE = re.compile( + r"^(?P\d+)\.(?P\d+)\.(?P\d+)(?:-(?P[0-9A-Za-z.-]+))?$" +) + + +def resolve_bundle_key(version: str) -> str: + """Collapse a version string to its on-disk cache key. + + Raises ``ValueError`` for non-semver inputs — the schema fetch + pipeline pins on real release identifiers, so a malformed version + here is a real bug in the caller, not user input. + """ + match = _SEMVER_RE.match(version.strip()) + if match is None: + raise ValueError( + f"resolve_bundle_key: {version!r} is not a valid semver " + "(expected MAJOR.MINOR.PATCH[-PRERELEASE])" + ) + if match.group("prerelease"): + return version.strip() + return f"{match.group('major')}.{match.group('minor')}" diff --git a/tests/test_decisioning_dispatch.py b/tests/test_decisioning_dispatch.py index 747f8d052..24023701c 100644 --- a/tests/test_decisioning_dispatch.py +++ b/tests/test_decisioning_dispatch.py @@ -272,13 +272,24 @@ def test_required_methods_only_contains_spec_slugs() -> None: def test_spec_specialism_enum_matches_schema_cache() -> None: - """SPEC_SPECIALISM_ENUM mirrors ``schemas/cache/enums/specialism.json`` + """SPEC_SPECIALISM_ENUM mirrors ``schemas/cache/{bundle_key}/enums/specialism.json`` verbatim. CI catches out-of-band drift when the schema cache refreshes from upstream.""" import json from pathlib import Path - schema_path = Path(__file__).parent.parent / "schemas" / "cache" / "enums" / "specialism.json" + from adcp._version import _read_packaged_version + from adcp.validation.version import resolve_bundle_key + + bundle_key = resolve_bundle_key(_read_packaged_version()) + schema_path = ( + Path(__file__).parent.parent + / "schemas" + / "cache" + / bundle_key + / "enums" + / "specialism.json" + ) with schema_path.open() as f: on_disk = frozenset(json.load(f)["enum"]) assert SPEC_SPECIALISM_ENUM == on_disk, ( diff --git a/tests/test_decisioning_webhook_emit.py b/tests/test_decisioning_webhook_emit.py index 92affb63c..1ac049d15 100644 --- a/tests/test_decisioning_webhook_emit.py +++ b/tests/test_decisioning_webhook_emit.py @@ -50,7 +50,13 @@ def test_spec_webhook_task_types_matches_schema_cache() -> None: """Pin the constant to the on-disk spec enum. CI catches out-of-band drift when the schema cache refreshes from upstream.""" - schema_path = Path(__file__).parent.parent / "schemas" / "cache" / "enums" / "task-type.json" + from adcp._version import _read_packaged_version + from adcp.validation.version import resolve_bundle_key + + bundle_key = resolve_bundle_key(_read_packaged_version()) + schema_path = ( + Path(__file__).parent.parent / "schemas" / "cache" / bundle_key / "enums" / "task-type.json" + ) with schema_path.open() as f: on_disk = frozenset(json.load(f)["enum"]) assert SPEC_WEBHOOK_TASK_TYPES == on_disk, ( diff --git a/tests/test_extra_policy.py b/tests/test_extra_policy.py index c1972c369..f6b0a13d3 100644 --- a/tests/test_extra_policy.py +++ b/tests/test_extra_policy.py @@ -17,9 +17,12 @@ import pytest from pydantic import ConfigDict, ValidationError +from adcp._version import _read_packaged_version from adcp.types.base import AdCPBaseModel +from adcp.validation.version import resolve_bundle_key -SCHEMAS_DIR = Path(__file__).parent.parent / "schemas" / "cache" +_BUNDLE_KEY = resolve_bundle_key(_read_packaged_version()) +SCHEMAS_DIR = Path(__file__).parent.parent / "schemas" / "cache" / _BUNDLE_KEY GENERATED_DIR = Path(__file__).parent.parent / "src" / "adcp" / "types" / "generated_poc" @@ -198,7 +201,8 @@ def test_no_spurious_extra_allow(self) -> None: if schema_name in schema_allows and not schema_allows[schema_name]: spurious.append(f"{py_file.name} <- {schema_name}") - assert not spurious, ( - "Generated files have extra='allow' without schema support:\n" - + "\n".join(f" {s}" for s in spurious) + assert ( + not spurious + ), "Generated files have extra='allow' without schema support:\n" + "\n".join( + f" {s}" for s in spurious ) diff --git a/tests/test_schemas_version_pin.py b/tests/test_schemas_version_pin.py index 9f3344f2c..09b922e6f 100644 --- a/tests/test_schemas_version_pin.py +++ b/tests/test_schemas_version_pin.py @@ -32,9 +32,12 @@ import pytest +from adcp.validation.version import resolve_bundle_key + _REPO_ROOT = Path(__file__).resolve().parent.parent _ADCP_VERSION_FILE = _REPO_ROOT / "src" / "adcp" / "ADCP_VERSION" -_CACHE_INDEX = _REPO_ROOT / "schemas" / "cache" / "index.json" +_BUNDLE_KEY = resolve_bundle_key(_ADCP_VERSION_FILE.read_text().strip()) +_CACHE_INDEX = _REPO_ROOT / "schemas" / "cache" / _BUNDLE_KEY / "index.json" def test_adcp_version_file_exists() -> None: diff --git a/tests/test_spec_coverage.py b/tests/test_spec_coverage.py index 2f77ab869..464b7c7f2 100644 --- a/tests/test_spec_coverage.py +++ b/tests/test_spec_coverage.py @@ -10,7 +10,13 @@ def _schema_task_names() -> set[str]: - index_path = Path(__file__).resolve().parents[1] / "schemas" / "cache" / "index.json" + from adcp._version import _read_packaged_version + from adcp.validation.version import resolve_bundle_key + + bundle_key = resolve_bundle_key(_read_packaged_version()) + index_path = ( + Path(__file__).resolve().parents[1] / "schemas" / "cache" / bundle_key / "index.json" + ) index_data = json.loads(index_path.read_text()) task_names: set[str] = set() @@ -216,6 +222,5 @@ def test_mcp_tool_input_schema_matches_pydantic_models(): "The inputSchema is auto-generated from the request model on first\n" "tools/list call (_ensure_pydantic_schemas_applied()); this drift\n" "shouldn't be possible unless schema generation is broken.\n" - "See tests/test_mcp_schema_drift.py.\n" - + "\n".join(f" - {d}" for d in drift) + "See tests/test_mcp_schema_drift.py.\n" + "\n".join(f" - {d}" for d in drift) ) diff --git a/tests/test_sync_schemas.py b/tests/test_sync_schemas.py index f9834011d..6f9842bc6 100644 --- a/tests/test_sync_schemas.py +++ b/tests/test_sync_schemas.py @@ -92,19 +92,50 @@ def test_copies_schemas_to_cache_dir(self, tmp_path: Path) -> None: original = _mod.CACHE_DIR _mod.CACHE_DIR = cache_dir try: - count = replace_cache_from_bundle(bundle_root) + count = replace_cache_from_bundle(bundle_root, "3.0") finally: _mod.CACHE_DIR = original assert count == 1 - assert (cache_dir / "request.json").read_text() == '{"type":"object"}' + # Output now lands in the per-bundle-key subdirectory. + assert (cache_dir / "3.0" / "request.json").read_text() == '{"type":"object"}' def test_raises_if_schemas_dir_missing(self, tmp_path: Path) -> None: bundle_root = tmp_path / "adcp-test" bundle_root.mkdir() with pytest.raises(RuntimeError, match="Bundle missing expected directory"): - replace_cache_from_bundle(bundle_root) + replace_cache_from_bundle(bundle_root, "3.0") + + def test_caller_resolves_bundle_key_from_target_not_effective(self) -> None: + """Latent-bug regression: when the pinned bundle isn't published + and sync falls back to ``latest.tgz``, ``effective_version`` is + the literal string ``"latest"``. ``resolve_bundle_key("latest")`` + rejects it. The script must compute the bundle key from + ``target_version`` (the SDK pin) — which is what the loader + looks up. + + This is a unit assertion on the helper; the integration check + (sync_schemas main() uses target_version) is enforced by reading + the relevant lines below. + """ + from adcp.validation.version import resolve_bundle_key + + # ``effective_version`` after a 404-fallback: + with pytest.raises(ValueError, match="not a valid semver"): + resolve_bundle_key("latest") + + # ``target_version`` (the SDK pin) always parses: + assert resolve_bundle_key("3.0.7") == "3.0" + + # Sanity-check the call site uses target_version, not + # effective_version. A regression that re-introduces + # ``resolve_bundle_key(effective_version)`` here breaks fallback. + src = _SCRIPT.read_text() + assert "resolve_bundle_key(target_version)" in src, ( + "sync_schemas.py must derive bundle_key from target_version " + "(the SDK pin), not effective_version (which can be 'latest')." + ) # --------------------------------------------------------------------------- diff --git a/tests/test_validation_version.py b/tests/test_validation_version.py new file mode 100644 index 000000000..5242e617d --- /dev/null +++ b/tests/test_validation_version.py @@ -0,0 +1,40 @@ +"""Tests for ``adcp.validation.version.resolve_bundle_key``.""" + +from __future__ import annotations + +import pytest + +from adcp.validation.version import resolve_bundle_key + + +def test_resolve_bundle_key_collapses_patch_to_minor() -> None: + assert resolve_bundle_key("3.0.0") == "3.0" + assert resolve_bundle_key("3.0.7") == "3.0" + assert resolve_bundle_key("3.0.42") == "3.0" + + +def test_resolve_bundle_key_distinguishes_minors() -> None: + assert resolve_bundle_key("3.0.0") == "3.0" + assert resolve_bundle_key("3.1.0") == "3.1" + assert resolve_bundle_key("4.0.0") == "4.0" + + +def test_resolve_bundle_key_keeps_prereleases_exact() -> None: + assert resolve_bundle_key("3.1.0-beta.1") == "3.1.0-beta.1" + assert resolve_bundle_key("3.1.0-rc.2") == "3.1.0-rc.2" + assert resolve_bundle_key("4.0.0-alpha") == "4.0.0-alpha" + + +def test_resolve_bundle_key_strips_whitespace() -> None: + assert resolve_bundle_key(" 3.0.7 ") == "3.0" + + +def test_resolve_bundle_key_rejects_garbage() -> None: + with pytest.raises(ValueError, match="not a valid semver"): + resolve_bundle_key("latest") + with pytest.raises(ValueError, match="not a valid semver"): + resolve_bundle_key("3.0") + with pytest.raises(ValueError, match="not a valid semver"): + resolve_bundle_key("v3.0.7") + with pytest.raises(ValueError, match="not a valid semver"): + resolve_bundle_key("")