
## 1209-59 — stack_ipad_webgpu_fallback_RETEST (反証ベース・REMINDER#31)

- target: Business/Stack/mvp/frontend index.html（GAS include styles/webllm/app を実ファイル展開→/tmp/stack_ipad_test/index_expanded.html）
- 手法: Playwright headless Chromium・**Navigator.prototype に gpu getter定義**でnavigator.gpu上書き（インスタンス直defineは本環境で黙って無効＝初回テスト誤判定の原因。反証で発見し是正）
- UA/viewport: iPad Safari相当 (iPad; CPU OS 17_4) / 1024x1366

### Case A — navigator.gpu = undefined（iPad Safari相当）
- 実測: webgpu_in_nav=false / StackLLM.webGPU=false / isWebGPUSupported()=false → fast-fail経路確定
- splash消滅(splash_present=false) / app可視(app_hidden=false) → **白画面なし・固着なし**
- banner表示: 「お使いの端末（iPad等）はAI機能非対応のため一部機能制限モードで動作します。」
- chip: 「AI非対応端末（ルール動作）」 / page_errors=[]
- 実操作: 全体filter click=OK(list_title="全体") / 今週filter=OK / 設定モーダル open=OK・Esc close=OK
- shot: `/tmp/stack_ipad_test/vc_ipad_nogpu_1_initial.png`（Read目視済）/ `vc_ipad_nogpu_2_settings.png`（モーダル操作可・Read目視済）

### Case B — navigator.gpu present（回帰）
- 実測: webgpu_in_nav=true / StackLLM.webGPU=true → 通常WebLLMロード経路へ入る（CDN import→MLCEngine生成まで到達）
- banner非表示（正） / splash="LLM初期化…35%"進捗表示（ダミーGPUのためmaxBufferSizeで失敗）
- shot: `/tmp/stack_ipad_test/vc_gpu_present_1_initial.png`（Read目視済・白画面でなくロードスプラッシュ）

### Case B 固着検証（最重要・load失敗でもsplash固着しないか）
- t=2s/4s: splash=true(ロード中) → **t=6s: splash=false・appHidden=false・chip="LLM失敗→ルール"**
- 結論: WebGPU有でもengine生成失敗時、init try/catch+setTimeout(hideSplash)で**splash必ず解除＝固着しない**

**結論: REMINDER#31の「白画面にならず動く」主張は静的HTML＋シミュレーションで実証OK。残=本物iPad Safari実機(ユーザー)＋GAS本番HtmlServiceレンダリング。**

**🛡 Jarvis MUST `Read` each screenshot before claiming success.**

## 0928-42 — reminder17_pwa

- url: http://localhost:8765/dashboard/index.html
- viewport: 1400x900
- pageH: 9389
- positions: 3

### Samples

- pos0: scrollY=0 shot=`/tmp/visual_check_reminder17_pwa_00.png`
- pos1: scrollY=4244 shot=`/tmp/visual_check_reminder17_pwa_01.png`
- pos2: scrollY=8489 shot=`/tmp/visual_check_reminder17_pwa_02.png`

**🛡 Jarvis MUST `Read` each screenshot before claiming success.**

## 0929-20 — stack_ipad_nowebgpu

- url: file:///tmp/stack_ipad_test.html
- viewport: 1400x900
- pageH: 900
- positions: 3

### Samples

- pos0: scrollY=0 shot=`/tmp/visual_check_stack_ipad_nowebgpu_00.png`
- pos1: scrollY=0 shot=`/tmp/visual_check_stack_ipad_nowebgpu_01.png`
- pos2: scrollY=0 shot=`/tmp/visual_check_stack_ipad_nowebgpu_02.png`

**🛡 Jarvis MUST `Read` each screenshot before claiming success.**
