Repository navigation
fix(compliance): preserve account ownership and task envelopes on 3.1 - #8731
Conversation
…cycle controls (#8730) The deterministic_testing storyboard's product and pricing-option fixtures belong to the Acme Outdoor / Pinnacle sandbox account, while its sync_accounts step legitimately provisions a separate test.example account for the account-state checks. The runner then rebinds context.account to that provisioned account, so later media-buy, creative, delivery and budget controller calls followed it and targeted the wrong sandbox account, and an unfiltered list_accounts could hand an unrelated visible account's ID to the account-state controls. - Declare the Acme / Pinnacle sandbox account as the fixture owner. - Scope the ten media-buy, creative, delivery and budget controller calls explicitly to that owner. - Filter list_accounts to the effective run account ($context.account): the provisioned Test account after sync, or the caller-selected account ID when buyer provisioning is not applicable. - Regression tests, with causal negatives, for resource ownership after provisioning, exact account listing, and the no-sync namespace path. Replaces the closed #8726 with this expanded repair. No schema, normative or new storyboard-DSL change. Maintenance adaptation: preserve the 3.1 legacy fixtures, all 817 existing fixture-test lines and the selected-schema test wrapper. After recorded aggregate cutoffs, align only local precommit unit/server budgets with main (180s to 300s; 240s to 1500s). Commands, per-test settings, dependencies, versions, workflow limits and both matrix gates remain unchanged. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit ded86cd)
Partially backport ce91b14 (#8522): retain its four status-free tools, thread the tool name through serialization, and default only absent successful task status to completed. Preserve the maintenance serializer's JSON text, errors, advisories, explicit statuses, replay behavior and payload ownership. Registered MCP regression cases cover filtered account listing and serialization behavior. Adopt the actually published @adcp/sdk@17.0.0-beta.17 only in the private fixture-test runner and root lockfile. Its account-subject identity repair and native controller schemas are bound to release merge 2d1ea7059f116a178841e43b95165735dc722c2e. Production @adcp/sdk stays 9.6.2. Keep the original deterministic lifecycle source repair unchanged. This is a deliberately partial backport and test-runtime adoption, not a schema or DSL change. It does not claim AdCP 3.1.32, stable SDK 16.7, or Activate qualification.
There was a problem hiding this comment.
Ladon verdict: Approve
Approve
No blocking or medium findings. Reviewer confirmed the production change in custom-tool-helper.ts (L60-89) correctly stamps envelope status:'completed' only on status-free-exempt success roots lacking an explicit status; the error branch returns early and explicit statuses are preserved, with both call sites (L98/L107) updated. The four status-free tools are not registered via customToolFor, so the unchanged replay stamp (L230) is inert. Compliance YAML scopes are coherent, test isolation/no-mutation invariants verified, and the @adcp/sdk 17.0.0-beta.17 bump is consistent across package.json/lockfile/sdk-runner with an appropriate patch changeset.
No author-team gate, no gated paths, high_risk false, no prior decision. Falls through to row 9.
The maintained deterministic storyboard keeps catalogue fixtures and resource controls on their consuming account, while account provisioning, filtered listing and account-state controls keep the account selected by the run. Successful custom-tool responses also receive the task envelope needed by the selected 3.1 schema.
The fixture owner is the Acme Outdoor / Pinnacle sandbox account. Sync may legitimately select the separate Test account; listing filters by that effective identity so another visible account cannot supply the state-transition ID. Explicit resource-control scopes continue to name the fixture owner. The same filter preserves a caller-selected account ID on sellers without provisioning.
The reference adapter defaults only absent successful task status to
completed, including matching and empty account lists. Explicit statuses, the four existing status-free tools, errors, advisory successes, response summaries, replay behavior and input ownership stay intact. This is a partial backport of ce91b14 (#8522), alongside the existing maintained adaptation of ded86cd (#8730).The private fixture-test runner now pins the actually published
@adcp/sdk@17.0.0-beta.17, whose preserved account-subject identity and packaged controller schemas resolve the runner-side failure. Its private manifest, root lockfile and physical scoped resolution agree on the official registry tarball and SRI. Production stays on@adcp/sdk@9.6.2. No wire field, schema, DSL, authorization rule, matrix floor, timeout or skip allowance changes in this final adapter/dependency batch; the existing main-equivalent precommit budgets in the prior source commit are preserved.Validation completed before the final normal hooks:
557befc1eeedee269ced5dc9c59d8ca50dd96097with no blockers.Final normal hooks passed on
a3daf34803e6f164c0025706151c7a802f153215(reviewed tree557befc1…): full server suite 288 files / 4,416 passed, with the same three existing baseline skips; unit suite 1,012 passed; discovery/auction suite 120 passed; lint checks 7 and 10 passed; typecheck passed. The sole normal-push current and frozen 3.0.28 pair passed every tenant floor and required-clean check, with all twelve raw logs preserved.Explicit current-sales target review:
deterministic_testingimproves from 25 passed / one failed / seven skipped to 26 passed / zero failed / seven skipped;product_filter_behaviorhas ten passed and zero failed;sales_non_guaranteedhas eleven passed and zero failed; all three provenance storyboards have zero failures and one skip each. The source provenance gate requires affirmativecreative.supports_provenance; these normal logs do not expose individual skip payloads. The seven deterministic skip causes are not established by the summary log and are not claimed as exercised controls. The separate controlled public-API preview above runs all eight authored buyer steps without skips.This is a comparison of the reported targets, not a blanket conformance claim: current sales retains 18 broader failures, including assertions for specialisms the reference seller does not advertise. Aggregate floors alone do not establish a target fix. The unchanged frozen wrapper archives actual 3.0.28 from
origin/3.0.xand applies its existing scratch compatibility transforms. The normal scripts restored generated production SDK JavaScript byte-for-byte; schema/cache overlays are not a claim of complete installed-cache restoration. Ready CI and exact-head Ladon review remain pending.The earlier maintained source commit carries main-equivalent aggregate precommit budgets (300 seconds for unit checks and 1,500 seconds for server units); no per-test or CI timeout was changed.
This is source-preview qualification. It does not claim published AdCP 3.1.32, packaged stable SDK 16.7, native CLI run-brand support, namespace qualification or Activate conformance. Publication and fresh installed-artifact qualification remain separate gates.
🤖 Generated with Codex.