Repository navigation
fix(client): security hardening - #234
Conversation
🟢 Risk Classification: LOWApproval route: AI Auto-Approval Classification reasons
Operational gates
Files analysed: 9 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 |
There was a problem hiding this comment.
✅ Auto-approved — this PR meets all Low-risk criteria.
All checks passed, no unresolved comments, and the change classification is:
no_low_class_matchedprod_source_modified2.2.6_logical_extension:This refactors internal path-building helpers (splitting compound string constants, adding percent-encoding, and input validation) using only existing code paths and abstractions, with no new endpoints, external integrations, persisted data, auth changes, or background processes.
wall-e 2026.06.19-02 · policy 6b4ce2b3b45a…
🟡 Risk Classification: MINORApproval route: AI Review + Human Approval Classification reasons
Operational gates
Files analysed: 10 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: Looks good to meThis PR still needs a human approval — wall-e cannot auto-approve it. For what it's worth, I read the diff and found nothing I'd block on. This PR adds path-segment validation and percent-encoding to What I checked
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: MINORApproval route: AI Review + Human Approval Classification reasons
Operational gates
Files analysed: 12 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 |
🟡 Risk Classification: MINORApproval route: AI Review + Human Approval Classification reasons
Operational gates
Files analysed: 12 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 |
🟡 Risk Classification: MINORApproval route: AI Review + Human Approval Classification reasons
Operational gates
Files analysed: 12 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.