Pebble Deployment and Verification

Artifact split

Pebble is not bundled into the SvelteKit frontend build.

shell:
  source: frontend/src/routes/play/[id]/+page.svelte
  artifact: frontend/build/
  service: funday-frontend.service
iframe:
  source: games/pebble/
  artifact: games/pebble/build/
  public_path: /games/assets/pebble/build/

Changing only frontend/build/ can leave the old Pebble game visible. Changing only games/pebble/build/ can leave the old shell visible. Visual changes that cross the boundary require both artifacts to be verified.

Production rules

  • Follow the Funday frontend production deploy manifest in /home/usr/AGENTS.md.
  • Never run raw vite build, npm run build:vite, or npm run build --no-restart against the active production frontend service.
  • Use the atomic frontend deployment command for shell changes: cd funday/frontend && npm run deploy.
  • Before a frontend deploy, verify at least 5 GB MemAvailable and no orphan vite dev process on port 5173.
  • Rebuild the static Pebble artifact using the repository’s Pebble/static-game build path, not a manual copy.
  • Do not leave timestamped build backups or ad hoc frontend-deploy/ directories.

Verification sequence

  1. Confirm the intended source revision and Pebble plugin version.

  2. Build Pebble and verify games/pebble/build/ contains its entry HTML, JS, and CSS assets.

  3. Deploy the frontend shell through the atomic production process when shell files changed.

  4. Confirm the public iframe URL:

    https://funday.gg/games/assets/pebble/build/?embed=1&theme=themeable
  5. Open the exact public route:

    https://funday.gg/play/pebble
  6. Verify with browser/network evidence:

    • iframe response is successful;
    • iframe asset URLs are current rather than stale;
    • shell and iframe resolve the same theme;
    • no visible theme flash occurs;
    • desktop and mobile layouts have intentional board surfaces;
    • gameplay HUD, multiball, free-ball, game-over, and level-clear states render coherently.

Visual proof matrix

StateDesktopMobileRequired evidence
Initial boardyesyesscreenshot + iframe URL
Aim/trajectoryyesyesscreenshot during aim
Multiball/bonusyesyesscreenshot + readable notification
Game overyesyesscreenshot of semantic result card
Level clearyesyesgenuine gameplay transition, not debug-loaded state
Theme light/darkyesyesno-flash comparison

Stale-artifact diagnosis

If source and public visuals disagree, compare both build identities before changing styling:

frontend/build/             shell artifact
 games/pebble/build/         iframe artifact
 /play/pebble               combined public surface

Do not call a source-level visual fix deployed until the exact public route and iframe asset identity confirm it.

Ask Docs

AI assistant to help answer questions about the documentation. Answers are read-only and cite docs/source.

Hi! How can I help you with the documentation today? Answers are read-only and cite docs/source.

Ctrl+Enter to send