@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.
Files changed (144) hide show
  1. package/README.md +23 -9
  2. package/bin/adcp.js +83 -18
  3. package/dist/lib/index.d.ts +3 -5
  4. package/dist/lib/index.d.ts.map +1 -1
  5. package/dist/lib/index.js +16 -12
  6. package/dist/lib/index.js.map +1 -1
  7. package/dist/lib/server/index.d.ts +5 -1
  8. package/dist/lib/server/index.d.ts.map +1 -1
  9. package/dist/lib/server/index.js +10 -1
  10. package/dist/lib/server/index.js.map +1 -1
  11. package/dist/lib/server/postgres-task-store.d.ts +105 -0
  12. package/dist/lib/server/postgres-task-store.d.ts.map +1 -0
  13. package/dist/lib/server/postgres-task-store.js +267 -0
  14. package/dist/lib/server/postgres-task-store.js.map +1 -0
  15. package/dist/lib/server/responses.d.ts +1 -0
  16. package/dist/lib/server/responses.d.ts.map +1 -1
  17. package/dist/lib/server/responses.js +1 -0
  18. package/dist/lib/server/responses.js.map +1 -1
  19. package/dist/lib/server/test-controller.d.ts +88 -0
  20. package/dist/lib/server/test-controller.d.ts.map +1 -0
  21. package/dist/lib/server/test-controller.js +227 -0
  22. package/dist/lib/server/test-controller.js.map +1 -0
  23. package/dist/lib/testing/agent-tester.d.ts +1 -1
  24. package/dist/lib/testing/agent-tester.d.ts.map +1 -1
  25. package/dist/lib/testing/agent-tester.js +13 -1
  26. package/dist/lib/testing/agent-tester.js.map +1 -1
  27. package/dist/lib/testing/compliance/comply.d.ts +24 -5
  28. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  29. package/dist/lib/testing/compliance/comply.js +318 -277
  30. package/dist/lib/testing/compliance/comply.js.map +1 -1
  31. package/dist/lib/testing/compliance/index.d.ts +2 -1
  32. package/dist/lib/testing/compliance/index.d.ts.map +1 -1
  33. package/dist/lib/testing/compliance/index.js +6 -1
  34. package/dist/lib/testing/compliance/index.js.map +1 -1
  35. package/dist/lib/testing/compliance/platform-storyboards.d.ts +44 -0
  36. package/dist/lib/testing/compliance/platform-storyboards.d.ts.map +1 -0
  37. package/dist/lib/testing/compliance/platform-storyboards.js +232 -0
  38. package/dist/lib/testing/compliance/platform-storyboards.js.map +1 -0
  39. package/dist/lib/testing/compliance/storyboard-tracks.d.ts +2 -9
  40. package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -1
  41. package/dist/lib/testing/compliance/storyboard-tracks.js +15 -46
  42. package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -1
  43. package/dist/lib/testing/compliance/types.d.ts +22 -1
  44. package/dist/lib/testing/compliance/types.d.ts.map +1 -1
  45. package/dist/lib/testing/index.d.ts +1 -1
  46. package/dist/lib/testing/index.d.ts.map +1 -1
  47. package/dist/lib/testing/index.js +6 -1
  48. package/dist/lib/testing/index.js.map +1 -1
  49. package/dist/lib/testing/orchestrator.d.ts.map +1 -1
  50. package/dist/lib/testing/orchestrator.js +5 -1
  51. package/dist/lib/testing/orchestrator.js.map +1 -1
  52. package/dist/lib/testing/scenarios/brand-rights.d.ts +19 -1
  53. package/dist/lib/testing/scenarios/brand-rights.d.ts.map +1 -1
  54. package/dist/lib/testing/scenarios/brand-rights.js +138 -1
  55. package/dist/lib/testing/scenarios/brand-rights.js.map +1 -1
  56. package/dist/lib/testing/scenarios/deterministic.js +7 -7
  57. package/dist/lib/testing/scenarios/deterministic.js.map +1 -1
  58. package/dist/lib/testing/scenarios/index.d.ts +1 -1
  59. package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
  60. package/dist/lib/testing/scenarios/index.js +4 -2
  61. package/dist/lib/testing/scenarios/index.js.map +1 -1
  62. package/dist/lib/testing/scenarios/media-buy.js +4 -4
  63. package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
  64. package/dist/lib/testing/storyboard/loader.d.ts +1 -0
  65. package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
  66. package/dist/lib/testing/storyboard/loader.js +14 -0
  67. package/dist/lib/testing/storyboard/loader.js.map +1 -1
  68. package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -1
  69. package/dist/lib/testing/storyboard/request-builder.js +88 -11
  70. package/dist/lib/testing/storyboard/request-builder.js.map +1 -1
  71. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  72. package/dist/lib/testing/storyboard/runner.js +83 -5
  73. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  74. package/dist/lib/testing/storyboard/task-map.d.ts +2 -0
  75. package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
  76. package/dist/lib/testing/storyboard/task-map.js +23 -9
  77. package/dist/lib/testing/storyboard/task-map.js.map +1 -1
  78. package/dist/lib/testing/storyboard/types.d.ts +6 -2
  79. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  80. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
  81. package/dist/lib/testing/storyboard/validations.js +21 -4
  82. package/dist/lib/testing/storyboard/validations.js.map +1 -1
  83. package/dist/lib/testing/types.d.ts +1 -1
  84. package/dist/lib/testing/types.d.ts.map +1 -1
  85. package/dist/lib/types/core.generated.d.ts +242 -3
  86. package/dist/lib/types/core.generated.d.ts.map +1 -1
  87. package/dist/lib/types/core.generated.js +1 -1
  88. package/dist/lib/types/schemas.generated.d.ts +3697 -3468
  89. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  90. package/dist/lib/types/schemas.generated.js +226 -118
  91. package/dist/lib/types/schemas.generated.js.map +1 -1
  92. package/dist/lib/types/tools.generated.d.ts +281 -79
  93. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  94. package/dist/lib/utils/capabilities.d.ts +2 -2
  95. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  96. package/dist/lib/utils/capabilities.js +9 -3
  97. package/dist/lib/utils/capabilities.js.map +1 -1
  98. package/dist/lib/utils/response-schemas.d.ts.map +1 -1
  99. package/dist/lib/utils/response-schemas.js +9 -0
  100. package/dist/lib/utils/response-schemas.js.map +1 -1
  101. package/dist/lib/version.d.ts +3 -3
  102. package/dist/lib/version.js +3 -3
  103. package/docs/llms.txt +56 -32
  104. package/package.json +8 -2
  105. package/skills/adcp/SKILL.md +118 -33
  106. package/skills/build-creative-agent/SKILL.md +221 -0
  107. package/skills/build-generative-seller-agent/SKILL.md +288 -0
  108. package/skills/build-retail-media-agent/SKILL.md +237 -0
  109. package/skills/build-seller-agent/SKILL.md +313 -0
  110. package/skills/build-signals-agent/SKILL.md +203 -0
  111. package/storyboards/audience_sync.yaml +18 -29
  112. package/storyboards/behavioral_analysis.yaml +40 -72
  113. package/storyboards/brand_rights.yaml +172 -75
  114. package/storyboards/campaign_governance_conditions.yaml +187 -0
  115. package/storyboards/campaign_governance_delivery.yaml +231 -0
  116. package/storyboards/campaign_governance_denied.yaml +136 -0
  117. package/storyboards/capability_discovery.yaml +106 -0
  118. package/storyboards/content_standards.yaml +251 -0
  119. package/storyboards/creative_ad_server.yaml +108 -16
  120. package/storyboards/creative_generative.yaml +317 -0
  121. package/storyboards/creative_lifecycle.yaml +284 -0
  122. package/storyboards/creative_sales_agent.yaml +2 -6
  123. package/storyboards/creative_template.yaml +3 -6
  124. package/storyboards/deterministic_testing.yaml +271 -245
  125. package/storyboards/error_compliance.yaml +105 -108
  126. package/storyboards/media_buy_catalog_creative.yaml +8 -5
  127. package/storyboards/media_buy_generative_seller.yaml +581 -0
  128. package/storyboards/media_buy_governance_escalation.yaml +10 -6
  129. package/storyboards/media_buy_guaranteed_approval.yaml +21 -19
  130. package/storyboards/media_buy_non_guaranteed.yaml +9 -8
  131. package/storyboards/media_buy_proposal_mode.yaml +12 -11
  132. package/storyboards/media_buy_seller.yaml +161 -173
  133. package/storyboards/media_buy_state_machine.yaml +102 -101
  134. package/storyboards/property_governance.yaml +239 -0
  135. package/storyboards/schema.yaml +3 -2
  136. package/storyboards/schema_validation.yaml +58 -51
  137. package/storyboards/si_session.yaml +99 -317
  138. package/storyboards/signal_marketplace.yaml +9 -5
  139. package/storyboards/signal_owned.yaml +6 -5
  140. package/storyboards/social_platform.yaml +274 -0
  141. package/storyboards/test-kits/acme-outdoor.yaml +118 -0
  142. package/storyboards/test-kits/nova-motors.yaml +134 -0
  143. package/storyboards/governance_content_standards.yaml +0 -213
  144. 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"