Repository navigation
Release 2.8.2 - fix(client): security hardening - #235
Conversation
🟡 Risk Classification: MINORApproval route: AI Review + Human Approval Classification reasons
Operational gates
Files analysed: 1 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔵 Advisory review: Sound, but needs your judgementThis PR needs a human approval. The code itself reads as correct; whether it should land depends on context I don't have. The diff only shows the version bump and a CI permissions fix — the substantive security changes (encode_path_segment, build_path encoding, constant splits, new specs) are not visible in the diff provided. For you to decide
This is not an approval. wall-e cannot auto-approve this PR — it is an opinion to help whoever does. Advisory review · us.anthropic.claude-sonnet-4-6 · wall-e 2026.06.19-02 |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 2 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
|



Summary
Security hardening (reported internally): input validation for request paths. Identifiers passed to client methods are percent-encoded by the SDK, and invalid identifiers raise
CheckoutArgumentExceptionbefore any request is sent (see Breaking changes). Request paths for valid identifiers are unchanged.Changes
lib/checkout_sdk/checkout_utils.rb: newencode_path_segment, RFC 3986 path segment encoding (unreserved characters kept, everything else percent-encoded as UTF-8) with input validation.lib/checkout_sdk/client.rb:build_pathencodes every argument withencode_path_segment.lib/checkout_sdk/apm/bacs/bacs_client.rb: multi-segment private constant split into single segments; request path unchanged.lib/checkout_sdk/apm/previous/sepa/sepa_client.rb: same, for the four mandate operations.lib/checkout_sdk/instruments/instruments_client.rb: same, forget_bank_account_field_formatting.lib/checkout_sdk/payments/setups/payment_setups_client.rb: input validation.README.md: Exception handling, identifier encoding and whenCheckoutArgumentExceptionis raised.spec/checkout_sdk/client_spec.rb: new, path building, request paths through Faraday's test adapter, and the request paths of the split constants.spec/checkout_sdk/checkout_utils_spec.rb:encode_path_segment.spec/checkout_sdk/payments/setups/payment_setups_client_spec.rb: input validation.API Reference
None.
Breaking changes⚠️
CheckoutSdk::CheckoutArgumentExceptionfor invalid values before sending a request. The rules are in the README, Exception handling.SKU%201is sent asSKU%25201).CheckoutArgumentExceptionwhere identifiers come from user input.Tests
rubocop lib; integration tests run in CI against the sandbox)Related
None.