Skip to content

feat: align plugin with SDK v6 GA (iOS 6.0.0, Android 6.0.1, Flutter 6.0.0) - #25

Merged
kherembourg merged 8 commits into
mainfrom
feat/v6-ga-alignment
Jul 23, 2026
Merged

feat: align plugin with SDK v6 GA (iOS 6.0.0, Android 6.0.1, Flutter 6.0.0)#25
kherembourg merged 8 commits into
mainfrom
feat/v6-ga-alignment

Conversation

@kherembourg

Copy link
Copy Markdown
Contributor

Summary

Audit source: Purchasely repos iOS (develop), Android (main), Flutter (main), Documentation (v6.0 branch), plus published npm/pub.dev/CocoaPods/Maven metadata.

Version pins → GA

  • Native iOS: 6.0.0 (stable GA) — SPM primary (from: "6.0.0"), CocoaPods ~> 6.0.
  • Native Android: 6.0.1 (stable GA) — chronology rc.1 → rc.2 → rc.3 → 6.0.1, no 6.0.0 tag was ever cut.
  • Flutter: 6.0.0 (stable on pub.dev) — embeds native iOS 6.0.0 + Android core 6.0.1.
  • React Native: 6.0.0-rc.3 (npm latest).
  • Cordova: 6.0.0-rc.3 (npm dist-tag next; latest is still 5.7.3).

Factual fixes

  • synchronize() is never called from inside the purchase/restore interceptor — returning SUCCESS already auto-synchronizes in Observer mode; manual calls are reserved for purchases handled outside the interceptor (BYOS, custom sell screens).
  • React Native allowDeeplink defaults to true on every v6 platform — removed the last remaining "RN defaults to false" exceptions (purchasely-review SKILL.md and campaigns.md anti-patterns still had them).
  • Removed-API attribution corrected: iOS never had presentSubscriptions() (v5 entry point was showController / PLYUIControllerType); Android's real removal is subscriptionsFragment(); displaySubscriptionCancellationInstruction() is removed, not a no-op.
  • Android setDefaultPresentationDismissHandler never had a ResultHandler variant (Android always used that name; only iOS renamed to it in v6).
  • Kotlin toolchain bumped to 2.3.21; themeMode() documented as available on both the Android DSL and Builder since 6.0.1.
  • iOS 13.4+ deployment target reframed as inherited from the 5.x SDK, not a v6 change.

New references

  • references/concepts/rendering-engine.md — iOS UIKit component tree + tolerant Safe<T> decoding, Android Views/fat-AAR, image cache, Lottie bridge, known rendering bugs.
  • references/concepts/12-month-commitment.md — Apple "Monthly with 12-Month Commitment", Google native installments, {{MONTHLY_AMOUNT}} pricing tags, INSTALLMENT_* webhooks.
  • references/concepts/web-checkout.md — Stripe Payment Links via the webCheckout action, audience targeting, WEB_CHECKOUT_* events.

New debug/review material

  • New known-issues in purchasely-debug / support-known-issues.md: Lottie silent failure, stuck purchase spinner, Flutter display() hang, Indonesian locale pre-6.0.1, PRESENTATION_VIEWED eviction pre-rc.3, iPad campaign-close freeze, iOS 18.4/18.5 DEBUG image-cache bypass, video autoplay bug.
  • New review checks: stale rc-era interceptAction import, Android close()-closes-all semantics, oneSignalPlayerId removal, allowCampaigns default flip.

Repo hygiene

  • gemini-extension.json version aligned with every other manifest (was stuck at 1.1.0).
  • purchasely-migrate coverage corrected to all 5 platforms in README.md, AGENTS.md, GEMINI.md, and hooks/intro.md (previously listed only 3).
  • New "Release process" section in CLAUDE.md (direct-to-main releases, exhaustive manifest-bump checklist, bare-SemVer tags).
  • npx --yes skills add . --list confirmed: Found 5 skills.

Test plan

  • rg-equivalent sweep for stale 6.0.0-rc.1/6.0.0-rc.2 active pins — none remain outside legitimate chronology/historical mentions and CHANGELOG.
  • No remaining React Native allowDeeplink false-by-default exceptions.
  • presentSubscriptions() mentions all correctly scoped to Flutter/RN/Cordova (or explicit "iOS never had this").
  • Sampled synchronize() call sites — none inside an interceptor without a "do not call here" caveat.
  • Legacy API mentions (setDefaultPresentationResultHandler, readyToOpenDeeplink, setPaywallActionsInterceptor, io.purchasely.ext.interceptAction) all properly labeled as v5/legacy/detection patterns.
  • sdk-versions.md / 5 SKILL.md files / root README.md cross-checked for consistent pins.
  • New concept files exist, are indexed in concepts/README.md, and contain no wrapper-required language.
  • npx --yes skills add . --listFound 5 skills.
  • CHANGELOG.md [Unreleased] reconciled against the actual diff.

🤖 Generated with Claude Code

@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown

Greptile Summary

This PR updates the plugin for the Purchasely v6 GA SDK line. The main changes are:

  • Updates native and cross-platform SDK version guidance.
  • Corrects migration, interceptor, campaign, and removed-API documentation.
  • Adds rendering-engine, commitment-plan, and web-checkout references.
  • Expands troubleshooting, review checks, and migration coverage.
  • Documents the repository release process.

Confidence Score: 4/5

The migration command and release checklist inconsistencies need fixes before merging.

  • The migration hint excludes three supported platforms and applies Android's target version generically.
  • Two release checklists prescribe different manifest sets.
  • The new Android theme example cannot be copied into compiling code.

purchasely/commands/migrate.md, CLAUDE.md, and purchasely/references/android/api-reference.md

Important Files Changed

Filename Overview
purchasely/commands/migrate.md Updates the target version but leaves the command hint inconsistent with its five-platform scope.
CLAUDE.md Adds an exhaustive release process while leaving an older, conflicting manifest checklist in place.
purchasely/references/android/api-reference.md Adds Android 6.0.1 APIs and behavior, including an incomplete theme initialization example.
purchasely/references/android/migration-v6.md Updates Android dependency, toolchain, interceptor, synchronization, and removed-API guidance.
purchasely/references/sdk-versions.md Centralizes the distinct GA and release-candidate versions for all supported platforms.
purchasely/references/concepts/12-month-commitment.md Adds guidance for Apple commitment plans, Google installments, pricing tags, and webhook events.
purchasely/references/concepts/web-checkout.md Adds Stripe Payment Link action, targeting, interception, and event guidance.
purchasely/references/concepts/rendering-engine.md Documents native rendering, decoding, image caching, Lottie integration, and known limitations.

Fix All in Claude Code Fix All in Cursor Fix All in Codex

Prompt To Fix All With AI
Fix the following 3 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 3
purchasely/commands/migrate.md:3
**Migration Hint Excludes Supported Targets**

The command now supports five platforms, but this hint still accepts only Android and iOS and uses Android's `6.0.1` as the shared target. Flutter, React Native, and Cordova users are excluded, while non-Android users are directed to a version that does not match the platform-specific pins documented by this PR.

```suggestion
argument-hint: "[platform: android|ios|flutter|react-native|cordova] [from:5.x] [to:6.x]"
```

### Issue 2 of 3
CLAUDE.md:20-21
**Release Checklists Still Conflict**

This section declares the nine-manifest list exhaustive, but the earlier release rule at line 11 still instructs maintainers to bump only `.claude-plugin/plugin.json` and `package.json`. Following that first checklist can still publish mismatched Cursor, marketplace, nested plugin, and Gemini versions.

### Issue 3 of 3
purchasely/references/android/api-reference.md:40
**Theme Example Is Not Runnable**

The newly documented `themeMode` call uses `...` instead of the Android parameter type or a valid enum value. A developer copying this initialization example gets a compile error and the surrounding text does not provide enough information to construct the required argument.

Reviews (1): Last reviewed commit: "docs(changelog): record v6 GA alignment ..." | Re-trigger Greptile

Comment thread purchasely/commands/migrate.md Outdated
Comment thread CLAUDE.md
Comment thread purchasely/references/android/api-reference.md Outdated
kherembourg and others added 7 commits July 23, 2026 11:13
…ance

Bump all five skills to the real v6 GA pins (iOS 6.0.0, Android 6.0.1,
Flutter 6.0.0, React Native/Cordova 6.0.0-rc.3), correct the
React Native allowDeeplink default (true everywhere, no RN exception),
clarify that returning SUCCESS from the purchase/restore interceptor
already auto-synchronizes (no manual synchronize() call needed inside
it), and update removed-API attributions (iOS showController /
displaySubscriptionCancellationInstruction, Android
subscriptionsFragment, stale rc-era interceptAction import). Also
updates the /purchasely:migrate command's argument-hint example to a
real GA version.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Update the per-platform references (android, ios, flutter, cordova,
react-native, sdk-versions.md) to the real v6 GA pins: native iOS
6.0.0 (SPM primary, CocoaPods ~> 6.0), native Android 6.0.1 (rc.1 ->
rc.2 -> rc.3 -> 6.0.1, never a 6.0.0 tag), Flutter 6.0.0 stable on
pub.dev (embeds iOS 6.0.0 / Android core 6.0.1), React Native and
Cordova 6.0.0-rc.3. Also corrects factual issues found during the
bump: Kotlin 2.3.21 toolchain, themeMode() available on the Android
DSL/Builder since 6.0.1, iOS 13.4+ framed as inherited from 5.x (not
a v6 change), removed-API attribution (iOS never had
presentSubscriptions(), Android's setDefaultPresentationDismissHandler
never had a ResultHandler variant), and PLY-prefixed Flutter Dart
types in code samples.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e guidance

Update the shared concept and troubleshooting references for v6 GA:
make clear that synchronize() inside the purchase/restore interceptor
is redundant (SUCCESS already auto-synchronizes) and reserve manual
calls for out-of-interceptor purchases (BYOS, custom sell screens);
remove the React Native allowDeeplink false-by-default exception
(defaults to true on every v6 platform); fix a dead anchor in
debug-mode.md; switch Flutter code samples to PLY-prefixed Dart
types; and add new known-issues/troubleshooting entries surfaced
during the v6 GA audit (Lottie silent failure, stuck purchase
spinner, Flutter display() hang, Indonesian locale pre-6.0.1,
PRESENTATION_VIEWED eviction pre-rc.3, iPad campaign-close freeze,
iOS 18.4/18.5 DEBUG image-cache bypass, video autoplay bug).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Three new reference pages, indexed in concepts/README.md:

- rendering-engine.md: how a Screen actually renders (iOS UIKit
  component tree + tolerant Safe<T> decoding, Android Views/fat-AAR,
  image cache, Lottie bridge) and known rendering bugs.
- 12-month-commitment.md: Apple "Monthly with 12-Month Commitment",
  Google native installment subscriptions, {{MONTHLY_AMOUNT}} pricing
  tags, INSTALLMENT_* webhooks.
- web-checkout.md: Stripe Payment Links via the webCheckout action,
  audience targeting, WEB_CHECKOUT_* events.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… files

- CLAUDE.md: add a "Release process" section (release directly on
  main, no PR; exhaustive manifest-bump list including the previously
  missed gemini-extension.json; bare-SemVer tags; default to
  minor/patch bumps).
- README.md, AGENTS.md, GEMINI.md, purchasely/hooks/intro.md: list all
  five platforms (native iOS, native Android, Flutter, React Native,
  Cordova) as in scope for purchasely-migrate instead of just three.
- README.md: bump the Supported Platforms table to the v6 GA pins and
  document the full manifest-bump list in the release checklist.
- gemini-extension.json: bump version to 2.0.0-rc.6 to match every
  other manifest (was stale at 1.1.0).
- CONTRIBUTING.md: swap a doc-example API call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PR #24 (merged to main) and PR #25 each added a concept doc for the same
subject: monthly-commitment.md (Apple advance commitment, iOS-only) and
12-month-commitment.md (cross-platform Apple + Google installments).

Merge everything from 12-month-commitment.md into monthly-commitment.md —
Google Play native installment subscriptions, cross-platform scope
(SDK 6.0+ on iOS/Flutter/RN/Cordova) for the Apple commitment fields,
Screen Composer pricing tags, interceptor fields (params.billingPlanType /
plan.commitmentInfo), INSTALLMENT_PAID/INSTALLMENT_REFUNDED webhooks, and
commitment_* attributes. Corrects the now-false "iOS only" applies-to line
(the Apple advance-commitment purchase mechanism stays iOS-only; the concept
itself covers both stores) and delete the duplicate file.

Updates every remaining reference: concepts/README.md (resolved during the
rebase), CHANGELOG.md, ios/api-reference.md, concepts/web-checkout.md, and
purchasely-sdk-expert/SKILL.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kherembourg
kherembourg force-pushed the feat/v6-ga-alignment branch from 2542b8a to 67930e7 Compare July 23, 2026 09:20
- migrate.md: argument-hint now lists all 5 supported platforms
  (android|ios|flutter|react-native|cordova) with a neutral `to:6.x`
  instead of Android's `6.0.1`, which incorrectly implied a single
  shared target version across platforms.
- CLAUDE.md: CHANGELOG-section release rule no longer duplicates a
  stale 2-manifest list; it now points to the Release process
  section's exhaustive 9-manifest checklist as the single source of
  truth.
- android/api-reference.md: themeMode() examples use a real
  PLYThemeMode.SYSTEM value (plus its import) instead of `...`,
  and the method table documents the enum values/default.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kherembourg
kherembourg merged commit 6c43cba into main Jul 23, 2026
2 checks passed
@kherembourg
kherembourg deleted the feat/v6-ga-alignment branch July 23, 2026 09:30
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.

2 participants