Jewelry AI・ホーム画面

ホーム画面は、ある一つの部分でだけ障害を報告します

一つの画面の三つの部分が、それぞれ別の供給元から描かれています。アプリの中に持っているリスト、サーバーだけが渡せる設定、そして端末上のキャッシュです。障害はこの三つに違う形で届きます。画面が半分は正常で半分は壊れて見えるのは、そのためです。

一つの画面に三つの供給元

ホーム画面は一つの答えから組み立てられているわけではありません。カテゴリー一覧はアプリの中に持つリストから、ツールの行はサーバーの設定だけから、最近の生成結果の帯はまず端末上の保存領域から読まれます(アプリケーションのソースで2026年8月に確認)。

そのため障害は、三つの部分に等しくは届きません。ツールの行は設定なしでは何も描けないので、失敗を報告します。カテゴリー一覧は4枚のカードを描くのにサーバーを必要としないので、そのまま描きます。以前の作業が控えられている帯はキャッシュから埋まり、いつもどおりに見えます。

接続についての表明は、一か所だけで行われます。画面の上端に出るバナーです(components/ui/offline-banner.tsx:17-22)。その下の部分は、それぞれの挙動をそのまま保ちます。

半分は正常で半分は壊れている画面とは、この差が見えている状態です。別々の障害がいくつも起きているのではなく、一つの障害が三つの供給元に届いているだけです。

画面の各部分と、その供給元と、障害が及ぼすこと

一つの部分だけから結論を出す前に、この表を上から下まで読んでください。

画面の部分内容の供給元サーバーに接続できないとき
接続のバナー接続についてのアプリ自身の判断画面の上端に表示されます
カテゴリー一覧サーバーの設定。代替としてアプリの中に持つリスト4枚のカードを描きます。読み込み状態もエラー状態もありません
ツールの行サーバーの設定のみツールを読み込めなかったと表示し、再試行ボタンを出します
最近の生成結果の帯(以前の作業があるアカウント)端末上のアカウント単位の保存領域。サーバーの答えより先に読まれますキャッシュから埋まります。画像が表示されないものがあります
最近の生成結果の帯(作業が一つもないアカウント)どちらの供給元にも渡せるものがありませんエラーの箱と再試行ボタンを表示します

障害を報告する唯一の部分がツールの行です

同時に、悲観的に書かれている部分でもあります。サーバーから答えがないとき、ツールは開放ではなく閉じているものとして報告されます。

読み込み中と、接続できないは、別の絵です。
スケルトン表示のカードが4枚なら、設定はまだ読み込み中です。読み込み失敗の表示と再試行ボタンなら、取得できなかったということです。実際の利用可否が現れるのは、設定が届いたあとの三つ目の状態だけです(apps/jewelry-mobile/src/features/home/tools-section.tsx)。
設定がないことは、閉じていることとして数えられます。
利用可否はサーバーの設定だけから決まり、設定がない場合は楽観的に開放されたツールではなく、利用不可のツールになります(apps/jewelry-mobile/src/features/generation/tools.ts)。
読み込み中が近日公開に見えることは、もうありません。
tools-section.tsxに記録された修正(コミット81f8fff)が、読み込み中の状態と接続できない状態を分けました。それ以前は、設定が届く途中で4つのツールすべてが近日公開として表示されていました。これは過去の挙動であり、いま見えているものではありません。
どのツールが開いているかは、アプリケーションからはまったく読み取れません。
それは問い合わせた時点のサーバーの設定に完全に依存するため、コードもこのページもそれを述べられません。この行は答えを表示する場所であって、答えの出どころではありません。

カテゴリー一覧がそろって見え続ける理由

一覧はサーバーが開放しているカテゴリーを問い合わせ、その答えが空か得られないときは、代わりにアプリの中に持つリストを使います(apps/jewelry-mobile/src/features/generation/config.ts)。目に見える結果は、どんな状態でも4枚のカードです。

並び順もアプリのものです。サーバーがどの順で送っても、リング、ブレスレット、ネックレス、ピアス・イヤリングの固定された順になります(config.ts:43。この挙動はhome-registry.test.ts:24で固定されています)。

したがって、カードがあることは、そのカテゴリーで画像を生成できるという約束ではありません。それを決めるのは作成フローの中でのツールの利用可否であり、サーバーに接続できないあいだ、その答えは端末上に存在しません。

一覧には独自の読み込み状態もエラー状態もありません(apps/jewelry-mobile/src/features/home/category-grid.tsx)。障害を報告する手段を持たないため、その落ち着いた見た目は、ツールの行に反対する第二の意見ではありません。

帯が障害を報告する唯一の分岐

