feat(compliance): add Storyboard.requires runtime requirement gate#4312
Merged
Conversation
Adds optional `requires` field to storyboard-schema.yaml with three recognized values (controller, seeded_state, real_wire), aligning the spec with the reference implementation already shipped in adcp-client@6.16.0 (adcp-client#1635). Adds `requirement_unmet` to runner-output-contract.yaml's skip_result.reasons to match the skip reason the SDK already emits. Key normative decisions: - Unknown requires values → requirement_unmet (not fail-load), consistent with forward-compat posture throughout the harness - requires: [] is a hard fail-load (schema constraint, not semantic gate) - controller is orthogonal to prerequisites.controller_seeding (load-phase gate vs. execution-phase instruction) - real_wire is a no-op placeholder; --mock-only semantics and default-when-absent behavior are explicitly deferred to the --mock-only PR https://claude.ai/code/session_013gwxgVXaYDz63X8RGmnEUU
Rephrase "Closed enum" to "Known values" to avoid false impression of schema-violation on unknown requires values (the spec's forward-compat rule routes them to requirement_unmet at runtime, not fail-load). https://claude.ai/code/session_013gwxgVXaYDz63X8RGmnEUU
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #4311
Summary
Adds the optional
requiresfield tostoryboard-schema.yaml, aligning the spec with the reference implementation already shipped in@adcp/sdk@^6.16.0(adcp-client#1635, merged). Third-party runners can now interoperate using the same storyboard-level requirement gate the SDK emits.Adds
requirement_unmettorunner-output-contract.yaml'sskip_result.reasonsenum — the SDK already emits this skip reason; the spec was missing it.Files changed:
static/compliance/source/universal/storyboard-schema.yaml— addsrequiresfield doc block with full normative semanticsstatic/compliance/source/universal/runner-output-contract.yaml— addsrequirement_unmettoskip_result.reasons.changeset/storyboard-requires-runtime-gate.md—minorbumpNon-breaking justification: adds an optional field with a well-defined default-when-absent behavior (
[real_wire]= run unchanged); existing storyboards with norequiresfield are unaffected.requirement_unmetis additive to the skip reason enum.Milestone: targets
3.1.0(minor — new optional schema field). Note:ghCLI unavailable in this environment; milestone was not set programmatically. Please set viagh pr edit <num> --milestone "3.1.0".Key normative decisions (from expert review)
requiresvalues →requirement_unmet(not fail-load): consistent with the forward-compat posture throughout the harness; unknown gates are not schema violationsrequires: []→ hard fail-load: schema constraint (empty array has no distinct semantic from omitting the field)controlleris orthogonal toprerequisites.controller_seeding: load-phase gate vs. execution-phase instruction; both may be declared; mid-run transient loss after gate passes routes tomissing_test_controllerat step scopereal_wiresemantics deferred: default-when-absent behavior under--mock-onlyand composition with other values are explicitly deferred to the--mock-onlyPRPre-PR review
Session: https://claude.ai/code/session_013gwxgVXaYDz63X8RGmnEUU
Generated by Claude Code