Skip to content

fix: send articles_of_association as an object, not a bare string - #650

Merged
armando-rodriguez-cko merged 1 commit into
masterfrom
fix/INT-1691-articles-of-association-object
Aug 18, 2026
Merged

fix: send articles_of_association as an object, not a bare string#650
armando-rodriguez-cko merged 1 commit into
masterfrom
fix/INT-1691-articles-of-association-object

Conversation

@armando-rodriguez-cko

Copy link
Copy Markdown
Contributor

What

articles_of_association was being serialized as a bare string instead of an object, so the API rejected it. That document is required on the company full onboarding variants, which means it could not be sent from Java at all.

The bug

OnboardSubEntityDocuments.articlesOfAssociation was typed as the enum ArticlesOfAssociationType, and no ArticlesOfAssociation class existed. The result:

{"articles_of_association": "articles_of_association"}

The spec requires an object:

{"articles_of_association": {"type": "articles_of_association", "front": "file_..."}}

Its siblings BankVerification and ShareholderStructure were modelled correctly as objects all along. Only this one was wrong.

Found while verifying an internal report about the bank_verification document type, which Java already models correctly.

Breaking, and why it is still a minor

The field type changes, so this is source-breaking for anyone assigning the enum directly to it. Nobody could have been sending a valid request that way, since the API rejected the old shape, so nothing that worked stops working.

Breaking because the API demands it, not by our choice, so a minor per the release rules. Worth calling out in the release notes.

Tests

Four tests, including one that asserts the old string shape is gone, not merely that the new one is present.

Suite: 2014 tests, 1 failure unrelated to this change — RefundPaymentsTestIT.shouldRefundTokenPaymentSync fails with no_capture_balance_available_to_refund, a sandbox balance condition in payments.

Refs INT-1691.

…string

OnboardSubEntityDocuments.articlesOfAssociation was typed as the enum
ArticlesOfAssociationType, and no ArticlesOfAssociation class existed. The API
requires an object with type and front, so the SDK serialized
"articles_of_association": "articles_of_association" and the request was rejected.
That document is required on the company full onboarding variants, so it could not
be sent from Java at all.

Found while verifying a report about the bank_verification document type, which
Java already models correctly. Its siblings BankVerification and
ShareholderStructure were objects all along; only this one was wrong.

The field type changes, so this is source-breaking for anyone assigning the enum
directly. They could not have been sending a valid request, since the old shape was
rejected by the API, so nothing that worked stops working. Breaking because the API
demands it, not by our choice: a minor, per the release rules, and called out in the
release notes.

One test asserts the old string shape is gone, not just that the new one is present.

2014 tests, 1 failure unrelated to this change: RefundPaymentsTestIT
shouldRefundTokenPaymentSync fails with no_capture_balance_available_to_refund, a
sandbox balance condition in payments.

Refs INT-1691.
@agent-wall-e

agent-wall-e Bot commented Aug 18, 2026

Copy link
Copy Markdown

🟡 Risk Classification: MINOR

Approval route: AI Review + Human Approval
Rollback controls: Staged rollout + rollback

Classification reasons

  • no_low_class_matched
  • prod_source_modified

Operational gates

  • ✅ jira_ticket (INT-1691)
  • ✅ independent_review

Files analysed: 3


wall-e 2026.06.19-02 · policy 376219bc71e6…

@agent-wall-e

agent-wall-e Bot commented Aug 18, 2026

Copy link
Copy Markdown
🔬 Debug — why this classification?

Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.

Reason code Kind Clause Meaning
no_low_class_matched informational §2.2 (fall-through) None of the deterministic Low classes (§2.2.3, §2.2.4, §2.2.7, docs-only) applied; classifier fell through to LLM evaluation.
prod_source_modified informational §2.1 M7 (informational) At least one file is non-doc, non-test, non-IaC — i.e. application source code was modified.

Kinds:

  • classifying — this rule contributed to the chosen tier.
  • informational — context only; did not by itself decide the tier.

See issue #3 for the proposal to formalise this map as Appendix A of the standards doc.

wall-e 2026.06.19-02 · debug

@agent-wall-e

agent-wall-e Bot commented Aug 18, 2026

Copy link
Copy Markdown

🟢 Advisory review: Looks good to me

This PR still needs a human approval — wall-e cannot auto-approve it. For what it's worth, I read the diff and found nothing I'd block on.

Fixes articlesOfAssociation being serialized as a bare enum string by introducing a proper ArticlesOfAssociation wrapper class, matching the API's expected object shape. The change is minimal, correct, and well-tested.

What I checked

  • New ArticlesOfAssociation class mirrors the structure of the already-correct BankVerification and ShareholderStructure siblings (type enum + front string), which is consistent with the API contract described.
  • The single-line change in OnboardSubEntityDocuments swaps ArticlesOfAssociationType for ArticlesOfAssociation, directly fixing the serialization bug.
  • Tests cover serialization to object shape, the negative assertion that the old bare-string form is absent, the alternative enum value (MEMORANDUM_OF_ASSOCIATION), sibling document consistency, and round-trip deserialization — this is thorough coverage for the scope of change.
  • No existing tests appear to be removed or weakened; the new test class is purely additive.

This is not an approval. wall-e cannot auto-approve this PR — it is an opinion to help whoever does. Advisory review · us.anthropic.claude-sonnet-4-6 · wall-e 2026.06.19-02

@sonarqubecloud

Copy link
Copy Markdown

@agent-wall-e agent-wall-e Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Auto-approved — this PR meets all Low-risk criteria.

All checks passed, no unresolved comments, and the change classification is:

  • no_low_class_matched
  • prod_source_modified
  • 2.2.6_logical_extension:This fix corrects a field type in an existing model class from a bare enum to a proper object, reusing existing abstractions (ArticlesOfAssociationType, OnboardSubEntityDocuments) without adding new endpoints, persisted data, auth changes, or external integrations.

wall-e 2026.06.19-02 · policy 376219bc71e6…

@armando-rodriguez-cko
armando-rodriguez-cko requested a review from a team August 18, 2026 14:50
@armando-rodriguez-cko
armando-rodriguez-cko merged commit 9b58f2b into master Aug 18, 2026
6 checks passed
@armando-rodriguez-cko
armando-rodriguez-cko deleted the fix/INT-1691-articles-of-association-object branch August 18, 2026 15:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants