PR #3962 bumps `@adcp/sdk` from 6.0.0 to 6.7.0 to unblock storyboard adoption of `upstream_traffic` (the runner-side support landed in 6.7.0 / closed adcp-client#1253). The bump exposes a cluster of baseline regressions in the training agent that aren't related to the contract additions but need fixing to restore the previous floors. Floors lowered in #3962 to ship the bump; this issue tracks the catch-up work.
Per-tenant deltas (clean / passed)
| Tenant |
Before (6.0.0) |
After (6.7.0) |
Delta |
| signals |
59 / 23 |
59 / 23 |
0 |
| sales |
55 / 159 |
56 / 181 |
+1 / +22 |
| governance |
57 / 62 |
57 / 62 |
0 |
| creative |
58 / 44 |
51 / 44 |
−7 / 0 |
| creative-builder |
55 / 37 |
49 / 37 |
−6 / 0 |
| brand |
59 / 14 |
58 / 13 |
−1 / −1 |
Failure classes (first-pass diagnosis)
Sampled across all 6 tenants:
-
`deterministic_testing` context echo missing — `comply_test_controller` responses no longer include `context` field, breaking `field_present path: 'context'` and `field_value path: 'context.correlation_id'` validations on every scenario (`list_scenarios`, `unknown_scenario`, `missing_params`, `not_found_entity`).
-
`UNKNOWN_SCENARIO` returned where `INVALID_PARAMS` / `NOT_FOUND` expected — error-code mapping for scenario validation got coarser; `comply_test_controller` returns the catch-all `UNKNOWN_SCENARIO` for missing-params and entity-not-found cases the storyboards expect to discriminate.
-
`signed_requests` discovery_failed against `/mcp-strict` — a strict-mode endpoint the training agent doesn't expose. May predate the bump but surfaces as a hard failure on every tenant.
-
`idempotency_key` capture path not resolvable in `create_media_buy_initial` — the runner's new synthesized `capture_path_not_resolvable` validation correctly fires when the response omits a captured field. Either training-agent stopped echoing `idempotency_key` on `create_media_buy` responses, or the storyboard's capture path drifted.
-
`force_create_media_buy_arm` directive acknowledgement missing — `forced.arm` returns `undefined` instead of the registered `submitted` arm. `comply_test_controller` directive registration may have changed shape.
-
`seed_creative_format` ack returns `success: false` — seed scenario for creative-format fixture not implemented or returning rejection.
-
`brand_baseline` error code mismatch — `get_brand_identity` for unknown brand returns `REFERENCE_NOT_FOUND` (the new SDK convention) where storyboard expects `brand_not_found` / `BRAND_NOT_FOUND` / `NOT_FOUND` (older expectations). Either the storyboard expectation or the SDK convention should win.
Suggested split
Each class above is a separate small fix:
- A. Restore `context` echo in `comply_test_controller` responses across all scenarios (one handler change).
- B. Tighten error-code mapping in scenario validation (controller-side).
- C. Either expose `/mcp-strict` on each tenant or remove the assertion from `signed_requests`.
- D. Restore `idempotency_key` echo on `create_media_buy` response (or drop the storyboard capture).
- E. Fix `force_create_media_buy_arm` directive registration shape.
- F. Implement `seed_creative_format` or mark unsupported.
- G. Reconcile `brand_not_found` vs `REFERENCE_NOT_FOUND` — likely update the storyboard expectation since the SDK convention is intentional.
Each can land independently. As each fix lands, raise the floor in `.github/workflows/training-agent-storyboards.yml` + `scripts/run-storyboards-matrix.sh` toward the pre-bump levels.
Unblocked by these
References
PR #3962 bumps `@adcp/sdk` from 6.0.0 to 6.7.0 to unblock storyboard adoption of `upstream_traffic` (the runner-side support landed in 6.7.0 / closed adcp-client#1253). The bump exposes a cluster of baseline regressions in the training agent that aren't related to the contract additions but need fixing to restore the previous floors. Floors lowered in #3962 to ship the bump; this issue tracks the catch-up work.
Per-tenant deltas (clean / passed)
Failure classes (first-pass diagnosis)
Sampled across all 6 tenants:
`deterministic_testing` context echo missing — `comply_test_controller` responses no longer include `context` field, breaking `field_present path: 'context'` and `field_value path: 'context.correlation_id'` validations on every scenario (`list_scenarios`, `unknown_scenario`, `missing_params`, `not_found_entity`).
`UNKNOWN_SCENARIO` returned where `INVALID_PARAMS` / `NOT_FOUND` expected — error-code mapping for scenario validation got coarser; `comply_test_controller` returns the catch-all `UNKNOWN_SCENARIO` for missing-params and entity-not-found cases the storyboards expect to discriminate.
`signed_requests` discovery_failed against `/mcp-strict` — a strict-mode endpoint the training agent doesn't expose. May predate the bump but surfaces as a hard failure on every tenant.
`idempotency_key` capture path not resolvable in `create_media_buy_initial` — the runner's new synthesized `capture_path_not_resolvable` validation correctly fires when the response omits a captured field. Either training-agent stopped echoing `idempotency_key` on `create_media_buy` responses, or the storyboard's capture path drifted.
`force_create_media_buy_arm` directive acknowledgement missing — `forced.arm` returns `undefined` instead of the registered `submitted` arm. `comply_test_controller` directive registration may have changed shape.
`seed_creative_format` ack returns `success: false` — seed scenario for creative-format fixture not implemented or returning rejection.
`brand_baseline` error code mismatch — `get_brand_identity` for unknown brand returns `REFERENCE_NOT_FOUND` (the new SDK convention) where storyboard expects `brand_not_found` / `BRAND_NOT_FOUND` / `NOT_FOUND` (older expectations). Either the storyboard expectation or the SDK convention should win.
Suggested split
Each class above is a separate small fix:
Each can land independently. As each fix lands, raise the floor in `.github/workflows/training-agent-storyboards.yml` + `scripts/run-storyboards-matrix.sh` toward the pre-bump levels.
Unblocked by these
References