Jewelry AI・ホーム画面

ホーム画面は新しい5件の生成ジョブを保持し、どれも隠しません

このリストは件数が固定で、状態による絞り込みがありません。そのため失敗した生成ジョブも、作成日時が決める位置にそのまま並びます。完了したカードに出るのはアップロードした写真ではなく結果で、キャプションはそのジョブを生んだツールが決めます。

固定の件数を、作成順で

ホーム画面の上部のブロックは、アプリがいま保持しているジョブを取り、作成日時の新しい順に並べ替えて、先頭の5件を残します(apps/jewelry-mobile/src/features/home/recent-generations.tsx、2026年8月にアプリケーションのソースに対して読み取り)。

5はクライアントの定数です。サーバーが設定するものではなく、プランに結び付いてもいないため、このリストを長くしたり短くしたりする設定はどこにもありません。

一覧は状態による絞り込みをしません。失敗したジョブは、完了したジョブと同じ一覧に、作成日時が与える位置で並びます。うまくいかなかったからといって、このリストから取り除かれるものはありません。

この2つの規則が、この画面が生む2つの印象を説明します。短く見える一覧は固定の件数が働いている姿であり、最近の作業に混ざった失敗は欠陥ではなく、絞り込みがないことの表れです。

カードが実際に描いているもの

カードの画像はrecent-generations.tsxの1つの式で選ばれ、その背後には2段のフォールバックがあります。

完了したジョブは、その結果で描かれます。
完了したジョブでは、カードはまず結果のアドレスを使います。このリストはこの場合のために書かれています。仕上がったカードは、入っていったものではなく返ってきたものを示します。
結果のアドレスを持たない完了したジョブは、アップロードした画像で描かれます。
選択は結果のアドレスが先、入力画像が後、という順で書かれています。そのため結果のアドレスがないときは、完了したカードがそのジョブの出発点になった写真を示すことがあります。
完了していないジョブは、規則としてアップロードした画像で描かれます。
完了以外の状態はすべて入力画像を使います。カードに自分の写真が見えるのは正常で、2つの理由を切り分けるのはバッジです。
読み込めない画像は、空欄ではなくプレースホルダーになります。
その位置に何も描けないとき、カードはスタジオ風のプレースホルダー画像に戻ります(components/ui/thumb-placeholder.tsx:20-22)。どちらの場合もカードは大きさとバッジを保ちます。
バッジが持つ状態は3つだけです。
処理中、完了、失敗がバッジの取りうる値です(components/ui/status-badge.tsx:9-13)。途中まで終わった作業のための4つ目の状態はありません。

カードのキャプションの決まり方

キャプションを決めるのは、画像の内容ではなく、そのジョブを生んだツールです。モデル生成は、ジョブが属するジュエリーのカテゴリー名を取ったキャプションを生みます。カテゴリーに結び付かないツールは、そのツール自身の名前を取ったキャプションを生みます(recent-generations.tsx)。

つまりキャプションは、経路については信頼できる表明であり、被写体については信頼できない表明です。カテゴリー名のキャプションは、そのジョブがカテゴリーに基づく経路を通ったことを示すだけで、画面に何が写っているかを説明しません。

1日中同じカテゴリーで作業していれば、モデル生成のカードはすべて同じキャプションを持ちます。この繰り返しは規則が働いている姿であって、リストの更新が止まった印ではありません。カードごとに違うのはバッジと時刻です。

すでに適用された2つの修正

このリストにあった2つの不具合は、それを直したコードに記録されています。どちらも過去の挙動で、一度それに出会った出品者が今日の画面をその記憶越しに読んでいるかもしれないという理由でだけ、ここに書いています。

キャプションの不具合。修正前は、ジュエリーのカテゴリーに結び付かないツールで作られたジョブに、ホーム画面で持っていないはずのカテゴリー名が付いていました。recent-generations.tsxのキャプションのコードの傍らにあるコメントがこの修正を記録しており、上で述べたキャプションの規則がそれに置き換わりました。

相対時刻の不具合。apps/jewelry-mobile/src/lib/relative-time.tsにガードが加わる前は、相対時刻の書式化を持たないエンジンの端末で、このカードがアプリケーション全体を落としていました。コメントはこれを2026-08-10付のP0として記録しており、この障害は最初の生成のあとに起きていました。上で述べた絶対時刻へのフォールバックが、そのガードです。

どちらの挙動も現在のものではありません。今日カードにカテゴリー名が出ていれば、そのジョブは本当にカテゴリーに基づく生成でした。そして絶対時刻は、置き換えられたクラッシュではなくフォールバックです。

接続できている状態で一覧が空のとき

サーバーに到達できていて、アカウントにジョブが1件もない場合、リストは短い空の表示に置き換わります。まだ生成がないことを伝える一文と、最初の画像を作り始めるボタンです。このボタンは作成タブに移動します(recent-generations.tsx:86)。

