feat(gc): add subscription health fields to PayerAccountDetails - #889
Merged
Conversation
gsamuya
approved these changes
Sep 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Ripple currently learns that a Guaranteed Commitments payer account accepted a marketplace private offer, and then learns nothing further —
PayerAccountDetails.marketplacePrivateOfferStatusreports the offer's lifecycle (ACCEPTED,EXPIRED, etc.), which is a permanent fact and never changes once a customer accepts. It says nothing about whether the underlying AWS Marketplace agreement behind that offer is still live, has been cancelled, has expired at the end of its twelve-month term, or has been terminated.This is part of the
add-gc-subscription-healthchange (ouchan/archerad+bluedsides already implemented and merging separately).archeradandbluednow track agreement liveness internally; this PR is the API-contract half — exposing that signal on the existingPayerAccountDetailsmessage so Commitment Manager can distinguish a payer account that:as a value set that shares no values with the existing offer-status field, so an expired offer (nobody ever accepted it) and an expired subscription (customer subscribed and their term ran out) can't be confused by any consumer.
What changed
Two additive fields on
PayerAccountDetails(gc.proto), field numbers 9 and 10 — no existing fields renumbered or removed:marketplaceSubscriptionStatus(string, field 9) — the Guaranteed Commitments subscription state, distinct frommarketplacePrivateOfferStatus. Carries one ofSUBSCRIPTION_ACTIVE,SUBSCRIPTION_CANCELLED,SUBSCRIPTION_EXPIRED,SUBSCRIPTION_TERMINATED,SUBSCRIPTION_RESUBSCRIBING,NOT_SUBSCRIBED. Never empty, and neverRENEWED/REPLACED(those are internal continuations on the write side and never surfaced). Event-driven and eventually consistent — a briefly staleACTIVEvalue right after a change is expected, not a defect.marketplaceAgreementEndDate(string, field 10) — the contracted end date of the current marketplace agreement, as reported by AWS. Carried on the contract now because the message is already changing, but intentionally not displayed anywhere yet (the UI surface for it belongs with a future renewal/notification feature).Impact
ouchan'sarcheradwill populate these two fields in itsPayerAccountDetailsresponse builders, and Commitment Manager will consume them — both tracked as follow-up PRs once this merges and the SDK is bumped there.