---
name: multi-agent-store-ready
description: "Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, the store's own authoritative validation, and a policy review against repo source. Separate verdict per gate, a skipped gate never counted as a pass. Validates only, never ships a build. Use when a build is about to go to TestFlight or a Play track, or when a submission was rejected and the reason is not obvious."
user-invocable: true
argument-hint: "[repo]  -  empty = pick; repo name or path; --ipa= | --archive= | --aab= | --apk=; --skip-sweep; --resume"
metadata:
  language: en
---

# multi-agent-store-ready  -  pre-submission validation, iOS + Android

Catch, before you upload, what App Store Connect or the Play Console would send
back after you do.

**Local-only.** No commits, no push, no PR. **It never ships**: iOS runs
`--validate-app`, never `--upload-app`; Android never commits a Play edit, and
uploads into a throwaway edit only with Google Play onboarded and the user's
approval.

**Input**: $ARGUMENTS

## Dispatcher

The full flow  -  input parsing, pickers, pre-flight, the running-app sweep, the
three gates per platform, the report format and the next-action offer  -  lives in
one place. Read and follow:

```
$HOME/.copilot/multi-agent/commands/store-ready.md
```

(Equivalent on Claude Code: `$HOME/.claude/commands/multi-agent/store-ready/SKILL.md`.)

Do not re-derive the gate structure from this file; it is a summary, and the target
doc is the contract.

The target doc moves its bulky procedures into refs, read at the step that needs
them: `$HOME/.claude/multi-agent-refs/store-ready/preflight.md` (Steps 1-2),
`build.md` (Step 3), `gate-1-static.md` (Gate 1), `gate-3-policy.md` (Gate 3) and
`report.md` (Step 7), all in that same directory.

## Gate matrix (summary  -  the target doc is authoritative)

| Gate | iOS | Android |
|---|---|---|
| 1 Static | `ios_app_store_audit` 18 rules, needs an `.xcarchive` | `android_apk_audit` + `google-play-compliance` 21 rules, needs an `.aab` |
| 2 Authoritative | `ios_testflight_validate` → `altool --validate-app`, needs credentials; `store_asc_next_build_number` says whether the build number is already used | With `google_play` onboarded: `store_play_validate_bundle` validates the `.aab` in a throwaway edit that is deleted, never committed, after the user approves the upload. Otherwise `SKIPPED (no local Play validator)`, reason `Google Play not onboarded` |
| 3 Policy | `ai-ios-toolkit:app-store-review` skill vs repo source | `ai-android-toolkit:play-store-review` skill vs repo source |

Gate 1 also fails the package on its own, without the MCP tool, when the archive
carries no dSYM (iOS) or a `minifyEnabled true` module produced no `mapping.txt`
(Android). Gate 3 carries a `Crash symbolication` row on both platforms: a dSYM
upload step for iOS, a `mapping.txt` upload for Android.

Gate 2's asymmetry is reported as an asymmetry. An Android run whose Gate 2 did not
run clears at most 2 of 3 gates and must never print `passed`. A skipped gate is
never folded into the pass count on either platform. The `store_*` tools need
`@mmerterden/multi-agent-toolkit-mcp` ≥ v3.17.0; the Android upload is refused
when `MULTI_AGENT_UNATTENDED=1`, and Gate 2 then reports `SKIPPED` with that reason.

## Related surfaces

`multi-agent-testflight-validation` is a thin alias onto this skill, kept so the
iOS-only name keeps working; it resolves here with the platform pinned to iOS.
`multi-agent-test "store-ready"` also resolves here. There is one implementation.
