From declaration to graded scenarios
When your agent declares a specialism inget_adcp_capabilities, the runner:
- Fetches the specialism manifest at
/compliance/{version}/specialisms/{id}/. - Reads the manifest’s
requires_scenarioslist — an ordered set of scenario IDs the runner must grade. - For each scenario, checks whether the scenario declares a
requires_capabilitygate. - If a gate is present, reads the named path from your
get_adcp_capabilitiesresponse to decide whether to run or skip the scenario.
Runner evidence vs. verification policy
The storyboard runner does not decide whether an agent earns a badge or satisfies a particular buyer. It produces evidence: executed assertions, failures, selected-but-skipped steps, not-selected steps, skip reasons, and the endpoint/run mode used. A verification policy consumes that evidence and decides which gaps are acceptable for a named outcome.
This is why runner classification matters. “Not selected because this is a sandbox-only run” is a suite-selection fact, not a seller capability gap. “Skipped because the seller did not claim an optional feature” may be acceptable for the badge but unacceptable to a buyer that requires that feature. “Skipped because a declared required tool is missing” is a seller implementation problem.
Requirement profiles
To answer “what do I need to pass?”, start with the profile you are trying to satisfy:
A buyer requirement profile can be stricter than the public badge. For example, the public Sandbox profile can accept a capability-gated proposal storyboard being skipped when
media_buy.supports_proposals: false; a buyer that requires proposal workflows can treat the same skip as a blocker. Conversely, a production endpoint omitting comply_test_controller can be acceptable for the Sandbox badge, while a buyer doing deterministic integration testing may ask for a separate dev/staging endpoint that exposes it.
The storyboard runner should not encode those buyer decisions. It should emit typed evidence that a verification policy or buyer profile can evaluate consistently.
Specialism manifests
Each specialism’srequires_scenarios field lists the scenarios the runner will grade. Example — the sales-guaranteed manifest declares eight required scenarios:
sales-guaranteed agent. The eighth — proposal_finalize — carries a capability gate.
Capability gates
A scenario or phase can declare arequires_capability block. The runner reads the named path from your get_adcp_capabilities response and checks it against the expected value. If the check fails (the capability is absent or false), the scenario or phase is skipped — the skip block will appear in runner output with reason: not_applicable — and does not contribute to steps_failed.
get_adcp_capabilities response at run time — the same call the runner makes during the universal capability_discovery storyboard.
Phase-level gates use the same shape and scope only the phase that declares the block. Universal storyboards use this for protocol-specific phase families, for example deterministic testing skips its SI session phase when an agent does not declare sponsored_intelligence while still running media-buy or creative phases the agent does declare.
Worked example
Scenario: Priya’s StreamHaus platform claimssales-guaranteed and declares media_buy.supports_proposals: true.
requires_scenarios run, including proposal_finalize. Priya’s platform is graded on the full proposal lifecycle — brief with proposals, refine, finalize, and execute via create_media_buy.
Scenario: StreamHaus Direct is an auction-based PG platform — no proposal abstraction. It claims
sales-guaranteed and declares media_buy.supports_proposals: false.
proposal_finalize is skipped. The skip block in runner output is the authoritative signal:
skip block is present, the step was not graded and does not count against steps_failed. The skip.detail string identifies the specific cause (capability gate, missing specialism declaration, or missing tool).
Absent = false. The
supports_proposals field has "default": false in the capabilities schema. Omitting it from your response is equivalent to declaring false — the runner skips capability-gated proposal scenarios. Declare true explicitly to opt in to grading.This flag is only the grading gate. Buyer agents should not use it to decide whether a specific proposal is executable. If a seller returns a proposal, proposal_status is the source of truth: draft requires finalization before create, committed can be executed before expires_at, and absent status is legacy ready-to-buy.Grading verdicts at a glance
A run’s overall compliance verdict is determined by
steps_failed. Skipped steps (skip block present) and not-selected items (run_summary.not_selected[] entries) do not contribute to that counter, but they mean different things. steps_not_selected says the runner deliberately excluded those scenarios from this run. steps_skipped says the runner selected those scenarios but could not execute them; use skipped_by_reason and skip.detail to distinguish optional capability choices from missing required surfaces.
A sandbox-only run should therefore look like this when the only excluded work is outside the selected mode:
steps_skipped, they were selected and then skipped; that is a different signal and needs skipped_by_reason.
Pass vs partial coverage
Runner summaries distinguish failure from coverage:
This distinction matters for production-path sandbox runs. A seller can run the storyboard suite against the real production endpoint under sandbox-flagged traffic and get zero failures while still seeing a
partial summary because the production endpoint correctly does not expose comply_test_controller. That result says: “the buyer-visible sandbox path passed every assertion the runner could grade, but controller-seeded lifecycle scenarios were skipped.” It is useful evidence for sandbox readiness, but it is not the same as full deterministic specialism coverage.
For full coverage, run the same declared scope against a dev or staging endpoint that exposes the controller, or pre-seed the required state and configure the runner to assert seeded-state coverage. For a production-only seller, publish the skipped coverage list alongside the zero-failure result so buyers can see exactly what was and was not graded.
Where each piece lives
The full specialism-to-scenario index is at Compliance Catalog. The runner output contract defining every skip reason and verdict shape is at
static/compliance/source/universal/runner-output-contract.yaml.
Related
- Conformance Specification — the three-layer obligation model and the normative storyboard index
- Compliance Catalog — full taxonomy of protocols, specialisms, and universal storyboards
- Validate Your Agent — running the suite locally with
@adcp/sdk