ホーム画面には引っ張って更新する仕組みがありません。スクロールする入れ物に更新用のコントロールが与えられていないため(components/ui/screen-container.tsx:59-66)、下に引いても何も変わりません。空の表示の中にあるボタンが、画面にもう一度見に行かせる唯一の手動の方法です。

サーバーに到達できない場合、この空の領域は違う振る舞いをします。その場合と、接続がないときにホーム画面が行うそのほかのことは、ここではなく別のページで扱われます。

カードが間違っている、または欠けていると報告する前に

以下はいずれも画面そのもので確かめられる確認で、カードが組み立てられる順に並んでいます。

  • カードを数える。5枚なら一覧は満杯で、探しているジョブは単に新しい5件より古いのかもしれません。
  • 画像より先にバッジを読む。失敗したジョブはこの一覧に属しており、そのジョブについてこのリストが述べるのは、バッジがすべてです。
  • 画像が自分の写真なら、もう一度バッジを見る。完了していなければ規則としてアップロードした画像で、完了していれば結果のアドレスがなかったということです。
  • 画像がプレースホルダーなら、結果のないジョブではなく、画像を描けなかったカードとして扱う。
  • キャプションは画像ではなく、使ったツールに照らして確認する。カテゴリー名はカテゴリーに基づく経路を意味します。
  • 時刻が絶対表示かどうかを確認する。時刻や日付はフォールバックの書式で、その文字列はカードが描かれたときに固定されています。
  • ジョブがなぜその結果になったのかに関することは、この画面を離れる。このリストはその情報を持っていません。

このリストが述べないこと

以下は設計上の不在であって、埋められるのを待っている欠落ではありません。

  • ジョブが失敗した理由。バッジは結果を示すところで止まります。
  • 失敗したジョブをやり直せるかどうか、やり直すと何が必要になるか。
  • ジョブにどれくらい時間がかかるか、ある種類のジョブがどれくらいの割合で成功するか。
  • 新しい5件より古い作業に関すること。その作業はこの画面には表れません。
  • 画像に何が写っているか。キャプションが報告するのはジョブが通った経路であって、画面の中の被写体ではありません。
  • どのカテゴリーやツールが生成に使えるか。このリストが報告するのは、すでに存在するジョブだけです。
  • サーバーに到達できないときにホーム画面が行うこと。

このページが手をつけない隣の問い

サーバーに到達できないときにホーム画面がどう振る舞うかは別の主題で、ここでは答えていません。

同じ画像の規則はライブラリとコレクションの画面にも現れ、そこではカードにアップロードした写真が出ることが手がかりとして使われます。それらの画面が失敗をどう報告するか、ライブラリが空であることが何を意味するかは、それらの画面が説明されている場所で扱われます。

このリストには操作がありません。フィルターも、タブも、選択もありません。一覧から読み取るのではなく一覧に対して行うことは、別の画面に属します。

よくある質問

ホーム画面に最近の画像が5件しか出ないのはなぜですか?

このリストが作成日時の新しい5件のジョブを保持し、描く前に残りを捨てるからです(apps/jewelry-mobile/src/features/home/recent-generations.tsx)。5はクライアントの定数で、サーバーが設定するものでもプランの属性でもありません。そのため一覧の長さは、どれだけの作業があるかの報告ではありません。

失敗した生成がホーム画面に出るのはなぜですか?

このリストは状態による絞り込みをしません。成功したジョブではなくジョブから作られるため、失敗も作成日時が与える位置を保ち、カードのバッジがその結果を示します(components/ui/status-badge.tsx:9-13)。なぜ失敗したのか、やり直すと何が必要になるかは、この画面では報告されません。

カードに結果ではなく、アップロードした写真が出ています。これは何を意味しますか?

自分の写真が描かれる状況は2つあります。完了していないジョブは、規則として入力画像で描かれます。完了したジョブはまず結果のアドレスで描かれ、結果のアドレスがないときにだけ入力画像で描かれます(recent-generations.tsx)。この2つを切り分けるのがバッジです。代わりにスタジオ風のプレースホルダーが出ているカードは、その位置の画像をまったく読み込めなかったカードです(components/ui/thumb-placeholder.tsx:20-22)。

カードに日付が出るのはなぜですか。また、時刻がまったく動かないのはなぜですか?

時刻の文字列はカードが最初に描かれるときに作られるため(recent-generations.tsx:21)、画面にとどまっている間は進みません。端末のJavaScriptエンジンが相対時刻の書式化を提供しない場合、カードは代わりに絶対表示を使います。過去24時間のジョブには時刻を、それより古いものには日付を使います(apps/jewelry-mobile/src/lib/relative-time.ts)。