Newer
Older
client_dwatch / docs / handoff / UI差分第4章_調査_20260917.md

UI差分まとめ 第4章 — 26件の「記録あり / 仕様 / 不具合 / 要判断」振り分け調査

作成: 2026-09-17 / ブランチ: develop(79bcf20 時点。作業ツリーは clean)/ ★調査のみ。コードは1行も変更していない★


0. この文書の位置づけ

docs/UI差分まとめ_20260915.md ★第4章(:223-255)の26件★を「仕様」と「不具合」に振り分けるための材料です。

  • ★本文書は決定ではありません★。決めるのはユーザーで、決めた内容は docs/decisions.md に残してください(★採番は監督★)
  • ★根拠はすべて実測★(file:line / grep コマンド)。推測の箇所は「推測」と明記しました
  • ★第3章の8件は D-143 §3 / D-146 で片付いています★。★第4章にはその6件がそのまま残っているため、まず陳腐化の整理が要ります★
  • ★docs/UI差分まとめ_20260915.md は書き換えていません★(訂正は監督が行う)

使った grep(すべて再実行可能)

$ grep -n "^### D-" docs/decisions.md            # 最新は D-148(`^### D-0` では3桁台を拾えない)
$ grep -rn "ログアウト\|logout" docs/
$ grep -n "空状態\|該当するログはありません\|該当なし\|読み込み中" docs/decisions.md docs/handoff.md
$ grep -n "平日のみ\|土日のみ\|曜日\|サブタイトル\|メーカーPill\|備考セル\|統計カード\|アンバー\|D-Sec ログ" docs/decisions.md docs/handoff.md
$ grep -n "StatCard\|共通カード\|色帯\|大文字\|uppercase" docs/decisions.md docs/handoff.md
$ grep -n "絞り込み条件に一致する全件\|表示中のページ\|注意文\|アドバイスはありません\|該当するエリア" docs/decisions.md docs/handoff.md
$ grep -n "SHOW_ALL_LIMIT\|weekdaysLabel\|weekdays_label" docs/decisions.md docs/handoff.md
$ grep -n "全エリアが◎○\|total_count=1\|404 にしない" docs/decisions.md
$ grep -n "全期間\|既定値\|date_from\|resolved_at" docs/decisions.md

1. 結論 — 26件の分類表

内訳: ★記録あり 11件★ / ★仕様として記録すべき 12件★ / ★不具合 2件★ / ★判断が要る 1件(+サブ項目2件)★

凡例: 記 記録あり(第4章の記載が誤り、または09-16以降に決着) / 仕 仕様として記録すべき / バ 不具合 / 判 判断が要る

