Skip to content

parallel_dispatch_runner not implemented; not-found path aborts the storyboard instead of grading not_applicable #2859

Description

@idemidenko

Upstream report: adcontextprotocol/adcp#7232

Filing here because that issue's triage concluded the work is entirely in this repo and that "a human will need to file or update the adcp-client issue/PR". It has been deferred since 2026-09-04 for want of this issue.

Bug

The parallel_dispatch_runner test-kit contract is not implemented in the runner, and its not-found path emits an error instead of the spec-required stable not_applicable. The result is that idempotency/two_parallel_create_media_buy_calls_with_same_key_converge_on_one_resource hard-fails and the storyboard aborts at 9/11 rather than recording a clean skip at 10/11.

Observed against https://sales-agent.elementaltv.io/mcp on cache 3.1.20 with @adcp/sdk@13.0.2, still reproducing as of 2026-09-08:

Test-kit contract "parallel_dispatch_runner" is not configured on this runner.

The spec side is already complete

From the upstream triage on adcp#7232:

  • The contract definition in the adcp repo is complete and correct (static/compliance/source/test-kits/parallel-dispatch-runner.yaml).
  • idempotency.yaml already authorizes a stable not_applicable marker when the runner lacks parallel-dispatch support.
  • runner-output-contract.yaml line 94 references PR feat(runner): conform storyboard output to adcp runner-output contract (#599) #611 as the intended implementation vehicle.

So no spec or storyboard change is needed — only this repo.

Two parts, per that triage

  1. Implement parallel_dispatch_runner process_local mode in src/lib/testing/storyboard/parallel-dispatch.ts and the runner dispatch logic — Promise.all dispatch plus IDEMPOTENCY_IN_FLIGHT resolution — so idempotency rule 9 gets a real grade.
  2. Fix the not-found path to emit stable not_applicable, so runners without the contract record a clean 10/11 skip instead of aborting.

Part 2 alone removes the false negative, and is independent of part 1.

Impact

Two of eleven steps hard-fail on every graded run for reasons unrelated to the agent under test, keeping the idempotency storyboard partial and the core track from passing. The step never reaches the agent at all. Both assertions it exists to gate — a replay returning the cached response, and IDEMPOTENCY_CONFLICT on key reuse with a changed payload — already pass elsewhere in the same storyboard, so the concurrency case is the only ungraded part.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions