fix(storyboard): deep-match capability gate values - #2545
Conversation
There was a problem hiding this comment.
Ladon verdict: Approve
Approve.
Replaces reference-equality Array.includes with a structural deep-equal (capabilityValuesEqual) for storyboard contains/not_contains capability gates, correctly fixing object-valued declarations that could never match under identity comparison. Deep-equal handling is sound (order-sensitive arrays, key-order-insensitive objects, array-vs-object mismatch guarded). Type widening to CapabilityPredicateValue is additive and non-breaking; the patch changeset matches the bugfix impact (no removed/renamed exports, no required-param flips, no wire-shape change). Tests cover the new branches.
No critical, high, or medium findings. No high-risk paths, no gated paths, no author-team gate. Falls through to row 9.
Summary
containsandnot_containscapability predicatesadcp.governance_enforcement.tasks[]signal-governance gate through the real storyboard runnerUnblocks adcontextprotocol/adcp#6590.
Validation
npm run buildnode --test-timeout=60000 --test-force-exit --test test/lib/storyboard-capability-gate.test.jsnpm run typechecknpm run lint(0 errors; existing warnings only)