From 6db28dc42fe7c63678295b2cf06d93c4a5936125 Mon Sep 17 00:00:00 2001 From: appdevelopsk Date: Tue, 27 Oct 2026 18:57:12 +0900 Subject: [PATCH 1/4] ci(growth): monitor real VPS acquisition pages daily without writing or deploying --- .github/workflows/live-acquisition-smoke.yml | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/live-acquisition-smoke.yml diff --git a/.github/workflows/live-acquisition-smoke.yml b/.github/workflows/live-acquisition-smoke.yml new file mode 100644 index 0000000..a977385 --- /dev/null +++ b/.github/workflows/live-acquisition-smoke.yml @@ -0,0 +1,45 @@ +name: Live App Acquisition Pages Smoke + +on: + workflow_dispatch: + schedule: + # 09:40 JST daily. Scheduled GitHub jobs may run later than cron. + - cron: '40 0 * * *' + +permissions: + contents: read + +jobs: + verify-live-acquisition: + runs-on: ubuntu-latest + timeout-minutes: 9 + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Check actual VPS HTTP pages, Play CTAs, campaign pages, and sitemap + id: verify + shell: bash + run: | + set -euo pipefail + echo 'Checking public appdevelopsk.com, NOT source on GitHub main.' + bash scripts/check_app_discovery_live.sh + - name: Summarize release blockers and recovery + if: failure() + run: | + { + echo '## Production acquisition pages are missing or stale' + echo '' + echo 'Source changes alone do not publish to the VPS. See the failed smoke-test step for the exact route.' + echo '' + echo 'From a current site main checkout with your configured pickly-vps SSH alias:' + echo '' + echo '```bash' + echo 'git pull --ff-only' + echo 'bash scripts/publish_app_discovery.sh --dry-run' + echo 'bash scripts/publish_app_discovery.sh --apply' + echo 'bash scripts/check_app_discovery_live.sh' + echo '```' + echo '' + echo 'No CI step writes to the VPS, updates Google Play, or records fictitious installs.' + } >> "$GITHUB_STEP_SUMMARY" From a5efe48326d2ff59a48f90275dbe76cc5449b509 Mon Sep 17 00:00:00 2001 From: appdevelopsk Date: Tue, 27 Oct 2026 18:58:02 +0900 Subject: [PATCH 2/4] test(growth): require daily read-only production checks and actionable CI failure --- tests/search-landing-growth.test.mjs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/search-landing-growth.test.mjs b/tests/search-landing-growth.test.mjs index 6d3dfc3..135c441 100644 --- a/tests/search-landing-growth.test.mjs +++ b/tests/search-landing-growth.test.mjs @@ -63,3 +63,13 @@ test('public catalog icons are crawlable and explicit VPS release is non-destruc assert.match(live,/data-position="hero"/); assert.match(live,/Allow: \/icons\/apps\//); }); + +test('daily live acquisition check is read-only, scheduled and fails visibly on stale VPS',()=>{ + const workflow=read('.github/workflows/live-acquisition-smoke.yml'); + assert.match(workflow,/cron: '40 0 \* \* \*'/); + assert.match(workflow,/workflow_dispatch:/); + assert.match(workflow,/contents: read/); + assert.match(workflow,/bash scripts\/check_app_discovery_live\.sh/); + assert.doesNotMatch(workflow,/publish_app_discovery\.sh --apply\s*\n\s*(?:git|rsync|bash)/); + assert.match(workflow,/if: failure\(\)/); +}); From edcb38e715102336184c4238cff0a8993e503c19 Mon Sep 17 00:00:00 2001 From: appdevelopsk Date: Tue, 27 Oct 2026 18:58:08 +0900 Subject: [PATCH 3/4] ci(growth): test live-monitor workflow when edited --- .github/workflows/app-discovery-qa.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/app-discovery-qa.yml b/.github/workflows/app-discovery-qa.yml index cea3223..7a3d117 100644 --- a/.github/workflows/app-discovery-qa.yml +++ b/.github/workflows/app-discovery-qa.yml @@ -19,6 +19,7 @@ on: - scripts/publish_app_discovery.sh - scripts/check_app_discovery_live.sh - .github/workflows/app-discovery-qa.yml + - .github/workflows/live-acquisition-smoke.yml push: branches: [main] paths: @@ -38,6 +39,7 @@ on: - scripts/publish_app_discovery.sh - scripts/check_app_discovery_live.sh - .github/workflows/app-discovery-qa.yml + - .github/workflows/live-acquisition-smoke.yml permissions: contents: read jobs: From a812347a985049e48910183d90db39ae44dcbfbb Mon Sep 17 00:00:00 2001 From: appdevelopsk Date: Tue, 27 Oct 2026 18:58:15 +0900 Subject: [PATCH 4/4] docs(growth): explain nightly live checks without implying auto-deploy --- docs/APP_DISCOVERY_GROWTH_RELEASE_2026-10-27.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/APP_DISCOVERY_GROWTH_RELEASE_2026-10-27.md b/docs/APP_DISCOVERY_GROWTH_RELEASE_2026-10-27.md index 3c4f4d8..516e148 100644 --- a/docs/APP_DISCOVERY_GROWTH_RELEASE_2026-10-27.md +++ b/docs/APP_DISCOVERY_GROWTH_RELEASE_2026-10-27.md @@ -72,3 +72,9 @@ After shipping the updated **eleven** files from a fresh main checkout, run `bas - The catalog filter previously included stale app identifiers `flinch` (the published app is `daily-duel`) and `pickwhirl` (published app is `chore-roulette`). Removed stale names and used real catalog identifiers. - A CI regression now checks every filter slug against the published catalog, including renamed apps, to prevent silent zero-result filters after future renames or delistings. The total listed app count is taken from `site_counts.json`, not a stale hardcoded 92. - This does **not** create new Google Play installs on its own; the VPS must be updated and the customer conversion funnel measured. + +## Read-only production monitoring + +The workflow `.github/workflows/live-acquisition-smoke.yml` checks actual HTTPS output every day around **09:40 JST** (GitHub Actions scheduling can be delayed). It reuses `scripts/check_app_discovery_live.sh` and **fails intentionally** if the VPS still serves a stale catalog, stale Play CTA, missing guide or stale sitemap. It only reads the public URLs; it does not deploy, mutate Store metadata, write marketing content or buy ads. + +Its failure step explains how to run the existing manual, non-deleting VPS deployment and verify success. GitHub email notifications depend on repo/account settings; a failed workflow alone does not guarantee push or email alerts. Workflow is also manually dispatchable for an operator who wants to verify a completed release.