@adcp/client 4.22.0 → 4.23.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/dist/lib/index.d.ts +2 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/server/index.d.ts +1 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/serve.d.ts +32 -4
- package/dist/lib/server/serve.d.ts.map +1 -1
- package/dist/lib/server/serve.js +12 -4
- package/dist/lib/server/serve.js.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts +22 -5
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +242 -276
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/index.d.ts +1 -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/platform-storyboards.d.ts +44 -0
- package/dist/lib/testing/compliance/platform-storyboards.d.ts.map +1 -0
- package/dist/lib/testing/compliance/platform-storyboards.js +230 -0
- package/dist/lib/testing/compliance/platform-storyboards.js.map +1 -0
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts +2 -9
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.js +4 -44
- package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -1
- package/dist/lib/testing/index.d.ts +1 -1
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +6 -1
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/types/core.generated.d.ts +241 -2
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +1 -1
- package/dist/lib/types/schemas.generated.d.ts +3380 -3154
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +220 -115
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +267 -74
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/docs/guides/BUILD-AN-AGENT.md +5 -3
- package/docs/llms.txt +48 -32
- package/examples/signals-agent.ts +3 -2
- package/package.json +1 -1
- package/storyboards/audience_sync.yaml +18 -29
- package/storyboards/behavioral_analysis.yaml +40 -72
- package/storyboards/brand_rights.yaml +172 -75
- package/storyboards/campaign_governance_conditions.yaml +187 -0
- package/storyboards/campaign_governance_delivery.yaml +231 -0
- package/storyboards/campaign_governance_denied.yaml +135 -0
- package/storyboards/capability_discovery.yaml +106 -0
- package/storyboards/content_standards.yaml +251 -0
- package/storyboards/creative_ad_server.yaml +108 -16
- package/storyboards/creative_lifecycle.yaml +284 -0
- package/storyboards/creative_sales_agent.yaml +2 -6
- package/storyboards/creative_template.yaml +1 -5
- package/storyboards/error_compliance.yaml +105 -108
- package/storyboards/media_buy_catalog_creative.yaml +6 -4
- package/storyboards/media_buy_governance_escalation.yaml +9 -5
- package/storyboards/media_buy_guaranteed_approval.yaml +9 -7
- package/storyboards/media_buy_non_guaranteed.yaml +7 -6
- package/storyboards/media_buy_proposal_mode.yaml +9 -8
- package/storyboards/media_buy_seller.yaml +153 -165
- package/storyboards/media_buy_state_machine.yaml +100 -99
- package/storyboards/property_governance.yaml +239 -0
- package/storyboards/schema.yaml +2 -2
- package/storyboards/schema_validation.yaml +58 -51
- package/storyboards/si_session.yaml +99 -317
- package/storyboards/signal_marketplace.yaml +6 -5
- package/storyboards/signal_owned.yaml +5 -5
- package/storyboards/social_platform.yaml +274 -0
- package/storyboards/governance_content_standards.yaml +0 -213
- package/storyboards/governance_property_lists.yaml +0 -372
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
id: media_buy_state_machine
|
|
2
2
|
version: "1.0.0"
|
|
3
3
|
title: "Media buy state machine lifecycle"
|
|
4
|
-
category:
|
|
5
|
-
track: media_buy
|
|
4
|
+
category: media_buy_state_machine
|
|
6
5
|
summary: "Validates media buy state transitions: create, pause, resume, cancel, and terminal state enforcement."
|
|
7
|
-
|
|
6
|
+
track: media_buy
|
|
8
7
|
required_tools:
|
|
9
8
|
- create_media_buy
|
|
10
9
|
- update_media_buy
|
|
@@ -44,7 +43,7 @@ phases:
|
|
|
44
43
|
title: "Create a media buy"
|
|
45
44
|
narrative: |
|
|
46
45
|
Discover products and create a media buy to use for state transition testing.
|
|
47
|
-
The media buy ID is captured and passed to subsequent phases
|
|
46
|
+
The media buy ID is captured and passed to subsequent phases.
|
|
48
47
|
|
|
49
48
|
steps:
|
|
50
49
|
- id: discover_products
|
|
@@ -53,22 +52,22 @@ phases:
|
|
|
53
52
|
Send a brief to get available products with pricing options. The first product
|
|
54
53
|
with a pricing option will be used to create the test media buy.
|
|
55
54
|
task: get_products
|
|
56
|
-
|
|
55
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
56
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
57
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
58
|
+
comply_scenario: full_sales_flow
|
|
57
59
|
stateful: false
|
|
58
60
|
expected: |
|
|
59
61
|
Return products with:
|
|
60
62
|
- product_id
|
|
61
63
|
- pricing_options with pricing_option_id
|
|
64
|
+
|
|
62
65
|
sample_request:
|
|
63
66
|
buying_mode: "brief"
|
|
64
67
|
brief: "Display advertising products for state machine testing"
|
|
65
68
|
brand:
|
|
66
69
|
domain: "acmeoutdoor.com"
|
|
67
|
-
|
|
68
|
-
- path: "products[0].product_id"
|
|
69
|
-
key: "product_id"
|
|
70
|
-
- path: "products[0].pricing_options[0].pricing_option_id"
|
|
71
|
-
key: "pricing_option_id"
|
|
70
|
+
|
|
72
71
|
validations:
|
|
73
72
|
- check: response_schema
|
|
74
73
|
description: "Response matches get-products-response.json schema"
|
|
@@ -79,176 +78,178 @@ phases:
|
|
|
79
78
|
- id: create_buy
|
|
80
79
|
title: "Create the test media buy"
|
|
81
80
|
narrative: |
|
|
82
|
-
Create a media buy using the discovered product.
|
|
83
|
-
|
|
81
|
+
Create a media buy using the discovered product. This buy will be used for
|
|
82
|
+
all subsequent state transition tests.
|
|
84
83
|
task: create_media_buy
|
|
85
|
-
|
|
84
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
85
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
86
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
87
|
+
comply_scenario: create_media_buy
|
|
86
88
|
stateful: true
|
|
87
89
|
expected: |
|
|
88
|
-
Return a media buy with:
|
|
89
|
-
- media_buy_id
|
|
90
|
-
- status: confirmed
|
|
90
|
+
Return a confirmed media buy with:
|
|
91
|
+
- media_buy_id
|
|
92
|
+
- status: confirmed or active
|
|
93
|
+
|
|
91
94
|
sample_request:
|
|
92
|
-
account:
|
|
93
|
-
brand:
|
|
94
|
-
domain: "acmeoutdoor.com"
|
|
95
|
-
operator: "pinnacle-agency.com"
|
|
96
95
|
brand:
|
|
97
96
|
domain: "acmeoutdoor.com"
|
|
98
97
|
start_time: "2026-05-01T00:00:00Z"
|
|
99
98
|
end_time: "2026-05-31T23:59:59Z"
|
|
100
99
|
packages:
|
|
101
|
-
- product_id: "
|
|
102
|
-
budget:
|
|
103
|
-
pricing_option_id: "
|
|
104
|
-
|
|
105
|
-
- path: "media_buy_id"
|
|
106
|
-
key: "media_buy_id"
|
|
107
|
-
- path: "media_buy.media_buy_id"
|
|
108
|
-
key: "media_buy_id"
|
|
100
|
+
- product_id: "test-product"
|
|
101
|
+
budget: 10000
|
|
102
|
+
pricing_option_id: "test-pricing"
|
|
103
|
+
|
|
109
104
|
validations:
|
|
110
105
|
- check: response_schema
|
|
111
106
|
description: "Response matches create-media-buy-response.json schema"
|
|
112
107
|
- check: field_present
|
|
113
108
|
path: "media_buy_id"
|
|
114
|
-
description: "Response
|
|
109
|
+
description: "Response includes a media_buy_id"
|
|
115
110
|
|
|
116
111
|
- id: state_transitions
|
|
117
|
-
title: "
|
|
112
|
+
title: "Valid state transitions"
|
|
118
113
|
narrative: |
|
|
119
|
-
Exercise the
|
|
120
|
-
|
|
121
|
-
terminates it permanently (status becomes canceled).
|
|
122
|
-
|
|
123
|
-
Each transition is validated by checking the returned status field.
|
|
114
|
+
Exercise the valid state transitions: pause, resume, and cancel. Each transition
|
|
115
|
+
must update the status field correctly.
|
|
124
116
|
|
|
125
117
|
steps:
|
|
126
118
|
- id: pause_buy
|
|
127
119
|
title: "Pause the media buy"
|
|
128
120
|
narrative: |
|
|
129
121
|
Pause the active media buy. The status should transition to paused.
|
|
130
|
-
This is a reversible operation — the buy can be resumed later.
|
|
131
122
|
task: update_media_buy
|
|
132
|
-
|
|
123
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
124
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
125
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
126
|
+
comply_scenario: media_buy_lifecycle
|
|
133
127
|
stateful: true
|
|
134
128
|
expected: |
|
|
135
|
-
|
|
129
|
+
Media buy status transitions to paused.
|
|
130
|
+
|
|
136
131
|
sample_request:
|
|
137
|
-
media_buy_id: "
|
|
132
|
+
media_buy_id: "test-media-buy"
|
|
138
133
|
paused: true
|
|
134
|
+
|
|
139
135
|
validations:
|
|
140
|
-
- check:
|
|
136
|
+
- check: field_present
|
|
141
137
|
path: "status"
|
|
142
|
-
|
|
143
|
-
description: "Media buy status is paused"
|
|
138
|
+
description: "Response includes updated status"
|
|
144
139
|
|
|
145
140
|
- id: resume_buy
|
|
146
141
|
title: "Resume the media buy"
|
|
147
142
|
narrative: |
|
|
148
|
-
Resume the paused media buy. The status should transition back to active
|
|
149
|
-
(or pending_activation on some platforms).
|
|
143
|
+
Resume the paused media buy. The status should transition back to active.
|
|
150
144
|
task: update_media_buy
|
|
151
|
-
|
|
145
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
146
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
147
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
148
|
+
comply_scenario: media_buy_lifecycle
|
|
152
149
|
stateful: true
|
|
153
150
|
expected: |
|
|
154
|
-
|
|
151
|
+
Media buy status transitions back to active.
|
|
152
|
+
|
|
155
153
|
sample_request:
|
|
156
|
-
media_buy_id: "
|
|
154
|
+
media_buy_id: "test-media-buy"
|
|
157
155
|
paused: false
|
|
156
|
+
|
|
158
157
|
validations:
|
|
159
158
|
- check: field_present
|
|
160
159
|
path: "status"
|
|
161
|
-
description: "Response
|
|
160
|
+
description: "Response includes updated status"
|
|
162
161
|
|
|
163
162
|
- id: cancel_buy
|
|
164
163
|
title: "Cancel the media buy"
|
|
165
164
|
narrative: |
|
|
166
|
-
Cancel the media buy
|
|
167
|
-
|
|
165
|
+
Cancel the media buy. This is a terminal transition — the buy cannot be
|
|
166
|
+
resumed or modified after cancellation.
|
|
168
167
|
task: update_media_buy
|
|
169
|
-
|
|
168
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
169
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
170
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
171
|
+
comply_scenario: media_buy_lifecycle
|
|
170
172
|
stateful: true
|
|
171
173
|
expected: |
|
|
172
|
-
|
|
174
|
+
Media buy status transitions to canceled. This is terminal.
|
|
175
|
+
|
|
173
176
|
sample_request:
|
|
174
|
-
media_buy_id: "
|
|
177
|
+
media_buy_id: "test-media-buy"
|
|
175
178
|
canceled: true
|
|
176
|
-
|
|
179
|
+
|
|
177
180
|
validations:
|
|
178
|
-
- check:
|
|
181
|
+
- check: field_present
|
|
179
182
|
path: "status"
|
|
180
|
-
|
|
181
|
-
description: "Media buy status is canceled"
|
|
183
|
+
description: "Response includes canceled status"
|
|
182
184
|
|
|
183
185
|
- id: terminal_enforcement
|
|
184
186
|
title: "Terminal state enforcement"
|
|
185
187
|
narrative: |
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
return an error — typically INVALID_STATE_TRANSITION or INVALID_STATE.
|
|
189
|
-
|
|
190
|
-
This validates that the state machine is properly enforced and buyers can trust
|
|
191
|
-
that terminal states are final.
|
|
188
|
+
Verify that the agent rejects state transitions on a canceled media buy. Pausing,
|
|
189
|
+
resuming, or re-canceling a terminal buy must return an error.
|
|
192
190
|
|
|
193
191
|
steps:
|
|
194
192
|
- id: pause_canceled_buy
|
|
195
|
-
title: "
|
|
193
|
+
title: "Reject pause on canceled buy"
|
|
196
194
|
narrative: |
|
|
197
|
-
Attempt to pause
|
|
198
|
-
|
|
195
|
+
Attempt to pause a canceled media buy. The agent must reject this with
|
|
196
|
+
INVALID_STATE_TRANSITION.
|
|
199
197
|
task: update_media_buy
|
|
200
|
-
|
|
201
|
-
|
|
198
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
199
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
200
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
201
|
+
comply_scenario: terminal_state_enforcement
|
|
202
202
|
stateful: true
|
|
203
203
|
expected: |
|
|
204
|
-
Reject with
|
|
205
|
-
|
|
206
|
-
- The buy must remain in canceled status
|
|
204
|
+
Reject with INVALID_STATE_TRANSITION — cannot pause a canceled buy.
|
|
205
|
+
|
|
207
206
|
sample_request:
|
|
208
|
-
media_buy_id: "
|
|
207
|
+
media_buy_id: "test-media-buy"
|
|
209
208
|
paused: true
|
|
209
|
+
|
|
210
210
|
validations:
|
|
211
|
-
- check:
|
|
212
|
-
|
|
213
|
-
description: "
|
|
211
|
+
- check: field_present
|
|
212
|
+
path: "errors"
|
|
213
|
+
description: "Response contains an error for invalid transition"
|
|
214
214
|
|
|
215
215
|
- id: resume_canceled_buy
|
|
216
|
-
title: "
|
|
216
|
+
title: "Reject resume on canceled buy"
|
|
217
217
|
narrative: |
|
|
218
|
-
Attempt to resume
|
|
219
|
-
|
|
218
|
+
Attempt to resume a canceled media buy. The agent must reject this with
|
|
219
|
+
INVALID_STATE_TRANSITION.
|
|
220
220
|
task: update_media_buy
|
|
221
|
-
|
|
222
|
-
|
|
221
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
222
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
223
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
224
|
+
comply_scenario: terminal_state_enforcement
|
|
223
225
|
stateful: true
|
|
224
226
|
expected: |
|
|
225
|
-
Reject with
|
|
227
|
+
Reject with INVALID_STATE_TRANSITION — cannot resume a canceled buy.
|
|
228
|
+
|
|
226
229
|
sample_request:
|
|
227
|
-
media_buy_id: "
|
|
230
|
+
media_buy_id: "test-media-buy"
|
|
228
231
|
paused: false
|
|
232
|
+
|
|
229
233
|
validations:
|
|
230
|
-
- check:
|
|
231
|
-
|
|
232
|
-
description: "
|
|
234
|
+
- check: field_present
|
|
235
|
+
path: "errors"
|
|
236
|
+
description: "Response contains an error for invalid transition"
|
|
233
237
|
|
|
234
238
|
- id: recancel_buy
|
|
235
|
-
title: "
|
|
239
|
+
title: "Handle re-cancel of canceled buy"
|
|
236
240
|
narrative: |
|
|
237
|
-
Attempt to cancel
|
|
238
|
-
|
|
239
|
-
acceptable — what matters is no crash or unstructured error.
|
|
241
|
+
Attempt to cancel an already-canceled media buy. The agent should either
|
|
242
|
+
return an error or accept it idempotently.
|
|
240
243
|
task: update_media_buy
|
|
241
|
-
|
|
244
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
245
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
246
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
247
|
+
comply_scenario: terminal_state_enforcement
|
|
242
248
|
stateful: true
|
|
243
249
|
expected: |
|
|
244
|
-
Either
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
Both are acceptable behaviors.
|
|
250
|
+
Either reject with INVALID_STATE_TRANSITION or accept idempotently.
|
|
251
|
+
Both behaviors are valid.
|
|
252
|
+
|
|
248
253
|
sample_request:
|
|
249
|
-
media_buy_id: "
|
|
254
|
+
media_buy_id: "test-media-buy"
|
|
250
255
|
canceled: true
|
|
251
|
-
validations:
|
|
252
|
-
- check: field_present
|
|
253
|
-
path: "status"
|
|
254
|
-
description: "Response contains a status field (canceled) or a structured error"
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
id: property_governance
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Property governance"
|
|
4
|
+
category: property_governance
|
|
5
|
+
summary: "Manage brand safety property lists — create inclusion/exclusion lists, query and update them, validate delivery compliance."
|
|
6
|
+
track: governance
|
|
7
|
+
required_tools:
|
|
8
|
+
- create_property_list
|
|
9
|
+
|
|
10
|
+
narrative: |
|
|
11
|
+
You run a governance agent that manages property lists for brand safety. Buyers create
|
|
12
|
+
inclusion and exclusion lists that define where their ads can and cannot appear. Your
|
|
13
|
+
agent stores these lists, lets buyers query and update them, and validates that actual
|
|
14
|
+
ad delivery complied with the property constraints.
|
|
15
|
+
|
|
16
|
+
Property governance is how brands control their environment. An inclusion list says
|
|
17
|
+
"only show my ads on these properties." An exclusion list says "never show my ads here."
|
|
18
|
+
The validation step checks after the fact: did the seller actually respect the lists?
|
|
19
|
+
|
|
20
|
+
This storyboard covers the full property list lifecycle: creating lists, querying them,
|
|
21
|
+
updating and deleting, and validating that delivery matched the constraints.
|
|
22
|
+
|
|
23
|
+
agent:
|
|
24
|
+
interaction_model: governance_agent
|
|
25
|
+
capabilities:
|
|
26
|
+
- property_governance
|
|
27
|
+
- brand_safety
|
|
28
|
+
examples:
|
|
29
|
+
- "IAS"
|
|
30
|
+
- "DoubleVerify"
|
|
31
|
+
- "GARM-aligned platforms"
|
|
32
|
+
- "Brand safety services"
|
|
33
|
+
|
|
34
|
+
caller:
|
|
35
|
+
role: buyer_agent
|
|
36
|
+
example: "Pinnacle Agency (buyer)"
|
|
37
|
+
|
|
38
|
+
prerequisites:
|
|
39
|
+
description: |
|
|
40
|
+
The caller needs a brand identity and property domain knowledge. The test kit
|
|
41
|
+
provides a sample brand with campaign context.
|
|
42
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
43
|
+
|
|
44
|
+
phases:
|
|
45
|
+
- id: create_list
|
|
46
|
+
title: "Create property lists"
|
|
47
|
+
narrative: |
|
|
48
|
+
The buyer creates inclusion and exclusion property lists for the campaign. These
|
|
49
|
+
define the safe and unsafe environments for the brand's ads.
|
|
50
|
+
|
|
51
|
+
steps:
|
|
52
|
+
- id: create_inclusion_list
|
|
53
|
+
title: "Create an inclusion list"
|
|
54
|
+
narrative: |
|
|
55
|
+
The buyer creates an inclusion list specifying which properties (domains,
|
|
56
|
+
apps, channels) are approved for ad placement.
|
|
57
|
+
task: create_property_list
|
|
58
|
+
schema_ref: "property/create-property-list-request.json"
|
|
59
|
+
response_schema_ref: "property/create-property-list-response.json"
|
|
60
|
+
doc_ref: "/governance/property/tasks/property_lists"
|
|
61
|
+
comply_scenario: governance_property_lists
|
|
62
|
+
stateful: true
|
|
63
|
+
expected: |
|
|
64
|
+
Return the created property list:
|
|
65
|
+
- list_id: platform-assigned identifier
|
|
66
|
+
- list_type: inclusion
|
|
67
|
+
- Properties registered
|
|
68
|
+
- Status: active
|
|
69
|
+
|
|
70
|
+
sample_request:
|
|
71
|
+
brand:
|
|
72
|
+
domain: "acmeoutdoor.com"
|
|
73
|
+
list_type: "inclusion"
|
|
74
|
+
name: "Acme Outdoor approved properties"
|
|
75
|
+
properties:
|
|
76
|
+
- domain: "outdoormagazine.example.com"
|
|
77
|
+
- domain: "hikingtrails.example.com"
|
|
78
|
+
- domain: "campinggear.example.com"
|
|
79
|
+
|
|
80
|
+
validations:
|
|
81
|
+
- check: response_schema
|
|
82
|
+
description: "Response matches create-property-list-response.json schema"
|
|
83
|
+
|
|
84
|
+
- id: list_and_get
|
|
85
|
+
title: "Query property lists"
|
|
86
|
+
narrative: |
|
|
87
|
+
The buyer lists all property lists for the account and retrieves a specific list
|
|
88
|
+
to inspect its contents.
|
|
89
|
+
|
|
90
|
+
steps:
|
|
91
|
+
- id: list_property_lists
|
|
92
|
+
title: "List all property lists"
|
|
93
|
+
narrative: |
|
|
94
|
+
The buyer lists all property lists for the brand. The response includes list
|
|
95
|
+
metadata (name, type, property count) without full property details.
|
|
96
|
+
task: list_property_lists
|
|
97
|
+
schema_ref: "property/list-property-lists-request.json"
|
|
98
|
+
response_schema_ref: "property/list-property-lists-response.json"
|
|
99
|
+
doc_ref: "/governance/property/tasks/property_lists"
|
|
100
|
+
comply_scenario: property_list_filters
|
|
101
|
+
stateful: true
|
|
102
|
+
expected: |
|
|
103
|
+
Return property list summaries:
|
|
104
|
+
- Array of lists with list_id, name, list_type, property_count
|
|
105
|
+
- Includes both inclusion and exclusion lists
|
|
106
|
+
|
|
107
|
+
sample_request:
|
|
108
|
+
brand:
|
|
109
|
+
domain: "acmeoutdoor.com"
|
|
110
|
+
|
|
111
|
+
validations:
|
|
112
|
+
- check: response_schema
|
|
113
|
+
description: "Response matches list-property-lists-response.json schema"
|
|
114
|
+
|
|
115
|
+
- id: get_property_list
|
|
116
|
+
title: "Get a specific property list"
|
|
117
|
+
narrative: |
|
|
118
|
+
The buyer retrieves the full details of a specific property list, including
|
|
119
|
+
all properties in the list.
|
|
120
|
+
task: get_property_list
|
|
121
|
+
schema_ref: "property/get-property-list-request.json"
|
|
122
|
+
response_schema_ref: "property/get-property-list-response.json"
|
|
123
|
+
doc_ref: "/governance/property/tasks/property_lists"
|
|
124
|
+
comply_scenario: governance_property_lists
|
|
125
|
+
stateful: true
|
|
126
|
+
expected: |
|
|
127
|
+
Return the full property list:
|
|
128
|
+
- list_id, name, list_type
|
|
129
|
+
- All properties in the list with their details
|
|
130
|
+
|
|
131
|
+
sample_request:
|
|
132
|
+
list_id: "pl_acme_inclusion_001"
|
|
133
|
+
|
|
134
|
+
validations:
|
|
135
|
+
- check: response_schema
|
|
136
|
+
description: "Response matches get-property-list-response.json schema"
|
|
137
|
+
|
|
138
|
+
- id: update_list
|
|
139
|
+
title: "Update property lists"
|
|
140
|
+
narrative: |
|
|
141
|
+
The buyer modifies an existing property list — adding or removing properties
|
|
142
|
+
as brand safety requirements evolve.
|
|
143
|
+
|
|
144
|
+
steps:
|
|
145
|
+
- id: update_property_list
|
|
146
|
+
title: "Update a property list"
|
|
147
|
+
narrative: |
|
|
148
|
+
The buyer adds new properties to or removes properties from an existing list.
|
|
149
|
+
task: update_property_list
|
|
150
|
+
schema_ref: "property/update-property-list-request.json"
|
|
151
|
+
response_schema_ref: "property/update-property-list-response.json"
|
|
152
|
+
doc_ref: "/governance/property/tasks/property_lists"
|
|
153
|
+
comply_scenario: governance_property_lists
|
|
154
|
+
stateful: true
|
|
155
|
+
expected: |
|
|
156
|
+
Return the updated property list:
|
|
157
|
+
- Updated property count
|
|
158
|
+
- Confirmation of additions and removals
|
|
159
|
+
|
|
160
|
+
sample_request:
|
|
161
|
+
list_id: "pl_acme_inclusion_001"
|
|
162
|
+
add:
|
|
163
|
+
- domain: "mountaineering.example.com"
|
|
164
|
+
remove:
|
|
165
|
+
- domain: "campinggear.example.com"
|
|
166
|
+
|
|
167
|
+
validations:
|
|
168
|
+
- check: response_schema
|
|
169
|
+
description: "Response matches update-property-list-response.json schema"
|
|
170
|
+
|
|
171
|
+
- id: delete_list
|
|
172
|
+
title: "Delete a property list"
|
|
173
|
+
narrative: |
|
|
174
|
+
The buyer removes a property list that is no longer needed. Active media buys
|
|
175
|
+
referencing the list should be notified.
|
|
176
|
+
|
|
177
|
+
steps:
|
|
178
|
+
- id: delete_property_list
|
|
179
|
+
title: "Delete a property list"
|
|
180
|
+
narrative: |
|
|
181
|
+
The buyer deletes a property list. The governance agent removes the list and
|
|
182
|
+
returns confirmation.
|
|
183
|
+
task: delete_property_list
|
|
184
|
+
schema_ref: "property/delete-property-list-request.json"
|
|
185
|
+
response_schema_ref: "property/delete-property-list-response.json"
|
|
186
|
+
doc_ref: "/governance/property/tasks/property_lists"
|
|
187
|
+
comply_scenario: governance_property_lists
|
|
188
|
+
stateful: true
|
|
189
|
+
expected: |
|
|
190
|
+
Confirm deletion:
|
|
191
|
+
- list_id: the deleted list
|
|
192
|
+
- status: deleted
|
|
193
|
+
|
|
194
|
+
sample_request:
|
|
195
|
+
list_id: "pl_acme_inclusion_001"
|
|
196
|
+
|
|
197
|
+
validations:
|
|
198
|
+
- check: response_schema
|
|
199
|
+
description: "Response matches delete-property-list-response.json schema"
|
|
200
|
+
|
|
201
|
+
- id: delivery_validation
|
|
202
|
+
title: "Validate delivery compliance"
|
|
203
|
+
narrative: |
|
|
204
|
+
After ads have been delivered, the buyer validates that the seller respected the
|
|
205
|
+
property lists. The governance agent checks actual delivery data against the
|
|
206
|
+
inclusion/exclusion constraints.
|
|
207
|
+
|
|
208
|
+
steps:
|
|
209
|
+
- id: validate_property_delivery
|
|
210
|
+
title: "Validate property compliance"
|
|
211
|
+
narrative: |
|
|
212
|
+
The buyer submits delivery data and the governance agent checks whether all
|
|
213
|
+
placements complied with the property lists. Non-compliant placements are
|
|
214
|
+
flagged with details.
|
|
215
|
+
task: validate_property_delivery
|
|
216
|
+
schema_ref: "property/validate-property-delivery-request.json"
|
|
217
|
+
response_schema_ref: "property/validate-property-delivery-response.json"
|
|
218
|
+
doc_ref: "/governance/property/tasks/validate_property_delivery"
|
|
219
|
+
comply_scenario: governance_property_lists
|
|
220
|
+
stateful: true
|
|
221
|
+
expected: |
|
|
222
|
+
Return validation results:
|
|
223
|
+
- compliant: boolean overall status
|
|
224
|
+
- Per-placement compliance status
|
|
225
|
+
- Violations with details (property, list, severity)
|
|
226
|
+
|
|
227
|
+
sample_request:
|
|
228
|
+
brand:
|
|
229
|
+
domain: "acmeoutdoor.com"
|
|
230
|
+
list_id: "pl_acme_inclusion_001"
|
|
231
|
+
delivery:
|
|
232
|
+
- property: "outdoormagazine.example.com"
|
|
233
|
+
impressions: 50000
|
|
234
|
+
- property: "randomsite.example.com"
|
|
235
|
+
impressions: 200
|
|
236
|
+
|
|
237
|
+
validations:
|
|
238
|
+
- check: response_schema
|
|
239
|
+
description: "Response matches validate-property-delivery-response.json schema"
|
package/storyboards/schema.yaml
CHANGED
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
# id: string (unique identifier, e.g., "creative_template")
|
|
14
14
|
# version: string (semver, e.g., "1.0.0")
|
|
15
15
|
# title: string (human-readable title)
|
|
16
|
-
# category: enum (creative_template | creative_ad_server | creative_sales_agent | creative_generative | media_buy_seller | media_buy_guaranteed_approval | media_buy_non_guaranteed | media_buy_proposal_mode | media_buy_governance_escalation | media_buy_catalog_creative | signal_marketplace | signal_owned)
|
|
16
|
+
# category: enum (capability_discovery | schema_validation | behavioral_analysis | error_compliance | creative_template | creative_ad_server | creative_sales_agent | creative_generative | creative_lifecycle | media_buy_seller | media_buy_guaranteed_approval | media_buy_non_guaranteed | media_buy_proposal_mode | media_buy_governance_escalation | media_buy_catalog_creative | media_buy_state_machine | campaign_governance_denied | campaign_governance_conditions | campaign_governance_delivery | signal_marketplace | signal_owned | social_platform | si_session | brand_rights | property_governance | content_standards)
|
|
17
17
|
# summary: string (one-line description for listings)
|
|
18
18
|
# narrative: string (paragraph explaining the overall flow)
|
|
19
19
|
#
|
|
20
20
|
# agent:
|
|
21
|
-
# interaction_model: enum (stateless_transform | stateful_preloaded | stateful_push | stateless_generate | media_buy_seller | marketplace_catalog | owned_signals)
|
|
21
|
+
# interaction_model: enum (stateless_transform | stateful_preloaded | stateful_push | stateless_generate | media_buy_seller | marketplace_catalog | owned_signals | si_platform | brand_rights_holder | governance_agent)
|
|
22
22
|
# capabilities: string[] (AdCP capability flags: supports_transformation, has_creative_library, supports_generation, sells_media, accepts_briefs, supports_guaranteed, supports_non_guaranteed, catalog_signals)
|
|
23
23
|
# examples: string[] (real-world examples: "Celtra", "Innovid")
|
|
24
24
|
#
|