storebound/skills/store-preflight/SKILL.md
CRT 56e107dbbe Crash and vitals health: storebound health [--weekly], validate findings, store-health skill
Play Developer Reporting API v1beta1 (crashRateMetricSet / anrRateMetricSet DAILY queries in America/Los_Angeles,
user-perceived 28-day rates, worst device models, errorIssues:search) and App Store Connect perfPowerMetrics,
diagnostic signatures and TestFlight crash submissions. Thresholds 1.09 % crash / 0.47 % ANR / 8 % per device
(developer.android.com/topic/performance/vitals): over = blocker, from 80 % = warn, in validate too (--no-health).
Weekly Markdown report with week-over-week change in .storebound/health/. MCP: health (read-only), health_report.
2026-10-10 23:28:10 +08:00

3.8 KiB

name description
store-preflight Run and read the storebound readiness checks before submitting a mobile game - `storebound check` (offline config, copy limits, files), `storebound check --aso`, `storebound validate` (read-only App Store Connect + Google Play report with ordered blockers) and `storebound privacy-manifest`. Use before every submission, when the user asks "is my app ready to submit", or after changing listings, builds, IAPs or SDKs.

Store preflight

CLI: storebound (or the MCP tools check, check_aso, validate, privacy_manifest). All four are read-only on the stores; run them freely.

Order

  1. storebound check: config, both listing files (limits are checked locally: title 30, subtitle 30, keywords 100 bytes, Play short 80, notes 500 ...), screenshot copy, Data safety answers, IAP texts (Apple description 45), files the config points at, .storebound/ gitignored. Fix everything it lists; it exits 1 on problems.
  2. storebound check --aso: keyword field use, repeats, stuffing (aso-basics). Errors exit 1, warnings are advice.
  3. storebound privacy-manifest --ios ios/App (iOS): app manifest, required-reason APIs, SDKs without manifests (privacy-manifest skill).
  4. storebound validate (or --apple / --play): talks to both APIs read-only and prints findings in fix order. Exit 1 while there is a blocker. --json for scripts.

Reading validate

Each line: number, level (BLOCKER, warn, ok), store, message, and a fix: with the command or skill.

finding means fix
no build attached / build PROCESSING the version has no usable binary wait for VALID, then apple listing --version x --build N (explicit number)
export compliance not answered the build has no encryption answer export-compliance skill
<locale>: missing description / keywords / subtitle text not pushed for a locale edit store/appstore.md, apple listing
no APP_IPHONE_67 screenshots 6.9" set missing (required) apple screenshots; iPad apps add the 13" type to apple.screenshotTypes
review contact missing App Review information incomplete apple review-details
age rating unanswered new questions Apple added apple appinfo
no app price schedule / availability pricing never set apple appinfo; if the API refuses the first availability record, set it once in App Store Connect > Pricing and Availability
IAP MISSING_METADATA / no review screenshot product incomplete apple iap, apple iap-review
privacy policy HTTP 404 / unreachable URL broken privacy-policy skill
Play <lang>: phoneScreenshots 1/2 graphics missing shots render, play images
app-ads.txt lacks lines / 404 ad networks cannot verify you ads-levelplay-checks; the file lives at the root of the developer website
no release on any track nothing uploaded play release <aab>
product purchase option DRAFT not active play products
user-perceived crash / ANR rate over 1.09 % / 0.47 % (live apps) Play's bad behavior threshold is crossed store-health skill: storebound health, fix the top issues, ship a higher versionCode
Apple metric rated poor / heavy diagnostic signature hangs, launches, disk writes store-health skill (Xcode Organizer for the stack)

Vitals need the Play Developer Reporting API enabled for the service account; without it validate only notes "vitals not readable". --no-health skips these checks.

What validate cannot see (UI-only, check by hand)

App Privacy labels published, Play App content declarations (ads, target audience, content rating, advertising ID), agreements / tax / banking, countries for production on Play. (TestFlight groups and testers: storebound apple testflight status.) Tell the owner which are still open.