# Worlds Last Parade Release Checklist

Use the current LAN URL from the active local server for device checks. Example from this run:

- `http://192.168.0.116:8001/endofworld/`
- Device QA launcher: `http://192.168.0.116:8001/endofworld/device-qa.html`
- App Review packet: `http://192.168.0.116:8001/endofworld/APP_REVIEW.md`
- Diagnostics HUD: `http://192.168.0.116:8001/endofworld/?debug=qa`
- Fresh-state diagnostics: `http://192.168.0.116:8001/endofworld/?debug=qa&reset=1`
- Direct stage QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=harbor`
- Market stage QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=market`
- Rift Seal QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=harbor&seal=1`
- Direct FEVER QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=harbor&fever=1`
- Reduced Motion QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=harbor&fever=1&motion=reduce`
- Performance QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=spire&quality=saver&fever=1&perf=1`
- Locked-object QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=harbor&locked=1`
- Finale QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=spire&result=complete`
- Forced low-quality QA: `http://192.168.0.116:8001/endofworld/?debug=qa&stage=harbor&quality=saver`
- Tutorial shortcut: `http://192.168.0.116:8001/endofworld/?tutorial=1`
- Support page: `http://192.168.0.116:8001/endofworld/support.html`

## iPhone Safari