# 画面 内容 現状(実測) モック 記録 判定
1 共通 メニューの未対応件数バッジが無い components/layout/AppShell.tsx:36-53(NavItem に badge 引数が無い) d-watch-mock.jsx:372,378,391 ★D-143 §3 #4(docs/decisions.md:11411)/ D-146 §8 #4(:11891)★ = ★足さない・保留で確定★ 記
2 共通 ログアウトの導線が無い API は app/api/auth/logout/route.ts にあるが、components/ からの呼び出し0件 ★モックにログイン自体が無い★ ★無し★(grep -rn "ログアウト" docs/ は docs/code-map.md:617「画面からの呼び出しは現状なし」の事実記載のみ) 仕※1
3 ダッシュボード 清掃ログ表が4列 ★5列になっている★(CleanLogTable.tsx:168 の colSpan={compact ? 5 : 11}) d-watch-mock.jsx:311 付近 ★D-146 §1 #3(:11767)★ = ★「出発」1列だけ足す=5列で確定・実装済み(065c9a7)★ 記
4 ダッシュボード 行展開アドバイスが無効 ★有効★(CleanLogTable.tsx:30,174,183 に !compact && が無い) 同上 ★D-146 §1 #6 / §5(:11833)★ = ★有効化済み(148734b)。根拠だった「規約」は存在しなかった★ 記
5 ダッシュボード 「判定 ?」ボタンが機能しない ★機能する★(DashboardScreen.tsx:64,290-291 の showGradeInfo) — ★D-146 §1 #2(:11767)★ = ★修正済み(49a5ce9)★ 記
6 ダッシュボード 未解消件数バッジが1枚だけ DashboardScreen.tsx:217-219(D-Sec の Pill のみ) d-watch-mock.jsx:479-480(未解消+D-Sec の2枚) ★無し★。ただし ★DashboardResponse(lib/types/index.ts:1080-1123)に事前チェック未解消件数のフィールドが無い★ のは実測で確認 仕※2
7 ダッシュボード 表の空状態の文言 CleanLogTable.tsx:168-170「該当するログはありません」 無し ★無し★ 仕
8 清掃詳細ログ CSVの注意文を常時表示 DetailLogScreen.tsx:487 無し ★★記録あり — D-120 項14 ③(docs/decisions.md:7994)★★「CSV と画面の件数が食い違う → ★清掃詳細ログに注記を出すだけにした★」。D-136(:10346)が表示方法を精緻化 記
9 清掃詳細ログ アドバイス0件時の文言とボタン非表示 CleanLogTable.tsx:226-229(文言)/ :251-260(ボタンは advices.length > 0 の中) (△×は必ず何か出る) ★無し★ 仕※3
10 清掃詳細ログ エリアモーダルの空状態を2種に分岐 AreaModal.tsx:115-119 1種類 ★★根拠は記録あり — D-119(docs/decisions.md:7726)★★「全エリアが◎○ → items は空配列・total_count=1(★404 にしない★)」。★文言そのものの記録は無い★ 記※4
11 アラート サマリーカードの見た目(色帯・文字サイズ) 共通 StatCard(components/ui/StatCard.module.css: 36px / uppercase / border-left: 3px) アラート画面だけ専用の小型カード(d-watch-mock.jsx:587-598。28px・色帯なし) ★無し★ 仕※5
12 アラート 「合計」カードの色 AlertsScreen.tsx:144 tone="ac" d-watch-mock.jsx:596 color={c.txD}(グレー) ★無し★。StatTone は `ok\ wn\ ng\ acの4値のみ(StatCard.tsx:8`)=★中立トーンが存在しない★ 仕※5
13 アラート 日付の既定値が空 AlertsScreen.tsx:58-59 useState("") d-watch-mock.jsx:604-606 defaultValue="2026-03-27"(★飾り。onChange なし★) ★無し★ ★判★
14 アラート 「解消」バッジに日付を追加 AlertsScreen.tsx:36-38,298(formatMd + formatHm) d-watch-mock.jsx:644「解消 (01:45)」 ★無し★ 仕※6
15 アラート バッテリー残量行 lib/fixtures/prechecks.ts に値あり・実DBは常に null 無し ★★記録あり — D-105 項5(docs/decisions.md:5602)/ D-114★★(第4章 :244 で訂正済み) 記
16 レポート 絞り込みを実動作にした ReportsScreen.tsx:97-102,265-267,323(draft / 確定の分離、<form onSubmit>) d-watch-mock.jsx:679 の「検索」ボタンは飾り ★★記録あり — D-069 項8(docs/decisions.md:763-764)★★「検索欄(施設名・シリアル・ステータス)は★「検索」ボタン押下時のみ★APIに反映する」 記
17 レポート 「上位10件に戻す」「全N施設を表示」の出現条件 FacilityPerformanceTable.tsx:155-164(★理由をコードコメントに明記済み★) d-watch-mock.jsx:821 RANK.length > 10(10 を直書き) ★無し★(決定としては未記録。D-120 項14 ②(:7993)は SHOW_ALL_LIMIT の別件) 仕
18 レポート 空状態の文言 ReportsScreen.tsx:570「該当施設なし」/ :667「該当なし」 無し ★★記録あり — D-069 項6(docs/decisions.md:744-747)★★「エラー種別内訳の空データ時の文言は『該当なし』(★モックが持たない空データ文言として新規に採用★)」 記
19 D-Secログ 見出しの表記ゆれ(英語対訳が当たらない) DsLogScreen.tsx:301 t("D-Secログ") d-watch-mock.jsx:833 t("D-Sec ログ")(半角スペースあり) ★無し★。★lib/i18n.ts:37 に "D-Sec ログ": "D-Sec Logs" が孤児キーとして残っている★(D-143 §4 #4 が「使用箇所0」と実測済み) ★バ★
20 D-Secログ 統計カードのラベル短縮/並び順/案内文/備考セルの色 ラベル DsLogScreen.tsx:306-308/並び順 :300-404(カード→フィルタ)/案内文 :367/備考色 DsLogScreen.module.css:148 var(--tx-m) 固定 d-watch-mock.jsx:834-851(フィルタ→カード。ラベル「D-Sデバイス総数/正常稼働/異常・通信断」/案内文「施設名 / デバイスID」)/:884 color: d.n ? c.wn : c.txM ★無し★。ただし案内文は ★D-129 の照合規則表(docs/decisions.md:8823-8824)★ と一致(facility_name + serial_number を検索。lib/ds-devices/query.ts:87-88 で実測)。備考の意味変更は ★D-065 / D-076★ 仕+★判1件(備考セルの色)★
21 D-Secアラート 「通信断」バッジの色 DsAlertsScreen.tsx:36-38 c.wn(アンバー) 赤 ★D-143 §3 #5(:11412)/ D-146 §8 #5(:11892)★ = ★アンバー維持で確定★ 記
22 D-Secアラート 期間フィルタが無い DsAlertsScreen.tsx:86-95(date_from / date_to を組み立てていない) d-watch-mock.jsx の日付欄は★飾り★ ★D-146 §8 #7(:11893)★ = ★今は入れない。入れるなら d-watch-api.yaml の変更から★ 記
23 施設マスタ メーカーPillの見た目 共通 Pill(components/ui/Pill.module.css: 12px / padding: 2px 8px / 太字なし / 背景 color + "22") d-watch-mock.jsx:1019(11px / padding: 2px 6px / fontWeight: 600 / 背景 c.prD) ★無し★ 仕※5
24 スケジュール 曜日に「平日のみ」「土日のみ」「なし」を追加 lib/format/schedule.ts:17-28 d-watch-mock.jsx は「毎日」「月水金」の2例のみ ★docs/decisions.md には無し★。ただし ★docs/fixtures.md:216★ と ★docs/code-map.md:1264★ が対応表を明記 仕※7
25 システム管理 サブタイトルの位置 SystemScreen.tsx:245-251(h1 直下に昇格、運用設定 は h2 に分離) d-watch-mock.jsx:1631-1633(カード見出し「運用設定」の中) ★無し★。ただし ★D-084 段階6 / 項4(docs/decisions.md:2721,2745)★ が「9タブUIを作らず運用設定1画面にする」「モックの :1628 側を採用」と記録済み=★位置変更はその帰結★ 仕
26 全画面 空状態・読み込み中・エラー表示の追加(EN未対応を含む) 空状態12箇所・読み込み中…12箇所・エラー表示11箇所(下の §4 に実測一覧) 無し ★無し★ 仕+★バ(EN が壊れている10箇所)★

表の注

  • ※1 #2 ログアウト: ★モックにはログイン画面が無いので「モックから外れた差分」ではありません★。ログイン画面(D-101)を足したときに導線だけ作らなかった、という★新規UIの未完成★です。docs/code-map.md:617 が「画面からの呼び出しは現状なし」と★事実として★書いており、意図の記録ではありません。
  • ※2 #6 ヘッダのバッジ: モックの unresPre(事前チェック未解消件数)に相当する項目が API に無いことは実測で確認しました(lib/types/index.ts:1080-1123)。★D-143 §3 #4 が同じデータについて「現状足さない。保留」と決めている★ので、★同じ判断がここにも及ぶ★と読むのが自然です(→ §3 の確認事項 J-4)。
  • ※3 #9 アドバイス0件: ★この分岐は現在の発火条件では到達しません★(実測)。lib/db/clean-log-mapping.ts:177 が ★departed === false ⟺ completion_rate === null★ を不変条件として保証しており、lib/judge/advice.ts:60-83 は △(10〜70%未満)→ B1、×(10%未満)→ R2、未実施(null ⇒ 未出発)→ R1 か R3/R4 を必ず返します。★つまり △× の行で0件になる経路が無い★ので、文言もボタン非表示も★防御的な分岐★です。★ただし到達したときはエリア別詳細ボタンごと消える★ので、その事実は残す価値があります。
  • ※4 #10: 「404 にしない=空配列で返す」という★API契約の決定★は D-119 にあります。★画面が2文言に分けたこと自体★の記録はありません。
  • ※5 #11 / #12 / #23 は同じ原因: ★モックが同じ種類の部品を画面ごとに書き分けていたものを、実装が共通部品1つに寄せた★結果です。components/ui/StatCard は★モックのダッシュボードの Num(d-watch-mock.jsx:99-107)をそのまま移植した部品★で、36px・uppercase・letterSpacing 1.2・borderLeft 3px まで一致します。つまり ★モックの中でも「ダッシュボード流」と「アラート流」の2種類があり、実装は前者に統一した★ということです。同様に components/ui/Pill はモックの Pill(:91-97)の移植で、施設マスタのメーカーバッジ(:1019)だけがモック内で独自に書かれていました。
  • ※6 #14: #13(日付既定値が空=全期間)と★セット★です。全期間を既定にすると一覧に複数日のアラートが混ざるため、★時刻だけでは「いつ解消したか」が読めなくなります★。
  • ※7 #24: weekdaysLabel() は7桁ビット列 128 通りすべてを扱う関数で、モックはその値域のうち2例を書いていただけです。★モックから「外れた」というより、モックが網羅していなかった★というのが正確です。

2. ★第4章の記載が誤っていたもの★(記録があったのに「記録なし」とされていた)

★★4件★★(うち1件は第4章の中で訂正済み)。★いずれも第4章の作成日(2026-09-15)より前に記録されていました★。

# 件名 実際の記録 記録日
8 清掃詳細ログ CSVの注意文 ★D-120 項14 ③(docs/decisions.md:7994)★ 2026-09-11
16 レポート 絞り込みを実動作にした ★D-069 項8(docs/decisions.md:763-764)★ 2026-09-07
18 レポート 空状態の文言 ★D-069 項6(docs/decisions.md:744-747)★ 2026-09-07
15 アラート バッテリー残量行 ★D-105 項5(docs/decisions.md:5602)/ D-114★(★第4章 :244 で訂正済み★) 2026-09-10

部分的に記録があったもの(1件)

# 件名 実際の記録 何が記録され、何が記録されていないか
10 エリアモーダルの空状態2種 ★D-119(docs/decisions.md:7726)★ ★「全エリアが◎○」を404にせず空配列で返すというAPI契約は記録あり★。★画面が2文言に分けたことは記録なし★

第4章の作成後(09-16/09-17)に決着したもの(6件) — ★記載の誤りではなく陳腐化です★

# 件名 決着
1 メニューの未対応件数バッジ D-143 §3 #4(足さない・保留)
3 清掃ログ表が4列 D-146 §1 #3(★5列にして実装済み。8列に戻す作業として再提案しないこと★)
4 行展開アドバイスが無効 D-146 §1 #6(有効化済み)
5 「判定 ?」ボタン D-146 §1 #2(修正済み)
21 「通信断」バッジの色 D-143 §3 #5(アンバー維持)
22 D-Secアラートの期間フィルタ D-146 §8 #7(今は入れない)

★★第4章の表(:229-255)は、この11行が実質すでに片付いています★★。★残る「本当に未記録」は15件★です。


3. ★★ユーザー判断が要るもの★★

J-1 — アラートの日付既定値を「空=全期間」のままにするか(#13)

現状: components/features/alerts/AlertsScreen.tsx:58-59 が useState("")。 対応状況フィルタの既定は "open"(:60)なので、★画面を開いた初期状態は「未解消の全期間」★です。

選択 何が起きるか(具体例)
★このまま(全期間)★ ★3日前に出て未解消のままのアラートが、翌朝に画面を開いた時点で見える★。「翌朝確認型」の運用(CLAUDE.md §1)とは相性がよい。一方 ★一覧に複数日が混ざる★ので、#14(解消バッジに日付を出す)が★必須★になる。件数が増えたときはページ送り(D-120)頼み
★当日を既定にする(モック相当)★ 開いた瞬間は当日ぶんだけ。★昨夜以前から未解消のアラートが初期表示から消える★ — ★★「未解消なのに画面に出ない」が起きる★★。運用担当が日付を手で戻さないと取りこぼす

★推奨は現状維持★(上の理由。ただし決めるのはユーザー)。

J-2 — D-Secログの備考セルを「備考があるとき色を変える」に戻すか(#20 の一部)

現状: components/features/ds-logs/DsLogScreen.module.css:148 が color: var(--tx-m) 固定。 モック: d-watch-mock.jsx:884 が color: d.n ? c.wn : c.txM(備考ありはアンバー)。

選択 何が起きるか
★このまま(常にグレー)★ ★備考は D-065 / D-076 で「DBに無い、運用担当の自由メモ」と判明した★ので、★アンバー=警告色を当てると「異常がある行」と誤読される★。★同じ画面の「接続状態」列が異常=赤/正常=緑なので、備考の色と意味が干渉する★
★モックに戻す(備考ありはアンバー)★ ★どの行にメモが入っているか一覧で分かる★(12行でも探すのは面倒)。ただし上の誤読リスクを負う。★中立色(var(--tx) など)で「入っている」ことだけ示す第3案もある★

J-3 — EN の抜けをいま直すか、英語配布を決めるまで保留するか(#19 / #26 の一部)

★D-143 §3 #1 で「★英語を配布するか未定★」を理由に i18n の不具合(未対応 の誤訳)を★直さないと決めています★。 ★本章で見つかった2件も同じ性質★ですが、★こちらは辞書の側ではなく呼び出しの側の漏れ★で、★JA表示には一切影響しません★。

件 実測 直す手間
★#19 D-Secログの h1★ DsLogScreen.tsx:301 が t("D-Secログ")。辞書にあるのは lib/i18n.ts:37 の "D-Sec ログ"(★半角スペースあり★)で★当たらない★。孤児キーであることは D-143 §4 #4 が実測済み ★lib/i18n.ts:37 のキーを D-Secログ に直す1行★。JA表示は変わらない
★#26a 読み込み中… / エラー文言★ ★辞書には既にある★(lib/i18n.ts:73 "読み込み中…": "Loading…" / :336 データの取得に失敗しました: "Failed to load data")。なのに ★10箇所が t() を通さず生文字列で書かれている★(§4 の表) ★t() で包むだけ★。JA表示は変わらない
選択 帰結
★いま直す★ ★JA は1文字も変わらない★ので回帰リスクは実質ゼロ。★英語配布を決めたときの残作業が減る★
★英語配布を決めるまで保留★ D-143 §3 #1 と歩調が揃う。★ただし「辞書に登録済みなのに当たらない」状態は、次の担当者が辞書を見て「対応済み」と誤認する★

J-4 — 確認だけ: ダッシュボードのヘッダバッジ(#6)も「足さない」でよいか

★D-143 §3 #4 は「★サイドバーの★未対応件数バッジ」を足さないと決めました★。 ★ダッシュボードのヘッダにも同じデータ(事前チェック未解消件数)のバッジがモックにあり(d-watch-mock.jsx:479)、そちらは決定に名前が出ていません★。 ★データが無いこと(lib/types/index.ts:1080-1123 に該当フィールド無し)は同じ★なので、★同じ判断を明示的に及ぼしてよいか★の確認です。


4. ★不具合と判定したもの★(2件)

B-1 — D-Secログの h1 が英語対訳に当たらない(#19)

$ grep -n "D-Sec ログ\|D-Secログ" lib/i18n.ts
17:  "🔒 D-Secログ": "🔒 D-Sec Logs",      ← サイドバーのメニュー(当たる)
37:  "D-Sec ログ": "D-Sec Logs",           ← ★孤児。使用箇所0★
$ grep -n 't("D-Secログ")' components/features/ds-logs/DsLogScreen.tsx
301:        <h1 className={styles.title}>{t("D-Secログ")}</h1>

実害: EN に切り替えても h1 だけ「D-Secログ」と和文で出ます。 ★サイドバーは 🔒 D-Sec Logs に変わるので、メニューと見出しが英日で食い違います★。 なぜ起きたか(推測): 実装で h1 から半角スペースを落としたとき、辞書のキーを直さなかった。 ★lib/i18n.ts はキーが日本語原文の1階層辞書(lib/i18n.ts:363-366 の translate() は完全一致)★なので、★原文を1文字でも変えると黙って当たらなくなります★(D-146 §9 と同じ構造)。

B-2 — 「読み込み中…」「取得失敗」が t() を通っていない(#26 の一部。★10箇所★)

★辞書には登録済み★(lib/i18n.ts:73 / :336)なのに、★呼び出し側が生文字列で書いている★箇所の実測一覧です。

種別 t() 未経由(★EN で和文のまま★) t() 経由(正しい)
読み込み中… AlertsScreen.tsx:256 / DashboardScreen.tsx:223 / DetailLogScreen.tsx:492 / DsAlertsScreen.tsx:246 / DsLogScreen.tsx:405 / FacilitiesScreen.tsx:113 / ReportsScreen.tsx:445 / SchedulesScreen.tsx:115 / SystemScreen.tsx:429 / CleanLogTable.tsx:224 = ★10箇所★ CleanAreaScreen.tsx:281 / AreaModal.tsx:99 / SystemScreen.tsx:351
エラー表示 {error} をそのまま描画 — AlertsScreen.tsx:257 / DashboardScreen.tsx:224 / DetailLogScreen.tsx:493 / DsAlertsScreen.tsx:247 / DsLogScreen.tsx:406 / FacilitiesScreen.tsx:114 / SchedulesScreen.tsx:116 / SystemScreen.tsx:430 SystemScreen.tsx:353(t(limitLoadError))

★第2章(docs/UI差分まとめ_20260915.md:200)は「読み込み中…は4画面で未対応」と書いていますが、★実測は10箇所(9画面+共通表)★です。★第2章の記載も過小です★(訂正は監督が行ってください)。

空状態の文言の i18n 登録状況(実測。grep -c で確認)

文言 辞書 呼び出し
該当する施設はありません / 該当するスケジュールはありません / 該当データがありません / 要レスキューの店舗はありません / アドバイス文言は登録されていません / 該当施設なし / エリアのデータがありません ★あり★ t() 経由
★該当するアラートはありません★ / ★該当するデバイスはありません★ / ★問題エリアはありません(全エリア◎○)★ ★無し★ t() 経由(だが当たらない)
★該当するログはありません★ / ★該当するアドバイスはありません★ / ★該当なし★ / ★本日の清掃予定はありません★ ★無し★ ★t() すら通っていない★

5. ★docs/decisions.md に貼れる文案★(1件1行)

★決定番号は D-XXX のままにしています。採番は監督が grep -n "^### D-" docs/decisions.md | tail -3(★最新は D-148★)で実測してから採ってください★。

D-XXX [確定] UI差分第4章26件の振り分け(記録あり11 / 仕様12 / 不具合2 / 要判断1)

日付: 2026-09-_ / 指示書: なし(調査は `docs/handoff/UI差分第4章調査_20260917.md)/ **前提**: D-069 / D-076 / D-084 / D-101 / D-105 / D-119 / D-120 / D-129 / D-143 §3 / D-146 §1・§8 /CLAUDE.md` §5・§9.6

1. ★第4章の「記録なし」が誤りだった4件(第4章 :229-255 の該当行を訂正すること)★

# 件名 実際の記録
8 清掃詳細ログ CSVの注意文を常時表示 ★D-120 項14 ③(docs/decisions.md:7994)★
16 レポート 絞り込みを実動作にした ★D-069 項8(docs/decisions.md:763-764)★
18 レポート 空状態の文言(「該当なし」「該当施設なし」) ★D-069 項6(docs/decisions.md:744-747)★
10 エリアモーダルの空状態を2種に分岐 ★D-119(docs/decisions.md:7726)が根拠のAPI契約を記録済み(文言は未記録)★

2. ★第4章の作成後に決着していた6件(陳腐化。再提案しないこと)★

# 件名 決着
1 メニューの未対応件数バッジ ★D-143 §3 #4 — 足さない・保留★
3 ダッシュボードの清掃ログ表が4列 ★D-146 §1 #3 — 「出発」1列を足して5列。★8列に戻す作業として再提案しないこと★★
4 行展開アドバイスが無効 ★D-146 §1 #6 — 有効化済み★
5 「判定 ?」ボタンが機能しない ★D-146 §1 #2 — 修正済み★
21 D-Secアラート「通信断」バッジの色 ★D-143 §3 #5 — アンバー維持★
22 D-Secアラートの期間フィルタ ★D-146 §8 #7 — 今は入れない★

3. ★仕様として確定する12件(「作り忘れ」ではない。親切心で直さないこと)★

# 件名 ★仕様である理由★
2 ログアウトの導線が無い ★モックにログイン画面が無いので「モックからの逸脱」ではない★。ログイン(D-101)に付随する★未完成★であり、足すなら新規UIとして設計する
6 ダッシュボードの未解消件数バッジが1枚だけ ★DashboardResponse に事前チェック未解消件数のフィールドが無い★(lib/types/index.ts:1080-1123)。★D-143 §3 #4 の「足さない」を同じデータのこのバッジにも及ぼす★
7 ダッシュボード表の空状態の文言 ★取得0件と取得失敗を画面で区別するため★。モックは固定データなので空状態を持たない
9 アドバイス0件時の文言とボタン非表示 ★防御的な分岐で、現在の発火条件では到達しない★(lib/judge/advice.ts:60-83 と lib/db/clean-log-mapping.ts:177 の不変条件により、△× の行は必ず1件以上該当する)。★到達したときはエリア別詳細ボタンも消える★ことを併記する
11 アラートのサマリーカードの見た目 ★モック内に2流儀(Num=d-watch-mock.jsx:99-107 と、アラート画面だけの専用カード :587-598)があり、共通部品 StatCard は前者の完全移植★。★画面ごとに部品を書き分けない★
12 「合計」カードの色がアクセント色 ★StatTone は `ok\ wn\ ng\ acの4値で中立トーンが無い★(components/ui/StatCard.tsx:8`)。D-Secログの「青→シアン」と同じ原因
14 「解消」バッジに日付を追加 ★日付の既定値が「全期間」なので、一覧に複数日が混ざる★。時刻だけでは「いつ解消したか」が読めない
17 「上位10件に戻す」「全N施設を表示」の出現条件 ★モックは既定件数 10 を直書きしている★。実装は totalCount と items.length の比較にして★既定件数を知らずに済む形★にした(FacilityPerformanceTable.tsx:155-164)
20 D-Secログの統計カードのラベル短縮/並び順/案内文 ★ラベル★: 接続状態が2値化(D-065 / D-076)して「異常・通信断」が成り立たなくなった。★並び順★: 他2画面(アラート / D-Secアラート)が「見出し→カード→フィルタ」で、D-Secログだけモックで順序が違っていた。★案内文★: 実際の検索対象が facility_name + serial_number(lib/ds-devices/query.ts:87-88。D-129 の照合規則表)なので、モックの「デバイスID」は事実と合わない
23 施設マスタのメーカーPillの見た目 ★共通部品 Pill はモックの Pill(d-watch-mock.jsx:91-97)の移植★。モック内でこの1箇所(:1019)だけが独自に書かれていた
24 曜日に「平日のみ」「土日のみ」「なし」 ★weekdaysLabel() は7桁ビット列128通りを扱う関数★(lib/format/schedule.ts:17-28)。モックはその2例を書いていただけで、逸脱ではない。対応表は docs/fixtures.md:216 / docs/code-map.md:1264
25 システム管理のサブタイトルの位置 ★9タブUIを作らず運用設定1画面にした(D-084 段階6 / 項4)帰結★。カード見出しの中に置くと、画面唯一のカードの中に画面全体の説明が入ることになる

4. ★不具合として直す2件(JA表示は1文字も変わらない)★

# 件名 実害 直し方
19 D-Secログの h1 が英語対訳に当たらない ★EN でサイドバーは D-Sec Logs、見出しは「D-Secログ」と和文★で食い違う ★lib/i18n.ts:37 のキー "D-Sec ログ" を "D-Secログ" に直す(1行)★
26a 読み込み中… / エラー文言が t() 未経由(★10箇所★) ★辞書に登録済み(lib/i18n.ts:73 / :336)なのに EN で和文★。次の担当者が辞書を見て「対応済み」と誤認する ★該当箇所を t() で包む★。components/ にテストは1件も無い(vitest.config.ts の include は lib/** と app/**)ので★目視確認が要る★

5. ★ユーザー判断★

# 件名 判断
13 アラートの日付既定値が空(全期間) ★(記入)★
20b D-Secログの備考セルの色 ★(記入)★
19 / 26a EN の抜けをいま直すか、英語配布の決定まで保留するか(D-143 §3 #1 と同じ扱いにするか) ★(記入)★

6. 直す場合の影響範囲

★どれも lib/judge/** lib/db/** prisma/** d-watch-api.yaml には触りません★。

件 触るファイル テスト i18n ダーク/ライト
★B-1(#19 h1)★ lib/i18n.ts:37(キー1行) ★影響なし★。lib/i18n.ts を直接検証するテストは0件(D-143 §3 #1 で実測済み) ★JA 変化なし / EN が D-Sec Logs になる★ 影響なし
★B-2(#26a)★ AlertsScreen.tsx / DashboardScreen.tsx / DetailLogScreen.tsx / DsAlertsScreen.tsx / DsLogScreen.tsx / FacilitiesScreen.tsx / ReportsScreen.tsx / SchedulesScreen.tsx / SystemScreen.tsx / CleanLogTable.tsx(★10箇所を t() で包むだけ★) ★components/** はテスト対象外★(vitest.config.ts)→ ★目視が要る★ ★JA 変化なし / EN が Loading… Failed to load data になる★ 影響なし
#13(日付既定値を当日にする場合) AlertsScreen.tsx:58-59 ★lib/prechecks/__tests__/query.test.ts は画面の既定値を見ていないので影響なし(実測)★ 影響なし 影響なし
#20b(備考セルに色を戻す場合) DsLogScreen.module.css:143-164(★.noteButton に状態クラスを足す★)+ DsLogScreen.tsx:113-124(クラス付与) 影響なし 影響なし ★アンバー(--wn)はダーク/ライト両方でトークン化済み★。新しい色コードを直書きしないこと(CLAUDE.md §9)
★空状態の文言に対訳を足す場合★ lib/i18n.ts(★該当するアラートはありません / 該当するデバイスはありません / 問題エリアはありません(全エリア◎○) / 該当するログはありません / 該当するアドバイスはありません / 該当なし / 本日の清掃予定はありません の7キー★) 影響なし ★★キーを足す前に必ず grep すること★★(D-146 §9。lib/i18n.ts は★キーが日本語原文の1階層辞書★なので、同じ日本語を別の意味で使うと必ず衝突する。★該当なし は特に汎用的で危険★) 影響なし

7. 調査の限界(正直な記録)

  • ★ブラウザでの目視確認は行っていません★。見た目(色帯・文字サイズ・並び順)はすべて★ソースとCSSの実測★です
  • ★components/** にテストは1件も存在しません★(vitest.config.ts の include は lib/** と app/**)。★本章の不具合2件はテストで守れない★ので、直したら目視が要ります
  • ★DBには一切接続していません★(本番DB 133.125.238.144 を含む)。データ側の事実(battery_level が常に null 等)は★既存の決定の引用★であり、本調査での再実測ではありません
  • ※3 の「アドバイス0件は到達しない」は ★lib/judge/advice.ts と lib/db/clean-log-mapping.ts のコード読解による結論★です。★実データでの確認はしていません★