帯の空の領域には二つの分岐があります。サーバーに接続できず、かつ生成ジョブが一つも保持されていないときは、エラーの箱と再試行ボタンが出ます(apps/jewelry-mobile/src/features/home/recent-generations.tsx)。サーバーにつながっていて生成ジョブがないときは、これとは別の、帯そのものを扱うページに属する通常の空の表示になります。

つまりエラーの箱は、二つのことを同時に述べています。サーバーに接続できなかったこと、そして代わりに描くキャッシュもなかったことです。以前の作業があるアカウントは、この分岐には入りません。

ホーム画面に、下に引っ張って更新する操作はありません。スクロール領域に更新用のコントロールが渡されていないためです(components/ui/screen-container.tsx:59-66)。失敗した部分の中にある再試行ボタンが、もう一度求めるための手動の道であり、同じことをする操作は存在しません。

この画面が誘うのに、根拠のない結論

どれも画面に出ているものから自然に出てくる結論で、どれも隣に書いた理由で誤りです。

  • 4枚のカテゴリーカードを、4つの動いているカテゴリーとして読む。

    一覧はアプリ自身のリストに代替されます。実際に何を生成できるかは、カードがあることではなくツールの設定が決めます。

  • ツールの読み込み失敗を、機能の取り下げやアカウントの制限として読む。

    供給元がサーバーの設定だけである部分の、エラー状態です。隣にあるボタンで再試行します。

  • 埋まった帯を、作業が端末に保存されている証拠として読む。

    アカウント単位の保存領域のオフライン用キャッシュです。記録そのものはサーバー側にあります。

  • 古いカードの代替表示を、削除された画像として読む。

    キャッシュされた画像のアドレスには有効期限があるため、項目が一覧に残ったまま、そのアドレスだけが解決しなくなることがあります。

  • 落ち着いたカテゴリー一覧を、接続が正常である証拠として読む。

    一覧には読み込み状態もエラー状態もないため、どちらの場合も同じに見え、サーバーについて何の情報も持ちません。

この画面から分からないこと

いずれもホーム画面が知らないことであり、どう読み取っても得られません。

  • 生成に使えるツールがどれか。それは問い合わせた時点のサーバーの設定であり、アプリケーションからは読み取れません。
  • 見えているカテゴリーで画像を生成できるかどうか。
  • サーバーに接続できなかった理由や、いつ答えるようになるか。
  • この端末にたまたまキャッシュされているもの以外の、作業の履歴。
  • 帯がどう構成され、どんな説明が付き、時間がどう表示されるか。その規則は帯そのものを扱うページに属します。
  • サインアウトされることや、ようこそ画面に戻ることについて。これはホーム画面の挙動ではなく、アカウントのライフサイクルです。

よくある質問

ツールの部分は読み込めなかったと出ているのに、カテゴリーは問題なさそうです。アプリが壊れているのでしょうか。

壊れていません。二つの部分は供給元が違います。ツールの行はサーバーの設定だけから決まるため(apps/jewelry-mobile/src/features/generation/tools.ts)、答えがなければ読み込み失敗の状態を表示します。カテゴリー一覧はアプリの中に持つリストに代替され、独自のエラー状態を持たないため(apps/jewelry-mobile/src/features/home/category-grid.tsx)、どちらにしても4枚のカードを描きます。接続についてのこの画面の唯一の表明は、上端のバナーです。

4枚のカテゴリーカードは、4つのカテゴリーすべてで生成できるという意味ですか。

いいえ。一覧はサーバーが開放しているカテゴリーを表示し、その答えが空か得られないときはアプリ自身のリストを使います(apps/jewelry-mobile/src/features/generation/config.ts)。並びは常にリング、ブレスレット、ネックレス、ピアス・イヤリングの固定順です(config.ts:43)。カテゴリーで画像を生成できるかどうかは、作成フローでのツールの利用可否が決める別の答えです。

接続がなくても以前の生成結果が表示されます。端末に保存されているのですか。

見えているのは、サーバーの答えより先に読まれるアカウント単位のキャッシュです(apps/jewelry-mobile/src/features/generation/store.tsx)。コードはこれをオフラインの場合として扱っています。作業の記録はサーバー側にあり、端末上の複製はこの状況のために存在します(apps/jewelry-mobile/src/features/generation/storage-keys.ts:16-17)。キャッシュされた画像のアドレスには有効期限があるため、古いカードは代替の表示に切り替わることがあります。

下に引っ張って更新できません。ホーム画面にもう一度試させるにはどうしますか。

失敗した部分にある再試行ボタンを使ってください。ホーム画面のスクロール領域には更新用のコントロールが渡されていないため(components/ui/screen-container.tsx:59-66)、下に引いても何も起きません。ツールの利用可能や近日公開の状態に意味があるのは、設定が実際に届いたあとだけです。それまでアプリは、開いていると仮定せずに、閉じているものとして報告します。