Skip to content

Implement cascade_rules.sole_stateful_step_exemption from runner-output-contract 2.1.0 #672

Description

@bokelley

Context

adcontextprotocol/adcp#4058 adds a new normative cascade_rules section to runner-output-contract.yaml (bumping it 2.0.0 → 2.1.0). The TS SDK already conforms (adcp-client#1146, #1545). This Python SDK runner needs to catch up.

What changed in the contract

A new MUST: when a phase contains a sole stateful step that grades not_applicable, missing_tool, or missing_test_controller, and no same-phase peer declares provides_state_for, downstream phases MUST evaluate independently (i.e., the cascade is suppressed).

default_cascade enumerates the trigger set (passed:false, prerequisite_failed, unsatisfied_contract, peer_branch_taken) and the non-trigger set (peer_substituted, plus the new exemption).

Why it matters

Until this Python runner implements the exemption, the same storyboard graded against the same adopter via TS vs Python produces different cascade outcomes for sole-stateful-step skips. Vendors running comply through both runners will see grade divergence on this edge case.

Acceptance criteria

  • Cascade engine consumes cascade_rules from the contract YAML
  • Sole-stateful-step exemption suppresses cascade for the three skip reasons listed
  • Cascade still fires for passed:false, prerequisite_failed, unsatisfied_contract, peer_branch_taken (no regression)
  • peer_substituted continues to not cascade (no regression)
  • Test fixtures cover both branches: sole-stateful-step skip → downstream graded; same step but with provides_state_for peer → cascade still fires
  • Contract version: 2.1.0 accepted by parser

References

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions