Add missing OutgoingTransactionFailureReason enum values#629
Conversation
Add EXECUTION_FAILED_POST_DEBIT, SETTLEMENT_FAILED, TIMEOUT, and MANUAL_REFUND to the OutgoingTransactionFailureReason enum so the public Grid API can represent the full set of failure reasons the backend emits. Without them, sparkcore's mapping from the internal UmaaasSendOperationFailureReason to this public enum (by name) throws a KeyError and reports an empty failure reason for settlement/timeout/manual-refund/post-debit failures.
✱ Stainless preview builds for gridThis PR will update the cli csharp go kotlin openapi php python ruby typescript Edit this comment to update them. They will appear in their respective SDK's changelogs. ✅ grid-go studio · code · diff
✅ grid-typescript studio · code · diff
✅ grid-openapi studio · code · diff
✅ grid-ruby studio · code · diff
✅ grid-kotlin studio · code · diff
✅ grid-csharp studio · code · diff
✅ grid-php studio · code · diff
✅ grid-cli studio · code · diff
✅ grid-python studio · code · diff
This comment is auto-generated by GitHub Actions and is automatically kept up to date as you push. |
Greptile SummaryAdds four missing
Confidence Score: 5/5Safe to merge — a minimal, additive enum extension with no breaking changes and both bundled outputs correctly regenerated. The change is purely additive (new enum values only), the source file is the only hand-edited file, both bundles were regenerated via No files require special attention.
|
| Filename | Overview |
|---|---|
| openapi/components/schemas/transactions/OutgoingTransactionFailureReason.yaml | Source enum extended with four new values; this is the only hand-edited file in the PR and the change is correct |
| openapi.yaml | Regenerated bundle (via make build); diff is exactly the four added enum lines, consistent with the source change |
| mintlify/openapi.yaml | Second regenerated bundle for Mintlify docs; identical diff to openapi.yaml, as expected |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[sparkcore internal\nUmaaasSendOperationFailureReason] -->|name-based mapping| B{Key in public\nGridOutgoingTransactionFailureReason?}
B -->|Before this PR\nEXECUTION_FAILED_POST_DEBIT\nSETTLEMENT_FAILED\nTIMEOUT\nMANUAL_REFUND| C[KeyError → None\nblank failure reason]
B -->|After this PR\nall four values added| D[Correct enum value\nreturned to API consumer]
B -->|LSP_OPERATIONAL_FAILURE\nintentionally omitted| E[Maps to\nQUOTE_EXECUTION_FAILED]
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[sparkcore internal\nUmaaasSendOperationFailureReason] -->|name-based mapping| B{Key in public\nGridOutgoingTransactionFailureReason?}
B -->|Before this PR\nEXECUTION_FAILED_POST_DEBIT\nSETTLEMENT_FAILED\nTIMEOUT\nMANUAL_REFUND| C[KeyError → None\nblank failure reason]
B -->|After this PR\nall four values added| D[Correct enum value\nreturned to API consumer]
B -->|LSP_OPERATIONAL_FAILURE\nintentionally omitted| E[Maps to\nQUOTE_EXECUTION_FAILED]
Reviews (1): Last reviewed commit: "Add missing OutgoingTransactionFailureRe..." | Re-trigger Greptile

Summary
Adds four missing values to the public
OutgoingTransactionFailureReasonenum so the Grid API can represent the full set of failure reasons the backend actually emits:EXECUTION_FAILED_POST_DEBITSETTLEMENT_FAILEDTIMEOUTMANUAL_REFUNDWhy
sparkcore maps its internal
UmaaasSendOperationFailureReasononto this public enum by name (sparkcore/grid/objects/transaction.py::_get_outgoing_transaction_failure_reason). The internal enum has these four members but the public enum didn't, so the mapping threw a (caught)KeyError, logged"Key does not exist in GridOutgoingTransactionFailureReason", and returnedNone— meaning the API reported an empty failure reason for settlement / timeout / manual-refund / post-debit failures, plus noisy ERROR logs on every render of such a transaction.Surfaced while debugging the embedded-USDB onramp failures (those failed send-operations carry
SETTLEMENT_FAILED).What changed
openapi/components/schemas/transactions/OutgoingTransactionFailureReason.yaml— source enum (the only hand edit)openapi.yaml+mintlify/openapi.yaml— regenerated viamake build(redocly bundle)Notes / decisions
LSP_OPERATIONAL_FAILUREintentionally NOT added — sparkcore deliberately maps it toQUOTE_EXECUTION_FAILED(internal-only distinction for LSP-liquidity alerting), so it should never reach the public enum.EXECUTION_FAILED_POST_DEBIT: it's documented internally as an internal-only distinction (lets the compensation scanner safely credit). I chose to expose it for completeness so the mapping needs no special-case, but it could instead be mapped toQUOTE_EXECUTION_FAILEDin sparkcore likeLSP_OPERATIONAL_FAILURE. Easy to flip — happy to if you'd prefer to keep it internal.Follow-up (separate PR, needed for the runtime fix)
This is the canonical spec change. webdev's vendored generated
grid-apipython package (webdev/grid-api, consumed by sparkcore as a path dep) must be regenerated from this spec viagrid-api/update_schema.sh+ apackageVersionbump +sparkcore/uv.lockupdate for sparkcore to actually pick up the new members. That regen needs the Java/Maven/openapi-generator toolchain and is a separate webdev PR — until it lands, sparkcore stillKeyErrors.Test plan
make lint-openapi(redocly + spectral,--fail-severity=error) passes — no new findings🤖 cryptic-tempest(#1) | Feedback
Original PR: #628