STEP 2040 · 2026-09-14 · rei-aios-a5 · fix + operational finding

Daily banner 1 行 chip 化 + CF Pages immutable cache pin 事象 の 記録

トップ「本日の更新」バナー が 縦 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 教訓 を 記録。

Outcome: commit 4d933bc82 land + push + CF Pages 反映 (16s) + 藤本さん hard reload で 復旧 (React children=1, innerLen=121895, chips=4, 「もっと見る」 button + 「全文 → 更新履歴」 link 動作 verify)。

1. Fix 内容 (ReiLauncher.tsx 79+/6-)

2. 事象: 「サイトが見れない」

Push + CF Pages deploy 完了 (16s) 直後、 藤本さん が「サイトが見れなくなっている」 と 報告。 私 の 側 (curl x3、 別 tab fresh navigation) では 一貫 して 正常 動作 = 藤本さん 個別 の browser 状態 と 判明。

2.1 観測された 不整合

sourcesizecontentReact mount
CF edge (curl x3)3,789,441 bytes3.7MB JS
藤本さん browser (memory cache)encoded 774 / decoded 2078部分応答 (2KB)失敗 (children=0)
同 browser 新 tab (?fresh=1)3,789,441 bytes3.7MB JS成功 (children=1)
同 browser hard reload 後3,789,441 bytes3.7MB JS成功 verify ✓

2.2 Root cause

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 だけ が 破損コピー を 保持。

3. 未来 Claude 用 教訓

discipline pattern candidate: 大型 bundle (>1MB) を CF Pages に push 後 の verify は curl 単独 では 不足。 fresh fetch のみ を 見るため、 browser side の 部分応答 cache は 検出不能。

3.1 verify 手順 の 強化

3.2 broken cache の 復旧

Immutable cache は 1 年 pin されるため 個別 user の hard reload (Ctrl+Shift+R) でしか 復旧しない。 事象 検知 したら 早めに 影響 user へ hard reload を 依頼 が 最短。 CF Pages 側 は curl で 一貫 healthy を 保つ限り 追加対応 不要。

3.3 予防

Vite content-hashing で bundle 名 が build ごと に rotate されるため、 次 build 以降 は 新 bundle 名 (別 URL) を index.html が 参照 → 破損 cache は 参照されず 自然消滅。 現状 は 藤本さん の 個別 hard reload で 十分。

4. 副次教訓: multi-tab commit isolation

本 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。

5. Artifacts