Skip to content

Training-agent baseline regressions exposed by @adcp/sdk@6.7.0 bump (PR #3962) #3965

Description

@bokelley

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:

  1. `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`).

  2. `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.

  3. `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.

  4. `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.

  5. `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.

  6. `seed_creative_format` ack returns `success: false` — seed scenario for creative-format fixture not implemented or returning rejection.

  7. `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

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.compliance-suite

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions