Skip to content

fix(issuing): deserialize mid_limit card controls and complete control responses - #689

Merged
armando-rodriguez-cko merged 1 commit into
masterfrom
fix/INT-1704-issuing-control-limit-responses
Oct 13, 2026
Merged

armando-rodriguez-cko merged 1 commit into
masterfrom
fix/INT-1704-issuing-control-limit-responses

Conversation

@armando-rodriguez-cko

Copy link
Copy Markdown
Contributor

Summary
Fixes and completes the issuing card control responses against the API reference. A mid_limit control could not be deserialized into CardControlResponse, because only the velocity and mcc subtypes were registered. The response now also exposes is_editable and the velocity limit's amount_remaining.

Changes

  • GsonSerializer: registers MidCardControlResponse for mid_limit, next to the velocity and mcc subtypes
  • CardControlResponse: adds isEditable; Javadoc on every field
  • VelocityLimit: adds amountRemaining (Long), read-only and outside the builder, so it is filled from responses and never sent on requests
  • VelocityCardControlResponse, MccCardControlResponse, MidCardControlResponse, MccLimit, MidLimit, VelocityWindow: Javadoc completed
  • IssuingClient: Javadoc on the card control methods
  • CardControlResponseSerializationTest (new): each subtype from the API reference example through CardControlResponse, full roundtrip, mid_limit regression, list response with all three subtypes, amount_remaining absent on requests

API Reference

  • PUT /issuing/controls/{controlId} (update-control-response and its velocity, mcc and mid subtypes)
  • GET /issuing/controls/{controlId}, GET /issuing/controls, POST /issuing/controls (same response types)

Breaking changes
None.

README
No change needed.

@armando-rodriguez-cko
armando-rodriguez-cko requested a review from a team October 8, 2026 13:41
@agent-wall-e

agent-wall-e Bot commented Oct 8, 2026

Copy link
Copy Markdown

🟢 Risk Classification: LOW

Approval route: AI Auto-Approval
Rollback controls: Automated Instant Rollback + feature flags

Classification reasons

  • no_low_class_matched
  • prod_source_modified
  • 2.2.6_logical_extension:The PR only registers an already-existing class (MidCardControlResponse) in the existing Gson type adapter, adds read-only response fields (isEditable, amountRemaining) to existing response models, and adds Javadoc—no new endpoints, no new persisted data, no auth changes, and no new external integrations.

Operational gates

  • ✅ jira_ticket (INT-1704)
  • ✅ independent_review

Files analysed: 11


wall-e 2026.06.19-02 · policy 6b4ce2b3b45a…

@agent-wall-e

agent-wall-e Bot commented Oct 8, 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.
2.2.6_logical_extension — The PR only registers an already-existing class (MidCardControlResponse) in the existing Gson type adapter, adds read-only response fields (isEditable, amountRemaining) to existing response models, and adds Javadoc—no new endpoints, no new persisted data, no auth changes, and no new external integrations. classifying §2.2.6 Sonnet 4.6 evaluator promoted minor → low: the change reuses existing code paths and does not cross a trust boundary.

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 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:All changes are non-destructive additions (registering an already-existing MidCardControlResponse subtype, adding new response fields isEditable and amountRemaining as read-only, and adding Javadoc) that extend existing serialization/deserialization paths without introducing new endpoints, external integrations, persisted data, auth changes, or background processes.

wall-e 2026.06.19-02 · policy 6b4ce2b3b45a…

…it controls

Register the mid_limit subtype so CardControlResponse can deserialize mid
controls returned by create, get, list and update. Add is_editable to the
control response and the response-only amount_remaining to VelocityLimit,
which is never sent on requests. Document every field and the control
client methods, and add serialization tests for each subtype.
@armando-rodriguez-cko
armando-rodriguez-cko force-pushed the fix/INT-1704-issuing-control-limit-responses branch from d0aaa7b to 3976509 Compare October 13, 2026 07:43
@agent-wall-e

agent-wall-e Bot commented Oct 13, 2026

Copy link
Copy Markdown

🟢 Risk Classification: LOW

Approval route: AI Auto-Approval
Rollback controls: Automated Instant Rollback + feature flags

Classification reasons

  • no_low_class_matched
  • prod_source_modified
  • 2.2.6_logical_extension:The PR only registers an already-existing MidCardControlResponse subtype in the serializer, adds read-only/non-persisted fields (isEditable, amountRemaining) to existing response classes, and adds Javadoc—no new endpoints, external integrations, auth changes, persisted data, or background workers are introduced.

Operational gates

  • ✅ jira_ticket (INT-1704)
  • ✅ independent_review

Files analysed: 11


wall-e 2026.06.19-02 · policy 6b4ce2b3b45a…

@agent-wall-e

agent-wall-e Bot commented Oct 13, 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.
2.2.6_logical_extension — The PR only registers an already-existing MidCardControlResponse subtype in the serializer, adds read-only/non-persisted fields (isEditable, amountRemaining) to existing response classes, and adds Javadoc—no new endpoints, external integrations, auth changes, persisted data, or background workers are introduced. classifying §2.2.6 Sonnet 4.6 evaluator promoted minor → low: the change reuses existing code paths and does not cross a trust boundary.

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

@sonarqubecloud

Copy link
Copy Markdown

@armando-rodriguez-cko
armando-rodriguez-cko merged commit 6130125 into master Oct 13, 2026
6 checks passed
@armando-rodriguez-cko
armando-rodriguez-cko deleted the fix/INT-1704-issuing-control-limit-responses branch October 13, 2026 07:53
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