Skip to content

fix(subscriptions): fix retention next_url pagination, offer price projection, and Plane 2 CJK validation - #38

Merged
zelentsov-dev merged 1 commit into
developfrom
bugs/retention-pagination-prices-cjk
Nov 7, 2026
Merged

zelentsov-dev merged 1 commit into
developfrom
bugs/retention-pagination-prices-cjk

Conversation

@zelentsov-dev

Copy link
Copy Markdown
Owner

Summary

  • Route next_url pagination across all 6 retention list handlers (subscriptions_list_retention_messages, subscriptions_list_retention_message_versions, subscriptions_list_retention_message_localizations, subscriptions_list_retention_message_subscriptions, subscriptions_list_retention_offers, subscriptions_list_retention_offer_prices) through httpClient.getPage(nextURL, scope: pagination.scope, as: ...) so both absolute configured-origin URLs and root-relative URLs succeed while enforcing exact path, cursor, limit, and territory filter scope.
  • Request include=territory,subscriptionPricePoint and related field sets in subscriptions_list_retention_offer_prices and project currency, customerPrice/customer_price, proceeds, proceedsYear2/proceeds_year2, territoryId/territory_id, and subscriptionPricePointId/subscription_price_point_id/price_point_id.
  • Delegate validateNoEmoji in retention handlers to ASCMetadataValidator.containsEmoji so Plane 2 CJK Unified Ideographs Extension B+ characters (such as U+20BB7 and U+20B9F) are accepted while actual emojis remain rejected before network I/O.
  • Route the 4 #if DEBUG print statements in JWTService.swift to &standardError to preserve JSON-RPC stdio hygiene in debug builds.
  • Add regression tests in RetentionMessagingContractTests covering all 14 pagination combinations, negative scope rejections, price amount/currency projection, and Plane 2 CJK vs emoji validation.

Verification

  • swift test (1991 tests in 153 suites passed)
  • swift build -c release
  • .build/release/asc-mcp openapi-contract-check --spec Tests/ASCMCPTests/Fixtures/OpenAPI/app-store-connect-4.6.oas.json --strict (0 structural errors, 0 implementation drift)
  • python3 -B .github/workflows/scripts/assets_mcp_smoke.py --binary .build/release/asc-mcp and --binary .build/debug/asc-mcp (both passed)

…er price amounts, and allow Plane 2 CJK copy
@zelentsov-dev

Copy link
Copy Markdown
Owner Author
Protocol: DX-REVIEW/1
Message: REVIEW_RESULT
Round: 1
Repository: zelentsov-dev/asc-mcp
PR: 38
Base-SHA: d4227e6189bd8e810cfa6afff3cf527769693c91
Head-SHA: f836426503ab087764c7a34ceca3d2f59c06bf67
Previous-Reviewed-Head: N/A
Delta: d4227e6189bd8e810cfa6afff3cf527769693c91...f836426503ab087764c7a34ceca3d2f59c06bf67
Change-Class: bugfix
Deployment-Authority: no-deploy

## Findings
P0-P3: none

## Verdict
- Patch: APPROVE
- Merge: READY
- Merge-Actor: TEAMLEAD
- Release-Deploy: NOT_ASSESSED
- Production-Authority: OWNER_ONLY
- Approved-Head: f836426503ab087764c7a34ceca3d2f59c06bf67
- CI: green (Promotion Lineage, Tests, Latest Apple Contract Drift, Release & Apple Contract)
- Remaining-Not-Checked: Live App Store Connect API calls for retention offer prices pagination

@zelentsov-dev
zelentsov-dev merged commit 2850dee into develop Nov 7, 2026
5 checks passed
@zelentsov-dev
zelentsov-dev deleted the bugs/retention-pagination-prices-cjk branch November 7, 2026 13:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant