From 12d73782af8211fee8828ffbea359e909c71cb9b Mon Sep 17 00:00:00 2001 From: Hustlenix Date: Thu, 24 Sep 2026 22:35:22 +0530 Subject: [PATCH 1/3] test: cover the living companion in release verification --- verify-release.mjs | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/verify-release.mjs b/verify-release.mjs index d60fd15..8b8ffb8 100644 --- a/verify-release.mjs +++ b/verify-release.mjs @@ -87,8 +87,47 @@ try { await page.setViewportSize({ width, height: 900 }); assert.equal(await page.evaluate(() => document.documentElement.scrollWidth > innerWidth + 1), false, `practice library width ${width}`); } + console.log("13-plan library and responsive widths verified."); + + await page.setViewportSize({ width: 375, height: 900 }); + await page.goto(`${base}/today/`, { waitUntil: "networkidle" }); + const companionHome = page.getByRole("button", { name: /Open Milo companion space/ }); + await companionHome.waitFor(); + await companionHome.click(); + await page.locator('section[aria-label="Milo companion space"]').waitFor(); + await page.getByRole("button", { name: "Experience reviewer demo", exact: true }).click(); + + for (const [button, expectedEvent] of [ + ["Start focus", "FOCUS_STARTED"], + ["Complete focus", "FOCUS_COMPLETED"], + ["Open health chapter", "CHAPTER_STARTED"], + ["Complete chapter", "CHAPTER_COMPLETED"], + ["Reach milestone", "ROADMAP_MILESTONE"], + ]) { + await page.getByRole("button", { name: button, exact: true }).click(); + await page.getByText(expectedEvent, { exact: true }).first().waitFor(); + } + + await page.getByRole("button", { name: "room", exact: true }).click(); + await page.locator(".room-lamp").waitFor(); + await page.locator(".room-book").waitFor(); + await page.locator(".room-trophy").waitFor(); + + await page.getByRole("button", { name: "settings", exact: true }).click(); + const motionFieldset = page.locator("fieldset").filter({ has: page.locator('legend:text-is("Motion")') }); + await motionFieldset.getByRole("button", { name: "off", exact: true }).click(); + await page.locator('aside[aria-label="Level Up companion"][data-motion="off"]').waitFor(); + + await page.setViewportSize({ width: 320, height: 900 }); + assert.equal( + await page.evaluate(() => document.documentElement.scrollWidth > innerWidth + 1), + false, + "expanded companion remains inside a 320px viewport" + ); + console.log("Companion visibility, deterministic demo, unlocks, motion-off and 320px layout verified."); + assert.deepEqual(errors, [], "no runtime or required-resource HTTP errors"); - console.log("PASS: 13-plan library, responsive widths, runtime and required resources."); + console.log("PASS: release routes, persistence, operating loop, backup, companion and responsive runtime."); } finally { await browser.close(); } From 96302330c87309e25cac0f86a6015bfa3aed3ef3 Mon Sep 17 00:00:00 2001 From: Hustlenix Date: Thu, 24 Sep 2026 22:35:24 +0530 Subject: [PATCH 2/3] ci: smoke-test each successful live deployment --- .github/workflows/live-release-smoke.yml | 40 ++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/live-release-smoke.yml diff --git a/.github/workflows/live-release-smoke.yml b/.github/workflows/live-release-smoke.yml new file mode 100644 index 0000000..eee595c --- /dev/null +++ b/.github/workflows/live-release-smoke.yml @@ -0,0 +1,40 @@ +name: Live Release Smoke + +on: + workflow_run: + workflows: ["Build and Deploy to GitHub Pages"] + types: [completed] + +permissions: + contents: read + +concurrency: + group: live-release-smoke + cancel-in-progress: true + +jobs: + verify-live: + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.head_branch == 'main' }} + runs-on: ubuntu-latest + steps: + - name: Checkout deployed commit + uses: actions/checkout@v7 + with: + ref: ${{ github.event.workflow_run.head_sha }} + + - name: Setup Node + uses: actions/setup-node@v7 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Install Chromium + run: npx playwright install --with-deps chromium + + - name: Verify deployed release + env: + PLAYWRIGHT_BASE_URL: https://hustlenix.github.io/LevelUp + run: node verify-release.mjs From 25a50d037e35929a440c2257bcc08e7c55b20cce Mon Sep 17 00:00:00 2001 From: Hustlenix Date: Thu, 24 Sep 2026 22:35:40 +0530 Subject: [PATCH 3/3] test: use accessible fieldset locator for companion motion --- verify-release.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/verify-release.mjs b/verify-release.mjs index 8b8ffb8..6f4013b 100644 --- a/verify-release.mjs +++ b/verify-release.mjs @@ -114,7 +114,7 @@ try { await page.locator(".room-trophy").waitFor(); await page.getByRole("button", { name: "settings", exact: true }).click(); - const motionFieldset = page.locator("fieldset").filter({ has: page.locator('legend:text-is("Motion")') }); + const motionFieldset = page.getByRole("group", { name: "Motion" }); await motionFieldset.getByRole("button", { name: "off", exact: true }).click(); await page.locator('aside[aria-label="Level Up companion"][data-motion="off"]').waitFor();