結論と原因

2026-09-09 16:14 JST時点。React公式エラー説明より、#418は初期HTMLとブラウザ側の描画が一致せず、クライアントで再生成したことを意味する。pr-935-936-overview-2026-09-09の観測を追試したところ、shell一覧の初回表示で5回中5回再現。エラー後の一覧→詳細→一覧・欠落表示は成功した。

ローカルブラウザへ配信するReact bundleに診断ログを一時挿入して、Reactが一覧loadingのdivを期待する位置に、Emotionのcss-global styleがあることを確認。Chakra UI公式ガイドのTurbopack / Emotion hydration不整合と症状が一致する。元ソースへの診断コード変更は行っていない。

同一PR HEAD 373c76b、同じfixture、ChromiumでWebpack出力に変えると同じ5回の操作でpageerrorなし。修正方針はshellビルドだけに--webpackを指定すること。通常build / build:static / devやレポート描画ロジックには変更を加えない。

ユーザー指定の順序と実施内容

  1. 原因調査と修正見通しを確立。
  2. 935を472b607、#936を23c7821でマージ。GitHubのMERGEDを再取得確認。
  3. mainからcodex/shell-hydration-fixを作り、[PR #938](https://github.com/digitaldemocracy2030/kouchou-ai/pull/938)を作成(`c90cae4`、CI待ち、未merge)。
  4. 935作者が明記していたtitle / unlisted noindexは、修正PRのマージ後に後続Issueとして切り出す。

検証

  • viewer Jest: 12 suites / 123 tests成功。
  • shellの本番ビルド、既存package-shellによるfixture同梱とローカルHTTP配信で検証。静的JSONの到達・parseを事前確認。
  • shell E2E既存4件+回帰1件は5 passed(7.9秒)。ローカル専用設定でshellだけを実行し、ブラウザはキャッシュ済みChromiumを使用。
  • 新規E2Eはpageerrorを監視する。元のTurbopack出力では#418で失敗し、Webpack出力では成功することを確認。
  • viewerだけの変更でも回帰テストが発火するようE2E workflowのpathsを補った。
  • APIキー・実APIは使用していない。CIの全体E2E・通常ビルドは別途確認する。

Open Questions

  • 上流でTurbopack / Emotionの問題が解消されたら、同じ回帰テストでWebpack回避策を外せるか確認する。
  • タイトル・検索除外は本エラーとは別件。実配布の用途と接続段階を踏まえてIssueで管理する。

Updates

  • 2026-09-09 16:14: 調査と修正PR作成を記録。マージとIssue作成は続けて実行する。

2026-09-09 16:24 JST — CIのモバイルテストを補正

初回CIはshellの回帰テストを含む76件成功、通常静的exportのモバイル2件失敗。artifactの画面・DOMから、初期表示が折りたたまれた階層リストであり、テストが子クラスタ名の初期表示を前提としていると分かった。画面側の当該ロジックは#935時点から変更されていない。

root / subdirのテストでリスト選択を確認し、全体を展開して子要素を表示する操作を加えた(c8488a7)。dummy-server事前検証4件と、通常static buildを使ったモバイル2件がローカル成功。dummy-server指定のNext版はローカルキャッシュになく、検証時だけworkspaceの16.2.6を使用した。変更対象のBiome検査も成功。CIを再実行中で、PRはまだ未merge。

2026-09-09 16:31 JST — 全手順完了

更新HEAD c8488a7のCIは全チェック成功、全体E2Eは78 passed(4.3分)。[PR #938](https://github.com/digitaldemocracy2030/kouchou-ai/pull/938)をマージし、GitHubのMERGEDとmerge commit 679ee9e13d6e671a82a0978fb1d92c67cc1e669bを再取得確認。local mainもfetch / fast-forwardで一致した。

[Issue #939](https://github.com/digitaldemocracy2030/kouchou-ai/issues/939)「shell配布物にレポート別title・noindexを反映する(#935由来)」を作成し、本文とOPEN状態を再取得確認。#935作者が挙げた制約由来と明記し、実配布への接続時のHTML metadata、Node再ビルド不要の維持、ブラウザ遷移の整合を完了条件にした。

今回解消したのはshell一覧のhydrationエラー。全体E2Eログには通常dev経路のhydrationログが残るが、その経路のビルド方式は本修正では変更していない。全viewer経路で同種エラーがなくなったという意味ではない。