@adcp/sdk 14.0.0-rc.37 → 14.0.0-rc.39
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.
- package/bin/adcp-storyboard-summary.js +286 -0
- package/bin/adcp.js +221 -10
- package/dist/lib/conformance/schemaLoader.d.mts +1 -1
- package/dist/lib/conformance/schemaLoader.d.ts +1 -1
- package/dist/lib/core/AgentClient.d.mts +6 -1
- package/dist/lib/core/AgentClient.d.ts +6 -1
- package/dist/lib/core/AgentClient.js +9 -0
- package/dist/lib/core/AgentClient.mjs +9 -0
- package/dist/lib/core/ConversationTypes.d.mts +29 -0
- package/dist/lib/core/ConversationTypes.d.ts +29 -0
- package/dist/lib/core/SingleAgentClient.d.mts +3 -1
- package/dist/lib/core/SingleAgentClient.d.ts +3 -1
- package/dist/lib/core/SingleAgentClient.js +9 -1
- package/dist/lib/core/SingleAgentClient.mjs +9 -1
- package/dist/lib/core/TaskExecutor.d.mts +13 -1
- package/dist/lib/core/TaskExecutor.d.ts +13 -1
- package/dist/lib/core/TaskExecutor.js +216 -18
- package/dist/lib/core/TaskExecutor.mjs +216 -19
- package/dist/lib/index.d.mts +5 -2
- package/dist/lib/index.d.ts +5 -2
- package/dist/lib/index.js +10 -1
- package/dist/lib/index.mjs +10 -1
- package/dist/lib/media-buy/action-assessment.d.mts +77 -0
- package/dist/lib/media-buy/action-assessment.d.ts +77 -0
- package/dist/lib/media-buy/action-assessment.js +300 -0
- package/dist/lib/media-buy/action-assessment.mjs +284 -0
- package/dist/lib/media-buy/action-constraints.d.mts +9 -0
- package/dist/lib/media-buy/action-constraints.d.ts +9 -0
- package/dist/lib/media-buy/action-constraints.js +170 -0
- package/dist/lib/media-buy/action-constraints.mjs +146 -0
- package/dist/lib/media-buy/action-contracts.d.mts +40 -0
- package/dist/lib/media-buy/action-contracts.d.ts +40 -0
- package/dist/lib/media-buy/action-contracts.js +304 -0
- package/dist/lib/media-buy/action-contracts.mjs +267 -0
- package/dist/lib/media-buy/action-metadata.generated.d.mts +37 -0
- package/dist/lib/media-buy/action-metadata.generated.d.ts +37 -0
- package/dist/lib/media-buy/action-metadata.generated.js +128 -0
- package/dist/lib/media-buy/action-metadata.generated.mjs +101 -0
- package/dist/lib/media-buy/action-types.d.mts +106 -0
- package/dist/lib/media-buy/action-types.d.ts +106 -0
- package/dist/lib/{types/v3-1-beta/tools.generated.js → media-buy/action-types.js} +2 -2
- package/dist/lib/media-buy/actions.d.mts +6 -0
- package/dist/lib/media-buy/actions.d.ts +6 -0
- package/dist/lib/media-buy/actions.js +38 -0
- package/dist/lib/media-buy/actions.mjs +9 -0
- package/dist/lib/media-buy/available-actions.d.mts +2 -1
- package/dist/lib/media-buy/available-actions.d.ts +2 -1
- package/dist/lib/media-buy/available-actions.js +4 -3
- package/dist/lib/media-buy/available-actions.mjs +4 -3
- package/dist/lib/media-buy/compatibility.js +3 -0
- package/dist/lib/media-buy/compatibility.mjs +3 -0
- package/dist/lib/media-buy/index.d.mts +4 -0
- package/dist/lib/media-buy/index.d.ts +4 -0
- package/dist/lib/media-buy/index.js +3 -1
- package/dist/lib/media-buy/index.mjs +1 -0
- package/dist/lib/media-buy/legacy-action-ids.d.mts +1 -0
- package/dist/lib/media-buy/legacy-action-ids.d.ts +1 -0
- package/dist/lib/media-buy/legacy-action-ids.js +50 -0
- package/dist/lib/media-buy/legacy-action-ids.mjs +26 -0
- package/dist/lib/media-buy/mutations.d.mts +70 -0
- package/dist/lib/media-buy/mutations.d.ts +70 -0
- package/dist/lib/media-buy/mutations.js +525 -0
- package/dist/lib/media-buy/mutations.mjs +498 -0
- package/dist/lib/media-buy/preflight.d.mts +20 -69
- package/dist/lib/media-buy/preflight.d.ts +20 -69
- package/dist/lib/media-buy/preflight.js +100 -336
- package/dist/lib/media-buy/preflight.mjs +111 -333
- package/dist/lib/media-buy/targeting-input.d.mts +7 -4
- package/dist/lib/media-buy/targeting-input.d.ts +7 -4
- package/dist/lib/media-buy/types.d.mts +55 -7
- package/dist/lib/media-buy/types.d.ts +55 -7
- package/dist/lib/protocols/rawResponseCapture.d.mts +12 -0
- package/dist/lib/protocols/rawResponseCapture.d.ts +12 -0
- package/dist/lib/protocols/rawResponseCapture.js +33 -3
- package/dist/lib/protocols/rawResponseCapture.mjs +32 -3
- package/dist/lib/registry/types.generated.d.mts +377 -9
- package/dist/lib/registry/types.generated.d.ts +377 -9
- package/dist/lib/reporting/content-mismatch.d.mts +126 -0
- package/dist/lib/reporting/content-mismatch.d.ts +126 -0
- package/dist/lib/reporting/content-mismatch.js +90 -0
- package/dist/lib/reporting/content-mismatch.mjs +66 -0
- package/dist/lib/reporting/evidence.d.mts +1 -0
- package/dist/lib/reporting/evidence.d.ts +1 -0
- package/dist/lib/reporting/evidence.js +32 -3
- package/dist/lib/reporting/evidence.mjs +31 -3
- package/dist/lib/reporting/index.d.mts +3 -1
- package/dist/lib/reporting/index.d.ts +3 -1
- package/dist/lib/reporting/index.js +3 -0
- package/dist/lib/reporting/index.mjs +2 -0
- package/dist/lib/reporting/ledger/handler.d.mts +51 -1
- package/dist/lib/reporting/ledger/handler.d.ts +51 -1
- package/dist/lib/reporting/ledger/handler.js +306 -38
- package/dist/lib/reporting/ledger/handler.mjs +304 -37
- package/dist/lib/reporting/ledger/health.d.mts +12 -0
- package/dist/lib/reporting/ledger/health.d.ts +12 -0
- package/dist/lib/reporting/ledger/health.js +15 -2
- package/dist/lib/reporting/ledger/health.mjs +13 -1
- package/dist/lib/reporting/ledger/index.d.mts +3 -0
- package/dist/lib/reporting/ledger/index.d.ts +3 -0
- package/dist/lib/reporting/ledger/index.js +7 -1
- package/dist/lib/reporting/ledger/index.mjs +3 -0
- package/dist/lib/reporting/ledger/lifecycle.d.mts +31 -4
- package/dist/lib/reporting/ledger/lifecycle.d.ts +31 -4
- package/dist/lib/reporting/ledger/lifecycle.js +244 -37
- package/dist/lib/reporting/ledger/lifecycle.mjs +244 -37
- package/dist/lib/reporting/ledger/managed-postgres.d.mts +231 -0
- package/dist/lib/reporting/ledger/managed-postgres.d.ts +231 -0
- package/dist/lib/reporting/ledger/managed-postgres.js +1797 -0
- package/dist/lib/reporting/ledger/managed-postgres.mjs +1776 -0
- package/dist/lib/reporting/ledger/managed.d.mts +355 -0
- package/dist/lib/reporting/ledger/managed.d.ts +355 -0
- package/dist/lib/reporting/ledger/managed.js +661 -0
- package/dist/lib/reporting/ledger/managed.mjs +633 -0
- package/dist/lib/reporting/ledger/notification-activity.d.mts +222 -0
- package/dist/lib/reporting/ledger/notification-activity.d.ts +222 -0
- package/dist/lib/reporting/ledger/notification-activity.js +1139 -0
- package/dist/lib/reporting/ledger/notification-activity.mjs +1110 -0
- package/dist/lib/reporting/ledger/postgres.d.mts +161 -1
- package/dist/lib/reporting/ledger/postgres.d.ts +161 -1
- package/dist/lib/reporting/ledger/postgres.js +1153 -21
- package/dist/lib/reporting/ledger/postgres.mjs +1152 -21
- package/dist/lib/reporting/ledger/producer.d.mts +8 -0
- package/dist/lib/reporting/ledger/producer.d.ts +8 -0
- package/dist/lib/reporting/ledger/producer.js +146 -52
- package/dist/lib/reporting/ledger/producer.mjs +146 -51
- package/dist/lib/reporting/ledger/types.d.mts +358 -1
- package/dist/lib/reporting/ledger/types.d.ts +358 -1
- package/dist/lib/reporting/ledger/types.js +3 -0
- package/dist/lib/reporting/ledger/types.mjs +2 -0
- package/dist/lib/reporting/reconciliation.d.mts +362 -2
- package/dist/lib/reporting/reconciliation.d.ts +362 -2
- package/dist/lib/reporting/reconciliation.js +1051 -7
- package/dist/lib/reporting/reconciliation.mjs +1053 -7
- package/dist/lib/reporting/service/conformance.d.mts +35 -0
- package/dist/lib/reporting/service/conformance.d.ts +35 -0
- package/dist/lib/reporting/service/conformance.js +89 -0
- package/dist/lib/reporting/service/conformance.mjs +68 -0
- package/dist/lib/reporting/service/index.d.mts +182 -0
- package/dist/lib/reporting/service/index.d.ts +182 -0
- package/dist/lib/reporting/service/index.js +793 -0
- package/dist/lib/reporting/service/index.mjs +787 -0
- package/dist/lib/reporting/source/index.d.mts +2 -1
- package/dist/lib/reporting/source/index.d.ts +2 -1
- package/dist/lib/reporting/source/index.js +16 -3
- package/dist/lib/reporting/source/index.mjs +12 -1
- package/dist/lib/reporting/source/inline.d.mts +88 -1
- package/dist/lib/reporting/source/inline.d.ts +88 -1
- package/dist/lib/reporting/source/inline.js +1161 -163
- package/dist/lib/reporting/source/inline.mjs +1166 -163
- package/dist/lib/reporting/source/manifest.js +12 -7
- package/dist/lib/reporting/source/manifest.mjs +12 -7
- package/dist/lib/reporting/source/source.d.mts +26 -0
- package/dist/lib/reporting/source/source.d.ts +26 -0
- package/dist/lib/reporting/source/source.js +71 -2
- package/dist/lib/reporting/source/source.mjs +65 -1
- package/dist/lib/schemas/index.d.mts +22 -1
- package/dist/lib/schemas/index.d.ts +22 -1
- package/dist/lib/schemas/index.js +7 -0
- package/dist/lib/schemas/index.mjs +7 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.mts +18 -0
- package/dist/lib/server/create-adcp-server.d.ts +18 -0
- package/dist/lib/server/create-adcp-server.js +52 -2
- package/dist/lib/server/create-adcp-server.mjs +52 -2
- package/dist/lib/server/decisioning/account.d.mts +1 -1
- package/dist/lib/server/decisioning/account.d.ts +1 -1
- package/dist/lib/server/decisioning/index.d.mts +1 -0
- package/dist/lib/server/decisioning/index.d.ts +1 -0
- package/dist/lib/server/decisioning/platform.d.mts +3 -0
- package/dist/lib/server/decisioning/platform.d.ts +3 -0
- package/dist/lib/server/decisioning/runtime/from-platform.js +88 -10
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +88 -10
- package/dist/lib/server/decisioning/specialisms/reporting.d.mts +38 -0
- package/dist/lib/server/decisioning/specialisms/reporting.d.ts +38 -0
- package/dist/lib/{types/v3-1-beta/index.js → server/decisioning/specialisms/reporting.js} +2 -8
- package/dist/lib/server/decisioning/specialisms/reporting.mjs +0 -0
- package/dist/lib/server/index.d.mts +4 -2
- package/dist/lib/server/index.d.ts +4 -2
- package/dist/lib/server/index.js +5 -0
- package/dist/lib/server/index.mjs +4 -0
- package/dist/lib/server/media-buy-action-resolver.d.mts +63 -0
- package/dist/lib/server/media-buy-action-resolver.d.ts +63 -0
- package/dist/lib/server/media-buy-action-resolver.js +297 -0
- package/dist/lib/server/media-buy-action-resolver.mjs +285 -0
- package/dist/lib/server/media-buy-actions.d.mts +7 -8
- package/dist/lib/server/media-buy-actions.d.ts +7 -8
- package/dist/lib/server/media-buy-actions.js +57 -14
- package/dist/lib/server/media-buy-actions.mjs +63 -14
- package/dist/lib/server/notification-subscriptions/index.d.mts +2 -2
- package/dist/lib/server/notification-subscriptions/index.d.ts +2 -2
- package/dist/lib/server/notification-subscriptions/index.js +2 -0
- package/dist/lib/server/notification-subscriptions/index.mjs +2 -0
- package/dist/lib/server/notification-subscriptions/postgres-runtime.d.mts +3 -1
- package/dist/lib/server/notification-subscriptions/postgres-runtime.d.ts +3 -1
- package/dist/lib/server/notification-subscriptions/postgres-runtime.js +1 -0
- package/dist/lib/server/notification-subscriptions/postgres-runtime.mjs +1 -0
- package/dist/lib/server/notification-subscriptions/runtime.d.mts +12 -1
- package/dist/lib/server/notification-subscriptions/runtime.d.ts +12 -1
- package/dist/lib/server/notification-subscriptions/runtime.js +102 -16
- package/dist/lib/server/notification-subscriptions/runtime.mjs +101 -16
- package/dist/lib/server/notification-subscriptions/types.d.mts +104 -1
- package/dist/lib/server/notification-subscriptions/types.d.ts +104 -1
- package/dist/lib/server/webhook-emitter.d.mts +40 -5
- package/dist/lib/server/webhook-emitter.d.ts +40 -5
- package/dist/lib/server/webhook-emitter.js +23 -12
- package/dist/lib/server/webhook-emitter.mjs +23 -12
- package/dist/lib/storage/interfaces.d.mts +14 -2
- package/dist/lib/storage/interfaces.d.ts +14 -2
- package/dist/lib/testing/compliance/comply.d.mts +9 -3
- package/dist/lib/testing/compliance/comply.d.ts +9 -3
- package/dist/lib/testing/compliance/comply.js +158 -3
- package/dist/lib/testing/compliance/comply.mjs +159 -4
- package/dist/lib/testing/compliance/storyboard-tracks.js +7 -5
- package/dist/lib/testing/compliance/storyboard-tracks.mjs +7 -5
- package/dist/lib/testing/compliance/summary.js +10 -1
- package/dist/lib/testing/compliance/summary.mjs +10 -1
- package/dist/lib/testing/index.d.mts +1 -1
- package/dist/lib/testing/index.d.ts +1 -1
- package/dist/lib/testing/index.js +2 -0
- package/dist/lib/testing/index.mjs +3 -1
- package/dist/lib/testing/storyboard/agent-routing.d.mts +12 -43
- package/dist/lib/testing/storyboard/agent-routing.d.ts +12 -43
- package/dist/lib/testing/storyboard/agent-routing.js +75 -13
- package/dist/lib/testing/storyboard/agent-routing.mjs +70 -12
- package/dist/lib/testing/storyboard/index.d.mts +1 -0
- package/dist/lib/testing/storyboard/index.d.ts +1 -0
- package/dist/lib/testing/storyboard/index.js +3 -0
- package/dist/lib/testing/storyboard/index.mjs +2 -0
- package/dist/lib/testing/storyboard/junit.d.mts +1 -1
- package/dist/lib/testing/storyboard/junit.d.ts +1 -1
- package/dist/lib/testing/storyboard/junit.js +21 -2
- package/dist/lib/testing/storyboard/junit.mjs +21 -2
- package/dist/lib/testing/storyboard/probes.d.mts +130 -0
- package/dist/lib/testing/storyboard/probes.d.ts +130 -0
- package/dist/lib/testing/storyboard/probes.js +682 -10
- package/dist/lib/testing/storyboard/probes.mjs +683 -3
- package/dist/lib/testing/storyboard/request-signing/builder.d.mts +16 -5
- package/dist/lib/testing/storyboard/request-signing/builder.d.ts +16 -5
- package/dist/lib/testing/storyboard/request-signing/grader.d.mts +44 -1
- package/dist/lib/testing/storyboard/request-signing/grader.d.ts +44 -1
- package/dist/lib/testing/storyboard/request-signing/grader.js +46 -22
- package/dist/lib/testing/storyboard/request-signing/grader.mjs +43 -21
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.mts +86 -11
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts +86 -11
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js +119 -25
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +117 -26
- package/dist/lib/testing/storyboard/request-signing/synthesize.js +22 -2
- package/dist/lib/testing/storyboard/request-signing/synthesize.mjs +22 -2
- package/dist/lib/testing/storyboard/runner.d.mts +103 -0
- package/dist/lib/testing/storyboard/runner.d.ts +103 -0
- package/dist/lib/testing/storyboard/runner.js +1090 -268
- package/dist/lib/testing/storyboard/runner.mjs +1096 -261
- package/dist/lib/testing/storyboard/seeding.d.mts +4 -1
- package/dist/lib/testing/storyboard/seeding.d.ts +4 -1
- package/dist/lib/testing/storyboard/seeding.js +55 -24
- package/dist/lib/testing/storyboard/seeding.mjs +55 -24
- package/dist/lib/testing/storyboard/test-kit.d.mts +37 -3
- package/dist/lib/testing/storyboard/test-kit.d.ts +37 -3
- package/dist/lib/testing/storyboard/test-kit.js +8 -2
- package/dist/lib/testing/storyboard/test-kit.mjs +7 -2
- package/dist/lib/testing/storyboard/types.d.mts +132 -10
- package/dist/lib/testing/storyboard/types.d.ts +132 -10
- package/dist/lib/testing/storyboard/types.js +17 -0
- package/dist/lib/testing/storyboard/types.mjs +16 -0
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/testing/storyboard/validations.js +16 -0
- package/dist/lib/testing/storyboard/validations.mjs +16 -0
- package/dist/lib/testing/test-controller.d.mts +1 -1
- package/dist/lib/testing/test-controller.d.ts +1 -1
- package/dist/lib/types/buy-products.d.ts +71 -6
- package/dist/lib/types/control-media-buy.d.ts +25 -11
- package/dist/lib/types/core.generated.d.mts +69 -10
- package/dist/lib/types/core.generated.d.ts +69 -10
- package/dist/lib/types/create-media-buy.d.ts +71 -6
- package/dist/lib/types/forward-compat-error-codes.d.mts +7 -6
- package/dist/lib/types/forward-compat-error-codes.d.ts +7 -6
- package/dist/lib/types/index.d.mts +2 -2
- package/dist/lib/types/index.d.ts +2 -2
- package/dist/lib/types/schemas.generated.d.ts +8040 -8116
- package/dist/lib/types/schemas.generated.js +1074 -309
- package/dist/lib/types/schemas.generated.mjs +1068 -309
- package/dist/lib/types/tools.generated.d.mts +65 -6
- package/dist/lib/types/tools.generated.d.ts +65 -6
- package/dist/lib/types/update-media-buy.d.ts +71 -6
- package/dist/lib/utils/redact-secrets.d.mts +1 -1
- package/dist/lib/utils/redact-secrets.d.ts +1 -1
- package/dist/lib/utils/redact-secrets.js +1 -1
- package/dist/lib/utils/redact-secrets.mjs +1 -1
- package/dist/lib/v2/projection/cache-versions.d.mts +0 -1
- package/dist/lib/v2/projection/cache-versions.d.ts +0 -1
- package/dist/lib/v2/projection/cache-versions.js +1 -15
- package/dist/lib/v2/projection/cache-versions.mjs +1 -14
- package/dist/lib/v2/projection/canonical-properties.js +2 -2
- package/dist/lib/v2/projection/canonical-properties.mjs +3 -3
- package/dist/lib/v2/projection/registry.d.mts +1 -1
- package/dist/lib/v2/projection/registry.d.ts +1 -1
- package/dist/lib/v2/projection/registry.js +2 -2
- package/dist/lib/v2/projection/registry.mjs +3 -3
- package/dist/lib/validation/schema-loader.d.mts +9 -1
- package/dist/lib/validation/schema-loader.d.ts +9 -1
- package/dist/lib/validation/schema-loader.js +65 -8
- package/dist/lib/validation/schema-loader.mjs +64 -8
- package/dist/lib/version.d.mts +5 -5
- package/dist/lib/version.d.ts +5 -5
- package/dist/lib/version.js +3 -8
- package/dist/lib/version.mjs +3 -8
- package/dist/lib/wholesale-feed-sync/index.d.mts +1 -0
- package/dist/lib/wholesale-feed-sync/index.d.ts +1 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.d.mts +42 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.d.ts +42 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.js +16 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.mjs +0 -0
- package/dist/lib/wholesale-feed-sync/sync.d.mts +6 -6
- package/dist/lib/wholesale-feed-sync/sync.d.ts +6 -6
- package/dist/lib/wholesale-feed-sync/sync.js +3 -1
- package/dist/lib/wholesale-feed-sync/sync.mjs +3 -1
- package/dist/lib/wholesale-feed-sync/types.d.mts +15 -14
- package/dist/lib/wholesale-feed-sync/types.d.ts +15 -14
- package/dist/lib/wholesale-feed-sync/webhook-notification.d.mts +7 -5
- package/dist/lib/wholesale-feed-sync/webhook-notification.d.ts +7 -5
- package/dist/lib/wholesale-feed-sync/webhook-notification.js +45 -0
- package/dist/lib/wholesale-feed-sync/webhook-notification.mjs +44 -0
- package/docs/CLI.md +1 -1
- package/docs/TYPE-SUMMARY.md +118 -4
- package/docs/guides/ASYNC-API-REFERENCE.md +62 -1
- package/docs/guides/ASYNC-DEVELOPER-GUIDE.md +25 -0
- package/docs/guides/ASYNC-DOCUMENTATION-INDEX.md +3 -0
- package/docs/guides/BUYER-QUICKSTART-3.2.md +5 -0
- package/docs/guides/DURABLE-BUYER-WRITES.md +337 -0
- package/docs/guides/EXISTING-PLATFORM.md +80 -1
- package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +57 -0
- package/docs/guides/MEDIA-BUY-ACTION-ASSESSMENT.md +300 -0
- package/docs/guides/REPORTING-LEDGER.md +654 -3
- package/docs/guides/REPORTING-RECONCILIATION.md +50 -0
- package/docs/guides/REPORTING-SOURCE-EXECUTOR.md +63 -1
- package/docs/guides/SELLER-QUICKSTART-3.2.md +2 -0
- package/docs/guides/VALIDATE-YOUR-AGENT.md +35 -0
- package/docs/guides/idempotency-crash-recovery.md +4 -0
- package/docs/llms.txt +4 -2
- package/docs/migration-14.x-rc-worksheet.md +60 -5
- package/docs/migration-7.9-to-7.10.md +7 -5
- package/examples/README.md +17 -0
- package/examples/durable-buyer-writes/caller.ts +745 -0
- package/examples/durable-buyer-writes/worker.ts +240 -0
- package/examples/reliable-reporting-service/README.md +100 -0
- package/examples/seller-3.2-starter.ts +7 -8
- package/examples/targeting-input-existing-platform.ts +153 -0
- package/package.json +41 -29
- package/skills/build-seller-agent/SKILL.md +2 -0
- package/skills/build-seller-agent/specialisms/signed-requests.md +11 -1
- package/skills/cross-cutting.md +28 -11
- package/compliance/cache/3.1.0-beta.7/domains/brand/index.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -415
- package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/single_side_trust_extension.yaml +0 -454
- package/compliance/cache/3.1.0-beta.7/domains/creative/index.yaml +0 -339
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/billing_out_of_band.yaml +0 -153
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/native_in_feed.yaml +0 -543
- package/compliance/cache/3.1.0-beta.7/domains/governance/index.yaml +0 -682
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/index.yaml +0 -781
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -380
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/available_actions.yaml +0 -565
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/canonical_formats.yaml +0 -711
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -234
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_reception.yaml +0 -247
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/delivery_reporting.yaml +0 -357
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment.yaml +0 -633
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_approved.yaml +0 -214
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_conditions.yaml +0 -199
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied.yaml +0 -204
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/invalid_transitions.yaml +0 -289
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_accountability.yaml +0 -244
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -428
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -373
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -517
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -823
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_products.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/state-machine.yaml +0 -442
- package/compliance/cache/3.1.0-beta.7/domains/signals/index.yaml +0 -266
- package/compliance/cache/3.1.0-beta.7/domains/sponsored-intelligence/index.yaml +0 -256
- package/compliance/cache/3.1.0-beta.7/index.json +0 -356
- package/compliance/cache/3.1.0-beta.7/protocols/brand/index.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -415
- package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -454
- package/compliance/cache/3.1.0-beta.7/protocols/creative/index.yaml +0 -339
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/billing_out_of_band.yaml +0 -153
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/native_in_feed.yaml +0 -543
- package/compliance/cache/3.1.0-beta.7/protocols/governance/index.yaml +0 -682
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/index.yaml +0 -781
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -380
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/available_actions.yaml +0 -565
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/canonical_formats.yaml +0 -711
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -234
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_reception.yaml +0 -247
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -357
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -633
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_approved.yaml +0 -214
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_conditions.yaml +0 -199
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied.yaml +0 -204
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -289
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -244
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -428
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -373
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -517
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -823
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_products.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/state-machine.yaml +0 -442
- package/compliance/cache/3.1.0-beta.7/protocols/signals/index.yaml +0 -266
- package/compliance/cache/3.1.0-beta.7/protocols/sponsored-intelligence/index.yaml +0 -256
- package/compliance/cache/3.1.0-beta.7/specialisms/audience-sync/index.yaml +0 -313
- package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/index.yaml +0 -350
- package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -226
- package/compliance/cache/3.1.0-beta.7/specialisms/collection-lists/index.yaml +0 -359
- package/compliance/cache/3.1.0-beta.7/specialisms/content-standards/index.yaml +0 -572
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-ad-server/index.yaml +0 -409
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/generative-seller.yaml +0 -807
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/index.yaml +0 -758
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-template/index.yaml +0 -510
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/index.yaml +0 -143
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -117
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-delivery-monitor/index.yaml +0 -441
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/denied.yaml +0 -221
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/index.yaml +0 -330
- package/compliance/cache/3.1.0-beta.7/specialisms/property-lists/index.yaml +0 -482
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-broadcast-tv/index.yaml +0 -738
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-catalog-driven/index.yaml +0 -840
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-guaranteed/index.yaml +0 -601
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-non-guaranteed/index.yaml +0 -546
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-proposal-mode/index.yaml +0 -586
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-social/index.yaml +0 -919
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/index.yaml +0 -424
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -211
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-owned/index.yaml +0 -317
- package/compliance/cache/3.1.0-beta.7/specialisms/sponsored-intelligence/index.yaml +0 -59
- package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor-live.yaml +0 -78
- package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor.yaml +0 -223
- package/compliance/cache/3.1.0-beta.7/test-kits/billing-gate-runner.yaml +0 -115
- package/compliance/cache/3.1.0-beta.7/test-kits/bistro-oranje.yaml +0 -126
- package/compliance/cache/3.1.0-beta.7/test-kits/distributed-brand-runner.yaml +0 -281
- package/compliance/cache/3.1.0-beta.7/test-kits/nova-motors.yaml +0 -262
- package/compliance/cache/3.1.0-beta.7/test-kits/osei-natural.yaml +0 -126
- package/compliance/cache/3.1.0-beta.7/test-kits/parallel-dispatch-runner.yaml +0 -196
- package/compliance/cache/3.1.0-beta.7/test-kits/rate-limit-trip-runner.yaml +0 -172
- package/compliance/cache/3.1.0-beta.7/test-kits/signed-requests-runner.yaml +0 -155
- package/compliance/cache/3.1.0-beta.7/test-kits/single-side-trust-runner.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/test-kits/substitution-observer-runner.yaml +0 -688
- package/compliance/cache/3.1.0-beta.7/test-kits/summit-foods.yaml +0 -125
- package/compliance/cache/3.1.0-beta.7/test-kits/webhook-receiver-runner.yaml +0 -265
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/001-minimal-plan.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/002-full-plan.json +0 -217
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -60
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004a-human-review-omitted.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -49
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -53
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -57
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -49
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -53
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/007-unicode-objectives.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -65
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/README.md +0 -220
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/canonicalization.json +0 -241
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/keys.json +0 -60
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/001-no-signature-header.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/002-wrong-tag.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/003-expired-signature.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/004-window-too-long.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -33
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/011-malformed-header.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/013-expires-le-created.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/015-signature-invalid.json +0 -28
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -35
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/017-key-revoked.json +0 -38
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -28
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/020-rate-abuse.json +0 -34
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/001-basic-post.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/003-es256-post.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/README.md +0 -211
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/keys.json +0 -61
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -37
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -33
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -41
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/001-basic-post.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/002-es256-post.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -25
- package/compliance/cache/3.1.0-beta.7/universal/billing-gate-dispatch.yaml +0 -450
- package/compliance/cache/3.1.0-beta.7/universal/canonical-format-validate-input.yaml +0 -640
- package/compliance/cache/3.1.0-beta.7/universal/capability-discovery.yaml +0 -125
- package/compliance/cache/3.1.0-beta.7/universal/collection-lists-pagination-integrity.yaml +0 -306
- package/compliance/cache/3.1.0-beta.7/universal/comply-controller-mode-gate.yaml +0 -141
- package/compliance/cache/3.1.0-beta.7/universal/content-standards-pagination-integrity.yaml +0 -326
- package/compliance/cache/3.1.0-beta.7/universal/deterministic-testing.yaml +0 -1430
- package/compliance/cache/3.1.0-beta.7/universal/error-compliance-signals.yaml +0 -377
- package/compliance/cache/3.1.0-beta.7/universal/error-compliance.yaml +0 -528
- package/compliance/cache/3.1.0-beta.7/universal/fictional-entities.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/universal/get-media-buys-pagination-integrity.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/universal/get-signals-pagination-integrity.yaml +0 -211
- package/compliance/cache/3.1.0-beta.7/universal/idempotency.yaml +0 -861
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-event-scope.yaml +0 -119
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-lifecycle.yaml +0 -337
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-rejections.yaml +0 -107
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-creative-formats.yaml +0 -265
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-list-accounts.yaml +0 -245
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity.yaml +0 -263
- package/compliance/cache/3.1.0-beta.7/universal/property-lists-pagination-integrity.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/universal/read-tool-idempotency.yaml +0 -405
- package/compliance/cache/3.1.0-beta.7/universal/runner-output-contract.yaml +0 -1266
- package/compliance/cache/3.1.0-beta.7/universal/schema-validation-signals.yaml +0 -181
- package/compliance/cache/3.1.0-beta.7/universal/schema-validation.yaml +0 -548
- package/compliance/cache/3.1.0-beta.7/universal/security.yaml +0 -539
- package/compliance/cache/3.1.0-beta.7/universal/signed-requests.yaml +0 -217
- package/compliance/cache/3.1.0-beta.7/universal/stale-response-advisory.yaml +0 -295
- package/compliance/cache/3.1.0-beta.7/universal/storyboard-schema.yaml +0 -2136
- package/compliance/cache/3.1.0-beta.7/universal/v3-envelope-integrity.yaml +0 -117
- package/compliance/cache/3.1.0-beta.7/universal/version-negotiation.yaml +0 -130
- package/compliance/cache/3.1.0-beta.7/universal/webhook-emission.yaml +0 -411
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-bulk-webhooks.yaml +0 -82
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-product-webhooks.yaml +0 -83
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-products.yaml +0 -151
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signal-webhooks.yaml +0 -83
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signals.yaml +0 -149
- package/dist/lib/types/v3-1-beta/index.d.mts +0 -1
- package/dist/lib/types/v3-1-beta/index.d.ts +0 -1
- package/dist/lib/types/v3-1-beta/index.mjs +0 -1
- package/dist/lib/types/v3-1-beta/tools.generated.d.mts +0 -26788
- package/dist/lib/types/v3-1-beta/tools.generated.d.ts +0 -26788
- /package/dist/lib/{types/v3-1-beta/tools.generated.mjs → media-buy/action-types.mjs} +0 -0
|
@@ -37,7 +37,10 @@ var import_runner = require('../storyboard/runner.js');
|
|
|
37
37
|
var import_test_kit = require('../storyboard/test-kit.js');
|
|
38
38
|
var import_spec_conformance = require('./spec-conformance.js');
|
|
39
39
|
var import_default_invariants = require('../storyboard/default-invariants.js');
|
|
40
|
+
var import_agent_routing = require('../storyboard/agent-routing.js');
|
|
40
41
|
var import_compliance = require('../storyboard/compliance.js');
|
|
42
|
+
var import_synthesize = require('../storyboard/request-signing/synthesize.js');
|
|
43
|
+
var import_runner2 = require('../storyboard/runner.js');
|
|
41
44
|
var import_protocols = require('../../protocols/index.js');
|
|
42
45
|
var import_test_controller = require('../test-controller.js');
|
|
43
46
|
var import_crypto = require("crypto");
|
|
@@ -507,6 +510,87 @@ const NEUTRAL_BUNDLE_SKIP_REASONS = /* @__PURE__ */ new Set([
|
|
|
507
510
|
// remain coverage gaps and therefore keep the bundle partial.
|
|
508
511
|
"capability_prerequisite_unavailable"
|
|
509
512
|
]);
|
|
513
|
+
const CAPABILITY_ROLLUP_MIN_ADCP_VERSION = "3.2";
|
|
514
|
+
const CAPABILITY_UNSUPPORTED_ROW_ID = "capability_unsupported";
|
|
515
|
+
const CAPABILITY_UNSUPPORTED_RESULT_KEYS = /* @__PURE__ */ new Set([
|
|
516
|
+
"storyboard_id",
|
|
517
|
+
"storyboard_title",
|
|
518
|
+
"agent_url",
|
|
519
|
+
"overall_passed",
|
|
520
|
+
"phases",
|
|
521
|
+
"context",
|
|
522
|
+
"total_duration_ms",
|
|
523
|
+
"passed_count",
|
|
524
|
+
"failed_count",
|
|
525
|
+
"skipped_count",
|
|
526
|
+
"runner_capability_version",
|
|
527
|
+
"tested_at",
|
|
528
|
+
"strict_validation_summary",
|
|
529
|
+
"notices"
|
|
530
|
+
]);
|
|
531
|
+
const CAPABILITY_UNSUPPORTED_PHASE_KEYS = /* @__PURE__ */ new Set([
|
|
532
|
+
"phase_id",
|
|
533
|
+
"phase_title",
|
|
534
|
+
"passed",
|
|
535
|
+
"steps",
|
|
536
|
+
"duration_ms"
|
|
537
|
+
]);
|
|
538
|
+
const CAPABILITY_UNSUPPORTED_STEP_KEYS = /* @__PURE__ */ new Set([
|
|
539
|
+
"storyboard_id",
|
|
540
|
+
"step_id",
|
|
541
|
+
"phase_id",
|
|
542
|
+
"title",
|
|
543
|
+
"task",
|
|
544
|
+
"passed",
|
|
545
|
+
"skipped",
|
|
546
|
+
"skip_reason",
|
|
547
|
+
"skip",
|
|
548
|
+
"duration_ms",
|
|
549
|
+
"validations",
|
|
550
|
+
"context",
|
|
551
|
+
"error",
|
|
552
|
+
"extraction"
|
|
553
|
+
]);
|
|
554
|
+
function capabilityPathSegments(path) {
|
|
555
|
+
return String(path ?? "").trim().toLowerCase().split(".").map((segment) => segment.trim()).filter((segment) => segment.length > 0);
|
|
556
|
+
}
|
|
557
|
+
function isCapabilityUnsupportedSkip(storyboard, result) {
|
|
558
|
+
const predicates = (0, import_runner.storyboardCapabilityPredicates)(storyboard);
|
|
559
|
+
if (predicates.length === 0) return false;
|
|
560
|
+
if (typeof storyboard.adcp_version !== "string") return false;
|
|
561
|
+
if (compareAdcpVersionStrings(storyboard.adcp_version, CAPABILITY_ROLLUP_MIN_ADCP_VERSION) < 0) return false;
|
|
562
|
+
if (predicates.some((predicate) => capabilityPathSegments(predicate.path).includes("compliance_testing"))) {
|
|
563
|
+
return false;
|
|
564
|
+
}
|
|
565
|
+
for (const key of Object.keys(result)) {
|
|
566
|
+
if (!CAPABILITY_UNSUPPORTED_RESULT_KEYS.has(key)) return false;
|
|
567
|
+
}
|
|
568
|
+
if (result.overall_passed !== true) return false;
|
|
569
|
+
if (result.passed_count !== 0 || result.failed_count !== 0 || result.skipped_count !== 1) return false;
|
|
570
|
+
const strict = result.strict_validation_summary;
|
|
571
|
+
if (strict !== void 0) {
|
|
572
|
+
if (strict.observable !== false || strict.checked !== 0 || strict.passed !== 0 || strict.failed !== 0 || strict.strict_only_failures !== 0 || strict.lenient_also_failed !== 0) {
|
|
573
|
+
return false;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
if (result.phases.length !== 1) return false;
|
|
577
|
+
const phase = result.phases[0];
|
|
578
|
+
for (const key of Object.keys(phase)) {
|
|
579
|
+
if (!CAPABILITY_UNSUPPORTED_PHASE_KEYS.has(key)) return false;
|
|
580
|
+
}
|
|
581
|
+
if (phase.phase_id !== CAPABILITY_UNSUPPORTED_ROW_ID || phase.passed !== true) return false;
|
|
582
|
+
const steps = phase.steps ?? [];
|
|
583
|
+
if (steps.length !== 1) return false;
|
|
584
|
+
const step = steps[0];
|
|
585
|
+
for (const key of Object.keys(step)) {
|
|
586
|
+
if (!CAPABILITY_UNSUPPORTED_STEP_KEYS.has(key)) return false;
|
|
587
|
+
}
|
|
588
|
+
return step.step_id === CAPABILITY_UNSUPPORTED_ROW_ID && step.skipped === true && step.passed === true && step.skip_reason === CAPABILITY_UNSUPPORTED_ROW_ID && // Canonical reason and a non-blank detail, per the output contract.
|
|
589
|
+
step.skip?.reason === "not_applicable" && typeof step.skip.detail === "string" && step.skip.detail.trim().length > 0 && // A row that names a runtime requirement is reporting an unmet gate, not
|
|
590
|
+
// an unclaimed capability.
|
|
591
|
+
step.skip.requirement === void 0 && // No execution evidence on the row itself.
|
|
592
|
+
(step.validations?.length ?? 0) === 0;
|
|
593
|
+
}
|
|
510
594
|
function buildComplianceBundleResults(bundles, storyboardResults, options = {}) {
|
|
511
595
|
const resultByStoryboard = new Map(storyboardResults.map((result) => [result.storyboard_id, result]));
|
|
512
596
|
const notApplicableIds = new Set((options.notApplicable ?? []).map((storyboard) => storyboard.storyboard_id));
|
|
@@ -524,6 +608,7 @@ function buildComplianceBundleResults(bundles, storyboardResults, options = {})
|
|
|
524
608
|
if (!result.overall_passed && (result.failed_count > 0 || (0, import_storyboard_tracks.collectDetachedAssertionFailures)(result).length > 0)) {
|
|
525
609
|
return "failing";
|
|
526
610
|
}
|
|
611
|
+
if (isCapabilityUnsupportedSkip(storyboard, result)) return "not_applicable";
|
|
527
612
|
const branchSetPhaseIds = new Set(
|
|
528
613
|
storyboard.phases.filter((phase) => phase.branch_set !== void 0).map((phase) => phase.id)
|
|
529
614
|
);
|
|
@@ -557,9 +642,14 @@ function buildComplianceBundleResults(bundles, storyboardResults, options = {})
|
|
|
557
642
|
}
|
|
558
643
|
return "passing";
|
|
559
644
|
});
|
|
645
|
+
const graded = statuses.filter(
|
|
646
|
+
(candidate, index) => candidate !== "not_applicable" || notApplicableIds.has(storyboardIds[index])
|
|
647
|
+
);
|
|
648
|
+
const hasNeutralizedStoryboard = statuses.length > graded.length;
|
|
560
649
|
let status;
|
|
561
650
|
if (failingBundleIds.has(bundle.ref.id) || statuses.includes("failing")) status = "failing";
|
|
562
|
-
else if (
|
|
651
|
+
else if (graded.length > 0 && graded.every((candidate) => candidate === "passing")) status = "passing";
|
|
652
|
+
else if (hasNeutralizedStoryboard && graded.includes("not_applicable")) status = "partial";
|
|
563
653
|
else if (statuses.length > 0 && statuses.every((candidate) => candidate === "not_applicable")) {
|
|
564
654
|
status = "not_applicable";
|
|
565
655
|
} else if (statuses.length === 0 || statuses.every((candidate) => candidate === "untested")) {
|
|
@@ -690,12 +780,11 @@ function expandScenarios(storyboards, resolveOptions = {}, skipDependencyExpansi
|
|
|
690
780
|
return expanded;
|
|
691
781
|
}
|
|
692
782
|
function partitionStoryboardsByRequiredTools(storyboards, discoveredTools) {
|
|
693
|
-
const discoveredToolNames = new Set(discoveredTools);
|
|
694
783
|
const runnable = [];
|
|
695
784
|
const missing = [];
|
|
696
785
|
for (const sb of storyboards) {
|
|
697
786
|
const required = sb.required_tools ?? [];
|
|
698
|
-
const hasApplicableTool =
|
|
787
|
+
const hasApplicableTool = (0, import_agent_routing.hasAnyRequiredTool)(required, discoveredTools);
|
|
699
788
|
if (!hasApplicableTool) {
|
|
700
789
|
missing.push({
|
|
701
790
|
storyboard_id: sb.id,
|
|
@@ -872,6 +961,7 @@ async function complyImpl(agentUrl, options) {
|
|
|
872
961
|
trusted_match_publisher_auth_runner,
|
|
873
962
|
contracts,
|
|
874
963
|
allowLiveSideEffects,
|
|
964
|
+
request_signing,
|
|
875
965
|
version,
|
|
876
966
|
complianceDir,
|
|
877
967
|
schemaRoot,
|
|
@@ -901,6 +991,14 @@ async function complyImpl(agentUrl, options) {
|
|
|
901
991
|
return await (0, import_schema_loader.withExternalSchemaRoot)(complianceIndex.adcp_version, scopedSchemaRoot, async () => {
|
|
902
992
|
let effectiveOptions = (0, import_runner.applyAdcpVersionRunOptions)(complianceIndex.adcp_version, {
|
|
903
993
|
...testOptions,
|
|
994
|
+
// `comply()` has always defaulted an unset transport to MCP when it built
|
|
995
|
+
// its clients (`effectiveOptions.protocol ?? 'mcp'`, below). Resolve it
|
|
996
|
+
// here instead of at each call site so the storyboard runner sees the
|
|
997
|
+
// same transport the requests actually use: probe selection is
|
|
998
|
+
// explicit-MCP-only by design, and leaving `protocol` unset would deny
|
|
999
|
+
// the MCP session sentinel to the default `comply()` caller while still
|
|
1000
|
+
// speaking MCP on the wire.
|
|
1001
|
+
protocol: testOptions.protocol ?? "mcp",
|
|
904
1002
|
sandbox: testOptions.sandbox !== false,
|
|
905
1003
|
test_session_id: testOptions.test_session_id || `comply-${Date.now()}`
|
|
906
1004
|
});
|
|
@@ -1063,6 +1161,7 @@ async function complyImpl(agentUrl, options) {
|
|
|
1063
1161
|
...trusted_match_publisher_auth_runner !== void 0 && { trusted_match_publisher_auth_runner },
|
|
1064
1162
|
...contracts !== void 0 && { contracts },
|
|
1065
1163
|
...allowLiveSideEffects !== void 0 && { allowLiveSideEffects },
|
|
1164
|
+
...request_signing !== void 0 && { request_signing },
|
|
1066
1165
|
...signal !== void 0 && { signal }
|
|
1067
1166
|
};
|
|
1068
1167
|
let stoppedForTimeoutBudget = false;
|
|
@@ -1292,6 +1391,7 @@ async function runWithDegradedProfile(agentUrl, profile, storyboards, options, e
|
|
|
1292
1391
|
},
|
|
1293
1392
|
...options.contracts !== void 0 && { contracts: options.contracts },
|
|
1294
1393
|
...options.allowLiveSideEffects !== void 0 && { allowLiveSideEffects: options.allowLiveSideEffects },
|
|
1394
|
+
...options.request_signing !== void 0 && { request_signing: options.request_signing },
|
|
1295
1395
|
...signal !== void 0 && { signal }
|
|
1296
1396
|
};
|
|
1297
1397
|
let stoppedForTimeoutBudget = false;
|
|
@@ -1621,6 +1721,14 @@ ${overallIcon} AdCP Compliance Report
|
|
|
1621
1721
|
}
|
|
1622
1722
|
}
|
|
1623
1723
|
}
|
|
1724
|
+
const scenariosByStoryboard = /* @__PURE__ */ new Map();
|
|
1725
|
+
for (const scenario of track.scenarios) {
|
|
1726
|
+
const storyboardId = String(scenario.scenario).split("/")[0];
|
|
1727
|
+
scenariosByStoryboard.set(storyboardId, [...scenariosByStoryboard.get(storyboardId) ?? [], scenario]);
|
|
1728
|
+
}
|
|
1729
|
+
for (const scenarios of scenariosByStoryboard.values()) {
|
|
1730
|
+
output += formatUnverifiedCoverage(scenarios);
|
|
1731
|
+
}
|
|
1624
1732
|
}
|
|
1625
1733
|
}
|
|
1626
1734
|
const failuresWithExpected = (result.failures ?? []).filter((f) => f.expected);
|
|
@@ -1695,6 +1803,53 @@ function formatReasonCounts(counts) {
|
|
|
1695
1803
|
if (entries.length === 0) return void 0;
|
|
1696
1804
|
return entries.sort(([a], [b]) => a.localeCompare(b)).map(([reason, count]) => `${reason}=${count}`).join(", ");
|
|
1697
1805
|
}
|
|
1806
|
+
const SIGNING_COVERAGE_CAUSES = {
|
|
1807
|
+
probe_errored: "the probes could not complete \u2014 see the step errors above",
|
|
1808
|
+
transport_unverified: "this run has no dispatch shape for the vectors",
|
|
1809
|
+
scope_excluded: "every vector was excluded by this run's own selection",
|
|
1810
|
+
self_check_only: "only the in-library SDK self-check ran, which never contacts the agent"
|
|
1811
|
+
};
|
|
1812
|
+
function formatUnverifiedCoverage(scenarios) {
|
|
1813
|
+
const steps = scenarios.flatMap((scenario) => (scenario.steps ?? []).map(toSigningCoverageStep));
|
|
1814
|
+
const coverage = (0, import_runner2.signingCoverage)(steps);
|
|
1815
|
+
if (coverage === "not_probed" || coverage === "graded") return "";
|
|
1816
|
+
const probes = steps.filter((step) => step.task === import_synthesize.REQUEST_SIGNING_PROBE_TASK);
|
|
1817
|
+
const label = String(scenarios[0]?.scenario ?? "signed_requests").split("/")[0] ?? "signed_requests";
|
|
1818
|
+
const cause = SIGNING_COVERAGE_CAUSES[coverage];
|
|
1819
|
+
let output = ` \u23ED\uFE0F COVERAGE UNAVAILABLE \u2014 ${sanitizeReportText(label)}: `;
|
|
1820
|
+
output += `none of ${probes.length} request-signing vector(s) reached the agent (${cause})
|
|
1821
|
+
`;
|
|
1822
|
+
const remedies = [
|
|
1823
|
+
...new Set(
|
|
1824
|
+
probes.map((step) => probeRemedy(step.response)).filter((remedy) => remedy !== void 0)
|
|
1825
|
+
)
|
|
1826
|
+
];
|
|
1827
|
+
for (const remedy of remedies.slice(0, 2)) {
|
|
1828
|
+
output += ` ${sanitizeReportText(remedy)}
|
|
1829
|
+
`;
|
|
1830
|
+
}
|
|
1831
|
+
return output;
|
|
1832
|
+
}
|
|
1833
|
+
function toSigningCoverageStep(step) {
|
|
1834
|
+
return {
|
|
1835
|
+
task: step.task,
|
|
1836
|
+
skipped: step.skipped,
|
|
1837
|
+
skip_reason: step.skip_reason,
|
|
1838
|
+
// `mapStepToTestStep` carries the probe's `HttpProbeResult` here.
|
|
1839
|
+
response: step.observation_data
|
|
1840
|
+
};
|
|
1841
|
+
}
|
|
1842
|
+
function probeRemedy(response) {
|
|
1843
|
+
if (!response || typeof response !== "object") return void 0;
|
|
1844
|
+
const error = response.error;
|
|
1845
|
+
return typeof error === "string" && error.length > 0 ? error : void 0;
|
|
1846
|
+
}
|
|
1847
|
+
function sanitizeReportText(text) {
|
|
1848
|
+
return text.replace(
|
|
1849
|
+
/[\u0000-\u001f\u007f-\u009f]/g,
|
|
1850
|
+
(char) => `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}`
|
|
1851
|
+
);
|
|
1852
|
+
}
|
|
1698
1853
|
function formatComplianceResultsJSON(result) {
|
|
1699
1854
|
const testedTracks = result.tested_tracks?.map(toTestedTrackEntry);
|
|
1700
1855
|
return JSON.stringify(
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createTestClient, discoverAgentProfile, seedTestClientSigningCapability } from "../client.mjs";
|
|
2
2
|
import { collectDetachedAssertionFailures, mapStoryboardResultsToTrackResult, TRACK_LABELS } from "./storyboard-tracks.mjs";
|
|
3
|
-
import { applyAdcpVersionRunOptions, runStoryboard } from "../storyboard/runner.mjs";
|
|
3
|
+
import { applyAdcpVersionRunOptions, runStoryboard, storyboardCapabilityPredicates } from "../storyboard/runner.mjs";
|
|
4
4
|
import { validateTestKit } from "../storyboard/test-kit.mjs";
|
|
5
5
|
import { checkAccountDiscoveryGate, isAccountBearingSpecialism } from "./spec-conformance.mjs";
|
|
6
6
|
import { registerDefaultInvariants } from "../storyboard/default-invariants.mjs";
|
|
7
|
+
import { hasAnyRequiredTool } from "../storyboard/agent-routing.mjs";
|
|
7
8
|
registerDefaultInvariants();
|
|
8
9
|
import {
|
|
9
10
|
resolveStoryboardsForCapabilities,
|
|
@@ -14,6 +15,8 @@ import {
|
|
|
14
15
|
getExternalSchemaRootForCompliance,
|
|
15
16
|
getStoryboardVersionGateReason
|
|
16
17
|
} from "../storyboard/compliance.mjs";
|
|
18
|
+
import { REQUEST_SIGNING_PROBE_TASK } from "../storyboard/request-signing/synthesize.mjs";
|
|
19
|
+
import { signingCoverage } from "../storyboard/runner.mjs";
|
|
17
20
|
import { closeScopedConnections, withMCPConnectionScope } from "../../protocols/index.mjs";
|
|
18
21
|
import { detectController, hasTestController } from "../test-controller.mjs";
|
|
19
22
|
import { randomBytes } from "crypto";
|
|
@@ -485,6 +488,87 @@ const NEUTRAL_BUNDLE_SKIP_REASONS = /* @__PURE__ */ new Set([
|
|
|
485
488
|
// remain coverage gaps and therefore keep the bundle partial.
|
|
486
489
|
"capability_prerequisite_unavailable"
|
|
487
490
|
]);
|
|
491
|
+
const CAPABILITY_ROLLUP_MIN_ADCP_VERSION = "3.2";
|
|
492
|
+
const CAPABILITY_UNSUPPORTED_ROW_ID = "capability_unsupported";
|
|
493
|
+
const CAPABILITY_UNSUPPORTED_RESULT_KEYS = /* @__PURE__ */ new Set([
|
|
494
|
+
"storyboard_id",
|
|
495
|
+
"storyboard_title",
|
|
496
|
+
"agent_url",
|
|
497
|
+
"overall_passed",
|
|
498
|
+
"phases",
|
|
499
|
+
"context",
|
|
500
|
+
"total_duration_ms",
|
|
501
|
+
"passed_count",
|
|
502
|
+
"failed_count",
|
|
503
|
+
"skipped_count",
|
|
504
|
+
"runner_capability_version",
|
|
505
|
+
"tested_at",
|
|
506
|
+
"strict_validation_summary",
|
|
507
|
+
"notices"
|
|
508
|
+
]);
|
|
509
|
+
const CAPABILITY_UNSUPPORTED_PHASE_KEYS = /* @__PURE__ */ new Set([
|
|
510
|
+
"phase_id",
|
|
511
|
+
"phase_title",
|
|
512
|
+
"passed",
|
|
513
|
+
"steps",
|
|
514
|
+
"duration_ms"
|
|
515
|
+
]);
|
|
516
|
+
const CAPABILITY_UNSUPPORTED_STEP_KEYS = /* @__PURE__ */ new Set([
|
|
517
|
+
"storyboard_id",
|
|
518
|
+
"step_id",
|
|
519
|
+
"phase_id",
|
|
520
|
+
"title",
|
|
521
|
+
"task",
|
|
522
|
+
"passed",
|
|
523
|
+
"skipped",
|
|
524
|
+
"skip_reason",
|
|
525
|
+
"skip",
|
|
526
|
+
"duration_ms",
|
|
527
|
+
"validations",
|
|
528
|
+
"context",
|
|
529
|
+
"error",
|
|
530
|
+
"extraction"
|
|
531
|
+
]);
|
|
532
|
+
function capabilityPathSegments(path) {
|
|
533
|
+
return String(path ?? "").trim().toLowerCase().split(".").map((segment) => segment.trim()).filter((segment) => segment.length > 0);
|
|
534
|
+
}
|
|
535
|
+
function isCapabilityUnsupportedSkip(storyboard, result) {
|
|
536
|
+
const predicates = storyboardCapabilityPredicates(storyboard);
|
|
537
|
+
if (predicates.length === 0) return false;
|
|
538
|
+
if (typeof storyboard.adcp_version !== "string") return false;
|
|
539
|
+
if (compareAdcpVersionStrings(storyboard.adcp_version, CAPABILITY_ROLLUP_MIN_ADCP_VERSION) < 0) return false;
|
|
540
|
+
if (predicates.some((predicate) => capabilityPathSegments(predicate.path).includes("compliance_testing"))) {
|
|
541
|
+
return false;
|
|
542
|
+
}
|
|
543
|
+
for (const key of Object.keys(result)) {
|
|
544
|
+
if (!CAPABILITY_UNSUPPORTED_RESULT_KEYS.has(key)) return false;
|
|
545
|
+
}
|
|
546
|
+
if (result.overall_passed !== true) return false;
|
|
547
|
+
if (result.passed_count !== 0 || result.failed_count !== 0 || result.skipped_count !== 1) return false;
|
|
548
|
+
const strict = result.strict_validation_summary;
|
|
549
|
+
if (strict !== void 0) {
|
|
550
|
+
if (strict.observable !== false || strict.checked !== 0 || strict.passed !== 0 || strict.failed !== 0 || strict.strict_only_failures !== 0 || strict.lenient_also_failed !== 0) {
|
|
551
|
+
return false;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if (result.phases.length !== 1) return false;
|
|
555
|
+
const phase = result.phases[0];
|
|
556
|
+
for (const key of Object.keys(phase)) {
|
|
557
|
+
if (!CAPABILITY_UNSUPPORTED_PHASE_KEYS.has(key)) return false;
|
|
558
|
+
}
|
|
559
|
+
if (phase.phase_id !== CAPABILITY_UNSUPPORTED_ROW_ID || phase.passed !== true) return false;
|
|
560
|
+
const steps = phase.steps ?? [];
|
|
561
|
+
if (steps.length !== 1) return false;
|
|
562
|
+
const step = steps[0];
|
|
563
|
+
for (const key of Object.keys(step)) {
|
|
564
|
+
if (!CAPABILITY_UNSUPPORTED_STEP_KEYS.has(key)) return false;
|
|
565
|
+
}
|
|
566
|
+
return step.step_id === CAPABILITY_UNSUPPORTED_ROW_ID && step.skipped === true && step.passed === true && step.skip_reason === CAPABILITY_UNSUPPORTED_ROW_ID && // Canonical reason and a non-blank detail, per the output contract.
|
|
567
|
+
step.skip?.reason === "not_applicable" && typeof step.skip.detail === "string" && step.skip.detail.trim().length > 0 && // A row that names a runtime requirement is reporting an unmet gate, not
|
|
568
|
+
// an unclaimed capability.
|
|
569
|
+
step.skip.requirement === void 0 && // No execution evidence on the row itself.
|
|
570
|
+
(step.validations?.length ?? 0) === 0;
|
|
571
|
+
}
|
|
488
572
|
function buildComplianceBundleResults(bundles, storyboardResults, options = {}) {
|
|
489
573
|
const resultByStoryboard = new Map(storyboardResults.map((result) => [result.storyboard_id, result]));
|
|
490
574
|
const notApplicableIds = new Set((options.notApplicable ?? []).map((storyboard) => storyboard.storyboard_id));
|
|
@@ -502,6 +586,7 @@ function buildComplianceBundleResults(bundles, storyboardResults, options = {})
|
|
|
502
586
|
if (!result.overall_passed && (result.failed_count > 0 || collectDetachedAssertionFailures(result).length > 0)) {
|
|
503
587
|
return "failing";
|
|
504
588
|
}
|
|
589
|
+
if (isCapabilityUnsupportedSkip(storyboard, result)) return "not_applicable";
|
|
505
590
|
const branchSetPhaseIds = new Set(
|
|
506
591
|
storyboard.phases.filter((phase) => phase.branch_set !== void 0).map((phase) => phase.id)
|
|
507
592
|
);
|
|
@@ -535,9 +620,14 @@ function buildComplianceBundleResults(bundles, storyboardResults, options = {})
|
|
|
535
620
|
}
|
|
536
621
|
return "passing";
|
|
537
622
|
});
|
|
623
|
+
const graded = statuses.filter(
|
|
624
|
+
(candidate, index) => candidate !== "not_applicable" || notApplicableIds.has(storyboardIds[index])
|
|
625
|
+
);
|
|
626
|
+
const hasNeutralizedStoryboard = statuses.length > graded.length;
|
|
538
627
|
let status;
|
|
539
628
|
if (failingBundleIds.has(bundle.ref.id) || statuses.includes("failing")) status = "failing";
|
|
540
|
-
else if (
|
|
629
|
+
else if (graded.length > 0 && graded.every((candidate) => candidate === "passing")) status = "passing";
|
|
630
|
+
else if (hasNeutralizedStoryboard && graded.includes("not_applicable")) status = "partial";
|
|
541
631
|
else if (statuses.length > 0 && statuses.every((candidate) => candidate === "not_applicable")) {
|
|
542
632
|
status = "not_applicable";
|
|
543
633
|
} else if (statuses.length === 0 || statuses.every((candidate) => candidate === "untested")) {
|
|
@@ -668,12 +758,11 @@ function expandScenarios(storyboards, resolveOptions = {}, skipDependencyExpansi
|
|
|
668
758
|
return expanded;
|
|
669
759
|
}
|
|
670
760
|
function partitionStoryboardsByRequiredTools(storyboards, discoveredTools) {
|
|
671
|
-
const discoveredToolNames = new Set(discoveredTools);
|
|
672
761
|
const runnable = [];
|
|
673
762
|
const missing = [];
|
|
674
763
|
for (const sb of storyboards) {
|
|
675
764
|
const required = sb.required_tools ?? [];
|
|
676
|
-
const hasApplicableTool = required
|
|
765
|
+
const hasApplicableTool = hasAnyRequiredTool(required, discoveredTools);
|
|
677
766
|
if (!hasApplicableTool) {
|
|
678
767
|
missing.push({
|
|
679
768
|
storyboard_id: sb.id,
|
|
@@ -850,6 +939,7 @@ async function complyImpl(agentUrl, options) {
|
|
|
850
939
|
trusted_match_publisher_auth_runner,
|
|
851
940
|
contracts,
|
|
852
941
|
allowLiveSideEffects,
|
|
942
|
+
request_signing,
|
|
853
943
|
version,
|
|
854
944
|
complianceDir,
|
|
855
945
|
schemaRoot,
|
|
@@ -879,6 +969,14 @@ async function complyImpl(agentUrl, options) {
|
|
|
879
969
|
return await withExternalSchemaRoot(complianceIndex.adcp_version, scopedSchemaRoot, async () => {
|
|
880
970
|
let effectiveOptions = applyAdcpVersionRunOptions(complianceIndex.adcp_version, {
|
|
881
971
|
...testOptions,
|
|
972
|
+
// `comply()` has always defaulted an unset transport to MCP when it built
|
|
973
|
+
// its clients (`effectiveOptions.protocol ?? 'mcp'`, below). Resolve it
|
|
974
|
+
// here instead of at each call site so the storyboard runner sees the
|
|
975
|
+
// same transport the requests actually use: probe selection is
|
|
976
|
+
// explicit-MCP-only by design, and leaving `protocol` unset would deny
|
|
977
|
+
// the MCP session sentinel to the default `comply()` caller while still
|
|
978
|
+
// speaking MCP on the wire.
|
|
979
|
+
protocol: testOptions.protocol ?? "mcp",
|
|
882
980
|
sandbox: testOptions.sandbox !== false,
|
|
883
981
|
test_session_id: testOptions.test_session_id || `comply-${Date.now()}`
|
|
884
982
|
});
|
|
@@ -1041,6 +1139,7 @@ async function complyImpl(agentUrl, options) {
|
|
|
1041
1139
|
...trusted_match_publisher_auth_runner !== void 0 && { trusted_match_publisher_auth_runner },
|
|
1042
1140
|
...contracts !== void 0 && { contracts },
|
|
1043
1141
|
...allowLiveSideEffects !== void 0 && { allowLiveSideEffects },
|
|
1142
|
+
...request_signing !== void 0 && { request_signing },
|
|
1044
1143
|
...signal !== void 0 && { signal }
|
|
1045
1144
|
};
|
|
1046
1145
|
let stoppedForTimeoutBudget = false;
|
|
@@ -1270,6 +1369,7 @@ async function runWithDegradedProfile(agentUrl, profile, storyboards, options, e
|
|
|
1270
1369
|
},
|
|
1271
1370
|
...options.contracts !== void 0 && { contracts: options.contracts },
|
|
1272
1371
|
...options.allowLiveSideEffects !== void 0 && { allowLiveSideEffects: options.allowLiveSideEffects },
|
|
1372
|
+
...options.request_signing !== void 0 && { request_signing: options.request_signing },
|
|
1273
1373
|
...signal !== void 0 && { signal }
|
|
1274
1374
|
};
|
|
1275
1375
|
let stoppedForTimeoutBudget = false;
|
|
@@ -1599,6 +1699,14 @@ ${overallIcon} AdCP Compliance Report
|
|
|
1599
1699
|
}
|
|
1600
1700
|
}
|
|
1601
1701
|
}
|
|
1702
|
+
const scenariosByStoryboard = /* @__PURE__ */ new Map();
|
|
1703
|
+
for (const scenario of track.scenarios) {
|
|
1704
|
+
const storyboardId = String(scenario.scenario).split("/")[0];
|
|
1705
|
+
scenariosByStoryboard.set(storyboardId, [...scenariosByStoryboard.get(storyboardId) ?? [], scenario]);
|
|
1706
|
+
}
|
|
1707
|
+
for (const scenarios of scenariosByStoryboard.values()) {
|
|
1708
|
+
output += formatUnverifiedCoverage(scenarios);
|
|
1709
|
+
}
|
|
1602
1710
|
}
|
|
1603
1711
|
}
|
|
1604
1712
|
const failuresWithExpected = (result.failures ?? []).filter((f) => f.expected);
|
|
@@ -1673,6 +1781,53 @@ function formatReasonCounts(counts) {
|
|
|
1673
1781
|
if (entries.length === 0) return void 0;
|
|
1674
1782
|
return entries.sort(([a], [b]) => a.localeCompare(b)).map(([reason, count]) => `${reason}=${count}`).join(", ");
|
|
1675
1783
|
}
|
|
1784
|
+
const SIGNING_COVERAGE_CAUSES = {
|
|
1785
|
+
probe_errored: "the probes could not complete \u2014 see the step errors above",
|
|
1786
|
+
transport_unverified: "this run has no dispatch shape for the vectors",
|
|
1787
|
+
scope_excluded: "every vector was excluded by this run's own selection",
|
|
1788
|
+
self_check_only: "only the in-library SDK self-check ran, which never contacts the agent"
|
|
1789
|
+
};
|
|
1790
|
+
function formatUnverifiedCoverage(scenarios) {
|
|
1791
|
+
const steps = scenarios.flatMap((scenario) => (scenario.steps ?? []).map(toSigningCoverageStep));
|
|
1792
|
+
const coverage = signingCoverage(steps);
|
|
1793
|
+
if (coverage === "not_probed" || coverage === "graded") return "";
|
|
1794
|
+
const probes = steps.filter((step) => step.task === REQUEST_SIGNING_PROBE_TASK);
|
|
1795
|
+
const label = String(scenarios[0]?.scenario ?? "signed_requests").split("/")[0] ?? "signed_requests";
|
|
1796
|
+
const cause = SIGNING_COVERAGE_CAUSES[coverage];
|
|
1797
|
+
let output = ` \u23ED\uFE0F COVERAGE UNAVAILABLE \u2014 ${sanitizeReportText(label)}: `;
|
|
1798
|
+
output += `none of ${probes.length} request-signing vector(s) reached the agent (${cause})
|
|
1799
|
+
`;
|
|
1800
|
+
const remedies = [
|
|
1801
|
+
...new Set(
|
|
1802
|
+
probes.map((step) => probeRemedy(step.response)).filter((remedy) => remedy !== void 0)
|
|
1803
|
+
)
|
|
1804
|
+
];
|
|
1805
|
+
for (const remedy of remedies.slice(0, 2)) {
|
|
1806
|
+
output += ` ${sanitizeReportText(remedy)}
|
|
1807
|
+
`;
|
|
1808
|
+
}
|
|
1809
|
+
return output;
|
|
1810
|
+
}
|
|
1811
|
+
function toSigningCoverageStep(step) {
|
|
1812
|
+
return {
|
|
1813
|
+
task: step.task,
|
|
1814
|
+
skipped: step.skipped,
|
|
1815
|
+
skip_reason: step.skip_reason,
|
|
1816
|
+
// `mapStepToTestStep` carries the probe's `HttpProbeResult` here.
|
|
1817
|
+
response: step.observation_data
|
|
1818
|
+
};
|
|
1819
|
+
}
|
|
1820
|
+
function probeRemedy(response) {
|
|
1821
|
+
if (!response || typeof response !== "object") return void 0;
|
|
1822
|
+
const error = response.error;
|
|
1823
|
+
return typeof error === "string" && error.length > 0 ? error : void 0;
|
|
1824
|
+
}
|
|
1825
|
+
function sanitizeReportText(text) {
|
|
1826
|
+
return text.replace(
|
|
1827
|
+
/[\u0000-\u001f\u007f-\u009f]/g,
|
|
1828
|
+
(char) => `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}`
|
|
1829
|
+
);
|
|
1830
|
+
}
|
|
1676
1831
|
function formatComplianceResultsJSON(result) {
|
|
1677
1832
|
const testedTracks = result.tested_tracks?.map(toTestedTrackEntry);
|
|
1678
1833
|
return JSON.stringify(
|
|
@@ -23,6 +23,7 @@ __export(storyboard_tracks_exports, {
|
|
|
23
23
|
mapStoryboardResultsToTrackResult: () => mapStoryboardResultsToTrackResult
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(storyboard_tracks_exports);
|
|
26
|
+
var import_runner = require('../storyboard/runner.js');
|
|
26
27
|
function collectDetachedAssertionFailures(result) {
|
|
27
28
|
const failures = [];
|
|
28
29
|
for (const assertion of result.assertions ?? []) {
|
|
@@ -186,16 +187,17 @@ function computeTrackStatus(results) {
|
|
|
186
187
|
const totalSkipped = results.reduce((sum, r) => sum + r.skipped_count, 0);
|
|
187
188
|
const totalSteps = totalPassed + totalFailed + totalSkipped;
|
|
188
189
|
const hasAssertionFailure = results.some((result) => collectDetachedAssertionFailures(result).length > 0);
|
|
190
|
+
const stepsOf = (result) => (result.passes?.flatMap((pass) => pass.phases) ?? result.phases).flatMap((phase) => phase.steps);
|
|
191
|
+
const hasFixtureUnavailable = results.some(
|
|
192
|
+
(result) => stepsOf(result).some((step) => step.skip?.reason === "fixture_unavailable")
|
|
193
|
+
);
|
|
194
|
+
const hasUnverifiedSigningCoverage = results.some((result) => (0, import_runner.signingCoverageUnverified)(stepsOf(result)));
|
|
189
195
|
if (totalSteps === 0) return "skip";
|
|
190
196
|
if (totalFailed > 0) return totalPassed === 0 ? "fail" : "partial";
|
|
191
197
|
if (hasAssertionFailure) return totalPassed === 0 ? "fail" : "partial";
|
|
198
|
+
if (hasUnverifiedSigningCoverage) return "partial";
|
|
192
199
|
if (totalSteps === totalSkipped) return "skip";
|
|
193
200
|
if (results.some((result) => !result.overall_passed)) return "partial";
|
|
194
|
-
const hasFixtureUnavailable = results.some(
|
|
195
|
-
(result) => (result.passes?.flatMap((pass) => pass.phases) ?? result.phases).some(
|
|
196
|
-
(phase) => phase.steps.some((step) => step.skip?.reason === "fixture_unavailable")
|
|
197
|
-
)
|
|
198
|
-
);
|
|
199
201
|
if (hasFixtureUnavailable) return "partial";
|
|
200
202
|
const observationRecords = results.flatMap((r) => r.assertions ?? []).filter((a) => typeof a.observation_count === "number");
|
|
201
203
|
if (observationRecords.length > 0 && observationRecords.every((a) => a.observation_count === 0)) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { signingCoverageUnverified } from "../storyboard/runner.mjs";
|
|
1
2
|
function collectDetachedAssertionFailures(result) {
|
|
2
3
|
const failures = [];
|
|
3
4
|
for (const assertion of result.assertions ?? []) {
|
|
@@ -161,16 +162,17 @@ function computeTrackStatus(results) {
|
|
|
161
162
|
const totalSkipped = results.reduce((sum, r) => sum + r.skipped_count, 0);
|
|
162
163
|
const totalSteps = totalPassed + totalFailed + totalSkipped;
|
|
163
164
|
const hasAssertionFailure = results.some((result) => collectDetachedAssertionFailures(result).length > 0);
|
|
165
|
+
const stepsOf = (result) => (result.passes?.flatMap((pass) => pass.phases) ?? result.phases).flatMap((phase) => phase.steps);
|
|
166
|
+
const hasFixtureUnavailable = results.some(
|
|
167
|
+
(result) => stepsOf(result).some((step) => step.skip?.reason === "fixture_unavailable")
|
|
168
|
+
);
|
|
169
|
+
const hasUnverifiedSigningCoverage = results.some((result) => signingCoverageUnverified(stepsOf(result)));
|
|
164
170
|
if (totalSteps === 0) return "skip";
|
|
165
171
|
if (totalFailed > 0) return totalPassed === 0 ? "fail" : "partial";
|
|
166
172
|
if (hasAssertionFailure) return totalPassed === 0 ? "fail" : "partial";
|
|
173
|
+
if (hasUnverifiedSigningCoverage) return "partial";
|
|
167
174
|
if (totalSteps === totalSkipped) return "skip";
|
|
168
175
|
if (results.some((result) => !result.overall_passed)) return "partial";
|
|
169
|
-
const hasFixtureUnavailable = results.some(
|
|
170
|
-
(result) => (result.passes?.flatMap((pass) => pass.phases) ?? result.phases).some(
|
|
171
|
-
(phase) => phase.steps.some((step) => step.skip?.reason === "fixture_unavailable")
|
|
172
|
-
)
|
|
173
|
-
);
|
|
174
176
|
if (hasFixtureUnavailable) return "partial";
|
|
175
177
|
const observationRecords = results.flatMap((r) => r.assertions ?? []).filter((a) => typeof a.observation_count === "number");
|
|
176
178
|
if (observationRecords.length > 0 && observationRecords.every((a) => a.observation_count === 0)) {
|
|
@@ -84,7 +84,14 @@ const ACTIONABLE_CANONICAL_REASONS = /* @__PURE__ */ new Set([
|
|
|
84
84
|
"prerequisite_failed",
|
|
85
85
|
"unsatisfied_contract",
|
|
86
86
|
"no_phases",
|
|
87
|
-
"requirement_unmet"
|
|
87
|
+
"requirement_unmet",
|
|
88
|
+
// Detailed reason, not canonical: `isActionable` tests the raw reason
|
|
89
|
+
// before mapping it, so this surfaces the signing coverage gap in the
|
|
90
|
+
// skip-cause block without making every canonical `not_applicable` skip
|
|
91
|
+
// actionable. A partial verdict whose cause never appears in the summary
|
|
92
|
+
// is the "silently missing coverage" failure mode this block exists to
|
|
93
|
+
// prevent (adcp-client#2954).
|
|
94
|
+
"signing_transport_unavailable"
|
|
88
95
|
]);
|
|
89
96
|
function isActionableSkipReason(reason) {
|
|
90
97
|
if (ACTIONABLE_CANONICAL_REASONS.has(reason)) return true;
|
|
@@ -139,6 +146,8 @@ function skipCauseDetail(reason) {
|
|
|
139
146
|
return "pre-flight controller seeding failed";
|
|
140
147
|
case "capability_unsupported":
|
|
141
148
|
return "agent self-declared capability unsupported";
|
|
149
|
+
case "signing_transport_unavailable":
|
|
150
|
+
return "this runner has no request-signing dispatch for the run protocol \u2014 grade the MCP/REST binding";
|
|
142
151
|
default:
|
|
143
152
|
return reason;
|
|
144
153
|
}
|
|
@@ -58,7 +58,14 @@ const ACTIONABLE_CANONICAL_REASONS = /* @__PURE__ */ new Set([
|
|
|
58
58
|
"prerequisite_failed",
|
|
59
59
|
"unsatisfied_contract",
|
|
60
60
|
"no_phases",
|
|
61
|
-
"requirement_unmet"
|
|
61
|
+
"requirement_unmet",
|
|
62
|
+
// Detailed reason, not canonical: `isActionable` tests the raw reason
|
|
63
|
+
// before mapping it, so this surfaces the signing coverage gap in the
|
|
64
|
+
// skip-cause block without making every canonical `not_applicable` skip
|
|
65
|
+
// actionable. A partial verdict whose cause never appears in the summary
|
|
66
|
+
// is the "silently missing coverage" failure mode this block exists to
|
|
67
|
+
// prevent (adcp-client#2954).
|
|
68
|
+
"signing_transport_unavailable"
|
|
62
69
|
]);
|
|
63
70
|
function isActionableSkipReason(reason) {
|
|
64
71
|
if (ACTIONABLE_CANONICAL_REASONS.has(reason)) return true;
|
|
@@ -113,6 +120,8 @@ function skipCauseDetail(reason) {
|
|
|
113
120
|
return "pre-flight controller seeding failed";
|
|
114
121
|
case "capability_unsupported":
|
|
115
122
|
return "agent self-declared capability unsupported";
|
|
123
|
+
case "signing_transport_unavailable":
|
|
124
|
+
return "this runner has no request-signing dispatch for the run protocol \u2014 grade the MCP/REST binding";
|
|
116
125
|
default:
|
|
117
126
|
return reason;
|
|
118
127
|
}
|
|
@@ -16,4 +16,4 @@ export type { TestControllerBridge, TestControllerBridgeContext, BridgeFromSessi
|
|
|
16
16
|
export { runAgainstLocalAgent } from './local-agent-runner.mjs';
|
|
17
17
|
export type { LocalAgentRunResult, PerStoryboardOverride, RunAgainstLocalAgentOptions } from './local-agent-runner.mjs';
|
|
18
18
|
export { registerExternalSchemaRoot, unregisterExternalSchemaRoot, withExternalSchemaRoot } from '../validation/index.mjs';
|
|
19
|
-
export { runStoryboard, runStoryboardStep, applyAdcpVersionRunOptions, applyStoryboardVersionOptions, getFirstStepPreview, parseStoryboard, loadStoryboardFile, normalizeValidationOnlyTasks, VALIDATION_ONLY_TASK, applyFixtureBindingsToRequest, buildFixtureResolutionSpecs, FixtureBindingRegistry, matchesFixtureRequirements, normalizeFixtureMatchExpression, validateFixtureResolutionDeclarations, getComplianceCacheDir, loadComplianceIndex, listBundles, loadBundleStoryboards, listAllComplianceStoryboards, getComplianceStoryboardById, findBundleById, resolveBundleOrStoryboard, resolveStoryboardsForCapabilities, isComplianceVersionSupported, CapabilityResolutionError, TASK_TO_METHOD, executeStoryboardTask, expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives, extractContext, injectContext, runValidations, resolvePath, RateLimitTripObserver, RATE_LIMIT_TRIP_CONTRACT, RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN, validateRateLimitTripSpec, getSandboxEntities, getSandboxBrands, getSandboxBrand, isSandboxDomain, clearSandboxCache, registerAssertion, getAssertion, listAssertions, listDefaultAssertions, clearAssertionRegistry, resolveAssertions, type AssertionSpec, type AssertionContext, type AssertionResult, type RegisterAssertionOptions, type Storyboard, type StoryboardFixtureResolution, type FixtureResolutionStrategy, type FixtureMatchOperator, type FixtureMatchClause, type FixtureResolutionDeclaration, type ProductFixtureResolutionDeclaration, type PricingOptionFixtureResolutionDeclaration, type FixtureResolutionStatus, type FixtureResolutionRecord, type FixtureResolutionAttempt, type FixtureResolutionEvidence, type FixtureResolutionCoverageGap, type StoryboardInvariants, type StoryboardInvariantsObject, type StepInvariantsObject, type StoryboardPhase, type StoryboardStep, type RateLimitTripSpec, type StoryboardValidation, type RateLimitTripClient, type RateLimitTripFailureCode, type RateLimitTripObservation, type RateLimitTripObserverOptions, type RateLimitTripResponseSnapshot, type RateLimitTripStructuredResult, type RateLimitTripTaskOptions, type StoryboardContext, type StoryboardRunOptions, type TrustedMatchContextProviderEndpoint, type TrustedMatchContextRegistrationContext, type TrustedMatchContextRouterRunnerOptions, type TrustedMatchPublisherAuthOperation, type TrustedMatchPublisherCredentialState, type TrustedMatchPublisherAuthTls, type TrustedMatchPublisherAuthProbeConfiguration, type TrustedMatchPublisherAuthRunner, type ValidationResult, type StoryboardStepPreview, type StoryboardStepResult, type StoryboardStepHint, type StoryboardStepHintBase, type ContextValueRejectedHint, type ShapeDriftHint, type MissingRequiredFieldHint, type FormatMismatchHint, type MonotonicViolationHint, type ContextProvenanceEntry, type StoryboardPhaseResult, type StoryboardResult, type RunnerNotice, type NoticeCode, type NoticeSeverity, type AgentCapabilities, type BundleKind, type BundleRef, type CapabilityResolutionCode, type ComplianceIndex, type ComplianceIndexProtocol, type ComplianceIndexSpecialism, type ResolveOptions, type ResolvedBundle, type ResolvedStoryboards, type SandboxBrand, type SandboxAgent, type SandboxEntities, type BrandJson, type AdagentsJson, gradeOAuthMetadataGraph, gradeOAuthMetadataGraphVector, loadOAuthMetadataGraphVectors, normalizeOAuthResourceForComparison, redactOAuthUrlForOutput, type GradeOAuthMetadataGraphOptions, type OAuthMetadataGraphErrorCode, type OAuthMetadataGraphFinding, type OAuthMetadataGraphGrade, type OAuthMetadataGraphObservation, type OAuthMetadataGraphVector, type OAuthMetadataGraphVectorCorpus, BrandJsonSchema, AdagentsJsonSchema, } from './storyboard/index.mjs';
|
|
19
|
+
export { runStoryboard, runStoryboardStep, applyAdcpVersionRunOptions, applyStoryboardVersionOptions, getFirstStepPreview, parseStoryboard, loadStoryboardFile, normalizeValidationOnlyTasks, VALIDATION_ONLY_TASK, applyFixtureBindingsToRequest, buildFixtureResolutionSpecs, FixtureBindingRegistry, matchesFixtureRequirements, normalizeFixtureMatchExpression, validateFixtureResolutionDeclarations, getComplianceCacheDir, loadComplianceIndex, listBundles, loadBundleStoryboards, listAllComplianceStoryboards, getComplianceStoryboardById, findBundleById, resolveBundleOrStoryboard, resolveStoryboardsForCapabilities, isComplianceVersionSupported, CapabilityResolutionError, TASK_TO_METHOD, executeStoryboardTask, expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives, extractContext, injectContext, runValidations, resolvePath, RateLimitTripObserver, RATE_LIMIT_TRIP_CONTRACT, RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN, validateRateLimitTripSpec, getSandboxEntities, getSandboxBrands, getSandboxBrand, isSandboxDomain, clearSandboxCache, registerAssertion, getAssertion, listAssertions, listDefaultAssertions, clearAssertionRegistry, resolveAssertions, type AssertionSpec, type AssertionContext, type AssertionResult, type RegisterAssertionOptions, type Storyboard, type StoryboardFixtureResolution, type FixtureResolutionStrategy, type FixtureMatchOperator, type FixtureMatchClause, type FixtureResolutionDeclaration, type ProductFixtureResolutionDeclaration, type PricingOptionFixtureResolutionDeclaration, type FixtureResolutionStatus, type FixtureResolutionRecord, type FixtureResolutionAttempt, type FixtureResolutionEvidence, type FixtureResolutionCoverageGap, type StoryboardInvariants, type StoryboardInvariantsObject, type StepInvariantsObject, type StoryboardPhase, type StoryboardStep, type RateLimitTripSpec, type StoryboardValidation, type RateLimitTripClient, type RateLimitTripFailureCode, type RateLimitTripObservation, type RateLimitTripObserverOptions, type RateLimitTripResponseSnapshot, type RateLimitTripStructuredResult, type RateLimitTripTaskOptions, type StoryboardContext, type StoryboardRunOptions, type TrustedMatchContextProviderEndpoint, type TrustedMatchContextRegistrationContext, type TrustedMatchContextRouterRunnerOptions, type TrustedMatchPublisherAuthOperation, type TrustedMatchPublisherCredentialState, type TrustedMatchPublisherAuthTls, type TrustedMatchPublisherAuthProbeConfiguration, type TrustedMatchPublisherAuthRunner, type ValidationResult, type StoryboardStepPreview, type StoryboardStepResult, type StoryboardStepHint, type StoryboardStepHintBase, type ContextValueRejectedHint, type ShapeDriftHint, type MissingRequiredFieldHint, type FormatMismatchHint, type MonotonicViolationHint, type ContextProvenanceEntry, type StoryboardPhaseResult, type StoryboardResult, type RunnerNotice, type NoticeCode, type NoticeSeverity, type AgentCapabilities, type BundleKind, type BundleRef, type CapabilityResolutionCode, type ComplianceIndex, type ComplianceIndexProtocol, type ComplianceIndexSpecialism, type ResolveOptions, type ResolvedBundle, type ResolvedStoryboards, type SandboxBrand, type SandboxAgent, type SandboxEntities, type BrandJson, type AdagentsJson, gradeOAuthMetadataGraph, gradeOAuthMetadataGraphVector, loadOAuthMetadataGraphVectors, normalizeOAuthResourceForComparison, redactOAuthUrlForOutput, type GradeOAuthMetadataGraphOptions, type OAuthMetadataGraphErrorCode, type OAuthMetadataGraphFinding, type OAuthMetadataGraphGrade, type OAuthMetadataGraphObservation, type OAuthMetadataGraphVector, type OAuthMetadataGraphVectorCorpus, BrandJsonSchema, AdagentsJsonSchema, MCP_SESSION_PROBE_TASK, } from './storyboard/index.mjs';
|
|
@@ -16,4 +16,4 @@ export type { TestControllerBridge, TestControllerBridgeContext, BridgeFromSessi
|
|
|
16
16
|
export { runAgainstLocalAgent } from './local-agent-runner';
|
|
17
17
|
export type { LocalAgentRunResult, PerStoryboardOverride, RunAgainstLocalAgentOptions } from './local-agent-runner';
|
|
18
18
|
export { registerExternalSchemaRoot, unregisterExternalSchemaRoot, withExternalSchemaRoot } from '../validation';
|
|
19
|
-
export { runStoryboard, runStoryboardStep, applyAdcpVersionRunOptions, applyStoryboardVersionOptions, getFirstStepPreview, parseStoryboard, loadStoryboardFile, normalizeValidationOnlyTasks, VALIDATION_ONLY_TASK, applyFixtureBindingsToRequest, buildFixtureResolutionSpecs, FixtureBindingRegistry, matchesFixtureRequirements, normalizeFixtureMatchExpression, validateFixtureResolutionDeclarations, getComplianceCacheDir, loadComplianceIndex, listBundles, loadBundleStoryboards, listAllComplianceStoryboards, getComplianceStoryboardById, findBundleById, resolveBundleOrStoryboard, resolveStoryboardsForCapabilities, isComplianceVersionSupported, CapabilityResolutionError, TASK_TO_METHOD, executeStoryboardTask, expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives, extractContext, injectContext, runValidations, resolvePath, RateLimitTripObserver, RATE_LIMIT_TRIP_CONTRACT, RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN, validateRateLimitTripSpec, getSandboxEntities, getSandboxBrands, getSandboxBrand, isSandboxDomain, clearSandboxCache, registerAssertion, getAssertion, listAssertions, listDefaultAssertions, clearAssertionRegistry, resolveAssertions, type AssertionSpec, type AssertionContext, type AssertionResult, type RegisterAssertionOptions, type Storyboard, type StoryboardFixtureResolution, type FixtureResolutionStrategy, type FixtureMatchOperator, type FixtureMatchClause, type FixtureResolutionDeclaration, type ProductFixtureResolutionDeclaration, type PricingOptionFixtureResolutionDeclaration, type FixtureResolutionStatus, type FixtureResolutionRecord, type FixtureResolutionAttempt, type FixtureResolutionEvidence, type FixtureResolutionCoverageGap, type StoryboardInvariants, type StoryboardInvariantsObject, type StepInvariantsObject, type StoryboardPhase, type StoryboardStep, type RateLimitTripSpec, type StoryboardValidation, type RateLimitTripClient, type RateLimitTripFailureCode, type RateLimitTripObservation, type RateLimitTripObserverOptions, type RateLimitTripResponseSnapshot, type RateLimitTripStructuredResult, type RateLimitTripTaskOptions, type StoryboardContext, type StoryboardRunOptions, type TrustedMatchContextProviderEndpoint, type TrustedMatchContextRegistrationContext, type TrustedMatchContextRouterRunnerOptions, type TrustedMatchPublisherAuthOperation, type TrustedMatchPublisherCredentialState, type TrustedMatchPublisherAuthTls, type TrustedMatchPublisherAuthProbeConfiguration, type TrustedMatchPublisherAuthRunner, type ValidationResult, type StoryboardStepPreview, type StoryboardStepResult, type StoryboardStepHint, type StoryboardStepHintBase, type ContextValueRejectedHint, type ShapeDriftHint, type MissingRequiredFieldHint, type FormatMismatchHint, type MonotonicViolationHint, type ContextProvenanceEntry, type StoryboardPhaseResult, type StoryboardResult, type RunnerNotice, type NoticeCode, type NoticeSeverity, type AgentCapabilities, type BundleKind, type BundleRef, type CapabilityResolutionCode, type ComplianceIndex, type ComplianceIndexProtocol, type ComplianceIndexSpecialism, type ResolveOptions, type ResolvedBundle, type ResolvedStoryboards, type SandboxBrand, type SandboxAgent, type SandboxEntities, type BrandJson, type AdagentsJson, gradeOAuthMetadataGraph, gradeOAuthMetadataGraphVector, loadOAuthMetadataGraphVectors, normalizeOAuthResourceForComparison, redactOAuthUrlForOutput, type GradeOAuthMetadataGraphOptions, type OAuthMetadataGraphErrorCode, type OAuthMetadataGraphFinding, type OAuthMetadataGraphGrade, type OAuthMetadataGraphObservation, type OAuthMetadataGraphVector, type OAuthMetadataGraphVectorCorpus, BrandJsonSchema, AdagentsJsonSchema, } from './storyboard';
|
|
19
|
+
export { runStoryboard, runStoryboardStep, applyAdcpVersionRunOptions, applyStoryboardVersionOptions, getFirstStepPreview, parseStoryboard, loadStoryboardFile, normalizeValidationOnlyTasks, VALIDATION_ONLY_TASK, applyFixtureBindingsToRequest, buildFixtureResolutionSpecs, FixtureBindingRegistry, matchesFixtureRequirements, normalizeFixtureMatchExpression, validateFixtureResolutionDeclarations, getComplianceCacheDir, loadComplianceIndex, listBundles, loadBundleStoryboards, listAllComplianceStoryboards, getComplianceStoryboardById, findBundleById, resolveBundleOrStoryboard, resolveStoryboardsForCapabilities, isComplianceVersionSupported, CapabilityResolutionError, TASK_TO_METHOD, executeStoryboardTask, expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives, extractContext, injectContext, runValidations, resolvePath, RateLimitTripObserver, RATE_LIMIT_TRIP_CONTRACT, RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX, RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN, validateRateLimitTripSpec, getSandboxEntities, getSandboxBrands, getSandboxBrand, isSandboxDomain, clearSandboxCache, registerAssertion, getAssertion, listAssertions, listDefaultAssertions, clearAssertionRegistry, resolveAssertions, type AssertionSpec, type AssertionContext, type AssertionResult, type RegisterAssertionOptions, type Storyboard, type StoryboardFixtureResolution, type FixtureResolutionStrategy, type FixtureMatchOperator, type FixtureMatchClause, type FixtureResolutionDeclaration, type ProductFixtureResolutionDeclaration, type PricingOptionFixtureResolutionDeclaration, type FixtureResolutionStatus, type FixtureResolutionRecord, type FixtureResolutionAttempt, type FixtureResolutionEvidence, type FixtureResolutionCoverageGap, type StoryboardInvariants, type StoryboardInvariantsObject, type StepInvariantsObject, type StoryboardPhase, type StoryboardStep, type RateLimitTripSpec, type StoryboardValidation, type RateLimitTripClient, type RateLimitTripFailureCode, type RateLimitTripObservation, type RateLimitTripObserverOptions, type RateLimitTripResponseSnapshot, type RateLimitTripStructuredResult, type RateLimitTripTaskOptions, type StoryboardContext, type StoryboardRunOptions, type TrustedMatchContextProviderEndpoint, type TrustedMatchContextRegistrationContext, type TrustedMatchContextRouterRunnerOptions, type TrustedMatchPublisherAuthOperation, type TrustedMatchPublisherCredentialState, type TrustedMatchPublisherAuthTls, type TrustedMatchPublisherAuthProbeConfiguration, type TrustedMatchPublisherAuthRunner, type ValidationResult, type StoryboardStepPreview, type StoryboardStepResult, type StoryboardStepHint, type StoryboardStepHintBase, type ContextValueRejectedHint, type ShapeDriftHint, type MissingRequiredFieldHint, type FormatMismatchHint, type MonotonicViolationHint, type ContextProvenanceEntry, type StoryboardPhaseResult, type StoryboardResult, type RunnerNotice, type NoticeCode, type NoticeSeverity, type AgentCapabilities, type BundleKind, type BundleRef, type CapabilityResolutionCode, type ComplianceIndex, type ComplianceIndexProtocol, type ComplianceIndexSpecialism, type ResolveOptions, type ResolvedBundle, type ResolvedStoryboards, type SandboxBrand, type SandboxAgent, type SandboxEntities, type BrandJson, type AdagentsJson, gradeOAuthMetadataGraph, gradeOAuthMetadataGraphVector, loadOAuthMetadataGraphVectors, normalizeOAuthResourceForComparison, redactOAuthUrlForOutput, type GradeOAuthMetadataGraphOptions, type OAuthMetadataGraphErrorCode, type OAuthMetadataGraphFinding, type OAuthMetadataGraphGrade, type OAuthMetadataGraphObservation, type OAuthMetadataGraphVector, type OAuthMetadataGraphVectorCorpus, BrandJsonSchema, AdagentsJsonSchema, MCP_SESSION_PROBE_TASK, } from './storyboard';
|