docs(compliance): document branch-set any_of peer cascade exemption#5783
docs(compliance): document branch-set any_of peer cascade exemption#5783fgranata wants to merge 1 commit into
Conversation
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>
There was a problem hiding this comment.
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.
This is an automated message from the Argus AI review workflow.
|
@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: |
What
Adds a named
branch_set_cascade_exemptiontocascade_rulesinstatic/compliance/source/universal/runner-output-contract.yaml, parallel to the existingsole_stateful_step_exemption:Also:
default_cascadegains a one-sentence pointer to the new exemption (so it is not silently contradicted by the existing "peer_branch_takenMUST cascade" text).storyboard-schema.yaml'sdepends_onsection gains a cross-reference.patchchangeset documenting the clarification.Why
any_ofbranch-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 literaldefault_cascadereading (which listspeer_branch_takenand genuine failures as cascade triggers), an earlier peer's by-design non-selection was cascadingprerequisite_failedonto a later sibling the agent actually satisfied, returning an emptyany_ofgate for a conformant agent (surfaced onmedia_buy_seller/refine_finalize_exclusivityfor a seller that correctly rejects atomic multi-finalize withMULTI_FINALIZE_UNSUPPORTED).Scope / properties (all confirmed against the shipped runner)
any_ofonly — other (future) branch-set semantics where peers legitimately depend on each other keep cascading.depends_on-agnostic — fires whenever two phases share anany_ofbranch_set.id, whether the dependency is the implicit default or an explicitdepends_on.depends_onanswers whether an edge exists; the cascade exemptions answer how a skip is classified — orthogonal, and neither existing exemption inspectsdepends_on.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