fix: preserve scoped storyboard routing - #2547
Conversation
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — tightly-scoped bug fix with no blocking or medium findings.
Threads request-scoped capabilities into version-adapter selection so scoped-fetch (multi-tenant) requests no longer strip fields against a stale cross-request capability cache, and stops forcing the legacy creative wire on get_products storyboard discovery. Both adaptRequest call sites updated with no missed sites; regression tests are genuine (confirms the 3.0 adapter strips filters.pricing_currencies). Changeset present and correctly typed as patch. Aligns with the witness-not-translator principle.
Decision path: no critical/high findings (row 1 n/a); gated_paths=false (row 2 n/a); high_risk=false (rows 3, 5 n/a); no medium findings (rows 4, 8 n/a); no prior decision (row 6 n/a); no no-auto-approve team match (row 7 n/a). Falls through to row 9 → approve.
There was a problem hiding this comment.
Ladon verdict: Approve
Approve.
Checked: the delta special-cases get_products to route through the raw-response projection (getProductsLegacy) during the migration window (agent version < 3.2), while preserving the requested canonical wire via withLegacyCreativeWireHint's short-circuit. This is consistent with witness-not-translator — it avoids the auto-augmentation getProducts applies so storyboards can grade dual legacy/canonical format declarations. Code comment, changeset text, and the updated test (storyboard-task-map-error.test.js:87-88) are in lockstep. Patch changeset is appropriate for a src/lib/testing storyboard-grading refinement (no removed/renamed export, no wire-shape change on the SDK's public output).
No critical/high/medium findings. Not high-risk, no gated paths, no author team gate. Prior decision was also approve with no findings; this run continues clean. Falls through to row 9.
There was a problem hiding this comment.
Ladon verdict: Approve
Approve.
Change replaces the intermediate get_products special-case with an explicit response_projection: 'raw' opt-in on storyboard steps. Net-vs-base is purely additive: forceRawProjection forces the legacy (raw) method while leaving callParams untouched, so dual-declaration storyboards grade the seller's default response without reshaping the request wire — consistent with the witness-not-translator rule (no fabrication/normalization at any seam). Additive optional field threaded through the runner, covered by both vitest and node tests. Changeset present and correctly scoped for the src/lib/** touch.
Checked against decision table:
- No critical/high findings (row 1 n/a).
- gated_paths: false (row 2 n/a).
- high_risk: false (rows 3, 5 n/a).
- No medium findings, none data-loss/schema/infra (rows 4, 8 n/a).
- Prior decision was
approve, so sticky escalation (row 6) does not apply. - No no-auto-approve team match (row 7 n/a).
Note: review_decision is REVIEW_REQUIRED, but that only forces escalation when gated_paths is true, which it is not here. Falls through to row 9 → approve.
Summary
get_productsstoryboard discovery on the raw projection without forcing a legacy creative wireValidation
npm run buildnode --test --test-timeout=60000 test/lib/storyboard-task-map-error.test.js test/lib/request-validation.test.jsnpm run lintnpm run typecheck