From 6737558d56978e868872ec2d9bdd28aa654cfa2b Mon Sep 17 00:00:00 2001 From: "fatih.bulut" Date: Tue, 23 Jun 2026 23:13:06 +0300 Subject: [PATCH] test(market-research): cover v2 scripts in smoke; update README Co-Authored-By: Claude Sonnet 4.6 --- plugins/market-research/README.md | 24 +++++++++++++++---- .../market-research/tests/smoke-structure.sh | 4 ++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/plugins/market-research/README.md b/plugins/market-research/README.md index 8c8ccbb..9518f8f 100644 --- a/plugins/market-research/README.md +++ b/plugins/market-research/README.md @@ -6,14 +6,16 @@ scored, non-repeating clone candidates, then hands user-chosen candidates to the ## What it does -`/market-research` runs a 6-phase workflow: +`/market-research` runs an 8-phase workflow (0–7): 0. **Seed rotation** — pick varied search angles (category × region × niche) so runs differ. -1. **Gather** — App Store RSS chart data (`fetch-charts.py`) + free web search for trends. +1. **Gather** — App Store RSS (`fetch-charts.py`) + play.google.com charts (`fetch-play-charts.py`) + Google Trends best-effort (`trends.py`) + free web search. 2. **Synthesize** — cluster findings into ≥10 distinct app/game ideas. -3. **Score** — composite score: cloneability + market opportunity + monetization fit. +3. **Score** — composite numeric score: cloneability 35 + market 35 + monetization 20 + niche 10 (see `scoring-guide.md` + `numeric-sources.md`). 4. **Dedup** — exclude anything already in `./work/market-research/history.json`. -5. **Present + handoff** — show the ranked table; chosen candidates flow into `clone-app`. +5. **Present** — show the scored, ranked table. +6. **Survivor-only enrichment** — for user-chosen candidates only: resolve the Play Store package ID (`play.py`) and verify the link is live via WebFetch before handing off. +7. **Handoff** — chosen candidates (with verified Play links) flow into `clone-app`. ## State @@ -23,7 +25,10 @@ Written under `./work/market-research/` in your current directory: ## Scripts -- `scripts/fetch-charts.py` — fetch App Store RSS chart feeds → normalized JSON. +- `scripts/fetch-charts.py` — fetch Apple App Store RSS chart feeds → normalized JSON. +- `scripts/fetch-play-charts.py` — fetch play.google.com top/category charts → normalized JSON (no AppBrain; uses the public Play web endpoint directly). +- `scripts/play.py` — resolve an app name or bundle ID to a Play Store package ID and count search results (used in survivor-only enrichment, Phase 6). +- `scripts/trends.py` — best-effort Google Trends interest data for a keyword; never hard-fails (falls back to `null` if the endpoint is unavailable). - `scripts/history.py` — read / append / dedup the suggestion history. Python is stdlib-only. Tests run offline against `tests/fixtures/`: @@ -32,6 +37,15 @@ Python is stdlib-only. Tests run offline against `tests/fixtures/`: bash plugins/market-research/tests/run-all.sh ``` +## References + +AI-judgment rubrics under `skills/market-research/references/`: + +- `research-angles.md` — rotating category × region × niche seeds for run-to-run variety. +- `scoring-guide.md` — the 0–100 weighted composite formula and per-dimension guidance. +- `numeric-sources.md` — how to map raw data (chart rank, install count, rating, search results) to numeric sub-scores used by `scoring-guide.md`. +- `report-template.md` — output format for the scored candidate table and per-candidate write-ups. + ## Effort convention Effort is measured in **AI Sprints** (one focused Claude session), never calendar time. diff --git a/plugins/market-research/tests/smoke-structure.sh b/plugins/market-research/tests/smoke-structure.sh index 6fa78ac..eb73652 100755 --- a/plugins/market-research/tests/smoke-structure.sh +++ b/plugins/market-research/tests/smoke-structure.sh @@ -10,11 +10,11 @@ must_exist "$P/.claude-plugin/plugin.json" must_exist "$P/commands/market-research.md" must_exist "$P/README.md" must_exist "$P/skills/market-research/SKILL.md" -for s in fetch-charts.py history.py; do +for s in fetch-charts.py history.py fetch-play-charts.py play.py trends.py; do must_exist "$P/skills/market-research/scripts/$s" must_exec "$P/skills/market-research/scripts/$s" done -for r in research-angles scoring-guide report-template; do +for r in research-angles scoring-guide report-template numeric-sources; do must_exist "$P/skills/market-research/references/$r.md" done