From 24eb10a55d1b7724b0d5d7d65e4595dc9f38747b Mon Sep 17 00:00:00 2001 From: Michael Moffett Date: Mon, 5 Oct 2026 14:43:29 -0600 Subject: [PATCH 1/2] PayKit interface drifts Ruby `PayKit::Gate` gains `accepts?(protocol)`. `x402_accepted?` and `mpp_accepted?` stay for one release as deprecated aliases of it, and the Rack dispatcher calls `accepts?`. Issue (Ruby): "`Gate#accepts?(protocol)`; deprecate `x402_accepted?` / `mpp_accepted?`". The spec in `docs/paykit-interface.md:154-158,269-270` says adding a protocol must never grow the `Gate` API. --- ruby/lib/pay_kit/gate.rb | 10 ++++++-- ruby/lib/pay_kit/rack/payment_required.rb | 8 +++---- ruby/test/pay_kit/gate_test.rb | 28 +++++++++++++++++++++-- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/ruby/lib/pay_kit/gate.rb b/ruby/lib/pay_kit/gate.rb index 480f8847d..fb485718d 100644 --- a/ruby/lib/pay_kit/gate.rb +++ b/ruby/lib/pay_kit/gate.rb @@ -86,12 +86,18 @@ def fees? !fees.empty? end + def accepts?(protocol) + accept.include?(protocol.to_sym) + end + def x402_accepted? - accept.include?(:x402) + Kernel.warn("PayKit::Gate#x402_accepted? is deprecated; use accepts?(:x402)", uplevel: 1, category: :deprecated) + accepts?(:x402) end def mpp_accepted? - accept.include?(:mpp) + Kernel.warn("PayKit::Gate#mpp_accepted? is deprecated; use accepts?(:mpp)", uplevel: 1, category: :deprecated) + accepts?(:mpp) end # Format a BigDecimal as a fixed-point decimal string, trimming diff --git a/ruby/lib/pay_kit/rack/payment_required.rb b/ruby/lib/pay_kit/rack/payment_required.rb index d1fc4c1a3..4876ff36e 100644 --- a/ruby/lib/pay_kit/rack/payment_required.rb +++ b/ruby/lib/pay_kit/rack/payment_required.rb @@ -154,12 +154,12 @@ def challenge_for(gate, request) accepts = [] headers = {} - if gate.x402_accepted? + if gate.accepts?(:x402) accepts << x402_adapter.accepts_entry(gate, request) headers.merge!(x402_adapter.challenge_headers(gate, request)) end - if gate.mpp_accepted? + if gate.accepts?(:mpp) accepts << mpp_adapter.accepts_entry(gate, request) headers.merge!(mpp_adapter.challenge_headers(gate, request)) end @@ -172,11 +172,11 @@ def challenge_for(gate, request) # Returns nil when the request has no payment header at all # (caller should respond with a challenge). def verify(gate, request) - if gate.x402_accepted? && x402_adapter.detect?(request) + if gate.accepts?(:x402) && x402_adapter.detect?(request) return x402_adapter.verify_and_settle(gate, request) end - if gate.mpp_accepted? && mpp_adapter.detect?(request) + if gate.accepts?(:mpp) && mpp_adapter.detect?(request) return mpp_adapter.verify_and_settle(gate, request) end diff --git a/ruby/test/pay_kit/gate_test.rb b/ruby/test/pay_kit/gate_test.rb index 2ba34cb69..8820b629c 100644 --- a/ruby/test/pay_kit/gate_test.rb +++ b/ruby/test/pay_kit/gate_test.rb @@ -84,11 +84,35 @@ def test_x402_auto_disabled_when_fees_present pay_to: SELLER, fee_within: {PLATFORM => usd("1.00")}) - refute gate.x402_accepted? - assert gate.mpp_accepted? + refute gate.accepts?(:x402) + assert gate.accepts?(:mpp) end end + def test_accepts_answers_from_accept + PayKitTestHelpers.with_config(accept: %i[mpp]) do + gate = build(:report, amount: usd("0.10")) + + assert gate.accepts?(:mpp) + assert gate.accepts?("mpp") + refute gate.accepts?(:x402) + refute gate.accepts?(:stripe) + end + end + + def test_deprecated_predicates_delegate_and_warn + deprecated = Warning[:deprecated] + Warning[:deprecated] = true + PayKitTestHelpers.with_config(accept: %i[x402 mpp]) do + gate = build(:report, amount: usd("0.10")) + + assert_output(nil, /accepts\?/) { assert_equal gate.accepts?(:x402), gate.x402_accepted? } + assert_output(nil, /accepts\?/) { assert_equal gate.accepts?(:mpp), gate.mpp_accepted? } + end + ensure + Warning[:deprecated] = deprecated + end + def test_explicit_x402_with_fees_raises PayKitTestHelpers.with_config(accept: %i[x402 mpp]) do assert_raises(PayKit::ConfigurationError) do From 41994dd31d8478dc6a5a2fb83e812b6b2120c915 Mon Sep 17 00:00:00 2001 From: caliperforge Date: Mon, 5 Oct 2026 14:43:31 -0600 Subject: [PATCH 2/2] greptile.json: review on request only --- greptile.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 greptile.json diff --git a/greptile.json b/greptile.json new file mode 100644 index 000000000..3e653b565 --- /dev/null +++ b/greptile.json @@ -0,0 +1 @@ +{"autoReview": []}