Skip to content

fix(frontend): ErrorBoundary OfflineScreen masks real loader errors #524

@yu23ki14

Description

@yu23ki14

One-liner

ErrorBoundary!online のとき無条件で OfflineScreen を返すため、本当のローダーエラー / 500 系がユーザーから見えなくなる。

Description

pkgs/frontend/app/root.tsx:105 付近の ErrorBoundaryuseOnlineStatus()!online を判定基準にして、OfflineScreen を優先表示している。iOS Safari がモバイル↔Wi-Fi 切替時に瞬間的に offline を報告したり、page-visibility 拡張で false が立つ瞬間に Goldsky が 502 を返した場合、ErrorBoundary は OfflineScreen に切り替わる。

失敗シナリオ

  1. Goldsky が一時的に 502
  2. 同タイミングでユーザーのモバイル網が一瞬切れる
  3. ErrorBoundary は「オフラインです」を出す
  4. ユーザーは画面リロードを繰り返す
  5. 接続は復活しているのに同じ表示なので、サーバー障害だと気付けない

サポート側からも障害の検知が遅れる。

Requirements

  • OfflineScreen の表示条件を見直す。簡単には「error が存在する場合は OfflineScreen を出さない」分岐を入れる
  • あるいは、navigator.onLine と実際のネットワーク失敗を分離するため、フェッチ起点で網切れを検出する仕組みを足す
  • 真のオフラインケース(loader が走らない / fetch が TypeError: Failed to fetch)でのみ OfflineScreen を出す

Supplements

関連ファイル:

  • pkgs/frontend/app/root.tsx
  • pkgs/frontend/hooks/useOnlineStatus.ts
  • pkgs/frontend/app/components/error/error-screens.tsx

出典: v3 code-review (/code-review ultra-high effort, 2026-05-27)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    MiddlePriority MiddlebugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions