@adcp/sdk 6.9.0 → 6.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/adcp.js +285 -5
- package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/index.json +324 -0
- package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
- package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
- package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
- package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
- package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +33 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +127 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/credential-policy.d.ts +221 -0
- package/dist/lib/server/credential-policy.d.ts.map +1 -0
- package/dist/lib/server/credential-policy.js +260 -0
- package/dist/lib/server/credential-policy.js.map +1 -0
- package/dist/lib/server/dynamic-registry.d.ts +219 -0
- package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
- package/dist/lib/server/dynamic-registry.js +245 -0
- package/dist/lib/server/dynamic-registry.js.map +1 -0
- package/dist/lib/server/index.d.ts +8 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +15 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/operational-platform.d.ts +239 -0
- package/dist/lib/server/operational-platform.d.ts.map +1 -0
- package/dist/lib/server/operational-platform.js +94 -0
- package/dist/lib/server/operational-platform.js.map +1 -0
- package/dist/lib/server/wire-safe.d.ts +211 -0
- package/dist/lib/server/wire-safe.d.ts.map +1 -0
- package/dist/lib/server/wire-safe.js +231 -0
- package/dist/lib/server/wire-safe.js.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.js +172 -0
- package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
- package/dist/lib/testing/compliance/index.d.ts +2 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js +6 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/summary.d.ts +77 -0
- package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
- package/dist/lib/testing/compliance/summary.js +176 -0
- package/dist/lib/testing/compliance/summary.js.map +1 -0
- package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +51 -0
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/index.d.ts +2 -2
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +4 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +58 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
id: content_standards
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Content standards"
|
|
4
|
+
protocol: governance
|
|
5
|
+
category: content_standards
|
|
6
|
+
summary: "Define creative quality rules, calibrate content against them, and validate that delivered ads met the standards."
|
|
7
|
+
track: governance
|
|
8
|
+
required_tools:
|
|
9
|
+
- list_content_standards
|
|
10
|
+
|
|
11
|
+
# Cross-step assertion (adcp#2664). status.monotonic rejects resource
|
|
12
|
+
# status transitions observed across steps that aren't on the spec
|
|
13
|
+
# lifecycle graph. Silent on content-standards-only runs (no tracked
|
|
14
|
+
# lifecycle resource), but wired so phases that touch creative /
|
|
15
|
+
# account status are automatically gated.
|
|
16
|
+
invariants:
|
|
17
|
+
- status.monotonic
|
|
18
|
+
|
|
19
|
+
narrative: |
|
|
20
|
+
You run a governance agent that manages content standards — rules that define what
|
|
21
|
+
creative content is acceptable for a brand or campaign. Buyers create standards that
|
|
22
|
+
specify quality requirements, safety constraints, and brand compliance rules. Your
|
|
23
|
+
agent stores these standards, calibrates sample content against them, and validates
|
|
24
|
+
that delivered creatives met the requirements.
|
|
25
|
+
|
|
26
|
+
Content standards complement property governance. Property lists control where ads appear;
|
|
27
|
+
content standards control what the ads look like. Together they form a complete brand
|
|
28
|
+
safety framework.
|
|
29
|
+
|
|
30
|
+
This storyboard covers the full content standards lifecycle: defining standards, querying
|
|
31
|
+
them, calibrating content before launch, and validating delivery after the fact.
|
|
32
|
+
|
|
33
|
+
agent:
|
|
34
|
+
interaction_model: governance_agent
|
|
35
|
+
capabilities:
|
|
36
|
+
- content_standards
|
|
37
|
+
- creative_quality
|
|
38
|
+
examples:
|
|
39
|
+
- "Creative quality platforms"
|
|
40
|
+
- "Brand safety services"
|
|
41
|
+
- "Ad verification platforms"
|
|
42
|
+
- "GARM-aligned quality tools"
|
|
43
|
+
|
|
44
|
+
caller:
|
|
45
|
+
role: buyer_agent
|
|
46
|
+
example: "Pinnacle Agency (buyer)"
|
|
47
|
+
|
|
48
|
+
prerequisites:
|
|
49
|
+
description: |
|
|
50
|
+
The caller needs a brand identity and creative quality requirements. The test kit
|
|
51
|
+
provides a sample brand with visual assets for calibration.
|
|
52
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
53
|
+
|
|
54
|
+
phases:
|
|
55
|
+
- id: capability_discovery
|
|
56
|
+
title: "Capability discovery"
|
|
57
|
+
narrative: |
|
|
58
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports governance before registering plans or checking compliance.
|
|
59
|
+
|
|
60
|
+
steps:
|
|
61
|
+
- id: get_capabilities
|
|
62
|
+
title: "Check agent capabilities"
|
|
63
|
+
narrative: |
|
|
64
|
+
Verify that the agent declares the expected protocol support before
|
|
65
|
+
proceeding with domain-specific operations.
|
|
66
|
+
task: get_adcp_capabilities
|
|
67
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
68
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
69
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
70
|
+
comply_scenario: capability_discovery
|
|
71
|
+
stateful: false
|
|
72
|
+
expected: |
|
|
73
|
+
Return capabilities declaring governance in supported_protocols, confirming the agent provides governance services.
|
|
74
|
+
sample_request:
|
|
75
|
+
context:
|
|
76
|
+
correlation_id: "content_standards--get_capabilities"
|
|
77
|
+
validations:
|
|
78
|
+
- check: response_schema
|
|
79
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
80
|
+
- check: field_present
|
|
81
|
+
path: "supported_protocols"
|
|
82
|
+
description: "Agent declares supported protocols"
|
|
83
|
+
|
|
84
|
+
- check: field_present
|
|
85
|
+
path: "context"
|
|
86
|
+
description: "Response echoes back the context object"
|
|
87
|
+
- check: field_value
|
|
88
|
+
path: "context.correlation_id"
|
|
89
|
+
value: "content_standards--get_capabilities"
|
|
90
|
+
description: "Context correlation_id returned unchanged"
|
|
91
|
+
- id: create_standards
|
|
92
|
+
title: "Define content standards"
|
|
93
|
+
narrative: |
|
|
94
|
+
The buyer creates content standards that define what creative content is acceptable.
|
|
95
|
+
Standards include quality requirements, safety constraints, and brand-specific rules.
|
|
96
|
+
|
|
97
|
+
steps:
|
|
98
|
+
- id: create_content_standards
|
|
99
|
+
title: "Create content standards"
|
|
100
|
+
narrative: |
|
|
101
|
+
The buyer defines a set of content standards. These rules will be used to
|
|
102
|
+
evaluate creatives before and after delivery.
|
|
103
|
+
task: create_content_standards
|
|
104
|
+
schema_ref: "content-standards/create-content-standards-request.json"
|
|
105
|
+
response_schema_ref: "content-standards/create-content-standards-response.json"
|
|
106
|
+
doc_ref: "/governance/content-standards/tasks/create_content_standards"
|
|
107
|
+
comply_scenario: governance_content_standards
|
|
108
|
+
stateful: true
|
|
109
|
+
expected: |
|
|
110
|
+
Return the created content standards:
|
|
111
|
+
- standards_id: platform-assigned identifier
|
|
112
|
+
- Rules registered with severity levels
|
|
113
|
+
- Status: active
|
|
114
|
+
|
|
115
|
+
sample_request:
|
|
116
|
+
account:
|
|
117
|
+
brand:
|
|
118
|
+
domain: "acmeoutdoor.example"
|
|
119
|
+
operator: "pinnacle-agency.example"
|
|
120
|
+
scope:
|
|
121
|
+
languages_any: ["en"]
|
|
122
|
+
description: "Acme Outdoor creative quality standards"
|
|
123
|
+
policies:
|
|
124
|
+
- policy_id: no_violent_imagery
|
|
125
|
+
policy_categories: [brand_safety]
|
|
126
|
+
enforcement: must
|
|
127
|
+
policy: "No violent or controversial imagery"
|
|
128
|
+
- policy_id: min_display_dpi
|
|
129
|
+
policy_categories: [imagery_quality]
|
|
130
|
+
enforcement: should
|
|
131
|
+
channels: [display]
|
|
132
|
+
policy: "Minimum 72 DPI for display assets"
|
|
133
|
+
- policy_id: brand_color_tolerance
|
|
134
|
+
policy_categories: [brand_compliance]
|
|
135
|
+
enforcement: must
|
|
136
|
+
policy: "Brand colors must match palette within 5% tolerance"
|
|
137
|
+
|
|
138
|
+
idempotency_key: "$generate:uuid_v4#content_standards_create_standards_create_content_standards"
|
|
139
|
+
context:
|
|
140
|
+
correlation_id: "content_standards--create_content_standards"
|
|
141
|
+
validations:
|
|
142
|
+
- check: response_schema
|
|
143
|
+
description: "Response matches create-content-standards-response.json schema"
|
|
144
|
+
|
|
145
|
+
- check: field_present
|
|
146
|
+
path: "context"
|
|
147
|
+
description: "Response echoes back the context object"
|
|
148
|
+
- check: field_value
|
|
149
|
+
path: "context.correlation_id"
|
|
150
|
+
value: "content_standards--create_content_standards"
|
|
151
|
+
description: "Context correlation_id returned unchanged"
|
|
152
|
+
- id: list_and_get
|
|
153
|
+
title: "Query content standards"
|
|
154
|
+
narrative: |
|
|
155
|
+
The buyer lists all content standards for the account and retrieves a specific
|
|
156
|
+
standard to inspect its rules.
|
|
157
|
+
|
|
158
|
+
steps:
|
|
159
|
+
- id: list_content_standards
|
|
160
|
+
title: "List all content standards"
|
|
161
|
+
narrative: |
|
|
162
|
+
The buyer lists all content standards for the brand. The response includes
|
|
163
|
+
standard metadata without full rule details.
|
|
164
|
+
task: list_content_standards
|
|
165
|
+
schema_ref: "content-standards/list-content-standards-request.json"
|
|
166
|
+
response_schema_ref: "content-standards/list-content-standards-response.json"
|
|
167
|
+
doc_ref: "/governance/content-standards/tasks/list_content_standards"
|
|
168
|
+
comply_scenario: governance_content_standards
|
|
169
|
+
stateful: true
|
|
170
|
+
expected: |
|
|
171
|
+
Return content standard summaries:
|
|
172
|
+
- Array of standards with standards_id, name, rule_count
|
|
173
|
+
- Status of each standard set
|
|
174
|
+
|
|
175
|
+
sample_request:
|
|
176
|
+
account:
|
|
177
|
+
brand:
|
|
178
|
+
domain: "acmeoutdoor.example"
|
|
179
|
+
operator: "pinnacle-agency.example"
|
|
180
|
+
|
|
181
|
+
context:
|
|
182
|
+
correlation_id: "content_standards--list_content_standards"
|
|
183
|
+
validations:
|
|
184
|
+
- check: response_schema
|
|
185
|
+
description: "Response matches list-content-standards-response.json schema"
|
|
186
|
+
|
|
187
|
+
- check: field_present
|
|
188
|
+
path: "context"
|
|
189
|
+
description: "Response echoes back the context object"
|
|
190
|
+
- check: field_value
|
|
191
|
+
path: "context.correlation_id"
|
|
192
|
+
value: "content_standards--list_content_standards"
|
|
193
|
+
description: "Context correlation_id returned unchanged"
|
|
194
|
+
- id: get_content_standards
|
|
195
|
+
title: "Get a specific content standard"
|
|
196
|
+
narrative: |
|
|
197
|
+
The buyer retrieves the full details of a specific content standard, including
|
|
198
|
+
all rules and their severity levels.
|
|
199
|
+
task: get_content_standards
|
|
200
|
+
schema_ref: "content-standards/get-content-standards-request.json"
|
|
201
|
+
response_schema_ref: "content-standards/get-content-standards-response.json"
|
|
202
|
+
doc_ref: "/governance/content-standards/tasks/get_content_standards"
|
|
203
|
+
comply_scenario: governance_content_standards
|
|
204
|
+
stateful: true
|
|
205
|
+
expected: |
|
|
206
|
+
Return the full content standard:
|
|
207
|
+
- standards_id, name
|
|
208
|
+
- All rules with categories, descriptions, and severity
|
|
209
|
+
|
|
210
|
+
sample_request:
|
|
211
|
+
account:
|
|
212
|
+
brand:
|
|
213
|
+
domain: "acmeoutdoor.example"
|
|
214
|
+
operator: "pinnacle-agency.example"
|
|
215
|
+
standards_id: "$context.content_standards_id"
|
|
216
|
+
|
|
217
|
+
context:
|
|
218
|
+
correlation_id: "content_standards--get_content_standards"
|
|
219
|
+
validations:
|
|
220
|
+
- check: response_schema
|
|
221
|
+
description: "Response matches get-content-standards-response.json schema"
|
|
222
|
+
|
|
223
|
+
- check: field_present
|
|
224
|
+
path: "context"
|
|
225
|
+
description: "Response echoes back the context object"
|
|
226
|
+
- check: field_value
|
|
227
|
+
path: "context.correlation_id"
|
|
228
|
+
value: "content_standards--get_content_standards"
|
|
229
|
+
description: "Context correlation_id returned unchanged"
|
|
230
|
+
- id: update_standards
|
|
231
|
+
title: "Update content standards"
|
|
232
|
+
narrative: |
|
|
233
|
+
The buyer modifies existing content standards — adding rules, adjusting severity,
|
|
234
|
+
or removing obsolete constraints.
|
|
235
|
+
|
|
236
|
+
steps:
|
|
237
|
+
- id: update_content_standards
|
|
238
|
+
title: "Update content standards"
|
|
239
|
+
narrative: |
|
|
240
|
+
The buyer updates an existing content standard with new or modified rules.
|
|
241
|
+
task: update_content_standards
|
|
242
|
+
schema_ref: "content-standards/update-content-standards-request.json"
|
|
243
|
+
response_schema_ref: "content-standards/update-content-standards-response.json"
|
|
244
|
+
doc_ref: "/governance/content-standards/tasks/update_content_standards"
|
|
245
|
+
comply_scenario: governance_content_standards
|
|
246
|
+
stateful: true
|
|
247
|
+
expected: |
|
|
248
|
+
Return the updated content standard:
|
|
249
|
+
- Updated rule set
|
|
250
|
+
- Confirmation of changes applied
|
|
251
|
+
|
|
252
|
+
sample_request:
|
|
253
|
+
account:
|
|
254
|
+
brand:
|
|
255
|
+
domain: "acmeoutdoor.example"
|
|
256
|
+
operator: "pinnacle-agency.example"
|
|
257
|
+
standards_id: "$context.content_standards_id"
|
|
258
|
+
policies:
|
|
259
|
+
- policy_id: no_violent_imagery
|
|
260
|
+
policy_categories: [brand_safety]
|
|
261
|
+
enforcement: must
|
|
262
|
+
policy: "No violent or controversial imagery"
|
|
263
|
+
- policy_id: min_display_dpi
|
|
264
|
+
policy_categories: [imagery_quality]
|
|
265
|
+
enforcement: should
|
|
266
|
+
channels: [display]
|
|
267
|
+
policy: "Minimum 72 DPI for display assets"
|
|
268
|
+
- policy_id: brand_color_tolerance
|
|
269
|
+
policy_categories: [brand_compliance]
|
|
270
|
+
enforcement: must
|
|
271
|
+
policy: "Brand colors must match palette within 5% tolerance"
|
|
272
|
+
- policy_id: image_alt_text
|
|
273
|
+
policy_categories: [accessibility]
|
|
274
|
+
enforcement: should
|
|
275
|
+
policy: "All images must have alt text"
|
|
276
|
+
|
|
277
|
+
idempotency_key: "$generate:uuid_v4#content_standards_update_standards_update_content_standards"
|
|
278
|
+
context:
|
|
279
|
+
correlation_id: "content_standards--update_content_standards"
|
|
280
|
+
validations:
|
|
281
|
+
- check: response_schema
|
|
282
|
+
description: "Response matches update-content-standards-response.json schema"
|
|
283
|
+
|
|
284
|
+
- check: field_present
|
|
285
|
+
path: "context"
|
|
286
|
+
description: "Response echoes back the context object"
|
|
287
|
+
- check: field_value
|
|
288
|
+
path: "context.correlation_id"
|
|
289
|
+
value: "content_standards--update_content_standards"
|
|
290
|
+
description: "Context correlation_id returned unchanged"
|
|
291
|
+
- id: calibration
|
|
292
|
+
title: "Calibrate content"
|
|
293
|
+
narrative: |
|
|
294
|
+
Before launching a campaign, the buyer calibrates sample creatives against the
|
|
295
|
+
content standards. This is a pre-flight check — does the creative meet the rules
|
|
296
|
+
before it goes live?
|
|
297
|
+
|
|
298
|
+
steps:
|
|
299
|
+
- id: calibrate_content
|
|
300
|
+
title: "Calibrate content against standards"
|
|
301
|
+
narrative: |
|
|
302
|
+
The buyer submits sample creative content for evaluation against the content
|
|
303
|
+
standards. The governance agent checks each rule and returns a calibration
|
|
304
|
+
report indicating pass/fail per rule.
|
|
305
|
+
task: calibrate_content
|
|
306
|
+
schema_ref: "content-standards/calibrate-content-request.json"
|
|
307
|
+
response_schema_ref: "content-standards/calibrate-content-response.json"
|
|
308
|
+
doc_ref: "/governance/content-standards/tasks/calibrate_content"
|
|
309
|
+
comply_scenario: governance_content_standards
|
|
310
|
+
stateful: true
|
|
311
|
+
expected: |
|
|
312
|
+
Return a calibration report:
|
|
313
|
+
- overall_pass: boolean
|
|
314
|
+
- Per-rule results with pass/fail and evidence
|
|
315
|
+
- Remediation guidance for failed rules
|
|
316
|
+
|
|
317
|
+
sample_request:
|
|
318
|
+
account:
|
|
319
|
+
brand:
|
|
320
|
+
domain: "acmeoutdoor.example"
|
|
321
|
+
operator: "pinnacle-agency.example"
|
|
322
|
+
standards_id: "$context.content_standards_id"
|
|
323
|
+
artifact:
|
|
324
|
+
property_rid: "test-publisher.example"
|
|
325
|
+
artifact_id: "display_trail_pro_300x250"
|
|
326
|
+
assets:
|
|
327
|
+
- type: "image"
|
|
328
|
+
url: "https://cdn.pinnacle-agency.example/trail-pro-300x250.png"
|
|
329
|
+
width: 300
|
|
330
|
+
height: 250
|
|
331
|
+
|
|
332
|
+
idempotency_key: "$generate:uuid_v4#content_standards_calibration_calibrate_content"
|
|
333
|
+
context:
|
|
334
|
+
correlation_id: "content_standards--calibrate_content"
|
|
335
|
+
validations:
|
|
336
|
+
- check: response_schema
|
|
337
|
+
description: "Response matches calibrate-content-response.json schema"
|
|
338
|
+
- check: field_present
|
|
339
|
+
path: "verdict"
|
|
340
|
+
description: "Response includes calibration verdict"
|
|
341
|
+
|
|
342
|
+
- id: must_rule_violation
|
|
343
|
+
title: "Must-rule violation"
|
|
344
|
+
narrative: |
|
|
345
|
+
The buyer submits content that violates a "must" severity rule in the content
|
|
346
|
+
standards. The governance agent must reject it — this tests that the agent
|
|
347
|
+
distinguishes between "must" (blocking) and "should" (advisory) severity levels.
|
|
348
|
+
|
|
349
|
+
steps:
|
|
350
|
+
- id: calibrate_must_violation
|
|
351
|
+
title: "Calibrate content that violates a must rule"
|
|
352
|
+
narrative: |
|
|
353
|
+
The buyer submits creative content containing violent imagery, which violates
|
|
354
|
+
the "No violent or controversial imagery (must)" rule. The agent must return
|
|
355
|
+
a failing verdict with a reference to the violated rule.
|
|
356
|
+
task: calibrate_content
|
|
357
|
+
schema_ref: "content-standards/calibrate-content-request.json"
|
|
358
|
+
response_schema_ref: "content-standards/calibrate-content-response.json"
|
|
359
|
+
doc_ref: "/governance/content-standards/tasks/calibrate_content"
|
|
360
|
+
comply_scenario: governance_content_standards
|
|
361
|
+
stateful: true
|
|
362
|
+
expected: |
|
|
363
|
+
Return a failing calibration:
|
|
364
|
+
- verdict: fail
|
|
365
|
+
- At least one rule failure referencing the violent imagery must-rule
|
|
366
|
+
- Remediation guidance explaining why the content was rejected
|
|
367
|
+
|
|
368
|
+
sample_request:
|
|
369
|
+
account:
|
|
370
|
+
brand:
|
|
371
|
+
domain: "acmeoutdoor.example"
|
|
372
|
+
operator: "pinnacle-agency.example"
|
|
373
|
+
standards_id: "$context.content_standards_id"
|
|
374
|
+
artifact:
|
|
375
|
+
property_rid: "test-publisher.example"
|
|
376
|
+
artifact_id: "display_violent_imagery_300x250"
|
|
377
|
+
description: "Display ad featuring graphic hunting scene with violent imagery"
|
|
378
|
+
assets:
|
|
379
|
+
- type: "image"
|
|
380
|
+
url: "https://cdn.pinnacle-agency.example/violent-hunting-scene-300x250.png"
|
|
381
|
+
width: 300
|
|
382
|
+
height: 250
|
|
383
|
+
|
|
384
|
+
idempotency_key: "$generate:uuid_v4#content_standards_must_rule_violation_calibrate_must_violation"
|
|
385
|
+
validations:
|
|
386
|
+
- check: response_schema
|
|
387
|
+
description: "Response matches calibrate-content-response.json schema"
|
|
388
|
+
- check: field_value
|
|
389
|
+
path: "verdict"
|
|
390
|
+
value: "fail"
|
|
391
|
+
description: "Content that violates a must-rule receives fail verdict"
|
|
392
|
+
|
|
393
|
+
- id: standards_version_change
|
|
394
|
+
title: "Policy version change"
|
|
395
|
+
narrative: |
|
|
396
|
+
The buyer updates the content standards to add a stricter rule, then re-calibrates
|
|
397
|
+
previously passing content. This tests that the agent applies the updated policy
|
|
398
|
+
rather than caching the old version.
|
|
399
|
+
|
|
400
|
+
steps:
|
|
401
|
+
- id: update_stricter_standards
|
|
402
|
+
title: "Add stricter must-rule to content standards"
|
|
403
|
+
narrative: |
|
|
404
|
+
The buyer updates the content standards to require alt text on all images
|
|
405
|
+
as a must-severity rule (previously "should"). Content that previously passed
|
|
406
|
+
calibration may now fail.
|
|
407
|
+
task: update_content_standards
|
|
408
|
+
schema_ref: "content-standards/update-content-standards-request.json"
|
|
409
|
+
response_schema_ref: "content-standards/update-content-standards-response.json"
|
|
410
|
+
doc_ref: "/governance/content-standards/tasks/update_content_standards"
|
|
411
|
+
comply_scenario: governance_content_standards
|
|
412
|
+
stateful: true
|
|
413
|
+
expected: |
|
|
414
|
+
Return the updated content standard:
|
|
415
|
+
- Updated policy with stricter alt text rule
|
|
416
|
+
- Confirmation of changes applied
|
|
417
|
+
|
|
418
|
+
sample_request:
|
|
419
|
+
account:
|
|
420
|
+
brand:
|
|
421
|
+
domain: "acmeoutdoor.example"
|
|
422
|
+
operator: "pinnacle-agency.example"
|
|
423
|
+
standards_id: "$context.content_standards_id"
|
|
424
|
+
policies:
|
|
425
|
+
- policy_id: no_violent_imagery
|
|
426
|
+
policy_categories: [brand_safety]
|
|
427
|
+
enforcement: must
|
|
428
|
+
policy: "No violent or controversial imagery"
|
|
429
|
+
- policy_id: min_display_dpi
|
|
430
|
+
policy_categories: [imagery_quality]
|
|
431
|
+
enforcement: should
|
|
432
|
+
channels: [display]
|
|
433
|
+
policy: "Minimum 72 DPI for display assets"
|
|
434
|
+
- policy_id: brand_color_tolerance
|
|
435
|
+
policy_categories: [brand_compliance]
|
|
436
|
+
enforcement: must
|
|
437
|
+
policy: "Brand colors must match palette within 5% tolerance"
|
|
438
|
+
- policy_id: image_alt_text
|
|
439
|
+
policy_categories: [accessibility]
|
|
440
|
+
enforcement: must
|
|
441
|
+
policy: "All images must have alt text"
|
|
442
|
+
- policy_id: no_stock_photography
|
|
443
|
+
policy_categories: [brand_compliance]
|
|
444
|
+
enforcement: must
|
|
445
|
+
policy: "No stock photography"
|
|
446
|
+
|
|
447
|
+
idempotency_key: "$generate:uuid_v4#content_standards_standards_version_change_update_stricter_standards"
|
|
448
|
+
validations:
|
|
449
|
+
- check: response_schema
|
|
450
|
+
description: "Response matches update-content-standards-response.json schema"
|
|
451
|
+
|
|
452
|
+
- id: calibrate_after_policy_change
|
|
453
|
+
title: "Re-calibrate content against updated standards"
|
|
454
|
+
narrative: |
|
|
455
|
+
The buyer re-calibrates the same sample content against the updated standards.
|
|
456
|
+
If the agent is properly applying the current policy version, content without
|
|
457
|
+
alt text or using stock photography should now fail.
|
|
458
|
+
task: calibrate_content
|
|
459
|
+
schema_ref: "content-standards/calibrate-content-request.json"
|
|
460
|
+
response_schema_ref: "content-standards/calibrate-content-response.json"
|
|
461
|
+
doc_ref: "/governance/content-standards/tasks/calibrate_content"
|
|
462
|
+
comply_scenario: governance_content_standards
|
|
463
|
+
stateful: true
|
|
464
|
+
expected: |
|
|
465
|
+
Return calibration results reflecting the updated policy:
|
|
466
|
+
- verdict reflects evaluation against current (not cached) standards
|
|
467
|
+
- Rule results reference the updated policy rules
|
|
468
|
+
|
|
469
|
+
sample_request:
|
|
470
|
+
account:
|
|
471
|
+
brand:
|
|
472
|
+
domain: "acmeoutdoor.example"
|
|
473
|
+
operator: "pinnacle-agency.example"
|
|
474
|
+
standards_id: "$context.content_standards_id"
|
|
475
|
+
artifact:
|
|
476
|
+
property_rid: "test-publisher.example"
|
|
477
|
+
artifact_id: "display_stock_photo_300x250"
|
|
478
|
+
description: "Display ad using stock photography without alt text"
|
|
479
|
+
assets:
|
|
480
|
+
- type: "image"
|
|
481
|
+
url: "https://cdn.pinnacle-agency.example/stock-photo-300x250.png"
|
|
482
|
+
width: 300
|
|
483
|
+
height: 250
|
|
484
|
+
|
|
485
|
+
idempotency_key: "$generate:uuid_v4#content_standards_standards_version_change_calibrate_after_policy_change"
|
|
486
|
+
context:
|
|
487
|
+
correlation_id: "content_standards--calibrate_after_policy_change"
|
|
488
|
+
validations:
|
|
489
|
+
- check: response_schema
|
|
490
|
+
description: "Response matches calibrate-content-response.json schema"
|
|
491
|
+
- check: field_value
|
|
492
|
+
path: "verdict"
|
|
493
|
+
value: "fail"
|
|
494
|
+
description: "Content violating updated must-rules receives fail verdict"
|
|
495
|
+
|
|
496
|
+
- check: field_present
|
|
497
|
+
path: "context"
|
|
498
|
+
description: "Response echoes back the context object"
|
|
499
|
+
- check: field_value
|
|
500
|
+
path: "context.correlation_id"
|
|
501
|
+
value: "content_standards--calibrate_after_policy_change"
|
|
502
|
+
description: "Context correlation_id returned unchanged"
|
|
503
|
+
- id: delivery_validation
|
|
504
|
+
title: "Validate delivered content"
|
|
505
|
+
narrative: |
|
|
506
|
+
After the campaign runs, the buyer validates that the delivered creatives met the
|
|
507
|
+
content standards. The governance agent checks actual delivered content against
|
|
508
|
+
the rules and flags any violations.
|
|
509
|
+
|
|
510
|
+
steps:
|
|
511
|
+
- id: validate_content_delivery
|
|
512
|
+
title: "Validate content delivery compliance"
|
|
513
|
+
narrative: |
|
|
514
|
+
The buyer submits delivery data with creative references. The governance agent
|
|
515
|
+
evaluates the delivered content against the content standards and returns
|
|
516
|
+
a compliance report.
|
|
517
|
+
task: validate_content_delivery
|
|
518
|
+
schema_ref: "content-standards/validate-content-delivery-request.json"
|
|
519
|
+
response_schema_ref: "content-standards/validate-content-delivery-response.json"
|
|
520
|
+
doc_ref: "/governance/content-standards/tasks/validate_content_delivery"
|
|
521
|
+
comply_scenario: governance_content_standards
|
|
522
|
+
stateful: true
|
|
523
|
+
expected: |
|
|
524
|
+
Return validation results:
|
|
525
|
+
- compliant: boolean overall status
|
|
526
|
+
- Per-creative compliance status
|
|
527
|
+
- Violations with rule references and evidence
|
|
528
|
+
|
|
529
|
+
sample_request:
|
|
530
|
+
account:
|
|
531
|
+
brand:
|
|
532
|
+
domain: "acmeoutdoor.example"
|
|
533
|
+
operator: "pinnacle-agency.example"
|
|
534
|
+
standards_id: "$context.content_standards_id"
|
|
535
|
+
records:
|
|
536
|
+
- record_id: "delivery_display_001"
|
|
537
|
+
artifact:
|
|
538
|
+
property_rid: "test-publisher.example"
|
|
539
|
+
artifact_id: "display_trail_pro_300x250"
|
|
540
|
+
assets:
|
|
541
|
+
- type: "image"
|
|
542
|
+
url: "https://cdn.pinnacle-agency.example/trail-pro-300x250.png"
|
|
543
|
+
width: 300
|
|
544
|
+
height: 250
|
|
545
|
+
- record_id: "delivery_video_001"
|
|
546
|
+
artifact:
|
|
547
|
+
property_rid: "test-publisher.example"
|
|
548
|
+
artifact_id: "video_30s_trail_pro"
|
|
549
|
+
assets:
|
|
550
|
+
- type: "video"
|
|
551
|
+
url: "https://cdn.pinnacle-agency.example/trail-pro-30s.mp4"
|
|
552
|
+
duration_ms: 30000
|
|
553
|
+
|
|
554
|
+
context:
|
|
555
|
+
correlation_id: "content_standards--validate_content_delivery"
|
|
556
|
+
validations:
|
|
557
|
+
- check: response_schema
|
|
558
|
+
description: "Response matches validate-content-delivery-response.json schema"
|
|
559
|
+
- check: field_present
|
|
560
|
+
path: "summary"
|
|
561
|
+
description: "Response includes validation summary with pass/fail counts"
|
|
562
|
+
- check: field_present
|
|
563
|
+
path: "results"
|
|
564
|
+
description: "Response includes per-record validation results"
|
|
565
|
+
|
|
566
|
+
- check: field_present
|
|
567
|
+
path: "context"
|
|
568
|
+
description: "Response echoes back the context object"
|
|
569
|
+
- check: field_value
|
|
570
|
+
path: "context.correlation_id"
|
|
571
|
+
value: "content_standards--validate_content_delivery"
|
|
572
|
+
description: "Context correlation_id returned unchanged"
|