- Open `?debug=qa` once during device QA and confirm viewport, DPR, FPS, service worker status, audio state, and touch counters update.
- Use `?debug=qa&reset=1` before first-run checks and confirm the HUD reports `save=fresh` and `reset=yes`.
- Confirm `?debug=qa` shows the expected cache entry, such as `cache=oedo-games-v98:17/17`.
- Tick the matching `実機チェック記録` item in `device-qa.html` after each iPhone pass.
- In `device-qa.html`, run `Probe Cache`, then collect `Device Snapshot` once and keep the viewport, DPR, WebGL, PWA, and `cache=oedo-games-v98:17/17` lines with the device notes.
- In `device-qa.html`, use `Build URLs` from `URL Pack`, then `Copy URLs` or `Share URLs` to move the current-origin real-device link bundle; if it warns about loopback, enter the server-printed LAN origin in `LAN Origin` or open Device QA with `&origin=http%3A%2F%2F<lan-ip>%3A8001`, then build the URLs again.
- In `device-qa.html`, use `Build Runbook` from `Final Pass Runbook`, then `Copy Runbook` or `Share Runbook` to move the exact real-device pass sequence before collecting final Gate Cards.
- In `device-qa.html`, run `Probe Assets` once and keep `manifest=4/4 screenshots=ok` plus `storeAssets=4/4` with the release notes.
- In `device-qa.html`, use `Build Evidence` after the iPhone/iPad passes, then `Copy Evidence` or `Share Evidence` to move the release evidence memo from the checklist, snapshot, cache probe, and current LAN URLs.
- First fresh visit shows only `チュートリアル開始`; non-tutorial stages are locked.
- Tutorial can be completed with touch drag plus BOOST.
- In `device-qa.html`, drag inside `Touch Probe` and confirm it records `touchProbe=pass`, pointer/touch event counts, drag distance, and input interval lines before ticking `iPhone 操作`.
- Tutorial teaches `NEXT`, reaches the toy tier, then asks for BOOST before completion.
- `?tutorial=1` opens the tutorial directly without exposing debug controls.
- After tutorial completion, a reload defaults to `本編を始める` with `チュートリアル` still available.
- Harbor starts from the menu and can collect at least 10 objects without input lag or console-visible failure.
- Moonlit Market unlocks after Garden and shows warm stall/lantern landmarks, denser route planning, and the `Market QA` direct route.
- During Harbor play, confirm the lower HUD shows `NEXT` and that the value advances as the comet grows.
- In iPhone landscape, confirm the compact lower HUD keeps `NEXT` visible while combo/boost mini readouts are hidden.
- Use Locked-object QA or bump into one object that is still too large and confirm the short locked-object coach appears, the object pulses, and steering stays stable.
- Use Rift Seal QA and confirm a seal can be absorbed, `seals=1/2` appears in the QA HUD, FEVER starts, and the result breakdown later includes `封印核`.
- If FPS drops under load, confirm QA HUD `quality` can step down from `sharp` toward `balanced` or `saver` instead of staying choppy.
- In `saver`, confirm the QA HUD reports `shadows=off`, shorter trail count, and `riftStride=2`.
- Open Performance QA until the QA HUD reports at least `perf=10.0s` and `status=watch` or `status=pass`, then return to `device-qa.html` and use `Build Evidence`; the memo should include `[Last Game QA]` with the QA HUD `perf=... avg=... min=... maxDt=... slow=... jank=... status=...` line.
- After backgrounding and returning to a game QA route, use `Build Card` and confirm the `lifecycle=` line records visibility/pagehide/pageshow or resume activity instead of staying missing.
- Use `Build Card` in `device-qa.html` after each device pass and keep the short `Gate Card` output next to the full Release Evidence memo.
- Use `Share Card` on iOS Safari when Universal Clipboard or a share target is easier than manual selection; use `Paste iPhone` / `Paste iPad` in `Final Gate Validator` to pull a copied card into the right field.
- Confirm `Build Card` itself does not report device snapshot issues such as missing real iPhone/iPad device line, viewport, touch profile, WebGL, or standalone evidence before sharing it.
- Confirm each real-device Gate Card says `gateStatus=ready-for-final-validator`, `gateIssues=none`, and `gateNext=paste this card into Final Gate Validator` before pasting it into `Final Gate Validator`.
- Paste the final iPhone and iPad Gate Cards into `Final Gate Validator`; do not release until it reports `result=ready-for-release` after accepting the matching `device=iphone-*` and `device=ipad-*` lines, viewport evidence, touch profile, WebGL renderer, standalone line, `audio=running`, `beep=played`, `touchProbe=pass`, cache, store asset, lifecycle, and performance lines.
- BEST updates for the current stage after clear or fail, and remains after reload.
- Stage clear overlays show a C/B/A/S rank, and stage cards retain the best rank plus Rift Seal best next to BEST after reload.
- Result overlays show rescue percent, remaining time, max combo, and a next-rank hint.
- Finale QA shows `世界の終幕を反転`, an S-rank capable clear, and obvious replay/tutorial/menu routes.
- `?debug=qa` shows viewport, DPR, canvas size, FPS, input counters, audio state, service worker status, and score.
- Sound button starts audio only after a tap and does not block game start if audio is denied.
- In `device-qa.html`, tap `Unlock Audio`; confirm the output records `audio=running` and `beep=played`, or attach the recorded blocked/unsupported line as a release risk.
- In `device-qa.html`, tap `Vibrate`; confirm `haptics=supported request=accepted` on supported devices, or keep `haptics=unsupported` as an optional-feature note.
- With sound enabled, confirm collect, FEVER, clear, and fail cues are audible but not harsh on iPhone/iPad speakers.
- Open Settings from the gear button, adjust volume, switch quality to `軽量`, and confirm the QA HUD reports `settings=q:saver`.
- Open Settings from the menu overlay Settings button and confirm the same panel is reachable while the game is not running.
- Adjust sensitivity from Settings and confirm the QA HUD reports the new `sens` value and drag steering still feels controllable.
- Toggle haptics off and confirm gameplay still works without relying on vibration feedback.
- Toggle `低刺激` on, or use Reduced Motion QA, and confirm QA HUD reports `motion:reduced` while FEVER and collection rules still work with calmer rift, particle, trail, and satellite motion.
- Tick `Comfort/A11y` in `device-qa.html` after confirming low-stimulation mode, readable text, 44px-or-larger touch targets, no horizontal overflow, and no controls hidden behind safe areas.
- Confirm the menu/result dialog focus moves to the primary action when overlays open, and focus is not left on hidden overlay controls after starting play.
- In Settings, tap `進行リセット` once and confirm it changes to `もう一度`; tap it again and confirm the menu returns to `チュートリアル開始` while comfort settings remain available.
- Confirm `Privacy`, `Support`, and `Credits` links are reachable from the menu overlay, readable, and return to the game.
- Pause, resume, background tab, and return-to-tab behavior keep the game stable.
- If Safari reloads or drops WebGL under memory pressure, the game shows a recovery/pause state rather than staying blank.
- If WebGL cannot be created at startup, the game shows the `3D描画を開始できません` recovery panel with reload and launcher routes rather than a blank canvas.
- Portrait layout has no horizontal or vertical page scrolling.
- Landscape layout keeps controls and HUD reachable.

