Skip to content

fix(compliance): skip observations when controlled forcing is unavailable - #8642

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

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

Conversation

@bokelley

@bokelley bokelley commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Unsupported optional controller forcing did not establish the state needed by later observations. Clarify that a stateful force_* call returning UNKNOWN_SCENARIO skips its dependent observations as unavailable coverage, including when forcing is the sole stateful step in its phase. Otherwise a conformant seller can be failed for returning an outcome it was never forced to change.

Register the existing force_scenario_unsupported detail and document its exception to the general sole-stateful-step rule. Preserve independent phases, any_of alternatives, ordinary account exemptions and genuine prerequisite failures. Skipped coverage earns no executed-step or validation credit.

Refs adcontextprotocol/adcp-client#3549. The implementation and regression coverage are in SDK #3561.

Validation

  • Protocol changeset scope and Changesets status passed.
  • SDK companion: 73 focused tests passed in Docker, including existing cascade coverage and new negative controls; real HTTP MCP force/observe controls passed.
  • Independent code/protocol and security reviews passed.
  • Normal Docker commit hooks passed: root unit tests, full server unit suite, import/identity guards and both type checks. One unchanged statistical-worker suite failed under parallel load and passed the hook’s automatic isolated retry (34/34).
  • CI and the actual triggered storyboard matrix remain merge gates.

Downstream detail: the SDK companion emits its existing capability_prerequisite_unavailable detailed reason, canonical not_applicable, and the originating force step in detail. A protocol-wide downstream token remains a separate dashboard follow-up.

@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 clarification to the compliance runner-output contract with a correct patch changeset.

What I checked:

  • The diff adds a force_scenario_unsupported not_applicable sub-reason and a forced_scenario_cascade rule carving an exception out of sole_stateful_step_exemption, so an unsupported stateful force_* call (UNKNOWN_SCENARIO) skips dependent observations as not_applicable coverage rather than failing a conformant seller.
  • Breaking-class hard gate: This is a coverage-gap-not-failure clarification that relaxes grading (a previously-failing conformant seller now grades not_applicable). It does not remove/rename fields, flip optional↔required, or impose a new MUST that a conformant 3.1.0 implementation would fail. It is Normative-non-breaking/clarifying, consistent with the directly-analogous rate-limit-exhaustion precedent (also a patch for a coverage-gap clarification). The breaking-class gate does not fire, so review_decision: REVIEW_REQUIRED does not force escalation here.
  • Changeset scope/type: A patch changeset is present and matches precedent; appropriate for a clarification to compliance assets.
  • Prose is internally consistent (preserves genuine failures, independent phases, any_of alternatives; dependent skips grade not_applicable, not prerequisite_failed); new detail matches step-disposition.ts/compliance-publication.test.ts; YAML indentation well-formed; dist artifacts untouched.
  • gated_paths: false; high_risk: false; no no-auto-approve team match; no Critical/High/Medium findings.

One non-blocking follow-up note: downstream dependent skips are told to "cite the unsupported force step" but no canonical detail token is registered for the downstream case, so detail-filtering dashboards may see free-form prose. Not blocking.

No blocking findings; rows 1–8 do not fire; falls through to row 9 → approve.

@bokelley
bokelley merged commit e1c0be5 into main Oct 31, 2026
56 checks passed
@bokelley
bokelley deleted the fix/compliance-force-cascade branch October 31, 2026 14:18
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