Skip to content

feat(products): submit App Store products for Apple review - #128

Open
joshdholtz wants to merge 5 commits into
mainfrom
joshholtz/dx-975-store-submit
Open

joshdholtz wants to merge 5 commits into
mainfrom
joshholtz/dx-975-store-submit

Conversation

@joshdholtz

@joshdholtz joshdholtz commented Aug 19, 2026 •

Copy link
Copy Markdown
Member

rc products store apply pushes desired state to App Store Connect, but nothing is actually submitted to Apple for review — products end up configured but not purchasable. This adds a submit command that starts Apple review for the App Store products you name.

You pass the product IDs you want submitted. They all have to belong to the same app. If a product isn't ready yet (not in App Store Connect, or Apple won't take the first IAP through this API), the backend skips it with a reason instead of failing the whole run, and the command reports each outcome plus a summary. It's App Store only; --store defaults to app_store and rejects anything else.

The endpoint is a beta product-catalog route that isn't in the public spec, so it's added to the beta overlay with a hand-written client method and response types next to the existing store-state code.

Tests cover the happy path, a skipped product, the App-Store-only rejection, and a submission failure exit code.

🤖 Generated with Claude Code


Note

Medium Risk
Introduces a confirmed CLI action that triggers Apple App Review for real IAP products; mistakes can start review for the wrong SKUs, though skips and App Store–only validation limit blast radius.

Overview
Adds rc products store submit so configured App Store products can be sent to Apple review after store-state apply (which only pushes metadata to App Store Connect).

The command accepts one or more product IDs (same app, up to 200), defaults --store to app_store, requires confirmation/--yes, and calls a new beta POST .../products/actions/submit_to_store endpoint via StoreStateService.SubmitToStore. It prints a per-product submitted/skipped table (skip reasons in DETAIL), exits nonzero when nothing was submitted, and surfaces API errors (e.g. mixed apps).

Docs/spec coverage and the v2 beta overlay document the endpoint; generated path/types support the client. Tests cover mixed outcomes, non–App Store rejection, validation, and CLI output snapshots; schema tests guard variadic submit args for agent discovery.

Reviewed by Cursor Bugbot for commit e73262f. Bugbot is set up for automated code reviews on this repo. Configure here.

@linear-code

linear-code Bot commented Aug 19, 2026 •

Copy link
Copy Markdown
DX-975 Add `rc products store submit` — submit App Store products for Apple review

Problem

rc products store apply pushes the desired state to App Store Connect, but nothing is submitted to Apple for review — the product sits configured-but-not-purchasable until someone submits it manually in ASC. This is the root cause of the "apply reported success but Apple never approved" issue found during the Product Catalog bug-bash: apply succeeding ≠ product is live.

The MCP/dashboard flow has a dedicated submit step (submit-products-to-store); the CLI has no equivalent. Store subcommands today are: list / sync / plan / show / apply / discard / screenshot.

What to build

rc products store submit — starts Apple review for products already in App Store Connect. Mirrors the canonical model in Rico's product-store-state skill:

  • Only submits products the user names, or the ones that just applied — never "everything that looks ready".
  • A product is submittable only once it's in ASC (apply_status: applied, or get-product-store-state reports it).
  • Report per-product outcomes including skips; on failure, report why and stop.
  • App Store only — skip for Play/RC Billing/Test Store.

Open question / dependency

The submit endpoint is not yet in our v2 spec/overlay. First step is to confirm the real API endpoint (check RevenueCat/agents' submit-products-to-store MCP tool for the endpoint it calls) and, if needed, add it to the beta overlay + a hand-written client method — same pattern as the store-state response-schema work.

Related

  • Slack thread (Product Catalog bug-bash, 2026-08-18) — Ricardo confirmed apply only writes ASC metadata; submit is separate.
  • Follows the store-state readiness + equalization work (DX-973 / DX-974).

Review in Linear

@joshdholtz
joshdholtz requested review from a team and popcorn August 19, 2026 16:46
@joshdholtz
joshdholtz marked this pull request as ready for review August 19, 2026 16:47
Copilot AI lite review requested due to automatic review settings August 19, 2026 16:47

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@joshdholtz
joshdholtz force-pushed the joshholtz/dx-975-store-submit branch from c521e95 to 532b61a Compare August 20, 2026 18:10
Comment thread internal/cli/products_store.go Outdated
@joshdholtz

Copy link
Copy Markdown
Member Author

bugbot run

@cursor cursor 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 77c5935. Configure here.

joshdholtz and others added 5 commits September 28, 2026 18:27
Applying a store-state plan pushes desired configuration to App Store
Connect but never submits anything for review, so products sit
configured-but-not-purchasable. This adds `rc products store submit` to
start Apple review for the named App Store products.

Only the products passed as arguments are submitted, and the backend
skips any that aren't ready yet (with a reason) instead of failing the
whole run. The endpoint is a beta product-catalog route, so it's added
to the beta overlay with a hand-written client method and response
types alongside the existing store-state code.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Non-submitted products now get a follow-up hint pointing at the DETAIL reason and
the apply-first remedy. Adds unit coverage for the ID validation (trim, empty,
>200 cap) and asserts a fully-skipped response still exits 0. Documents the
per-product result type (no per-product failure — hard failures are HTTP errors).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The first In-App Purchase or subscription for an app can't be submitted on its
own — App Store Connect requires it to be reviewed with a new app version, so
submit returns it skipped until the app has an approved product. Document that
in the command help and the command surface so it reads as expected, not a bug.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The submit Use string was "<product-id>...", but parseArgsFromUse only
recognizes tokens fully enclosed in <> or [], so the trailing dots left
the positional args invisible to `rc schema` / `rc commands --schemas`
even though MinimumNArgs(1) requires them. Match the sibling attach/detach
convention: "<product-id> [product-id...]".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@joshdholtz
joshdholtz force-pushed the joshholtz/dx-975-store-submit branch from 77c5935 to e73262f Compare September 28, 2026 23:31
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