Skip to content

fix(compliance): backport required_tools OR-gate fixes to 3.1.x (#6774 subset + canonical_format_validate_input) - #7406

Merged
bokelley merged 3 commits into
adcontextprotocol:3.1.xfrom
EvgenyAndroid:backport/3.1.x-required-tools-gate-fixes
Sep 14, 2026
Merged

bokelley merged 3 commits into
adcontextprotocol:3.1.xfrom
EvgenyAndroid:backport/3.1.x-required-tools-gate-fixes

Conversation

@EvgenyAndroid

@EvgenyAndroid EvgenyAndroid commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Deliberate exclusions

Provenance

Cherry-picked with -x from main a1e72ec (#6774), with the 13 absent files dropped from the pick, then the companion fix commit. Net diff: five one-line required_tools removals and two changesets.

Validation

  • node --test tests/lint-compliance-source-authority.test.cjs on this branch — 6/6.
  • tests/lint-compliance-packaged-refs.test.cjs needs the installed toolchain; relying on CI for it.

Refs #7404 (bug 1 and the billing_gate_dispatch note), #6773, #6774.

…s 17 storyboards (OR-gate bug) (adcontextprotocol#6774)

* fix(compliance): drop get_adcp_capabilities from required_tools in billing_gate_dispatch and agent_notification_configs

required_tools uses OR semantics in the adcp-client SDK. Listing
get_adcp_capabilities alongside a capability-specific tool made the
storyboard-level gate trivially satisfied for every conformant agent,
causing billing_gate_dispatch and agent_notification_configs to run
against agents that lack sync_accounts / sync_agent_notification_configs
and fail at the first assertion instead of receiving a clean
coverage-gap skip.

Closes adcontextprotocol#6773

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M3evZsz4Y3971B5RZVxhKh

* fix(compliance): sweep remaining 15 storyboards for get_adcp_capabilities OR-gate bug

Same pattern as billing_gate_dispatch (issue adcontextprotocol#6773): required_tools uses
OR semantics, so listing get_adcp_capabilities alongside a capability-
specific tool made the gate trivially satisfied for every conformant agent.

Affected: billing_out_of_band, canonical_supported_formats, evaluator_auth,
native_localization (creative); account_timezone_{seller_fixed,buyer_selected,
seller_assigned}, budget_cap_timezone_{account,fixed,override_rejected},
geo_{region_all_values_support,region_targeting,region_exclusion_support,
place_targeting}, portfolio_routing_scope (media-buy).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M3evZsz4Y3971B5RZVxhKh

---------

Co-authored-by: Claude <noreply@anthropic.com>
(cherry picked from commit a1e72ec)
"adcontextprotocol": patch
---

Fix 17 compliance storyboards that incorrectly included `get_adcp_capabilities` in `required_tools` alongside capability-specific tools. Because `required_tools` uses OR semantics, listing a universal tool made the storyboard-level gate trivially satisfied for every conformant agent — agents lacking the actual capability tool (e.g. `sync_accounts`, `build_creative`, `get_products`) would enter the storyboard and fail at the first capability-specific step instead of receiving a clean coverage-gap skip.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(non-blocking) This changeset text is carried verbatim from #6774 on main and overstates this backport. This PR fixes 4 storyboards, not 17: billing_gate_dispatch, billing_out_of_band, canonical_supported_formats, evaluator_auth. Line 7 then names agent_notification_configs — which the PR body explicitly lists under Deliberate exclusions as not existing on 3.1.x — and "15 scenarios across the media-buy and creative protocol families," but zero media-buy scenarios are touched here. The 3.1.x changelog will claim fixes it did not ship. Reword to the four files actually changed on this line.

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve — clean backport with no blocking or medium findings.

This is a complete backport of the required_tools OR-gate fixes to 3.1.x: five one-line removals across four storyboards plus canonical_format_validate_input, matching precedent #6774. The reviewer verified scope completeness (signed-requests.yaml correctly retains get_adcp_capabilities as its sole gate), OR-gate semantics against the SDK runner tests, and confirmed no wire/schema surface is touched.

The single non-blocking observation is that the fix-storyboard-required-tools-or-gate.md changeset was copied verbatim from main and overstates the backport (references 17 storyboards, agent_notification_configs, and media-buy scenarios not on this line). This is a Low-severity changeset-wording issue where the underlying change is sound, and does not block.

No findings of medium-or-higher severity. high_risk is false, gated_paths is false, no author team gate, no prior decision. Rows 1–8 do not fire → row 9 approve.

@EvgenyAndroid

Copy link
Copy Markdown
Contributor Author

@bokelley ready to merge when you have a minute — MERGEABLE, CLEAN, checks green, no source edits beyond five one-line required_tools removals and two changesets.

Why it is worth landing ahead of the main side: 3.1.20 is the line both of my registry cards are graded on today, and these five gates account for 35 of their failing steps — canonical_format_validate_input 17 on each card, billing_gate_dispatch 1 on the signals one. None of them are reachable by anything I can change in either agent.

One thing to confirm rather than assume: this touches static/compliance/source/** only, so the hosted grader picks it up at the next 3.1.x patch cut, not on merge. If there is no cut planned soon, say so and I will stop watching the cards for it.

#7405 (the main half) is sitting on REVIEW_REQUIRED — the Ladon approval does not satisfy it, so it needs a human pass whenever you are in there. Its CI is green now; the first run tripped the /governance and /brand passing-step ratchet, which was the guard working correctly: with the controller off the gate, neither tenant selects that storyboard any more and each loses the one step it contributed. Both floors are down by one in all three places they are pinned, with the reasoning in the PR body.

@EvgenyAndroid

Copy link
Copy Markdown
Contributor Author

@bokelley following up on the cut question, now that there is a concrete one to aim at.

#7426 is open and will publish adcontextprotocol@3.1.22, regenerating dist/compliance/3.1.22/** — which is the artifact the hosted grader actually reads. It currently carries a single changeset, 5739f1b (legacy format asset variants), and 3.1.x is one commit ahead of v3.1.21.

Three backports are sitting CLEAN and unmerged against 3.1.x right now:

PR opened author
#7406 (this one) 2026-09-10 me
#7424 — single-user context privacy 2026-09-11 you
#7425 — request-aware context caching 2026-09-11 you

If #7426 merges first, all three wait for 3.1.23. Merging them ahead of it puts the whole set in one cut, and for this PR specifically that is the difference between the gate fix existing and the gate fix reaching the line both my cards are graded on — 17 spurious failures per card, on 3.1.20 today.

No urgency beyond the ordering. If 3.1.22 is not the intended target for these, say so and I will stop watching the release PR for it.

Also still open above: this branch has no standing review. Ladon approved the first push and that approval was dismissed by the two follow-up commits, so #7405 (the main half) needs a human pass whenever you are in there. Its CI is green.

evgen and others added 2 commits September 13, 2026 12:45
…lidate_input required_tools (OR-gate)

The per-storyboard gate (runner.js) admits a storyboard when any listed tool
is present, while the suite selector (comply.js) requires all of them. With
comply_test_controller in the list, every agent exposing the universal test
controller was selected for this storyboard and then failed all 17 steps on
the missing validate_input — on the hosted grader, 17 spurious failures on
each of two registered agents (adcontextprotocol#7404). Same shape as adcontextprotocol#6774.

Refs adcontextprotocol#7404 (bug 1 only).

(cherry picked from commit 40c59b1)
Name only the four adcontextprotocol#6774 storyboards present on 3.1.x and keep the remaining hosted service work open.

Refs adcontextprotocol#7404 (bug 1 only).
@bokelley
bokelley force-pushed the backport/3.1.x-required-tools-gate-fixes branch from 25c9824 to 36d33b2 Compare September 13, 2026 12:45

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve — clean pass, no blocking findings.

No critical/high/medium findings. gated_paths is false and review_decision is APPROVED; no no-auto-approve team match; high_risk is false. Delta since the prior approve is three files: a one-line removal of comply_test_controller from canonical-format-validate-input.yaml required_tools (controller dependency preserved independently via requires: - controller and controller_seeding: true, matching the #6774 OR-gate pattern) plus two accurate patch changesets, one rewritten to correctly scope the backport to the four storyboards present on 3.1.x.

Rows 1–8 do not fire; falls through to row 9 → approve.

bokelley commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Release coordination hold — please do not merge the current head 36d33b2e.

Current 3.1.x is 8a933dff1078224fc35a444c67267461da9072a1, ahead of the PR's recorded base. An isolated local refresh has been prepared at f625e6cb633fbaebe87cb6ca69162eeaf970992a:

  • all three commits and the complete 7-file delta are patch-identical to the reviewed series;
  • all five intended required_tools removals are present, including canonical_format_validate_input;
  • no release/version/migration/generated-3.1.23 drift;
  • 793 tests, typecheck/build, all six maintenance-line tenant floors, and required-storyboard checks passed;
  • independent review found no candidate blocker; five runtime failure cases reproduce identically on unchanged 3.1.x.

That candidate is deliberately unpublished. This PR's head branch belongs to EvgenyAndroid/adcp, so any update must target that fork with an explicit lease on 36d33b2e (or be coordinated with the branch owner); pushing an adcp-org branch would not update this PR.

Required order remains:

  1. fix(compliance): drop comply_test_controller from canonical_format_validate_input required_tools (OR-gate) #7405 receives genuine human/CODEOWNERS approval and lands on main.
  2. Refresh this PR onto then-current 3.1.x, run exact CI, and obtain fresh human approval.
  3. Merge fix(compliance): backport required_tools OR-gate fixes to 3.1.x (#6774 subset + canonical_format_validate_input) #7406.
  4. Regenerate Version Packages #7486/3.1.23 from that exact tree, sign the new artifact, run exact CI, and obtain human approval.

The current bot approval is not a substitute for human review. No merge, push, or PR-state change is authorized by this note.

@bokelley
bokelley merged commit 0bcfe47 into adcontextprotocol:3.1.x Sep 14, 2026
10 checks passed
bokelley added a commit that referenced this pull request Sep 16, 2026
* fix(protocol): scope idempotency replay to mutations (#7383) (#7384)

* fix(protocol): scope idempotency replay to mutations

* fix(protocol): preserve legacy get_products key optionality

(cherry picked from commit 245108f)

* Version Packages (#7385)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(schema): backport legacy format asset variants (#7423)

* fix(tmp): backport single-user context privacy to 3.1 (#7424)

* fix(tmp): backport single-user context privacy

* fix(tmp): close expert-reviewed context privacy gaps

* fix(tmp): backport request-aware context caching to 3.1 (#7425)

* fix(tmp): backport request-aware context caching

* fix(tmp): keep context hashes out of observability

* Version Packages (#7426)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* docs(release): correct v3.1.22 Context Match record (#7451)

* fix(compliance): backport required_tools OR-gate fixes to 3.1.x (#6774 subset + canonical_format_validate_input) (#7406)

* fix(compliance): drop get_adcp_capabilities from required_tools across 17 storyboards (OR-gate bug) (#6774)

* fix(compliance): drop get_adcp_capabilities from required_tools in billing_gate_dispatch and agent_notification_configs

required_tools uses OR semantics in the adcp-client SDK. Listing
get_adcp_capabilities alongside a capability-specific tool made the
storyboard-level gate trivially satisfied for every conformant agent,
causing billing_gate_dispatch and agent_notification_configs to run
against agents that lack sync_accounts / sync_agent_notification_configs
and fail at the first assertion instead of receiving a clean
coverage-gap skip.

Closes #6773

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M3evZsz4Y3971B5RZVxhKh

* fix(compliance): sweep remaining 15 storyboards for get_adcp_capabilities OR-gate bug

Same pattern as billing_gate_dispatch (issue #6773): required_tools uses
OR semantics, so listing get_adcp_capabilities alongside a capability-
specific tool made the gate trivially satisfied for every conformant agent.

Affected: billing_out_of_band, canonical_supported_formats, evaluator_auth,
native_localization (creative); account_timezone_{seller_fixed,buyer_selected,
seller_assigned}, budget_cap_timezone_{account,fixed,override_rejected},
geo_{region_all_values_support,region_targeting,region_exclusion_support,
place_targeting}, portfolio_routing_scope (media-buy).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M3evZsz4Y3971B5RZVxhKh

---------

Co-authored-by: Claude <noreply@anthropic.com>
(cherry picked from commit a1e72ec)

* fix(compliance): drop comply_test_controller from canonical_format_validate_input required_tools (OR-gate)

The per-storyboard gate (runner.js) admits a storyboard when any listed tool
is present, while the suite selector (comply.js) requires all of them. With
comply_test_controller in the list, every agent exposing the universal test
controller was selected for this storyboard and then failed all 17 steps on
the missing validate_input — on the hosted grader, 17 spurious failures on
each of two registered agents (#7404). Same shape as #6774.

Refs #7404 (bug 1 only).

(cherry picked from commit 40c59b1)

* fix(compliance): correct 3.1 backport changeset scope

Name only the four #6774 storyboards present on 3.1.x and keep the remaining hosted service work open.

Refs #7404 (bug 1 only).

---------

Co-authored-by: Brian O'Kelley <bokelley@scope3.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: evgen <evgen@SCIS-TE-IPSUM>

* Version Packages (#7486)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(compliance): backport creative format-kind assertions to 3.1.x (#7554)

* fix(compliance): backport governance storyboard routing to 3.1.x (#7555)

* fix(jobs): backport heartbeat timeout to 3.1.x (#7557)

* fix(release): preserve main schema discovery index

* fix(release): preserve main changelog history

* test(release): register forward-merged regressions

---------

Co-authored-by: aao-release-bot[bot] <280565558+aao-release-bot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ev <evgeny@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: evgen <evgen@SCIS-TE-IPSUM>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants