# StoreKit 2 + App Store Server Notifications V2: migration audit prompt
A read-only prompt for AI coding agents (Claude Code, Codex, Cursor). Open your agent at the root of your iOS app and backend repos, paste everything below the line, and it writes one report: what you have today, which known pitfalls you have, and a safe order to migrate.
It never changes code. Every check comes from a real production migration: an iOS app with auto-renewing subscriptions, a free trial, and a backend that moved to server-owned entitlement driven by V2 notifications. Each pitfall below either shipped as a bug or needed a follow-up fix.
---
You are auditing this codebase before a StoreKit 2 migration. Do not change any code. Read, then write a single report to `docs/storekit2-migration-audit.md`.
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
| <!DOCTYPE html><!-- ✨ Built with Framer • https://www.framer.com/ --><html><head> | |
| <meta charset="utf-8"> | |
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
| <script> | |
| $(document).ready(function (){ | |
| var ua = navigator.userAgent.toLowerCase(); | |
| if(ua && (ua.indexOf("iphone") > -1 || ua.indexOf("android") > -1)){ | |
| var href = 'https://weeeone.onelink.me/3WRB/qu9i8ui9'; | |
| try { | |
| var paramMatch = window.location.search.match(/(\?|&)utm_campaign\=([^&]*)/); | |
| if (paramMatch && paramMatch.length > 2) { | |
| var paramValue = decodeURIComponent(paramMatch[2]); | |
| if (paramValue && (paramValue.toLowerCase().indexOf('_brand') > -1)) { |
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
| /** | |
| * An extension over google's servingUrl "cdn" features: https://developers.google.com/appengine/docs/java/images/ | |
| * | |
| * It links to the Media datastore object and also provides rectangular cropping. | |
| * | |
| * Examples: | |
| * /c/i/69589306 | |
| * /c/i/69589306=s300 | |
| * /c/i/69589306=s300-c | |
| * /c/i/69589306=s300-c=h20 |
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
| ##---------------Begin: proguard configuration common for all Android apps ---------- | |
| -optimizationpasses 1 | |
| -dontusemixedcaseclassnames | |
| -dontskipnonpubliclibraryclasses | |
| -dontskipnonpubliclibraryclassmembers | |
| -dontpreverify | |
| -verbose | |
| #-dump class_files.txt | |
| #-printseeds seeds.txt | |
| #-printusage unused.txt |
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
| <plugin> | |
| <dependencies> | |
| <dependency> | |
| <groupId>net.sf.proguard</groupId> | |
| <artifactId>proguard-base</artifactId> | |
| <version>4.8</version> | |
| </dependency> | |
| </dependencies> | |
| <groupId>com.github.wvengen</groupId> | |
| <artifactId>proguard-maven-plugin</artifactId> |
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
| package com.yumyumlabs.web.filter; | |
| import com.google.appengine.api.labs.modules.ModulesService; | |
| import com.google.appengine.api.labs.modules.ModulesServiceFactory; | |
| import com.google.appengine.api.utils.SystemProperty; | |
| import javax.servlet.*; | |
| import javax.servlet.http.HttpServletRequest; | |
| import javax.servlet.http.HttpServletResponse; | |
| import java.io.ByteArrayOutputStream; |