| name | iapkit-e2e-petgu |
| description | Use for IAPKit product sync E2E testing in packages/kit with the Petgu React Native app, localhost dashboard, App Store Connect, and Google Play Console. Triggers when verifying kit product/entitlement create, update, delete, pull, push, or store sync behavior with Petgu. |
IAPKit Petgu E2E
Use this skill when the user asks to E2E test IAPKit product sync, especially
create/update/delete behavior between packages/kit, App Store Connect, and
Google Play Console.
Default Targets
- OpenIAP repo:
$OPENIAP_REPO (current checkout; this repo)
- Kit package:
$OPENIAP_REPO/packages/kit
- Petgu app:
$PETGU_REPO
- Local dashboard:
$IAPKIT_LOCAL_URL, default
http://127.0.0.1:5174/hyo-dev/project/petgu/products
- IAPKit project: organization
hyo-dev, project petgu
- iOS app: App Store Connect app
6755113628
- Android app: Play Console app
4975127121389308944, package
dev.hyo.petgu.app
- Google service account:
iap2-22@martie-c0b27.iam.gserviceaccount.com
Safety Rules
- Do not delete real Petgu store product IDs after a sync test unless the user
explicitly confirms they accept permanent loss of those IDs.
- Apple product IDs cannot be reused in the same app after an IAP is created,
even if the IAP is deleted. Treat deletion of real iOS products as
irreversible.
- For cleanup, create temporary SKUs and delete only those temporary SKUs after
verification. Prefer IDs under
dev.hyo.petgu.codex.*.
- Keep the final store catalog clean: no temporary SKUs should remain in
App Store Connect, Play Console, or IAPKit.
- Do not run real purchase flows unless the user explicitly asks. Product
loading/sync verification is normally enough.
Standard Workflow
- Read repository rules before changing code:
$OPENIAP_REPO/AGENTS.md
$OPENIAP_REPO/packages/kit/CONVENTION.md
- Start or use the local kit dashboard on
127.0.0.1:5174.
- Use Petgu as the React Native fixture app for product IDs and native billing
capability checks.
- Verify store credentials before sync:
- iOS App Store Connect API key can list/push products.
- Android Play service account has Petgu app permissions and the app bundle
includes
com.android.vending.BILLING.
- Run kit product sync jobs through Convex for Petgu:
- dry-run push
- actual push
- actual pull
- create/update/delete using a temporary SKU
- Check the stores directly:
- Use Chrome for already-open logged-in Play Console/App Store Connect tabs.
- Use Play Developer API/App Store Connect API for precise state checks.
- Cleanup:
- Delete all temporary test SKUs from IAPKit and upstream stores.
- Re-run pull to confirm temporary SKUs are gone.
- Leave real Petgu SKUs intact unless the user confirms irreversible deletion.
- Run focused verification:
cd $OPENIAP_REPO/packages/kit
bun run typecheck
bun run test -- convex/products
bun run lint:eslint
cd $PETGU_REPO
bun install --frozen-lockfile
bun run type-check
Known Good Petgu Products
Use these as the real Petgu catalog baseline:
dev.hyo.petgu.lifetime: non-consumable lifetime unlock
dev.hyo.petgu.treats100: consumable
dev.hyo.petgu.premium.monthly: subscription, P1M
dev.hyo.petgu.premium.yearly: subscription, P1Y
Expected Store Behavior
- Android one-time products must have an active
buy purchase option. Creating
the product alone is not enough.
- Android pull should preserve a kit-authored
Consumable type because Play
does not round-trip the consumable/non-consumable distinction.
- iOS products may remain
Missing Metadata / kit Draft until screenshots,
review metadata, and version submission requirements are satisfied. This can
still mean product sync itself succeeded.
- App Store Connect's first IAP/subscription submission must be attached to a
new app version before it can move past missing metadata.
Reporting
In the final report, include:
- Convex job IDs and counts for push/pull/delete.
- Whether Chrome/App Store/Play Console showed the expected SKUs.
- Whether temporary SKUs were deleted from both IAPKit and the stores.
- Any permanent store-policy limitation that prevented deletion or recreation.