feat: add Rev 6 status and account_data to Product | MC-16319 - #398
Merged
Merged
Conversation
MDX Product Rev 6 (2026.05.14) adds `status` and `account_data`, and deprecates `is_selected` and `activate_challenges`. The model was still Rev 5 -- Product.java had only two commits ever and neither touched these fields. Additive only, so no versioned package. The three existing versioned packages in this repo each exist because something broke: id/v20240213 changed the type of `challenges`, id/v20260428 removed `challenge` from ResetPassword, and payment/v20260427 flipped the 202 condition. Rev 6 for products changes no type, removes no field, and moves no status code. Backward compatibility rests on Gson omitting nulls -- MdxSerializerFactoryBean builds without serializeNulls(), so a null `status` produces no key at all and moneymobilex's responses stay byte-identical. `ProductTest` asserts exactly that, alongside a Rev 5 body with `is_selected` still deserializing. `status` is a String rather than an enum, matching `type`, which is likewise a spec-defined enumeration modelled as a String. An unrecognised value from a later revision then cannot break deserialization. AccountData carries only `accountType`: the spec defines no field table for it, and all four JSON examples have that one field. The deprecated pair is kept, not removed -- moneymobilex still sends `is_selected` in production. Removing it would be the id/v20260428 case and would need a versioned package. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
SandhyaBhatia
requested review from
gerfboy,
mattnichols,
meotch,
stevecl5 and
tessstoddard
as code owners
October 1, 2026 02:22
meotch
approved these changes
Oct 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.
Summary of Changes
MDX Product Rev 6 (2026.05.14) adds
statusandaccount_data, and deprecatesis_selectedandactivate_challenges. The model was still Rev 5 -- Product.java had only two commits ever and neither touched these fields.Additive only, so no versioned package. The three existing versioned packages in this repo each exist because something broke: id/v20240213 changed the type of
challenges, id/v20260428 removedchallengefrom ResetPassword, and payment/v20260427 flipped the 202 condition. Rev 6 for products changes no type, removes no field, and moves no status code.Backward compatibility rests on Gson omitting nulls -- MdxSerializerFactoryBean builds without serializeNulls(), so a null
statusproduces no key at all and moneymobilex's responses stay byte-identical.ProductTestasserts exactly that, alongside a Rev 5 body withis_selectedstill deserializing.statusis a String rather than an enum, matchingtype, which is likewise a spec-defined enumeration modelled as a String. An unrecognised value from a later revision then cannot break deserialization.AccountData carries only
accountType: the spec defines no field table for it, and all four JSON examples have that one field.The deprecated pair is kept, not removed -- moneymobilex still sends
is_selectedin production. Removing it would be the id/v20260428 case and would need a versioned package.Fixes # (issue)
https://mxcom.atlassian.net/browse/MC-16319
Public API Additions/Changes
Please include a description of any new or modified publicly available classes and/or methods (if applicable).
Please include a description of any new or modified publicly available classes and/or methods (if applicable).
from a future revision can't break deserialization.
would be a breaking/versioned-package change (like id/v20260428), which this is not.
broader field table for AccountData, and all four spec JSON examples contain only that one field.
Downstream Consumer Impact
Please include a description of how downstream consumers will be affected (breaking changes, bug fixes, internal behavior modification, etc.). If
this PR introduces breaking changes please list out each of the breaking changes, as well as steps for migrating incompatible code.
they're omitted from the JSON entirely — Rev 5 consumers like moneymobilex continue to see byte-identical responses.
deprecated in favor of status/account_data.
How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details
for your test configuration
Added ProductTest.groovy, built against a Gson instance that mirrors MdxSerializerFactoryBean's configuration (no serializeNulls,
LOWER_CASE_WITH_UNDERSCORES naming) to validate real wire behavior.
byte-identical to pre-Rev 6 output
Checklist: