Skip to content

docs(compliance): document branch-set any_of peer cascade exemption#5783

Open
fgranata wants to merge 1 commit into
adcontextprotocol:mainfrom
fgranata:docs/branch-set-cascade-exemption
Open

docs(compliance): document branch-set any_of peer cascade exemption#5783
fgranata wants to merge 1 commit into
adcontextprotocol:mainfrom
fgranata:docs/branch-set-cascade-exemption

Conversation

@fgranata

@fgranata fgranata commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

What

Adds a named branch_set_cascade_exemption to cascade_rules in static/compliance/source/universal/runner-output-contract.yaml, parallel to the existing sole_stateful_step_exemption:

When two or more phases share the same branch_set.id with any_of semantics, a stateful peer's genuine failure or peer_branch_taken skip MUST NOT cascade prerequisite_failed onto a sibling phase sharing that branch_set.id. Each peer is graded on its own merits, and the any_of gate credits whichever peer the agent satisfied.

Also:

  • default_cascade gains a one-sentence pointer to the new exemption (so it is not silently contradicted by the existing "peer_branch_taken MUST cascade" text).
  • storyboard-schema.yaml's depends_on section gains a cross-reference.
  • A patch changeset documenting the clarification.

Why

any_of branch-set peers are mutually-exclusive alternatives, not a dependency chain. A conformant agent satisfies exactly one peer, so the non-taken peer(s) fail by design. Under the literal default_cascade reading (which lists peer_branch_taken and genuine failures as cascade triggers), an earlier peer's by-design non-selection was cascading prerequisite_failed onto a later sibling the agent actually satisfied, returning an empty any_of gate for a conformant agent (surfaced on media_buy_seller/refine_finalize_exclusivity for a seller that correctly rejects atomic multi-finalize with MULTI_FINALIZE_UNSUPPORTED).

Scope / properties (all confirmed against the shipped runner)

  • any_of only — other (future) branch-set semantics where peers legitimately depend on each other keep cascading.
  • depends_on-agnostic — fires whenever two phases share an any_of branch_set.id, whether the dependency is the implicit default or an explicit depends_on. depends_on answers whether an edge exists; the cascade exemptions answer how a skip is classified — orthogonal, and neither existing exemption inspects depends_on.
  • N-ary-safe — one or more peer failures exempt every sibling in the set.
  • Cross-set and within-phase cascade unchanged.

Nature

Documents-only. This codifies runner behavior already shipped in adcontextprotocol/adcp-client#2306 (closing adcontextprotocol/adcp-client#2305), root-caused in #5337. No schema or wire change. The exemption text mirrors the structure and reference style of sole_stateful_step_exemption.

Root-cause investigation, the N-ary confirmation, and the depends_on-agnostic determination are in the #5337 thread.


🤖 Generated with Claude Code

Adds `branch_set_cascade_exemption` to `cascade_rules` in
runner-output-contract.yaml (parallel to `sole_stateful_step_exemption`):
a stateful peer's genuine failure or `peer_branch_taken` skip MUST NOT
cascade `prerequisite_failed` onto a sibling phase sharing the same
`branch_set.id` under `any_of` semantics. Branch-set peers are
mutually-exclusive alternatives, not a dependency chain. Scoped to
`any_of`, N-ary-safe, cross-set and within-phase cascade unchanged, and
explicitly `depends_on`-agnostic (fires whether the sibling's dependency
is the implicit default or an explicit depends_on naming the peer).

`default_cascade` gains a pointer to the new exemption; storyboard-
schema.yaml's `depends_on` section gains a cross-reference.

Documents-only: codifies the runner behavior shipped in adcp-client#2306
(closing adcp-client#2305), root-caused in adcontextprotocol#5337. No schema or wire change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@aao-release-bot aao-release-bot 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.

⚠️ Argus review could not complete

The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.

View workflow run

This is an automated message from the Argus AI review workflow.

@fgranata

fgranata commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

@bokelley gentle nudge on this one — it's the contract PR you green-lit in #5337 (comment) ("Go ahead with the contract PR"), scoped exactly to the implementation notes there: cascade_rules.branch_set_cascade_exemption in runner-output-contract.yaml with the depends_on-agnostic statement, the one-line cross-ref in storyboard-schema.yaml, and a patch changeset documenting the behavior that already shipped in the runner. All checks green. Once it lands, #5337 can close out fully.

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.

1 participant