--- name: reply-reviews description: Weekly Play Store review flow for S2: fetch new reviews, draft replies, get owner approval, then post. Use when asked to check Play reviews, draft review replies, or reply to app store reviews. user_invocable: true --- # Reply to Play Reviews Fetch recent Google Play reviews for S2, draft a reply for each unanswered one, and stop for the owner's approval. Never post a reply without explicit approval. **API window:** the Play Developer API `reviews.list` endpoint only returns reviews with text from roughly the **last 7 days**. Reviews older than that are invisible to this tool: the owner must answer them manually in [Play Console](https://play.google.com/console). ## Steps 1. **Fetch unreplied reviews:** ```bash support/scripts/play-reviews list --unreplied --json ``` If this fails with a 401/403, the `reviews-reader` service account's grant may still be propagating (can take up to 24h): report that and stop, don't retry in a loop. 2. **Draft one reply per review.** Write them to `support/reviews/drafts-YYYY-MM-DD.json` (today's date; this directory is gitignored) as a JSON array, one object per review: ```json { "reviewId": "...", "stars": 4, "reviewText": "...", "replyText": "...", "approved": false } ``` **Reply guidelines:** - Vary the sign-off so replies don't read as a bot: some end "Tim" or "Cheers, Tim", many have no sign-off at all. Vary openings too. - Don't repeat the complaint back to them, and don't placate ("that's a real gap", "that's fair feedback", "I know it hurt"). Answer plainly with what's true or what's happening. - Never invent facts about the owner or the project ("S2 is where all my work goes", "actively updated"). The owner is a solo indie dev with three young kids; it's fine to say that plainly when it explains slow updates, but don't overuse it. - Specific to the review, but short. Only reference what they said when it adds something. - Under 350 characters. - No em or en dashes, and none of the stock phrases `play-reviews` bans (see `BANNED_PHRASES`). Run `support/scripts/play-reviews lint ` and fix every hit before showing drafts. - No promises of dates ("next release", "next week", etc.): commit to nothing time-bound. - Thank the reviewer for praise in positive reviews. - For bug reports, ask them to email developer@simplecityapps.com with details (device, steps to reproduce) so it can be investigated: don't try to diagnose or fix in the reply. - For widget complaints specifically, say widget improvements are being worked on. Only say this because it is currently true: check before reusing this line if that ever changes. - Never argue with a reviewer, even an unfair one. Acknowledge and move on. 3a. **File what the reviews report.** For every bug or feature request in a review, search first (`gh issue list --search "" --state all --limit 5`). If an issue exists, comment with the review's date and star rating; otherwise `gh issue create` with an `android:` title, label `bug` or `story`, and the date and star rating as the source. Leave out reviewer names and devices; the repo is public. If a draft reply promises something ("it's on the list"), the issue must exist before the reply is posted. List the issue numbers alongside the drafts. 3. **Show the drafts to the owner and stop.** Do not run `reply` or `post-approved` yet. Wait for the owner to review the drafts file and flip `approved` to `true` on the ones they want sent (editing `replyText` first if they want changes). 4. **Post only on explicit approval.** Once the owner confirms, run: ```bash support/scripts/play-reviews post-approved support/reviews/drafts-YYYY-MM-DD.json ``` This posts every entry with `"approved": true` and no `"posted"` flag, then marks each as posted in the file. Use `--dry-run` first if there's any doubt about what would be sent.