Skip to content

fix(storyboard): skip observations after unsupported forcing - #3561

Merged
bokelley merged 1 commit into
mainfrom
fix/unsupported-force-cascade
Oct 31, 2026
Merged

bokelley merged 1 commit into
mainfrom
fix/unsupported-force-cascade

Conversation

@bokelley

@bokelley bokelley commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

A seller returning UNKNOWN_SCENARIO for optional controller forcing was skipped correctly, but dependent observations still ran without the forced state and falsely failed. Stateful unsupported forcing now skips those observations as unavailable coverage, including same-phase observations and explicit chains of dependent phases.

Independent phases, ordinary account-setup exemptions, peer substitutions and genuine failures retain their grading. Deferred missing-state failures take precedence over unavailable forcing. Skipped observations receive no executed-step or validation credit.

Refs #3549. The runner-contract clarification is adcp #8642.

Validation

  • Docker: 73 focused tests passed, including the existing cascade matrix and new same-phase, sole-step, chained, independence, success/failure and mixed-trigger controls.
  • The three new dependent-observation cases failed against the original build.
  • Real HTTP MCP reproduction using the authored get_products_rejected storyboard: unsupported forcing dispatches no get_products; successful forcing runs both steps and passes.
  • The minimal MCP fixture emits the same pre-existing capability-schema warning in both controls; its capability response is not claimed as schema-conformant.
  • Independent code and security reviews passed after resolving deferred-failure precedence.

CI interop receipts: current-checkout TypeScript (14 executed passes), strict 3.0 (2), and Python (56) pass. The advisory external TypeScript catalog-capture failure and Go version/capability failures have identical failing steps/checks to the pre-fix run 41173484692; these lanes are not claimed as fully conformant.

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown

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 diff, no blocking or medium findings.

Checked:

  • Storyboard runner now cascades a neutral coverage skip when a stateful force_scenario_unsupported controller step cannot establish forced state, bypassing the sole-stateful-step exemption and propagating across non-routed dependency hops. All four runner.ts changes (CascadeTrigger doc, inherited-capability propagation, immediate force cascade, missing_tool/not_applicable precedence) traced against cascadeForPhase and the real-failure path; precedence ordering (real failure > real missing-state > capability-only) preserved.
  • +165-line test file exercises every new branch (three layouts, independent phase, non-stateful force, success/wrong-outcome, real failure, both deferred-setup precedence cases).
  • Changeset present and correctly typed patch — no export or response-shape change, consistent with the diff.
  • Witness-not-translator: no fabrication, no re-shaping at a seam.

No no-auto-approve team match; gated_paths false; high_risk false. Although review_decision is REVIEW_REQUIRED, row 2 only applies when gated_paths is true (it is false here), so the PR falls through to row 9 — approve.

@bokelley
bokelley merged commit 00b957a into main Oct 31, 2026
47 checks passed
@bokelley
bokelley deleted the fix/unsupported-force-cascade branch October 31, 2026 13:58
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