@adcp/client 4.22.1 → 4.24.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/README.md +23 -9
- package/bin/adcp.js +83 -18
- package/dist/lib/index.d.ts +3 -5
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +16 -12
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/server/index.d.ts +5 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +10 -1
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/postgres-task-store.d.ts +105 -0
- package/dist/lib/server/postgres-task-store.d.ts.map +1 -0
- package/dist/lib/server/postgres-task-store.js +267 -0
- package/dist/lib/server/postgres-task-store.js.map +1 -0
- package/dist/lib/server/responses.d.ts +1 -0
- package/dist/lib/server/responses.d.ts.map +1 -1
- package/dist/lib/server/responses.js +1 -0
- package/dist/lib/server/responses.js.map +1 -1
- package/dist/lib/server/test-controller.d.ts +88 -0
- package/dist/lib/server/test-controller.d.ts.map +1 -0
- package/dist/lib/server/test-controller.js +227 -0
- package/dist/lib/server/test-controller.js.map +1 -0
- package/dist/lib/testing/agent-tester.d.ts +1 -1
- package/dist/lib/testing/agent-tester.d.ts.map +1 -1
- package/dist/lib/testing/agent-tester.js +13 -1
- package/dist/lib/testing/agent-tester.js.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts +24 -5
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +318 -277
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/index.d.ts +2 -1
- 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 +232 -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 +15 -46
- package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -1
- package/dist/lib/testing/compliance/types.d.ts +22 -1
- package/dist/lib/testing/compliance/types.d.ts.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/testing/orchestrator.d.ts.map +1 -1
- package/dist/lib/testing/orchestrator.js +5 -1
- package/dist/lib/testing/orchestrator.js.map +1 -1
- package/dist/lib/testing/scenarios/brand-rights.d.ts +19 -1
- package/dist/lib/testing/scenarios/brand-rights.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/brand-rights.js +138 -1
- package/dist/lib/testing/scenarios/brand-rights.js.map +1 -1
- package/dist/lib/testing/scenarios/deterministic.js +7 -7
- package/dist/lib/testing/scenarios/deterministic.js.map +1 -1
- package/dist/lib/testing/scenarios/index.d.ts +1 -1
- package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/index.js +4 -2
- package/dist/lib/testing/scenarios/index.js.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.js +4 -4
- package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
- package/dist/lib/testing/storyboard/loader.d.ts +1 -0
- package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/loader.js +14 -0
- package/dist/lib/testing/storyboard/loader.js.map +1 -1
- package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-builder.js +88 -11
- package/dist/lib/testing/storyboard/request-builder.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +83 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/task-map.d.ts +2 -0
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/task-map.js +23 -9
- package/dist/lib/testing/storyboard/task-map.js.map +1 -1
- package/dist/lib/testing/storyboard/types.d.ts +6 -2
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.js +21 -4
- package/dist/lib/testing/storyboard/validations.js.map +1 -1
- package/dist/lib/testing/types.d.ts +1 -1
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/core.generated.d.ts +242 -3
- 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 +3697 -3468
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +226 -118
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +281 -79
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.d.ts +2 -2
- package/dist/lib/utils/capabilities.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.js +9 -3
- package/dist/lib/utils/capabilities.js.map +1 -1
- package/dist/lib/utils/response-schemas.d.ts.map +1 -1
- package/dist/lib/utils/response-schemas.js +9 -0
- package/dist/lib/utils/response-schemas.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/docs/llms.txt +56 -32
- package/package.json +8 -2
- package/skills/adcp/SKILL.md +118 -33
- package/skills/build-creative-agent/SKILL.md +221 -0
- package/skills/build-generative-seller-agent/SKILL.md +288 -0
- package/skills/build-retail-media-agent/SKILL.md +237 -0
- package/skills/build-seller-agent/SKILL.md +313 -0
- package/skills/build-signals-agent/SKILL.md +203 -0
- 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 +136 -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_generative.yaml +317 -0
- package/storyboards/creative_lifecycle.yaml +284 -0
- package/storyboards/creative_sales_agent.yaml +2 -6
- package/storyboards/creative_template.yaml +3 -6
- package/storyboards/deterministic_testing.yaml +271 -245
- package/storyboards/error_compliance.yaml +105 -108
- package/storyboards/media_buy_catalog_creative.yaml +8 -5
- package/storyboards/media_buy_generative_seller.yaml +581 -0
- package/storyboards/media_buy_governance_escalation.yaml +10 -6
- package/storyboards/media_buy_guaranteed_approval.yaml +21 -19
- package/storyboards/media_buy_non_guaranteed.yaml +9 -8
- package/storyboards/media_buy_proposal_mode.yaml +12 -11
- package/storyboards/media_buy_seller.yaml +161 -173
- package/storyboards/media_buy_state_machine.yaml +102 -101
- package/storyboards/property_governance.yaml +239 -0
- package/storyboards/schema.yaml +3 -2
- package/storyboards/schema_validation.yaml +58 -51
- package/storyboards/si_session.yaml +99 -317
- package/storyboards/signal_marketplace.yaml +9 -5
- package/storyboards/signal_owned.yaml +6 -5
- package/storyboards/social_platform.yaml +274 -0
- package/storyboards/test-kits/acme-outdoor.yaml +118 -0
- package/storyboards/test-kits/nova-motors.yaml +134 -0
- package/storyboards/governance_content_standards.yaml +0 -213
- package/storyboards/governance_property_lists.yaml +0 -372
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
id: governance_content_standards
|
|
2
|
-
version: "1.0.0"
|
|
3
|
-
title: "Governance content standards"
|
|
4
|
-
category: governance_content_standards
|
|
5
|
-
summary: "Content standards discovery, calibration, and delivery validation."
|
|
6
|
-
track: governance
|
|
7
|
-
required_tools:
|
|
8
|
-
- list_content_standards
|
|
9
|
-
|
|
10
|
-
narrative: |
|
|
11
|
-
You operate a governance agent that manages content standards — brand safety
|
|
12
|
-
configurations that define what content is acceptable for a brand's ads.
|
|
13
|
-
Buyer agents discover available standards, retrieve their details, calibrate
|
|
14
|
-
content against them, and validate delivery records for compliance.
|
|
15
|
-
|
|
16
|
-
This storyboard covers two concerns: discovering and inspecting content
|
|
17
|
-
standards, and the active calibration/validation workflow where the governance
|
|
18
|
-
agent evaluates content artifacts against those standards.
|
|
19
|
-
|
|
20
|
-
agent:
|
|
21
|
-
interaction_model: governance
|
|
22
|
-
capabilities:
|
|
23
|
-
- manages_content_standards
|
|
24
|
-
- brand_safety
|
|
25
|
-
- content_calibration
|
|
26
|
-
examples:
|
|
27
|
-
- "Brand safety verification platforms"
|
|
28
|
-
- "Content classification services"
|
|
29
|
-
- "Publisher quality assurance tools"
|
|
30
|
-
|
|
31
|
-
caller:
|
|
32
|
-
role: buyer_agent
|
|
33
|
-
example: "Scope3 (DSP)"
|
|
34
|
-
|
|
35
|
-
prerequisites:
|
|
36
|
-
description: |
|
|
37
|
-
The caller needs a brand identity and content artifacts (URLs) for
|
|
38
|
-
calibration and validation testing. The governance agent must have at
|
|
39
|
-
least one content standards configuration available.
|
|
40
|
-
test_kit: "test-kits/acme-outdoor.yaml"
|
|
41
|
-
|
|
42
|
-
phases:
|
|
43
|
-
- id: content_standards_discovery
|
|
44
|
-
title: "Content standards discovery"
|
|
45
|
-
narrative: |
|
|
46
|
-
The buyer discovers what content standards configurations are available
|
|
47
|
-
from the governance agent, then retrieves the details of a specific
|
|
48
|
-
standard. This is the read-only exploration phase before any calibration
|
|
49
|
-
or validation occurs.
|
|
50
|
-
|
|
51
|
-
steps:
|
|
52
|
-
- id: list_content_standards
|
|
53
|
-
title: "List available content standards"
|
|
54
|
-
narrative: |
|
|
55
|
-
The buyer asks the governance agent for all available content
|
|
56
|
-
standards configurations. These represent brand safety rule sets
|
|
57
|
-
that content can be evaluated against — GARM floor categories,
|
|
58
|
-
custom brand policies, or industry-specific compliance rules.
|
|
59
|
-
task: list_content_standards
|
|
60
|
-
stateful: false
|
|
61
|
-
expected: |
|
|
62
|
-
Return available content standards with:
|
|
63
|
-
- standards: array of content standards summaries
|
|
64
|
-
- Each standard has standards_id, name, and optionally provider
|
|
65
|
-
sample_request:
|
|
66
|
-
context: "Discover available brand safety configurations"
|
|
67
|
-
max_results: 10
|
|
68
|
-
validations:
|
|
69
|
-
- check: response_schema
|
|
70
|
-
description: "Response matches list-content-standards response schema"
|
|
71
|
-
- check: field_present
|
|
72
|
-
path: "standards"
|
|
73
|
-
description: "Response contains a standards array"
|
|
74
|
-
context_outputs:
|
|
75
|
-
- path: "standards[0].standards_id"
|
|
76
|
-
key: "standards_id"
|
|
77
|
-
|
|
78
|
-
- id: get_content_standards
|
|
79
|
-
title: "Get content standards detail"
|
|
80
|
-
requires_tool: get_content_standards
|
|
81
|
-
narrative: |
|
|
82
|
-
The buyer retrieves full details of a specific content standards
|
|
83
|
-
configuration discovered in the previous step. The response includes
|
|
84
|
-
the complete rule set — categories, thresholds, and feature
|
|
85
|
-
definitions that the governance agent uses to evaluate content.
|
|
86
|
-
task: get_content_standards
|
|
87
|
-
stateful: true
|
|
88
|
-
expected: |
|
|
89
|
-
Return the content standards configuration with:
|
|
90
|
-
- standards_id: matches the requested ID
|
|
91
|
-
- name: human-readable label
|
|
92
|
-
- features: array of evaluation criteria
|
|
93
|
-
sample_request:
|
|
94
|
-
standards_id: "$context.standards_id"
|
|
95
|
-
context_inputs:
|
|
96
|
-
- key: "standards_id"
|
|
97
|
-
inject_at: "standards_id"
|
|
98
|
-
validations:
|
|
99
|
-
- check: response_schema
|
|
100
|
-
description: "Response matches get-content-standards response schema"
|
|
101
|
-
- check: field_present
|
|
102
|
-
path: "standards_id"
|
|
103
|
-
description: "Response contains the standards ID"
|
|
104
|
-
|
|
105
|
-
- id: get_invalid_content_standards
|
|
106
|
-
title: "Get invalid content standards (error expected)"
|
|
107
|
-
requires_tool: get_content_standards
|
|
108
|
-
narrative: |
|
|
109
|
-
The buyer requests a content standards configuration that does not
|
|
110
|
-
exist. The governance agent should reject the request with an error,
|
|
111
|
-
rather than returning empty or fabricated data.
|
|
112
|
-
task: get_content_standards
|
|
113
|
-
stateful: false
|
|
114
|
-
expect_error: true
|
|
115
|
-
expected: |
|
|
116
|
-
Return an error indicating the standards ID does not exist.
|
|
117
|
-
sample_request:
|
|
118
|
-
standards_id: "INVALID_STANDARDS_ID_DOES_NOT_EXIST_12345"
|
|
119
|
-
validations:
|
|
120
|
-
- check: error_code
|
|
121
|
-
value: "not_found"
|
|
122
|
-
description: "Agent rejects an invalid standards_id"
|
|
123
|
-
|
|
124
|
-
- id: content_calibration
|
|
125
|
-
title: "Content calibration and delivery validation"
|
|
126
|
-
requires_tool: calibrate_content
|
|
127
|
-
narrative: |
|
|
128
|
-
With a content standards configuration identified, the buyer submits
|
|
129
|
-
content artifacts for calibration — asking the governance agent to
|
|
130
|
-
evaluate whether specific pages or content items meet the brand safety
|
|
131
|
-
requirements. After calibration, the buyer validates delivery records
|
|
132
|
-
to confirm that ads were served alongside compliant content.
|
|
133
|
-
|
|
134
|
-
steps:
|
|
135
|
-
- id: calibrate_content
|
|
136
|
-
title: "Calibrate content against standards"
|
|
137
|
-
narrative: |
|
|
138
|
-
The buyer submits content artifacts (web pages, articles) for
|
|
139
|
-
evaluation against a specific content standards configuration.
|
|
140
|
-
The governance agent classifies each artifact and returns
|
|
141
|
-
calibration results — pass/fail per artifact, with scores or
|
|
142
|
-
category assignments.
|
|
143
|
-
task: calibrate_content
|
|
144
|
-
stateful: true
|
|
145
|
-
expected: |
|
|
146
|
-
Return calibration results with:
|
|
147
|
-
- session_id: identifier for this calibration session
|
|
148
|
-
- session_status: completed or in_progress
|
|
149
|
-
- Per-artifact evaluation results (pending or evaluated)
|
|
150
|
-
sample_request:
|
|
151
|
-
context: "Evaluate sample content for brand safety"
|
|
152
|
-
standards_id: "$context.standards_id"
|
|
153
|
-
artifacts:
|
|
154
|
-
- artifact_id: "test-artifact-1"
|
|
155
|
-
artifact_type: "webpage"
|
|
156
|
-
url: "https://example.com/article/safe-content"
|
|
157
|
-
title: "Safe Test Article"
|
|
158
|
-
- artifact_id: "test-artifact-2"
|
|
159
|
-
artifact_type: "webpage"
|
|
160
|
-
url: "https://example.com/article/test-content"
|
|
161
|
-
title: "Another Test Article"
|
|
162
|
-
feedback_type: "binary"
|
|
163
|
-
context_inputs:
|
|
164
|
-
- key: "standards_id"
|
|
165
|
-
inject_at: "standards_id"
|
|
166
|
-
validations:
|
|
167
|
-
- check: response_schema
|
|
168
|
-
description: "Response matches calibrate-content response schema"
|
|
169
|
-
- check: field_present
|
|
170
|
-
path: "session_id"
|
|
171
|
-
description: "Response contains a calibration session ID"
|
|
172
|
-
context_outputs:
|
|
173
|
-
- path: "session_id"
|
|
174
|
-
key: "calibration_session_id"
|
|
175
|
-
|
|
176
|
-
- id: validate_content_delivery
|
|
177
|
-
title: "Validate content delivery records"
|
|
178
|
-
requires_tool: validate_content_delivery
|
|
179
|
-
narrative: |
|
|
180
|
-
The buyer submits delivery records — evidence that ads were served
|
|
181
|
-
alongside specific content — for compliance validation. The
|
|
182
|
-
governance agent checks each record against the content standards
|
|
183
|
-
and returns pass/fail results with a summary.
|
|
184
|
-
task: validate_content_delivery
|
|
185
|
-
stateful: true
|
|
186
|
-
expected: |
|
|
187
|
-
Return validation results with:
|
|
188
|
-
- summary.total_records: number of records validated
|
|
189
|
-
- summary.passed_records: number that met standards
|
|
190
|
-
- summary.failed_records: number that did not meet standards
|
|
191
|
-
- Per-record validation details
|
|
192
|
-
sample_request:
|
|
193
|
-
context: "Validate delivery records against content standards"
|
|
194
|
-
standards_id: "$context.standards_id"
|
|
195
|
-
records:
|
|
196
|
-
- record_id: "test-record-1"
|
|
197
|
-
artifact:
|
|
198
|
-
artifact_id: "test-artifact-1"
|
|
199
|
-
artifact_type: "webpage"
|
|
200
|
-
url: "https://example.com/article/delivered-content"
|
|
201
|
-
delivered_at: "2026-04-01T12:00:00Z"
|
|
202
|
-
context_inputs:
|
|
203
|
-
- key: "standards_id"
|
|
204
|
-
inject_at: "standards_id"
|
|
205
|
-
validations:
|
|
206
|
-
- check: response_schema
|
|
207
|
-
description: "Response matches validate-content-delivery response schema"
|
|
208
|
-
- check: field_present
|
|
209
|
-
path: "summary"
|
|
210
|
-
description: "Response contains a validation summary"
|
|
211
|
-
- check: field_present
|
|
212
|
-
path: "summary.total_records"
|
|
213
|
-
description: "Summary includes total record count"
|
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
id: governance_property_lists
|
|
2
|
-
version: "1.0.0"
|
|
3
|
-
title: "Governance property list management"
|
|
4
|
-
category: governance_property_lists
|
|
5
|
-
summary: "CRUD lifecycle for property lists with filter round-trip validation."
|
|
6
|
-
track: governance
|
|
7
|
-
required_tools:
|
|
8
|
-
- create_property_list
|
|
9
|
-
|
|
10
|
-
narrative: |
|
|
11
|
-
You operate a governance agent that manages property lists — curated sets of
|
|
12
|
-
domains and apps where a brand is willing (or unwilling) to run ads. Buyer
|
|
13
|
-
agents create, read, update, and delete property lists through your agent,
|
|
14
|
-
attaching filters like GARM brand-safety categories, MFA thresholds, and
|
|
15
|
-
custom tags.
|
|
16
|
-
|
|
17
|
-
This storyboard covers two concerns: basic CRUD operations on property lists,
|
|
18
|
-
and filter fidelity — ensuring that every filter type set at creation time
|
|
19
|
-
survives the round-trip and comes back unchanged on retrieval.
|
|
20
|
-
|
|
21
|
-
agent:
|
|
22
|
-
interaction_model: governance
|
|
23
|
-
capabilities:
|
|
24
|
-
- manages_property_lists
|
|
25
|
-
- brand_safety
|
|
26
|
-
examples:
|
|
27
|
-
- "Brand safety platforms"
|
|
28
|
-
- "Agency governance dashboards"
|
|
29
|
-
- "Advertiser compliance tools"
|
|
30
|
-
|
|
31
|
-
caller:
|
|
32
|
-
role: buyer_agent
|
|
33
|
-
example: "Scope3 (DSP)"
|
|
34
|
-
|
|
35
|
-
prerequisites:
|
|
36
|
-
description: |
|
|
37
|
-
The caller needs a brand identity for the property list. The test kit
|
|
38
|
-
provides a sample brand (Acme Outdoor) with governance parameters.
|
|
39
|
-
test_kit: "test-kits/acme-outdoor.yaml"
|
|
40
|
-
|
|
41
|
-
phases:
|
|
42
|
-
- id: property_list_crud
|
|
43
|
-
title: "Property list CRUD operations"
|
|
44
|
-
narrative: |
|
|
45
|
-
The buyer creates a property list, retrieves it, updates it, lists all
|
|
46
|
-
property lists, deletes the created list, and verifies the deletion.
|
|
47
|
-
This exercises the full lifecycle of property list management.
|
|
48
|
-
|
|
49
|
-
steps:
|
|
50
|
-
- id: create_property_list
|
|
51
|
-
title: "Create a property list"
|
|
52
|
-
narrative: |
|
|
53
|
-
The buyer creates a new property list with base properties (included
|
|
54
|
-
domains) and filters (GARM exclusions, MFA thresholds). The governance
|
|
55
|
-
agent provisions the list and returns a list_id and auth_token for
|
|
56
|
-
subsequent mutations.
|
|
57
|
-
task: create_property_list
|
|
58
|
-
stateful: true
|
|
59
|
-
expected: |
|
|
60
|
-
Return the created property list with:
|
|
61
|
-
- list.list_id: platform-assigned identifier
|
|
62
|
-
- list.name: echoes the requested name
|
|
63
|
-
- auth_token: credential for update/delete operations
|
|
64
|
-
sample_request:
|
|
65
|
-
name: "E2E Test List"
|
|
66
|
-
description: "E2E test property list for governance testing"
|
|
67
|
-
base_properties:
|
|
68
|
-
include:
|
|
69
|
-
- identifier_type: "domain"
|
|
70
|
-
identifier_value: "example.com"
|
|
71
|
-
- identifier_type: "domain"
|
|
72
|
-
identifier_value: "test.example.com"
|
|
73
|
-
filters:
|
|
74
|
-
garm_categories:
|
|
75
|
-
exclude:
|
|
76
|
-
- "adult"
|
|
77
|
-
- "arms"
|
|
78
|
-
mfa_thresholds:
|
|
79
|
-
min_score: 0.7
|
|
80
|
-
brand_manifest:
|
|
81
|
-
name: "E2E Test Brand"
|
|
82
|
-
url: "https://test.example.com"
|
|
83
|
-
validations:
|
|
84
|
-
- check: response_schema
|
|
85
|
-
description: "Response matches create-property-list response schema"
|
|
86
|
-
- check: field_present
|
|
87
|
-
path: "list.list_id"
|
|
88
|
-
description: "Created list has a platform-assigned ID"
|
|
89
|
-
- check: field_present
|
|
90
|
-
path: "list.name"
|
|
91
|
-
description: "Created list echoes the requested name"
|
|
92
|
-
context_outputs:
|
|
93
|
-
- path: "list.list_id"
|
|
94
|
-
key: "list_id"
|
|
95
|
-
- path: "auth_token"
|
|
96
|
-
key: "auth_token"
|
|
97
|
-
|
|
98
|
-
- id: get_property_list
|
|
99
|
-
title: "Retrieve the property list"
|
|
100
|
-
requires_tool: get_property_list
|
|
101
|
-
narrative: |
|
|
102
|
-
The buyer retrieves the property list just created, requesting
|
|
103
|
-
resolved identifiers. The response should include the list metadata,
|
|
104
|
-
base properties, and filters exactly as they were set.
|
|
105
|
-
task: get_property_list
|
|
106
|
-
stateful: true
|
|
107
|
-
expected: |
|
|
108
|
-
Return the property list with:
|
|
109
|
-
- list.list_id: matches the created ID
|
|
110
|
-
- list.name: matches the created name
|
|
111
|
-
- identifiers: resolved list of included domains
|
|
112
|
-
- list.filters: matches the filters set at creation
|
|
113
|
-
sample_request:
|
|
114
|
-
list_id: "$context.list_id"
|
|
115
|
-
resolve: true
|
|
116
|
-
max_results: 10
|
|
117
|
-
context_inputs:
|
|
118
|
-
- key: "list_id"
|
|
119
|
-
inject_at: "list_id"
|
|
120
|
-
validations:
|
|
121
|
-
- check: response_schema
|
|
122
|
-
description: "Response matches get-property-list response schema"
|
|
123
|
-
- check: field_present
|
|
124
|
-
path: "list.list_id"
|
|
125
|
-
description: "Response contains the list ID"
|
|
126
|
-
|
|
127
|
-
- id: update_property_list
|
|
128
|
-
title: "Update the property list"
|
|
129
|
-
requires_tool: update_property_list
|
|
130
|
-
narrative: |
|
|
131
|
-
The buyer updates the property list, adding a new domain to the
|
|
132
|
-
include set and expanding the GARM exclusion list. The auth_token
|
|
133
|
-
from the create step authorizes the mutation.
|
|
134
|
-
task: update_property_list
|
|
135
|
-
stateful: true
|
|
136
|
-
expected: |
|
|
137
|
-
Return the updated property list with:
|
|
138
|
-
- list.list_id: unchanged
|
|
139
|
-
- list.updated_at: a timestamp reflecting the update
|
|
140
|
-
- Updated description and filters
|
|
141
|
-
sample_request:
|
|
142
|
-
list_id: "$context.list_id"
|
|
143
|
-
auth_token: "$context.auth_token"
|
|
144
|
-
description: "Updated E2E test property list"
|
|
145
|
-
base_properties:
|
|
146
|
-
include:
|
|
147
|
-
- identifier_type: "domain"
|
|
148
|
-
identifier_value: "example.com"
|
|
149
|
-
- identifier_type: "domain"
|
|
150
|
-
identifier_value: "test.example.com"
|
|
151
|
-
- identifier_type: "domain"
|
|
152
|
-
identifier_value: "new.example.com"
|
|
153
|
-
filters:
|
|
154
|
-
garm_categories:
|
|
155
|
-
exclude:
|
|
156
|
-
- "adult"
|
|
157
|
-
- "arms"
|
|
158
|
-
- "gambling"
|
|
159
|
-
mfa_thresholds:
|
|
160
|
-
min_score: 0.8
|
|
161
|
-
context_inputs:
|
|
162
|
-
- key: "list_id"
|
|
163
|
-
inject_at: "list_id"
|
|
164
|
-
- key: "auth_token"
|
|
165
|
-
inject_at: "auth_token"
|
|
166
|
-
validations:
|
|
167
|
-
- check: response_schema
|
|
168
|
-
description: "Response matches update-property-list response schema"
|
|
169
|
-
- check: field_present
|
|
170
|
-
path: "list.list_id"
|
|
171
|
-
description: "Updated list retains its ID"
|
|
172
|
-
|
|
173
|
-
- id: list_property_lists
|
|
174
|
-
title: "List all property lists"
|
|
175
|
-
requires_tool: list_property_lists
|
|
176
|
-
narrative: |
|
|
177
|
-
The buyer lists all property lists visible to them. The response
|
|
178
|
-
should include at least the list created earlier in this storyboard.
|
|
179
|
-
task: list_property_lists
|
|
180
|
-
stateful: false
|
|
181
|
-
expected: |
|
|
182
|
-
Return a paginated list of property lists with:
|
|
183
|
-
- lists: array of property list summaries
|
|
184
|
-
- Each list has list_id and name
|
|
185
|
-
sample_request:
|
|
186
|
-
max_results: 10
|
|
187
|
-
validations:
|
|
188
|
-
- check: response_schema
|
|
189
|
-
description: "Response matches list-property-lists response schema"
|
|
190
|
-
- check: field_present
|
|
191
|
-
path: "lists"
|
|
192
|
-
description: "Response contains a lists array"
|
|
193
|
-
|
|
194
|
-
- id: delete_property_list
|
|
195
|
-
title: "Delete the property list"
|
|
196
|
-
requires_tool: delete_property_list
|
|
197
|
-
narrative: |
|
|
198
|
-
The buyer deletes the test property list. The auth_token from the
|
|
199
|
-
create step authorizes the deletion.
|
|
200
|
-
task: delete_property_list
|
|
201
|
-
stateful: true
|
|
202
|
-
expected: |
|
|
203
|
-
Return confirmation of deletion:
|
|
204
|
-
- deleted: true
|
|
205
|
-
- list_id: matches the deleted list
|
|
206
|
-
sample_request:
|
|
207
|
-
list_id: "$context.list_id"
|
|
208
|
-
auth_token: "$context.auth_token"
|
|
209
|
-
context_inputs:
|
|
210
|
-
- key: "list_id"
|
|
211
|
-
inject_at: "list_id"
|
|
212
|
-
- key: "auth_token"
|
|
213
|
-
inject_at: "auth_token"
|
|
214
|
-
validations:
|
|
215
|
-
- check: response_schema
|
|
216
|
-
description: "Response matches delete-property-list response schema"
|
|
217
|
-
- check: field_present
|
|
218
|
-
path: "deleted"
|
|
219
|
-
description: "Response confirms deletion"
|
|
220
|
-
- check: field_present
|
|
221
|
-
path: "list_id"
|
|
222
|
-
description: "Response echoes the deleted list ID"
|
|
223
|
-
|
|
224
|
-
- id: get_deleted_list
|
|
225
|
-
title: "Retrieve deleted list (error expected)"
|
|
226
|
-
requires_tool: get_property_list
|
|
227
|
-
narrative: |
|
|
228
|
-
The buyer attempts to retrieve the list that was just deleted. The
|
|
229
|
-
agent should reject this request with an error, confirming that the
|
|
230
|
-
list no longer exists.
|
|
231
|
-
task: get_property_list
|
|
232
|
-
stateful: true
|
|
233
|
-
expect_error: true
|
|
234
|
-
expected: |
|
|
235
|
-
Return an error indicating the list does not exist.
|
|
236
|
-
sample_request:
|
|
237
|
-
list_id: "$context.list_id"
|
|
238
|
-
context_inputs:
|
|
239
|
-
- key: "list_id"
|
|
240
|
-
inject_at: "list_id"
|
|
241
|
-
validations:
|
|
242
|
-
- check: error_code
|
|
243
|
-
value: "not_found"
|
|
244
|
-
description: "Agent rejects access to a deleted list"
|
|
245
|
-
|
|
246
|
-
- id: property_list_filters
|
|
247
|
-
title: "Property list filter round-trips"
|
|
248
|
-
narrative: |
|
|
249
|
-
Filter fidelity matters: when a buyer sets GARM exclusions, MFA
|
|
250
|
-
thresholds, custom tags, and feature requirements on a property list,
|
|
251
|
-
those filters must survive storage and come back unchanged on retrieval.
|
|
252
|
-
|
|
253
|
-
This phase creates a property list with every supported filter type,
|
|
254
|
-
retrieves it with resolve:true, and validates each filter round-tripped.
|
|
255
|
-
|
|
256
|
-
steps:
|
|
257
|
-
- id: create_list_with_all_filters
|
|
258
|
-
title: "Create property list with all filter types"
|
|
259
|
-
narrative: |
|
|
260
|
-
The buyer creates a property list with GARM category exclusions,
|
|
261
|
-
MFA thresholds, custom tag include/exclude rules, and optionally
|
|
262
|
-
feature requirements. This exercises the full filter surface area.
|
|
263
|
-
task: create_property_list
|
|
264
|
-
stateful: true
|
|
265
|
-
expected: |
|
|
266
|
-
Return the created property list with:
|
|
267
|
-
- list.list_id: platform-assigned identifier
|
|
268
|
-
- auth_token: credential for subsequent operations
|
|
269
|
-
- All filter types accepted without error
|
|
270
|
-
sample_request:
|
|
271
|
-
name: "E2E Filter Test"
|
|
272
|
-
description: "E2E filter round-trip test"
|
|
273
|
-
base_properties:
|
|
274
|
-
include:
|
|
275
|
-
- identifier_type: "domain"
|
|
276
|
-
identifier_value: "example.com"
|
|
277
|
-
filters:
|
|
278
|
-
garm_categories:
|
|
279
|
-
exclude:
|
|
280
|
-
- "adult"
|
|
281
|
-
- "arms"
|
|
282
|
-
- "gambling"
|
|
283
|
-
- "hate_speech"
|
|
284
|
-
mfa_thresholds:
|
|
285
|
-
min_score: 0.75
|
|
286
|
-
custom_tags:
|
|
287
|
-
include:
|
|
288
|
-
- key: "content_type"
|
|
289
|
-
value: "premium"
|
|
290
|
-
exclude:
|
|
291
|
-
- key: "content_type"
|
|
292
|
-
value: "user_generated"
|
|
293
|
-
brand_manifest:
|
|
294
|
-
name: "E2E Test Brand"
|
|
295
|
-
url: "https://test.example.com"
|
|
296
|
-
validations:
|
|
297
|
-
- check: response_schema
|
|
298
|
-
description: "Response matches create-property-list response schema"
|
|
299
|
-
- check: field_present
|
|
300
|
-
path: "list.list_id"
|
|
301
|
-
description: "Created list has a platform-assigned ID"
|
|
302
|
-
context_outputs:
|
|
303
|
-
- path: "list.list_id"
|
|
304
|
-
key: "filter_list_id"
|
|
305
|
-
- path: "auth_token"
|
|
306
|
-
key: "filter_auth_token"
|
|
307
|
-
|
|
308
|
-
- id: get_list_validate_filters
|
|
309
|
-
title: "Retrieve and validate filter round-trip"
|
|
310
|
-
requires_tool: get_property_list
|
|
311
|
-
narrative: |
|
|
312
|
-
The buyer retrieves the property list with resolve:true and checks
|
|
313
|
-
that every filter type set at creation time is returned unchanged.
|
|
314
|
-
GARM categories, MFA thresholds, and custom tags must all survive
|
|
315
|
-
the round-trip through the governance agent's storage.
|
|
316
|
-
task: get_property_list
|
|
317
|
-
stateful: true
|
|
318
|
-
expected: |
|
|
319
|
-
Return the property list with all filters intact:
|
|
320
|
-
- list.filters.garm_categories.exclude: contains adult, arms, gambling, hate_speech
|
|
321
|
-
- list.filters.mfa_thresholds.min_score: 0.75
|
|
322
|
-
- list.filters.custom_tags.include: content_type=premium
|
|
323
|
-
- list.filters.custom_tags.exclude: content_type=user_generated
|
|
324
|
-
sample_request:
|
|
325
|
-
list_id: "$context.filter_list_id"
|
|
326
|
-
resolve: true
|
|
327
|
-
max_results: 5
|
|
328
|
-
context_inputs:
|
|
329
|
-
- key: "filter_list_id"
|
|
330
|
-
inject_at: "list_id"
|
|
331
|
-
validations:
|
|
332
|
-
- check: response_schema
|
|
333
|
-
description: "Response matches get-property-list response schema"
|
|
334
|
-
- check: field_present
|
|
335
|
-
path: "list.list_id"
|
|
336
|
-
description: "Response contains the list ID"
|
|
337
|
-
- check: field_present
|
|
338
|
-
path: "list.filters"
|
|
339
|
-
description: "Filters object is present in the response"
|
|
340
|
-
- check: field_present
|
|
341
|
-
path: "list.filters.garm_categories"
|
|
342
|
-
description: "GARM category filters survived the round-trip"
|
|
343
|
-
- check: field_present
|
|
344
|
-
path: "list.filters.mfa_thresholds"
|
|
345
|
-
description: "MFA threshold filters survived the round-trip"
|
|
346
|
-
- check: field_present
|
|
347
|
-
path: "list.filters.custom_tags"
|
|
348
|
-
description: "Custom tag filters survived the round-trip"
|
|
349
|
-
|
|
350
|
-
- id: cleanup_filter_list
|
|
351
|
-
title: "Delete filter test list (cleanup)"
|
|
352
|
-
requires_tool: delete_property_list
|
|
353
|
-
narrative: |
|
|
354
|
-
Clean up the filter test list created in this phase.
|
|
355
|
-
task: delete_property_list
|
|
356
|
-
stateful: true
|
|
357
|
-
expected: |
|
|
358
|
-
Return confirmation that the list was deleted.
|
|
359
|
-
sample_request:
|
|
360
|
-
list_id: "$context.filter_list_id"
|
|
361
|
-
auth_token: "$context.filter_auth_token"
|
|
362
|
-
context_inputs:
|
|
363
|
-
- key: "filter_list_id"
|
|
364
|
-
inject_at: "list_id"
|
|
365
|
-
- key: "filter_auth_token"
|
|
366
|
-
inject_at: "auth_token"
|
|
367
|
-
validations:
|
|
368
|
-
- check: response_schema
|
|
369
|
-
description: "Response matches delete-property-list response schema"
|
|
370
|
-
- check: field_present
|
|
371
|
-
path: "deleted"
|
|
372
|
-
description: "Response confirms deletion"
|