develop)docs/handoff.md は全履歴(★追記62まで★)、docs/decisions.md は 決定の台帳(★D-160まで・148件★)で、どちらも読み切るには大きすぎます。/d-watch スキルがこの名前で指しているため)。中身は 2026-10-06(指示書AW の実装後)に書き直しました。docs/handoff.md / docs/decisions.md が矛盾したら、後者2つが正★★です。docs/handoff/セッション引き継ぎ_20260916.md★(★内容は古い★)。| 項目 | 値 | 測り方 | |
|---|---|---|---|
| ブランチ | develop(★main へ直接 push しない★)。測った時点の HEAD は f02eb1d(本書を更新したコミットは含まない)。★origin/develop は 19dbe38。★未 push は指示書AW の8コミット(fc9b3cf〜f02eb1d)と、その後の資料のコミット(a8b2943 以降)★ |
git log -1 / git rev-list --count origin/develop..develop |
|
| 最終決定番号 | ★D-160★(148件。D-160 に AW の「実装の記録」を足した) | `grep -n "^### D-" docs/decisions.md \ | tail -3/grep -c` |
| 最新の追記 | ★追記62★(指示書AW の実装) | `grep -n "^## 追記" docs/handoff.md \ | tail -1` |
main..develop |
★499コミット★(origin/main..origin/develop。手元の develop は+8(AW)+資料のコミット)。★fetch はしていない(手元の参照。PR #6 の head は gh で 19dbe38 と一致)★ |
git rev-list --count origin/main..origin/develop |
|
| ★PR★ | ★#6 が open・CI緑(SUCCESS。head 19dbe38)・レビュー未了(reviewDecision 空)★ |
gh pr view 6 --json state,reviewDecision,statusCheckRollup |
|
| テスト | ★119ファイル / 2,790件 全パス★ / tsc 0 / lint 0 / USE_FIXTURES=true の build 成功(監督が f02eb1d で確認) |
npx vitest run ほか |
|
| 指示書 | 45本(★次は AX★)。★AW まで実装済み★(AP は保留のまま) |
`ls docs/handoff \ | grep -c "^指示書"` |
★★133.125.238.144 / clean_watch はステージング。本番DBは別にある★★(D-152。D-148「本番DBそのもの」は破棄)。
status / comment / responded_at / resolved_at)の UPDATE は書き込んでよい(D-152)。それ以外は禁止★★.env.local 更新後。10-02〜10-05 は 1045 Access denied。D-157)。11:15 JST の再実測は D-158 末尾clean_task_reports 54行がすべて clean_timetable_id が NULL(予定外扱い)で、★予定と実績が1件もつながっていない★。 ★投入が終わったら再実測する★(D-158 末尾)/errors)から確かめた★★(1000013 の1行。権限エラーなし・4列は操作前と完全一致。先方投入データ。追記62 §3)。 ★ステージングのエラー16行はすべて本清掃に紐づくので、アラート画面(/alerts)から書ける行は無い★scripts/seed-local-db.ts はステージングに絶対に向けない★(テーブルを消して入れ直す。lib/db/local-guard.ts が拒否する)★実測値を書くときは出所を必ず併記すること★(CLAUDE.md §6-6)。 ★当方のシード由来 / 先方投入 / 構造(information_schema・SHOW・EXPLAIN)のどれか★。 ★出所を書けない数字は「実測」と呼ばない★。
fc9b3cf〜f02eb1d の8件)と、その後の資料のコミット(a8b2943 以降)。origin/develop は 19dbe38。★監督が差分を確かめてから push★clean_task_reports.clean_timetable_id)・clean_timetable_histories の行と warn db.timetable_conflict の有無(指示書AU 段階3b)prisma db pull★ — ★serial_number の拡張(varchar(100))を確かめてから★(ユーザー指示 2026-10-06。10-06 は varchar(20) のまま)/alerts)からの書き込み(指示書AT 段階9)★。4カラムの書き込みそのものは /errors から確認済み(上の §1)main に入れる★(docs/handoff/PRレビュー手順_20261001.md。D-154。区切りは数え直す)main は 2026-08-27 で止まったまま★。★差が開くほどレビューが不可能になる★app/(dashboard)/inspections/page.tsx は PlaceholderScreen の5行)CLAUDE.md §7)。★TeamWorks 待ちが無い★customer_name の説明に残した「ブランド」列★(d-watch-api.yaml の Facility / InspectionListItem、lib/types/index.ts の2か所)もここで合わせる(追記60 §6)| # | 内容 |
|---|---|
| A | ★次回(第12回)確認事項の候補★(D-158 項7): 予定が clean_timetable_histories に移る時期/「清掃開始できなかった」エラーの error_type の値(10-06 に NOT_STARTED を観測。D-158 末尾)/P-9 の clean_timetable_id は本清掃・事前確認のどちらか/P-13「本日中に修正」の対象。★AV の §11 Q8(レポートが書かれるまでの遅れ。落ち着き30分で足りるか)も候補★ |
| B | ★次フェーズ★(D-158 当方の対応5): エラーの3区分(ロボット/制御盤/セキュリティ・清掃開始失敗)・D-Sec アラートの取得元を robot_error_reports に切り替え(P-10)・出発失敗の対応状況の書き込み。★エラー一覧(/errors)は種類を生値のまま出している(区分は作っていない。D-160 項3)★ |
| C | ★指示書AV で範囲外にしたもの★(§10・§11): 数値カードから移ったときの遷移先の条件/遡り日数・落ち着き時間を画面から変えること(Q6)/7日以内に予定が無いエリアを知らせること(Q7) |
| C2 | ★指示書AW で範囲外にしたもの★(§10): 件数カード・メニューのバッジ・CSV/Precheck* の名前の一般化//alerts と /errors の部品の共通化。★契約によるメニューの出し分けは P2(顧客に使わせる前に必ず。D-160 追記4)★ |
| D | ★375px 幅でサイドバーが畳まれない★(ダッシュボードの見出しが4行に折り返す・エラー一覧は右側が切れる。今回以前からの作り。追記61 §5・追記62 §5)/★AU の EN・375px のブラウザ目視★(追記60 §5。記録なし)/★エラー一覧のツールバーは JP で「解消済みも表示」が2行目に回る★(EN は1行。表の列幅は動かない) |
| D2 | ★i18n の「備考」→ "Note" を足した副作用で、D-Secログの備考列の見出しが EN で "NOTE" になった★(これまでは EN でも「備考」。追記62 §5)。誤訳ではないので直していない |
| E | ★指示書AP(レポート画面のエラー表示)★ — ★作成済み・保留★ |
| F | ★規模前提のコメント14か所★ / ★EN の抜け★(保留) |
一覧は CLAUDE.md §3。★lib/config/allowed-ips.ts:35 の ALLOW_ALL_WHEN_EMPTY が true★(このままだと誰でも通る)/ ★AUTH_TOKEN が .env.example で changeme★/接続元の制限・TLS/ステージングDBのパスワード変更/ログインの試行回数制限と cookie の中身。 ★あわせて見直すもの★: 清掃詳細ログの期間なしの取得の性能(既定を全期間にした。Prisma 版は保持期間の予定を全部読んでからページ分けする。D-159 追記)/★エラー一覧の「解消済みも表示」の性能★(保持期間ぶんのキーを読む。D-160 追記2)/★契約によるメニューの出し分け★(顧客に使わせる前に必ず。D-160 追記4)。
| 待っているもの | ブロックされていること |
|---|---|
| ★先方のデータ投入の完了(10-06 は投入中)★ | ★予定と実績がつながった状態での確認すべて★(上の 2位) |
| P-13「本日中に修正予定」の対象(権限か、ログインできない件か) | 4カラム更新の権限の確認(★10-06 にステージングで /errors から書けた・権限エラーなし。追記62 §3★。どのアカウントの権限で通ったかは未確認) |
★DDL 変更の取り込み★: robot_id は NULL 可になった(10-06 構造で確認)。★serial_number は varchar(20) のまま★(P-8 c の拡張は未反映) |
prisma db pull(★拡張を確かめてから★)。★それまでは robot_error_reports を select で絞って読む★(lib/db/robot-error-select.ts) |
| 第9回 Q6-2(サマリに実施回数の列) | ★確定期間の稼働率は検算できない★(第11回 P-6 で式は確定。分子=正常終了の回数の列が無い) |
| 上の「次回の確認事項の候補」 | まだ送っていない |
★第11回で決まったこと★(D-158): 完了率の式は確定(P-2=A)/task_area = 0 は 0%(P-5=B)/当期 KPI はサマリの式(P-6)/ 予定は clean_timetables と clean_timetable_histories の両方(P-7=C)/customers は法人(P-15=B)→ 見出しは「顧客」/本番DBも JST(P-11=A)。 ★いずれも指示書AU で実装済み★(追記60)。
★回答が来たら受領日を docs/decisions.md に記録すること★(★送付と受領の両方を記録する★)。
★app/(dashboard)/ の画面12枚中11枚が実装済み★(+ログイン)。★空なのは点検記録だけ★(find app -name page.tsx と PlaceholderScreen の grep で確認)。
ダッシュボード / 清掃詳細ログ / アラート / ★エラー一覧(10-06)★ / レポート / 清掃面積 / D-Secログ / D-Secアラート / 施設ロボットマスタ / スケジュール管理 / システム管理(+ログイン)。
/d-watch スキルの記述。日付は 2026-10-05)| # | 内容 |
|---|---|
| 1 | ★ダッシュボードの数値カードと表は「各清掃エリアの直近の清掃(7日以内・終わった予定のみ・出発失敗を含む)」★(D-159)。★スケジュール進捗・要レスキュー・セキュリティバナーは当日のまま★なので、★カードと進捗は母集団が違う★(?date= を指定したときは従来どおりその日) |
| 2 | ★実データの清掃は 10:00 や 19:00〜22:00(前日の日付)★。サンプルデータ(深夜 1:30〜3:30・当日の日付)とは時間帯が違う。★「当日の日付で数える」作りは、実データでは翌朝に空になる★(D-159 のきっかけ) |
| 3 | ★清掃詳細ログの既定は「期間を指定しない(全期間)」★(D-159 追記。ユーザー指示「C」)。★片方だけ日付を入れたら入っている側だけを送る★(追記61 §4) |
| 4 | ★当期の稼働率は以前より低く出る★(分子が「正常終了(status 4)」に変わった。例: 予定10・開始9・正常終了7 → 90% から 70%)。★施設ステータスの閾値(good 90 / warning 75。lib/config/index.ts:565-570。137a94b)は据え置き★(D-158 項8。D-158 は「90/80」と書いているが実物は 75) |
| 5 | ★予定は2表から読む★。★同じ id は clean_timetables 側を採る★(履歴の id は本表の id のコピー。ユーザー回答 2026-10-05) |
| 6 | ★制御盤・セキュリティ・「清掃を開始できなかった」エラーも robot_error_reports に入る★(P-8・P-10)。★区分の見分けは次フェーズ★。★それらを全部見る画面がエラー一覧(/errors)★(D-160。アラート画面は事前チェック+出発失敗だけのまま) |
| 7 | ★clean_task_reports.started_at は、予定のある清掃では予定の start_at と同じ値★(ユーザー回答 2026-10-05「A」)。★期間の振り分けは画面どうしで一致する★ |
| 8 | ★エラー一覧は「2段階で読む」★(キーだけを SQL で絞って全件読み、アプリで並べてページ分け → そのページの行だけ読み直す)。★並びの errored_at ?? created_at を Prisma のクエリビルダで書けないため★(nulls last で近似すると errored_at が NULL の行が末尾に回る。D-160 追記2)。★4カラムの書き込みは /alerts(事前チェックの行だけ)と /errors(全行)の2本のルートから★ |
★前々版 §6 の14件(2026-09-16 時点の記述。接続先の呼び名など古い所がある)も読むこと★(docs/handoff/セッション引き継ぎ_20260916.md)。 ★特に事故が起きやすいもの★(いずれも★例外もテスト失敗も出ないまま結果だけ間違う★):
facility_ids の null(全件)と [](0件)は別物★ — ?.length で分岐すると★全件が静かに返る★facilities.contract は varchar(10) の桁位置★ — 数値比較すると★全施設が「契約なし」になる★CLAUDE.md §3)lib/db/robot-error-write.ts の1ファイルだけ。★ルートは /prechecks/{id}/status と /errors/{error_id}/status の2本になったが、どちらも writeRobotErrorColumns() を通る★)prisma.cleanTimetable で直接読まない★★ — ★必ず lib/db/timetable-source.ts を通す★。直接読むと履歴の表が抜ける。★count / groupBy を2表にまたがって書かない★(同じ id の重複を引けない)robot_error_reports を select なし・include で読まない★★ — robot_id が NULL の行が1件入っただけで読み取りが落ちる(lib/db/robot-error-select.ts の定数を使う)cleanLogs() と cleanLogRunMeta() の where を別々に書かない★★ — 非公開の mainTimetableWhere()(lib/db/index.ts)を共有している。片方だけ直すと、ダッシュボードの行とメタの突き合わせが静かにずれる(対応が無ければ pickLatestRunPerSection() が例外)app/api/dashboard/route.ts の const now)。窓と選び方が別の「現在」を見ると、終了+30分ちょうど付近で母集団がずれるCLAUDE.md §6-6)npx prisma generate が要る★(lib/generated/prisma は gitignore 対象)npm run build が落ちる★(Turbopack が node_modules のジャンクションを拒否。"Symlink [project]/node_modules is invalid")。★ビルドは本体で行う★@/lib/db/prisma を2本同時に動的 import すると、片方に本物が返る★(テスト環境だけ。ルートが Promise.all で2つの db.〇〇() を呼ぶと500)。エラー一覧の GET のテストは vi.spyOn で差し替えた。★/clean-logs の Prisma 経路テストで施設名と分類を同時に試すと同じ罠を踏む★(追記62 §4)t() に通している画面を grep する★\\ を \ に縮める★(正規表現の \S 等を書くスクリプトは Write ツールで書く).claude/commands/d-watch.md)docs/handoff.md に追記★ + ★docs/decisions.md に決定を記録★ (★採番前に grep -n "^### D-" docs/decisions.md | tail -3 で実測する★。 ★^### D-0 では3桁台を拾えない★)d-watch-api.yaml を直す★git add -A は禁止★。★必ずファイルパスを明示する★preview_start で起動する★(fixtures は d-watch-fixtures、ポート3100)。 ★サブエージェントが起動した dev サーバーは止めてから終わらせる★7cb7660 が作業中に入った)。 ★コミット直前に git status --short と git log --oneline -3 を見て、自分のファイル以外を巻き込まない★| 知りたいこと | どこを見るか |
|---|---|
| 全履歴 | docs/handoff.md(追記62まで) |
| 決定と理由 | docs/decisions.md(D-160まで) |
| 仕様の正・禁止事項 | CLAUDE.md |
| API契約 | d-watch-api.yaml |
| 画面の正 | d-watch-mock.jsx |
| 何がどこで決まっているか(非エンジニア向け) | docs/code-map.md(第4版。2026-10-06 に AU・AV・AW 分を改訂) |
| 最新の外部回答 | docs/handoff/TeamWorks回答_第11回_20261005.md(整理は D-158) |
| 最新の指示書 | docs/handoff/指示書AW_エラー一覧ページを作る_20261006.md(§13 に実装の記録) |
| サンプルデータでダッシュボードに何が出るか | docs/fixtures.md §12.3(直近モード) |
| サンプルデータでエラー一覧に何が出るか | docs/fixtures.md §13(既定10行・全11行) |
| PR の分け方 | docs/handoff/PRレビュー手順_20261001.md |