## iPad Safari

- Open `?debug=qa` once and confirm the diagnostics panel does not hide the core controls during a short Harbor run.
- Confirm the diagnostics panel reports the expected service-worker cache count before offline/PWA checks.
- Menu, stage cards, HUD, stick, and BOOST fit in portrait and landscape.
- Harbor, Garden, Market, and Spire each show distinct floor colors, animated sky-rift motion, and landmark silhouettes.
- Use direct FEVER QA once to confirm the HUD and sky rift pulse, then build combo naturally and confirm nearby collectable objects gently pull toward the comet without causing control loss.
- In Garden or Market, collect at least one Rift Seal naturally and confirm the optional route feels readable rather than mandatory.
- Use Result QA once and confirm the clear overlay explains rescue percent, time, Rift Seals, combo, and the next Rank target without clipping.
- Use Fail QA once and confirm the fail overlay explains the missing rescue amount and still offers an obvious retry.
- Use Finale QA once and confirm the complete overlay reads as a final win rather than a normal stage clear.
- In short iPhone landscape, confirm menu/result overlays keep primary, secondary, and menu actions reachable, and that the panel itself can vertically scroll when content is taller than the viewport.
- Tick the matching `実機チェック記録` item in `device-qa.html` after each iPad pass.
- Drag steering feels proportional on the larger screen; the guide arrow remains subtle.
- In `device-qa.html`, drag inside `Touch Probe` once in portrait or landscape and keep the `pointerEvents`, `drag`, and `interval` lines with the iPad notes.
- Harbor gameplay stays smooth for at least 90 seconds.
- Use `quality=saver` once and confirm the game remains playable, nonblank, correctly framed, and visibly still readable with reduced effects.
- Use Settings to force `軽量`, return to play, and confirm the QA HUD keeps `quality=saver` instead of adaptive auto-changing during the short check.
- Stage clear overlay, retry, menu, and tutorial replay buttons are reachable.

## PWA And Offline

