STEP 2040 · 2026-09-14 · rei-aios-a5 · fix + operational finding
トップ「本日の更新」バナー が 縦 3 スクロール分 に 伸びる 問題 の fix を land + push した 直後、 藤本さん side で 「サイト が 見れなくなっている」 事象 が 発生。 root cause は fix 自体 では なく CF Pages deploy 過渡期 (~16s) に browser が 部分応答 (2078 byte) を fetch し、 Cache-Control: public, max-age=31536000, immutable header で 1 年 pin していたこと。 hard reload で 復旧 verify。 未来 Claude 用 の verify discipline 教訓 を 記録。
4d933bc82 land + push + CF Pages 反映 (16s) + 藤本さん hard reload で 復旧 (React children=1, innerLen=121895, chips=4, 「もっと見る」 button + 「全文 → 更新履歴」 link 動作 verify)。
label 44 chars / value 64 chars で clip (title 属性 で full-text 保持)BANNER_VISIBLE_HIGHLIGHTS = 4) + 折りたたみ toggle buttonmax-height: 40vh + overflow-y: auto で 縦 スクロール 伸長 防止title tooltip + #/activity-log リンク で 担保data/daily-banner.json は 無変更 (別 tab STEP 2035 と 独立、 data 側 は 全文 保持)Push + CF Pages deploy 完了 (16s) 直後、 藤本さん が「サイトが見れなくなっている」 と 報告。 私 の 側 (curl x3、 別 tab fresh navigation) では 一貫 して 正常 動作 = 藤本さん 個別 の browser 状態 と 判明。
| source | size | content | React mount |
|---|---|---|---|
| CF edge (curl x3) | 3,789,441 bytes | 3.7MB JS | — |
| 藤本さん browser (memory cache) | encoded 774 / decoded 2078 | 部分応答 (2KB) | 失敗 (children=0) |
| 同 browser 新 tab (?fresh=1) | 3,789,441 bytes | 3.7MB JS | 成功 (children=1) |
| 同 browser hard reload 後 | 3,789,441 bytes | 3.7MB JS | 成功 verify ✓ |
Cloudflare Pages が deploy 過渡期 の 短時間 に 部分応答 (2078 bytes、 3.7MB bundle の 冒頭 のみ) を 200 OK で serve、 藤本さん browser が それを fetch し Cache-Control: public, max-age=31536000, immutable header で aggressive cache (1 年 pin)。 curl は memory cache を 持たない ので 常に fresh fetch → 3.7MB を 返し、 fresh tab の URL query 変更 も cache-key miss で 正常 fetch、 但し 藤本さん の 元 tab の memory cache だけ が 破損コピー を 保持。
performance.getEntriesByType('resource').find(r => r.name.includes('app-XXX.js')).decodedBodySize vs 期待 size 比較document.getElementById('root').children.length > 0 と innerHTML.length > 1000 を assertImmutable cache は 1 年 pin されるため 個別 user の hard reload (Ctrl+Shift+R) でしか 復旧しない。 事象 検知 したら 早めに 影響 user へ hard reload を 依頼 が 最短。 CF Pages 側 は curl で 一貫 healthy を 保つ限り 追加対応 不要。
Vite content-hashing で bundle 名 が build ごと に rotate されるため、 次 build 以降 は 新 bundle 名 (別 URL) を index.html が 参照 → 破損 cache は 参照されず 自然消滅。 現状 は 藤本さん の 個別 hard reload で 十分。
本 commit は git commit --only -- FILES pattern で .git/index race を 回避 (別 tab rei-aios-98/88/be idle 併走中)、 hook 8 段 全 pass (Section 1 inbox merger + Section 4 checker-arc + Section 7 attribution + canonical-citation)。 git add -A 単独 では 447 の 他 tab data/ 変更 を 巻き込む risk だったため、 path 明示 stage + --only isolation が multi-tab session の 定 pattern。
4d933bc82 (127 files、 228+/5129-、 src/renderer/components/launcher/ReiLauncher.tsx + dist-renderer/{index,app}.html + dist-renderer/assets/**)hooks/2026-09-14T11-30_banner-fix-cf-cache-partial-response.md (inbox → 次 commit で MEMORY.md auto-merge)