flame-harness-admob
Phase 7 — analyze the game, decide a rewarded-ad strategy, guide manual AdMob ad-unit creation, and inject google_mobile_ads + ATT/UMP consent code.
Phase 10 — upload store text metadata + categories via fastlane, then pause with exact manual steps for the final iOS review submission and Android production promotion.
$ npx -y skills add tjdrhs90/flutter-flame-harness --skill flame-harness-submit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/flame-harness-submitContext preview
The summary Claude sees to decide when to auto-load this skill.
Phase 10 — upload store text metadata + categories via fastlane, then pause with exact manual steps for the final iOS review submission and Android production promotion.
name: flame-harness-submit description: Phase 10 — upload store text metadata + categories via fastlane, then pause with exact manual steps for the final iOS review submission and Android production promotion. argument-hint: "" allowed-tools: [Read, Write, Edit, Bash, AskUserQuestion]
Phase 10 of the flutter-flame-harness pipeline. Uploads store text metadata and app categories via fastlane for both iOS and Android, then pauses the pipeline with exact manual steps for the final review submission / production promotion (see **Boundary** below for what is genuinely manual and what is a deliberate checkpoint).
All file schemas (`config.md`, `state.md`, `pipeline-log.md`) and the phase transition table are defined in `docs/harness-protocol.md` — that document is the single source of truth (§1 for `config.md`; §2 for `state.md` keys and `pause_reason` values; §6 for `pipeline-log.md` schema; §7 for the `submit → metadata-done → paused` transition and the `(paused) → resume → retro` transition). Do not redefine schemas here.
**Boundary:** Text metadata upload is automated. The final "Submit for Review" on iOS and the "Promote to production" action on Android are **manual in this pipeline** — deliberately, so a human sees the assembled listing once before it goes out, and because the Play questionnaires (Content Rating, Data Safety, Target Audience) have no API.
Note the iOS half *is* automatable if you want it: `reviewSubmissions` will submit a version end-to-end (see **iOS submission over the API** below). What is genuinely not automatable is the Play side and the age-rating questionnaire. Keep the pause unless you have a reason not to — the review is the point of it.
**Prerequisites:** Phase 9 (`flame-harness-screenshot`) completed; screenshots and ASO metadata already uploaded; `state.md` shows `next_role: submit`.
---
Before any action, load:
1. `docs/harness/config.md` — extract `app_slug`, `bundle_id`, `app_name`, and `default_language` (per protocol §1). 2. `docs/harness/state.md` — confirm `next_role: submit` (per protocol §2).
Derive the game project root for `<app_slug>` from `config.md` / the harness working directory (the games live under the same parent as the harness, e.g. `…/AndroidStudioProjects/<app_slug>/`).
---
Before uploading, write the store-listing + App-Review files from the `developer` block in `config.md` (sourced from `credentials/store-metadata.md`) so they actually get uploaded — these are otherwise empty and the listing/review info would be missing.
**iOS (deliver picks these up automatically):**
`developer.homepage`, `privacy_url.txt` ← `developer.privacy`
`email_address.txt` ← `developer.*`; `notes.txt` ← reviewer notes (e.g. the ATT screen-recording note for an ads build).
**Android (contact email + website have no `supply` field — set via the Publisher API):**
fill `__PACKAGE__`=`bundle_id`, `__EMAIL__`=`developer.email`, `__WEBSITE__`=`developer.homepage`, and run `cd android && ruby fastlane/set_contact_details.rb`.
step below (Play console).
Run the fastlane metadata and categories lanes for both platforms. These lanes push text metadata (localized titles, descriptions, release notes) and app category assignments to the stores without uploading a binary.
cd <game>/ios fastlane metadata fastlane categories
Connect via `deliver` (titles, subtitles, descriptions, keywords, promotional text, release notes).
must already exist in the generated `ios/fastlane/Fastfile` (written by Phase 8 `flame-harness-build`).
cd <game>/android fastlane metadata fastlane release_notes
Google Play (titles, short descriptions, full descriptions) via `upload_to_play_store` with `skip_upload_apk: true` and `skip_upload_aab: true`.
release.
If any fastlane lane exits non-zero, do NOT proceed to the pause step. Instead write `docs/harness/state.md` with `status: paused`, `pause_reason: manual_action`, and `next_role: submit` (retry), then explain the error and stop.
---
After both upload sequences complete successfully, the pipeline must pause so the developer can perform the final submission actions that cannot be automated.
**Pre-submit rejection checklist** (print this with the manual steps — these are the rejections already hit; see `docs/game-gotchas.md` → Store rejections):
`userGeneratedContent`, `messagingAndChat`, `ageAssurance`, `gunsOrOtherWeapons`, `advertising`, `healthOrWellnessTopics`, `parentalControls` in 2026. An app record that only answered the old questionnaire is blocked before human review. **Any AdMob build (banners count) must answer `advertising` = Yes**, or Apple's automated analysis bounces it. `ageRatingDeclarations` is write-only over the API (`GET` → `403`) — verify in the Connect UI, there is no other way.
A Claude Code plugin that takes a Flutter/Flame game from raw idea all the way to the app stores.
Phase 7 — analyze the game, decide a rewarded-ad strategy, guide manual AdMob ad-unit creation, and inject google_mobile_ads + ATT/UMP consent code.
Phase 8 — bootstrap signing credentials, generate fastlane config from templates, and build + upload signed IPA (TestFlight) and AAB (internal track).
Phase 4 — propose verifiable completion criteria and mandatory hard gates; reach AGREED (1-pass default, multi-round negotiation in --strict).
Phase 3 — define the Flutter design_tokens.dart spec (palette, typography, spacing), the game's art/visual concept, and the asset/audio sourcing plan.
Phase 6 — skeptical QA. Run the game, watch it, then judge against the contract. Default = functional check; --strict adds quality and edge-case passes.
Phase 5 — build the Flame game in 3 gated sub-phases (core loop → systems+components → UI+content), then self-evaluate against the contract.