agentleFS
robertodraGitrobertodraGit/skills/store-review-preflight/SKILL.md

store-review-preflight

Skill4 starsChanged 3 months agoMITView on GitHub

Preflight a mobile app before App Store or Google Play submission. Audits the codebase, build config and store metadata against the Apple App Review Guidelines, Apple build requirements (privacy manifests, required-reason APIs, SDK signatures, Xcode/SDK minimums) and Google Play policies (Data safety, target API, account deletion, permissions, Families), then writes an evidence-backed rejection-risk report. Use when the user is about to submit, asks "will this pass review", "is the app ready for the App Store / Play", "check store compliance", got a rejection or an ITMS-/Play Console error, is preparing TestFlight external testing or a production release, or ships an Expo, React Native, Capacitor, Flutter or native iOS/Android app.

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 9 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈9

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Conservative verdicts: Prefer 🟠 over a false 🟢 and over a false 🔴.

    line 17
  2. Distinctive:

    Done when: all seven items are written down or listed as open questions, existing store/compliance documents are listed, and each …

    line 30
  3. Very specific:

    Read references/01-signals.md.

    line 34
  4. Distinctive:

    Done when: every capability row has a status and, if found, at least one path.

    line 36
  5. Distinctive:

    Done when: every gate is 🟢, 🔴 or ❓-with-command.

    line 42
  6. Distinctive:

    Done when: every found capability maps to rule IDs, and every not-found capability category is recorded as ⚪ with a reason.

    line 48
  7. Distinctive:

    Read only the triggered files:

    line 52
  8. Distinctive:

    Check each triggered row: pass / fail / uncertain, with evidence and citation.

    line 64
  9. Distinctive:

    Done when: every triggered rule has a verdict, evidence and citation.

    line 66
  10. Distinctive:

    Done when: every checklist row is verified, user-confirmed, or listed as unknown.

    line 72
  11. Very specific:

    Read references/00-method.md first in every run: verdict scale, evidence classes, freshness protocol, triage matrix.

    line 82

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Store Review Preflight

Audit the app before the reviewer does. Every finding is a rule (a policy clause) or a gate (a binary build/upload requirement), backed by evidence from the repo, the build artifact, the store console or the listing.

Output: a report built from assets/report-template.md. The audit is read-only: never upload, submit, publish, or run store CLIs.

Ground rules

  1. Evidence or ❓. A verdict needs a file path and line, a command output, a user-confirmed console value, or a listing quote. No evidence → ❓ Unverified, with the exact thing to check.
  2. Cite the rule ID for every finding (Apple 5.1.1(v), Play: User Data → Account deletion).
  3. Respect confidence tags. Rows tagged T come from training knowledge, not from a page read on 2026-11-05. Re-open the live source (URLs in references/00-method.md §4) before issuing 🔴 on a T row.
  4. Conservative verdicts. Prefer 🟠 over a false 🟢 and over a false 🔴. Never promise approval: reviewers apply judgement.
  5. Hand off depth. Privacy disclosures, consent and SDK data flows belong to the privacy-audit skill when installed; this skill checks only that the disclosures exist, are consistent with the code, and satisfy the store rule.

Workflow

Step 1 — Frame the target

Record: platforms (iOS, Android, both), stack (see references/01-signals.md §1), first submission vs update, developer account type (individual vs organization: it changes Apple 5.1.1(ix) and the Google testing requirement), monetization model, audience age, regions. Ask the user for unknowns in one batch.

Then read what the project already has: docs/, store/, fastlane/, store and compliance notes, and scripts named like *check*, *store*, *review*. Treat documented mitigations as claims to verify, not as findings and not as proof (a fallback contact address, a feature flag, a pre-submission script that is never run automatically).

Feature flags and EXPO_PUBLIC_*/env switches decide which code ships. Their production values live in the build environment (K): list each flag that gates a store-relevant feature and ask the user for its production value.

Done when all seven items are written down or listed as open questions, existing store/compliance documents are listed, and each store-relevant flag has a value or an open question.

Step 2 — Inventory capabilities

Read references/01-signals.md. Search the repo for each capability signal and fill the capability table (found / not found + path).

Done when every capability row has a status and, if found, at least one path.

Step 3 — Run the gates

Gates fail uploads or builds regardless of reviewer opinion. Read references/apple-06-technical-gates.md for iOS and references/google-02-technical-gates.md for Android. Run the commands each gate lists; mark gates that need a build artifact as ❓ and hand the user the exact command.

Done when every gate is 🟢, 🔴 or ❓-with-command.

Step 4 — Triage rules

Open the triage matrix in references/00-method.md §5. For each capability found in Step 2, list the rule IDs it triggers and the reference files that hold them.

Done when every found capability maps to rule IDs, and every not-found capability category is recorded as ⚪ with a reason.

Step 5 — Assess triggered rules

Read only the triggered files:

FileCovers
apple-01-safety.mdGuideline 1: content, UGC, kids, health, developer info
apple-02-performance.mdGuideline 2: completeness, metadata, hardware, software requirements
apple-03-business.mdGuideline 3: In-App Purchase, subscriptions, other payment methods, crypto
apple-04-design.mdGuideline 4: copycats, minimum functionality, spam, extensions, Sign in with Apple
apple-05-legal.mdGuideline 5: privacy, data use, health, kids, location, IP, gambling, VPN
google-01-policies.mdPlay Developer Program Policy: content, user data, permissions, families, monetization, ads
07-common-rejections.mdField patterns behind most rejections, with the fix

Check each triggered row: pass / fail / uncertain, with evidence and citation.

Done when every triggered rule has a verdict, evidence and citation.

Step 6 — Console and listing checklist

Code cannot show App Store Connect or Play Console state. Walk assets/console-checklist.md with the user (screenshots or exports are fine). Draft reviewer notes from assets/review-notes-template.md.

Done when every checklist row is verified, user-confirmed, or listed as unknown.

Step 7 — Report

Fill assets/report-template.md. Order the fix list: upload-blocking gates, then 🔴 rules, then 🟠, then metadata, then 🟡. Every 🔴 and 🟠 carries a concrete fix and an effort estimate (S/M/L).

Done when no 🔴/🟠 finding lacks a fix, and the report states what it could not verify.

Reference navigation

Read references/00-method.md first in every run: verdict scale, evidence classes, freshness protocol, triage matrix.

Stack-specific traps (Expo config plugins, Capacitor native projects, WebView wrappers, OTA updates) live in references/08-stack-notes.md. Non-store regulation that blocks a release (EU DSA trader status, US state age-assurance laws, accessibility) lives in references/09-regulatory-gates.md.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.