AGR-2026-022 — Challenge selection ignores the offered intent
Last observed by the head-to-head audit at 2026-08-08T19:52:20.848585Z.
Audited heads
| Target |
Repository |
Commit |
Conformance |
Semantic review |
typescript |
wevm/mppx |
b7ab48e38e3d |
Complete |
Reference |
python |
tempoxyz/pympp |
7f7164afa55c |
Complete |
Complete |
go |
tempoxyz/mpp-go |
9cad840de723 |
Complete |
Complete |
java |
stripe/mpp-java |
8e403af5291e |
Complete |
Complete |
ruby |
stripe/mpp-rb |
58a98bbf6820 |
Complete |
Complete |
rust |
tempoxyz/mpp-rs |
9808dede7ad8 |
Complete |
Complete |
Finding
- Fingerprint:
semantic:challenge-negotiation/select-supported-method-intent
- Source: semantic
- Affected SDKs:
python
- Clean SDKs:
go, java, ruby, rust
- Canonical reference:
draft-httpauth-payment-00 § Client Payment Preferences; § Multiple Payment Options
- Likely origin: likely SDK-local divergence
- Severity: medium
- Confidence: high
Evidence
| SDK |
Canonical evidence |
SDK evidence |
Suggested test |
python |
selectChallengeCandidates — Indexes configured capabilities by the canonical method/intent key and only produces candidates whose complete key matches the challenge. |
PaymentRuntime.match_challenge — Returns the first challenge whose method name exists in _methods; it never checks the challenge intent. |
Configure a charge-only Tempo client and return two Tempo challenges ordered as session then charge; assert the charge challenge is selected and paid. |
python: The canonical client matches challenges against both payment method and intent. The target indexes clients only by method name and selects the first challenge with that method, even if its intent is unsupported. An unsupported first offer can therefore raise during credential creation and prevent use of a later compatible challenge.
Available /ag commands
Post a command as a new comment. Only configured maintainers can run these commands.
Quick action
Use GitHub's copy button, then post this command as a comment:
| Command |
What it does |
/ag fix |
Opens or retries draft fixes for every affected PR-enabled SDK. |
/ag fix python |
Opens or retries the draft fix for python only. |
/ag fix "instruction" |
Applies the instruction to affected fixes; recorded PRs also incorporate unresolved review feedback and failed CI. |
/ag status |
Reports the current state of linked remediation pull requests. |
AGR-2026-022 — Challenge selection ignores the offered intent
Last observed by the head-to-head audit at
2026-08-08T19:52:20.848585Z.Audited heads
typescriptwevm/mppxb7ab48e38e3dpythontempoxyz/pympp7f7164afa55cgotempoxyz/mpp-go9cad840de723javastripe/mpp-java8e403af5291erubystripe/mpp-rb58a98bbf6820rusttempoxyz/mpp-rs9808dede7ad8Finding
semantic:challenge-negotiation/select-supported-method-intentpythongo,java,ruby,rustdraft-httpauth-payment-00 § Client Payment Preferences; § Multiple Payment OptionsEvidence
python_methods; it never checks the challenge intent.python: The canonical client matches challenges against both payment method and intent. The target indexes clients only by method name and selects the first challenge with that method, even if its intent is unsupported. An unsupported first offer can therefore raise during credential creation and prevent use of a later compatible challenge.
Available
/agcommandsPost a command as a new comment. Only configured maintainers can run these commands.
pythonQuick action
Use GitHub's copy button, then post this command as a comment:
/ag fix/ag fix pythonpythononly./ag fix "instruction"/ag status