- `manifest.webmanifest` is loaded for `/endofworld/`.
- `manifest.webmanifest` includes install display metadata plus the prepared iPhone/iPad screenshot candidates.
- `manifest.webmanifest` includes player-facing `Play` and `Tutorial` shortcuts.
- Share-card metadata uses the Harbor action screenshot for Open Graph and summary-large-image previews, with locale and image alt text.
- `device-qa.html`, `PRIVACY.md`, `SUPPORT.md`, `APP_REVIEW.md`, and `STORE_RELEASE.md` are present for release submission and review notes.
- `privacy.html`, `support.html`, and `credits.html` are reachable from the menu overlay and remain readable on iPhone/iPad Safari.
- Loading `/endofworld/` directly registers the root `service-worker.js`.
- Apple touch icon appears when adding to Home Screen.
- After one online load, `/endofworld/`, `game.js`, local Three.js, runtime background, manifest, icons, and player-facing legal/support pages are available from the service worker cache.
- In `device-qa.html`, tap `Probe Cache` and confirm `required=oedo-games-v98`, `cache=oedo-games-v98:17/17`, and `missing=none`.
- Tick `Store Assets` in `device-qa.html` after `Probe Assets` reports `manifest=4/4 screenshots=ok` and `storeAssets=4/4`.
- Cache version in `service-worker.js` was bumped after asset or manifest changes.
- `index.html` references `game.js` with a version query so Safari does not keep stale game code after a service-worker update.
- Service worker install treats external CDN files as optional, while `/endofworld/` release assets remain required.
- Service worker calls `skipWaiting()` and `clients.claim()` so updated release assets are adopted without a long stale-worker window.
- Service worker navigation fallback handles query-string starts such as `?tutorial=1` by returning the cached `/endofworld/` shell.
- Device QA `Store Assets Probe` output includes manifest screenshot coverage plus Harbor, Garden, Market, and Spire image dimensions.
- Device QA `Release Evidence` output includes the selected origin, required cache name, checklist state, device snapshot, audio/haptics probe, touch probe, cache probe, store assets probe, key QA URLs, and the latest saved game QA report.
- Device QA `URL Pack`, `Final Pass Runbook`, and `Release Evidence` can use a saved `LAN Origin` override or `origin`/`lan` query parameter so desktop-local pages generate iPhone/iPad-ready URLs, and each panel exposes copy/share actions for iOS Share Sheet or Universal Clipboard handoff.
- Device QA `Final Pass Runbook` output includes the selected-origin URLs, required cache name, real-device tutorial, reduced-motion, performance, audio, touch, cache, asset, Gate Card, and final validator sequence.
- Device QA `Gate Card` output includes the current device class, viewport, touch profile, WebGL renderer, audio/haptics lines, touch-probe lines, cache result, store assets result, lifecycle result, checklist count, and latest performance line; its self-diagnosis also rejects non-device cards and missing viewport/touch/WebGL/standalone evidence before final validation.
- Device QA `Gate Card` and `Final Gate Validator` include share/paste actions so real iPhone and iPad cards can move through iOS Share Sheet, Universal Clipboard, or normal clipboard without reselecting long text.
- Device QA `Final Gate Validator` checks pasted iPhone/iPad Gate Cards for matching `device=iphone-*` and `device=ipad-*` lines, viewport evidence, touch profile, WebGL renderer, standalone line, `checks=8/8`, `audio=running`, `beep=played`, `touchProbe=pass`, pointer down/up evidence, drag distance, `cache=oedo-games-v98:17/17`, `missing=none`, `storeAssets=4/4`, lifecycle evidence, performance evidence with `perf` at least 10 seconds and `status=watch` or `status=pass`, plus `gateStatus=ready-for-final-validator`, `gateIssues=none`, and `gateNext=paste this card into Final Gate Validator`.

## Store Screenshots

- `STORE_SCREENSHOTS.md` records the capture URLs and candidate screenshot files.
- Credits and third-party notices state that `store-screenshots/` candidates are captured from the game runtime and contain no third-party artwork, user-generated content, device photos, or external brand material.
- `?shot=store&stage=harbor&fever=1` starts a clean Harbor action scene without the QA panel.
- `?shot=store&stage=garden&fever=1` starts a clean Garden combo scene without the QA panel.
- `?shot=store&stage=market&fever=1` starts a clean Moonlit Market route-planning scene without the QA panel.
- `?shot=store&stage=spire&quality=saver` starts a clean iPad finale scene at the low render-quality profile.
- Candidate screenshots exist at `store-screenshots/iphone-harbor-fever.png`, `store-screenshots/iphone-garden-combo.png`, `store-screenshots/iphone-market-route.png`, and `store-screenshots/ipad-spire-finale.png`.

## Age Rating Notes

- Store Release and App Review notes describe the game as family-friendly arcade play.
- Confirm the submitted rating answers match the current feature set: no realistic violence, blood, weapons, scary imagery, sexual content, gambling, ads, purchases, chat, user-generated content, or personal-data collection.

## Release Evidence Already Collected In Codex

