担当: Claude Code(サブエージェント2本)。監督がレビューする。 前提: 指示書BD(API)と指示書BE(画面)が develop に入っていること(5b2fdd0)。
保存できなかった行の下に出す文言を、画面側で失敗の種類から決める。 判定は純粋関数1つにまとめる(例 lib/errors/save-error-message.ts)。テストする。
| 失敗の種類(判定に使うもの) | 出す文言 |
|---|---|
| 保存前の検証(その他・備考なし) | その他を選んだときは備考を入力してください(今のまま) |
422 かつ details.error_list_id あり(選べない行) |
この行ではエラー内容を選べません |
422 かつ details.error_list_id あり(それ以外。選択肢に無い・無効) |
選んだエラー内容は今は使えません。選び直してください |
422 かつ details.note あり(その他・備考なし。サーバー側で止まった) |
その他を選んだときは備考を入力してください |
| 422 で備考の長さ(400文字超) | 備考は400文字以内で入力してください |
| 422 のその他 | サーバーの文言(無ければ「入力内容を確かめてください」) |
| 404 | このエラーは削除されたため保存できません。画面を読み込み直してください |
| 401 | ログインし直してください |
| 500 など 5xx | サーバーで保存に失敗しました(DB への書き込みエラー)。時間をおいて保存し直し、続くときは管理者に連絡してください |
| 通信の失敗(status 0) | 通信に失敗しました。接続を確かめて保存し直してください |
| どれにも当たらない | 保存に失敗しました(今の既定) |
ApiFetchError の status / details / serverMessage を使う(lib/api/client.ts)
details.error_list_id の中の文言で判定してよい(サーバーの文言は lib/errors/status-update.ts)lib/i18n.ts に JP / EN の両方を入れ、表示で t() を通すErrorsScreen.tsx)だけ★。アラート・D-Sec アラートの画面は変えないlib/errors/error-content-picker.ts の filterErrorLists を直すerror_detail_ja と error_detail_en の★両方★に部分一致させる(画面の言語によらない)
GET /errors の error_type)は★変えない★git add -A 禁止docs/decisions.md・docs/handoff/指示書AY_*・docs/handoff/設計_制御盤ログの取り出し_* は触らない(別セッションの未コミット差分)