Skip to content

test(storyboard-drift): drop stale idempotency.supported skip#633

Merged
bokelley merged 7 commits into
mainfrom
bokelley/fix-ispathreachable
Apr 20, 2026
Merged

test(storyboard-drift): drop stale idempotency.supported skip#633
bokelley merged 7 commits into
mainfrom
bokelley/fix-ispathreachable

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

  • isPathReachable already resolves adcp.idempotency.supported via the existing union branch — both IdempotencySupportedSchema and IdempotencyUnsupportedSchema are plain objects with a supported field, and union returns true when any option has the segment.
  • The VERIFIER_UNREACHABLE entry predicted a codegen shape that doesn't actually materialize here (no intersection, no wrapper), so the skip was stale.
  • Removing it turns the drift check back on; no change to isPathReachable itself.

Test plan

  • node --test test/lib/storyboard-drift.test.js — 368 pass, 4 skipped (remaining upstream-drift entries), 0 fail
  • The idempotency/get_capabilities: adcp.idempotency.supported exists in get_adcp_capabilities schema subtest now runs and passes

No library code touched → no changeset.

🤖 Generated with Claude Code

bokelley and others added 7 commits April 20, 2026 00:06
The `isPathReachable` `union` branch already returns true when any
union option has the segment, so `adcp.idempotency.supported` resolves
through `z.union([IdempotencySupported, IdempotencyUnsupported])`
without any extra unwrapping. Skip entry was stale; removing it turns
the check on.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…docs

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
, adcp#2468)

Unblocks the signed-requests synthesis cascade on main:

- Vector loader accepts jwks_override (inline malformed JWK) as an
  alternative to jwks_ref. Vector 025 ships such an override; without
  this, synthesis throws and every downstream signed_requests step
  reports `synthesis_error`.
- @target-uri canonicalization decodes percent-encoded unreserved bytes
  per RFC 3986 §6.2.2.2 (fixes vector 009 positive byte-identity).
- Step 1 now rejects duplicate Signature-Input dictionary keys (021),
  multi-valued Content-Type (022), multi-valued Content-Digest (023),
  and non-ASCII URL authority (026) — each is a parser-differential
  attack surface left open by silent last-value deduplication.
- Step 8 enforces JWK alg/kty/crv consistency (RFC 8037 / 7518) so an
  `alg=EdDSA` JWK with `kty=EC` is rejected with
  request_signature_key_purpose_invalid (025).
- Builder adds passthrough mutators for 021-026 (prebaked malformed
  requests — re-signing would repair the anomaly). Grader marks 025
  and 026 `transport_ungradable` because a live HTTP probe can't
  surface either edge (fetch punycodes U-labels; the reference agent
  exposes its own JWKS, not the vector's).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… library

Follow-up to expert review of bc7db86:

- validateJwkParameterConsistency now requires jwk.alg, binds it to
  sig-params alg (ed25519↔EdDSA, ecdsa-p256-sha256↔ES256), and runs the
  kty/crv check unconditionally. Prevents a JWKS entry with no alg from
  smuggling a sig-params alg-downgrade past step 8.
- canonicalAuthority rejects userinfo in the same way canonicalTargetUri
  does. Covers the case where a signer covers @authority but not
  @target-uri.
- rejectNonAsciiHost accepts scheme-relative URLs (//host/...) so a raw
  U-label can't enter through a non-absolute URL shape.
- Grader routes jwks_override vectors (currently only 025) through the
  library verifier directly with StaticJwksResolver(vector.jwks_override.keys).
  Black-box HTTP probing can't mutate a target agent's JWKS per-vector,
  so the only path that exercises what 025 tests is the in-process
  verifier. 026 remains transport_ungradable (fetch punycodes U-labels).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…achable

# Conflicts:
#	src/lib/signing/canonicalize.ts
#	src/lib/testing/storyboard/request-signing/builder.ts
#	src/lib/testing/storyboard/request-signing/types.ts
#	src/lib/testing/storyboard/request-signing/vector-loader.ts
#	src/lib/types/core.generated.ts
#	src/lib/types/schemas.generated.ts
#	test/request-signing-grader-e2e.test.js
#	test/request-signing-grader-mcp.test.js
#	test/request-signing-grader-vectors.test.js
#	test/request-signing-runner-integration.test.js
adcp#2468 is in the latest tarball — the webhook_emission storyboard now
asserts `field_present: supported_protocols`, so the allowlist entry for
`operations` never matches any collected validation. Remove the stale
entry.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley
bokelley merged commit e557245 into main Apr 20, 2026
14 checks passed
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