- `node endofworld/qa-check.mjs` checks direct service-worker registration, launcher link, stage metadata, release assets, manifest metadata, and precache coverage.
- `node --check endofworld/game.js`
- `node --check service-worker.js`
- `node -e "JSON.parse(require('fs').readFileSync('endofworld/manifest.webmanifest','utf8'))"`
- Desktop, iPhone-size, and iPad-size browser screenshots with no console warnings/errors.
- `390x844`, `1024x1366`, and `1280x720` screenshot pixel checks are nonblank and change after drag input.
- Served `/endofworld/` HTML references `./game.js?v=20260612-95`; current in-app Browser passes verify `cache=oedo-games-v98:17/17`, `renderLost=no`, and no console warnings/errors on iPhone-width, iPad-width, and desktop-width checks.
- iPhone-width `390x844` Device QA Gate Card reports `device=iphone-viewport`, `viewport=390x844 dpr=2`, `touch=max0 coarse=no`, `webgl=webgl2`, `cache=oedo-games-v98:17/17`, `missing=none`, `storeAssets=4/4`, and the expected automation-side `gateStatus=needs-review` for missing real audio/touch/performance evidence.
- iPad-width `1024x1366` Performance QA reports `perf=11.8s avg=31 min=30 maxDt=33ms slow=0 jank=0 status=watch`, `cache=oedo-games-v98:17/17`, `renderLost=no`, and no overflow.
- Desktop-width `1280x720` Market FEVER smoke reports `cache=oedo-games-v98:17/17`, `renderLost=no`, no overflow, no console warnings/errors, and drag input increments pointer/mouse counters.
- Short landscape `844x390` menu overlay can open Settings, scroll to `進行リセット`, arm it as `もう一度`, and return to the first-run tutorial menu with no horizontal overflow.
- LAN HTTP 200 OK for `/endofworld/`, runtime background, manifest, icons, and notices.
- QA now verifies the release privacy note, store release note, PWA metadata, button ARIA state, and service-worker cache version.
- QA now verifies manifest screenshot metadata and social share-card metadata for store/listing polish.
- QA now verifies manifest shortcuts plus the release tutorial shortcut route.
- QA now verifies optional external precache handling plus `skipWaiting()` and `clients.claim()`.
- QA HUD reports Cache Storage coverage for `/endofworld/` required offline assets.
- Stage play now includes an animated 3D sky rift plus Parade Fever, a high-combo state that slows rift pressure and gives subtle collectable magnet pull.
- Stage play now includes a lower-HUD `NEXT` absorb hint so players can see the next growth tier and mass gap while collecting.
- Landscape play keeps a compact `NEXT` mini HUD visible even when the combo/boost mini readouts are hidden to preserve touch space.
- Short landscape overlays use a constrained, touch-scrollable panel and compact horizontal actions so result/menu routes remain reachable on small iPhones.
- Touchmove suppression now allows visible overlay/startup panels to receive vertical touch scrolling while keeping gameplay surface scrolling locked.
- Stage play now gives a brief locked-object coach, haptic pulse, and visual spark when the comet touches an object that is still too large to absorb.
- Tutorial now has a five-prompt onboarding sequence for movement, `NEXT`, toy-tier unlock, BOOST, and rescue completion.
- QA now checks the sky-rift root, rift diagnostics count, Parade Fever activation, debug FEVER launch, timer relief, magnet pull, and HUD label wiring.
- Runtime now includes adaptive renderer quality for older iPhone/iPad GPUs, with QA HUD `quality` diagnostics, forced `quality=saver`, and saver-specific effect budgets for shadows, particles, trail length, satellites, and rift nodes.
- Runtime now includes persistent C/B/A/S stage medals based on rescue mass, remaining time, Rift Seals, and max combo; QA HUD reports current medal, max combo, and seal bests.
- Stage select now includes a compact RESCUE/RANKS/SEALS/NEXT progress summary, and QA HUD reports `progress=...` plus `sealBest=...` for release-device state checks.
- Clear/fail result overlays now include score breakdown text and next-rank coaching, with QA-only `result=clear` and `result=fail` routes for device checks.
- Final-stage completion has a QA-only `result=complete` route so the all-clear overlay can be checked on-device without manually clearing Spire.
- Runtime now includes procedural ambient audio plus separate collect, FEVER, clear, and fail cues, all started only after user gesture audio unlock.
- Runtime now hardens locked/suspended audio contexts: if Safari or automation does not move `AudioContext` to `running`, the sound toggle returns to off while gameplay continues.
- Runtime now shows a startup recovery panel if WebGL cannot be created, instead of leaving a blank canvas.
- Runtime now includes a persistent Settings panel for volume, input sensitivity, render quality mode, and haptics; QA HUD reports those settings for real-device verification.
- Runtime now supports low-stimulation motion from OS `prefers-reduced-motion`, Settings `低刺激`, or `?debug=qa&motion=reduce`; QA HUD reports `motion:reduced`.
- Runtime now supports `?debug=qa&perf=1` for real-device performance evidence; QA HUD reports elapsed time, average FPS, minimum FPS, max frame time, slow/jank frame counts, and `status`.
- Runtime now reports `lifecycle=` in the QA HUD and saved game QA report so real-device Gate Cards can show background, return-to-tab, resume, and context-recovery activity.
- Runtime now includes store-shot URLs for clean App Store candidate screenshots without QA diagnostics or browser-game utility buttons.
- Device QA launcher now collects fresh tutorial, direct stage, FEVER, saver, Motion QA, Perf QA, worst-case, store-shot, and release-document links for real iPhone/iPad Safari runs.
- Device QA launcher now includes a URL Pack builder for copying or sharing current-origin Game, Device QA, Fresh QA, Tutorial, Motion, Perf, and App Review links with `Share URLs`.
- Device QA launcher now includes a `LAN Origin` override for generating real-device URL packs from a desktop-local browser tab.
- Device QA launcher now includes a Final Pass Runbook builder for copying or sharing the real-device pass sequence with `Share Runbook` before final iPhone/iPad Gate Cards are collected.
- Device QA launcher now persists an eight-item real-device checklist in local storage and can display a summary for release notes.
- Device QA launcher now includes a Device Snapshot panel for recording viewport, DPR, WebGL renderer, standalone status, storage, Service Worker, and required-cache hit evidence.
- Device QA launcher now includes an Audio / Haptics Probe for recording tap-triggered AudioContext state, confirmation beep, and optional vibration support.
- Device QA launcher now includes a Touch Probe for recording a short real-device drag, pointer/touch event counts, drag distance, and event interval evidence.
- Device QA launcher now includes a PWA Cache Probe for direct Service Worker and required offline asset checks on the device.
- Device QA launcher now includes a Store Assets Probe for manifest screenshot and store image dimension evidence on the device.
- Device QA launcher now includes a Release Evidence panel that builds one copyable memo from checklist, snapshot, cache probe, current LAN URLs, and the latest saved game QA/performance report.
- Device QA Gate Cards now include the latest saved game `lifecycle=` line alongside cache, store assets, touch, audio, performance, and real-device snapshot evidence.
- Device QA now includes `Share Card`, `Paste iPhone`, `Paste iPad`, and `Share Verdict` actions to reduce real-device evidence transfer mistakes before final validation.
- Device QA now includes a Final Gate Validator that produces a copyable `ready-for-release` or `needs-review` verdict from pasted iPhone/iPad Gate Cards, and the ready verdict now requires matching device class, viewport, touch profile, WebGL, standalone, audio, touch, cache, store asset, lifecycle, and settled 10-second-plus performance evidence.
- Player support is prepared with cached `support.html` and `SUPPORT.md`, including common fixes, data deletion, comfort settings, Device QA report guidance, and review notes.
- Settings now include a menu-overlay entry point plus a two-step progress reset for support and review checks.
- App Review packet is prepared with reviewer route, feature scope, data policy notes, content safety notes, and the manual real-device gate.
- Device QA now includes an eighth `Comfort/A11y` gate for reduced motion, readable text, safe areas, touch-target size, and horizontal-overflow review.
- Menu/result overlays now expose dialog semantics with title/description relationships, primary-action focus on open, and hidden-focus cleanup when play starts.

## Remaining Manual Gate

Do not call this fully release-ready until a real iPhone and a real iPad have passed the Safari checks above.
