D-Watch(清掃ロボット監視ビューアー)の作業を引き継ぎます。
このリポジトリでは2つの環境で Claude が動きます。担当が違います。
| どこで動いているか | 担当 | 指示書を渡されたら |
|---|---|---|
| Cursor の中(エディタに統合された Claude) | ★実装担当★ .ts の実体(ロジック・型・テスト)を書く |
★実装してください★ |
| Claude Code(デスクトップアプリ / ターミナル。このスラッシュコマンドを使う側) | 調査・検証・指示書の作成、docs/*.md などの文書 |
作るところまで。実行しない |
★自分がどちらか分からないときの判定★
/d-watch)から起動された → Claude Code 側(実装しない)docs/handoff/指示書*.md を指して「実行して」と言った → ★あなたが実装者です。実装してください★「実装は Cursor 側」という記述を「Claude は実装しない」と読み違えないこと。 2026-09-07 に、Cursor 内の Claude がこの記述を読んで実装を拒否し、 代わりに文書作業のメニューを出す事故が起きました。
Claude Code 側が守ること: docs/handoff/指示書*.md は「作る」までが担当で、「実行」はしません。 2026-09-03 に指示書D を Claude Code 側で実行してしまい、24ファイルの変更を作ったうえで 全部差し戻した経緯があります(docs/handoff.md の「追記2」参照)。 サブエージェントを使うのは調査・検証まで。実装を委譲しないこと。
★例外: ユーザーが Claude Code に「ここで実装して」と明示したとき★は実装してよい(外出中で Cursor に渡せないため、指示書AR〜AT を Claude Code で実装した(git log の日時は 2026-10-02)。指示書AU も 2026-10-05 にユーザー指示「ここで実装してください」で同様。D-158 項9。★指示書AV・AW も 2026-10-06 にユーザー指示「ここで実装する」で同様(追記61・追記62)★。★D-161〜D-171・D-173 は指示書なしで、ユーザーの画面での指示をその場で実装した(追記63)★)。 その場合も ★指示書の期待値表は変えない★・★監督(メイン)が型チェック・テスト・差分を自分で確かめてから push★。
★入口はこの1枚です。先にこれを読んでください。★
docs/handoff/セッション引き継ぎ_20260917.md★そのうえで、必要に応じて次を読みます。いずれも本ファイルより優先される正の情報源です。
| 資料 | 何の正か |
|---|---|
CLAUDE.md |
★仕様・規約・禁止事項の正★ |
docs/decisions.md |
★決定の正★。★D-194 まで(182件。2026-11-05)★。★番号順に並んでいません★ |
docs/handoff.md |
★全履歴★。★追記63 まで★ |
d-watch-api.yaml |
API契約の正 |
d-watch-mock.jsx |
画面の正 |
★★本ファイルの数字は書いた瞬間から古くなります。必ず実測してください。★★
★この節が一番新しい★。その下の「2026-10-30〜11-04」も読むこと。「30秒で読む現在地」「最初の報告」の数字は 10-07 時点(古い)。
| 項目 | 値 |
|---|---|
| ブランチ | develop。★origin/develop は 32dfd11 のまま。ローカルが30コミット以上先★(★ユーザー指示「全ての実装が終わったら push する。まだしない」2026-11-05★)。GitBucket の次のタグは 2026-11-05 |
| テスト | ★170ファイル / 4,315件 全パス★(tsc・lint も緑。cc2cba2) |
| 指示書 | ★BK まで(次は BL)★。AY・BJ・BK は Cursor が実装し、監督(Claude Code)が点検 |
| 決定 | ★D-194 まで記録した(2026-11-05)★ — それまで見出しが D-181 で止まり、D-182〜D-185(指示書BB〜BE)と BF〜BI・10-27〜10-30 の決定が抜けていた。★D-190〜D-194 は 10-29〜10-30 の判断で、D-188・D-189(11-04)より古い(番号は日付順でない)★。★記録の穴は grep -c "指示書BX" docs/decisions.md で指示書ごとに数えると見つかる★ |
| 未コミット | ★別セッションの4ファイル★(components/features/errors/ErrorContentPicker.tsx・lib/errors/error-content-label.ts とそのテスト(改行コードだけ)・docs/handoff/指示書AY_* の1行)。★触らない・コミットに入れない★ |
C:\Users\daich\dev\dwatch-log-agent\agent.py。★別リポジトリ・読むだけ★)が /api/ds-agent/commands を長く待ち(long poll)、一覧・エクスポート(4MB ずつ・SHA-256)を中継する。★中継はメモリだけ(lib/ds-agent/relay.ts。globalThis の1つ。プロセス1つ前提)・ディスクに書かない★。制御盤のトークンは SHA-256 で data/settings/ds-agent-tokens.json。/api/ds-agent/ は Bearer だけ、他は cookieresult_invalid・ブラウザに 502 agent_error(agent_code: ["result_invalid"])/取り消し(AbortError)だけ黙り、通信失敗は文言を出す/ボタンの幅を固定(112・100・140px)file_ids を JSON にした大きさが 48KB を超えたら 422「選んだファイルが多すぎます」★ — ★制御盤は D-Watch の応答を 64KB までしか読まない★(agent.py の RESPONSE_READ_MAX_BYTES)ので、超えると指示が途中で切れて 50秒後に 504 になっていたd-watch-api.yaml を YAML として読めるようにした★(precheck_minutes の説明の (旧: … の : を引用符で囲んだ。中身は変えない)。★js-yaml で読める・$ref は全部解決する★ことを確かめたdocs/decisions.md に D-182〜D-194 を足した★(上の「決定」。D-186 BF・D-187 BG・D-188 BH・D-189 BI・D-190 進み具合は前日・D-191 アラートは事前チェックだけ・D-192 status 6 と不明(n)・D-193 障害サマリの error_list_id とエラー内訳・D-194 10-29 の表示の手直し)。docs/code-map.md の「D-182〜D-185 は監督待ち」も直したawait import("node:fs") はどのテストにも捕まらない壊し方だった(BK K2 で静的な検査に import(・require(・モジュール名の文字列を足して塞いだ)agent.py の定数を読む★: FILE_ID_MAX_LEN = 8192(受け取る側だけ。作る側に上限なし)・RESPONSE_READ_MAX_BYTES = 64KB。D-Watch の上限を変えるときは両方と突き合わせるnext\dist\bin\next" start -p 3100。引用符が挟まるので 'next start' では当たらない)git log 53f46e0..HEAD 等)。11-05 に1回、何もコミットされていないまま「完了」と言われた(渡し直して解決)★この節の数字は 11-04 時点★。最新は上の「2026-11-05」。
| 項目 | 値 |
|---|---|
| ブランチ | develop。★HEAD = origin/develop = 619e21d★(未 push 0) |
| GitBucket | ★develop は1コミット★(11-04 にユーザー指示でまとめ直した。中身は GitHub develop の先頭と同じ。GitHub の履歴は含まない)。★以後はその上に1つずつ積むので、サーバーは普通の git pull で取れる★。下の「GitBucket への上げ方」 |
| テスト | ★157ファイル / 3,855件 全パス★(tsc・lint も緑) |
| 指示書 | ★BH・BI まで(次は BJ)★。BH・BI は Cursor が実装し、監督(Claude Code)が点検・コミット |
| 決定 | ★コミット済みは D-181 まで★(docs/decisions.md)。★BH・BI の決定は未記録★(下の「残り」1) |
| 未コミット | ★別セッションの作業中の6ファイル★(docs/decisions.md・docs/handoff/指示書AY_*・docs/handoff/設計_制御盤ログの取り出し_*・components/features/errors/ErrorContentPicker.tsx・lib/errors/error-content-label.ts とそのテスト)。★触らない・コミットに入れない★(コードの3つは改行コード以外の差なし) |
| コミット | 内容 |
|---|---|
a2e240a・a1e4b59(10-30) |
清掃結果 status = 6 は 3 と同じ「清掃キャンセル」。表に無い値(7 以上など)は「不明(7)」と数字を残す(CLAUDE.md §4.7) |
38e8f5d(10-30) |
施設ロボットマスタを「監視」「D-Sec」列で並べ替え(1回目 desc = ○ が上 → ▲ → 既定) |
4bb639e(11-04) |
★指示書BH★: 清掃詳細ログ7列(機種・シリアル・日付・出発・清掃結果・完了率・判定)とエラー一覧6列(検知時刻・シリアル・種類・レベル・対応状況・備考)を見出しで並べ替え(1回目 asc = 悪いほうが上。サーバー側・ページングの前・CSV も同じ並び)。 ★「予定:すべて/予定あり/予定なし」の絞り込み★をエラー一覧と清掃詳細ログ(API・CSV・画面)に( lib/api/schedule-filter.ts・components/ui/ScheduleFilterSelect.tsx の1か所)。★並べ替えの印★: 並べていない列=薄い △、asc ▲・desc ▼。色はダーク白・ライト #1e293b(--sort-mark)。印の字は日本語フォント(--font-ja。body と共有)。★表示の文言「予定外」→「予定なし」★(プルダウン・詳細ログの予定列・ダッシュボードの小さい表・CSV・清掃面積の注記。API の値 unscheduled は変えない。BH §13)。YAML の清掃面積の行( CleanAreaRow)の説明を実装どおり「予定外も含む」に |
619e21d(11-04) |
★指示書BI★: ★予定なしの △× の行にもアドバイスの ▼★(詳細ログ・ダッシュボード)。入口 GET /clean-logs/unscheduled/{report_id}/advice(report_id は varchar(20) の文字列。数値にしない)。エリア別詳細のボタンは予定ありの行だけ(cleanLogRowView().areaDetail)。データ層 db.unscheduledCleanLog()。応答づくりは lib/clean-logs/advice-response.ts に切り出し両ルートで共有 |
git pull して使う★。公開設定なので★GitHub の履歴は出さない★ — 履歴にステージングの DB ユーザー名が14コミット入っている。D-177):
git push origin develop → git fetch origin)git ls-remote https://git.d-sec.dfarobotics.com/git/develop/client_dwatch.git refs/heads/develop で GitBucket の今の先頭 <head> を取る(知らない版なら止めてユーザーに聞く)S=$(git commit-tree "origin/develop^{tree}" -p <head> -m "D-Watch develop <hash> のスナップショット。GitHub の履歴は含まない")★(★-p <head> を必ず付ける★ — 付けないとサーバーで pull が効かない)→ git branch -f gitbucket-snapshot $Sgitbucket-snapshot^{tree} と origin/develop^{tree} が一致、git merge-base --is-ancestor <head> $S を確かめるgit push <上の URL> gitbucket-snapshot:develop(--force を付けない)★。拒否されたら誰かが積んだので止めてユーザーに聞くgit ls-remote --tags <URL> で既存を確かめ、git push <URL> $S:refs/tags/YYYY-MM-DD(同じ日の2回目以降は -2・-3)。ローカルにはタグを作らない。最初のタグは 2026-11-04(0fff50c)git log --oneline(またはタグ名)で版を選び git reset --hard <タグ名か ID> → コンテナ作り直し。最新へ戻すのは git pull origin developecb9f68)でつなぎ直したあと、ユーザー指示「rebase などでまとめて最新の状態に」で★1コミットにまとめ直した(最後の force push)★。サーバーはその1回だけ git fetch origin → git reset --hard origin/develop。★以後は force push しない★git pull → コンテナをイメージごと作り直して再起動 → ブラウザで Ctrl+Shift+R(npm run build だけではコンテナに届かない)git add -A 禁止)・別セッションの6ファイルを入れない・★コミット前に差分へテスト用トークン/本物の AUTH_TOKEN/DB のパスワード/接続先 IP が入っていないことを grep で確かめる★(値は表示しない)USE_FIXTURES=true npm run build → AUTH_TOKEN=<テスト用トークン> USE_FIXTURES=true npx next start -p 3100 → アプリ内ブラウザでログイン(★テスト用トークンはスクラッチパッドに乱数で作る。本物のトークンは打たない★)→ 終わったら止め、3100 を listen しているプロセスのコマンド行を確かめてから killpreview_start の d-watch(:3000。.env.local が clean_watch)で立て、★ログインはユーザー自身★。「止めて」と言われたら preview_stop → 3000 が空いたか確かめるUSE_FIXTURES=false とテスト用トークンで :3100 を立てる(読むだけ)。API だけなら .env.local の AUTH_TOKEN を cookie に付けて curl(値は表示しない)journal.jsonl から組み立てる★(started の agentId→label で指摘と判定を対応づける)adviceHead())とアドバイス本文は EN でも日本語★(前から。本文は運用設定の日本語)d-watch-api.yaml は js-yaml で読めない箇所が1つあった(precheck_minutes の説明の「(旧: …」の :)。★引用符で囲んで直した★。★説明に : を含む1行の文字列を書くときは引用符で囲むか | にする★。確かめ方: node -e 'require("js-yaml").load(require("fs").readFileSync("d-watch-api.yaml","utf8"))'clean_task_reports.report_id は varchar(20) の文字列★(19桁で安全な整数を超える。Number("1315386034733453312") は …300 に丸まる)。parsePathId() を流用しない(parsePathReportId())UNSCHEDULED_TIMETABLE_ID_WHERE はトップレベルの OR★。他の条件は展開して並べる(AND で包むのは OR が2つになるときだけ)。★app/api/clean-logs/__tests__/route.test.ts のスタブの matchesWhere は AND を黙って無視する★key.scheduled(true=予定あり)、詳細ログは r.unscheduled(true=予定なし)。matchesScheduleFilter() には必ず「予定あり=true」を渡すview.expandable)が決める★。cleanLogAdviceUrl() は ID が欠けた行だけ null(◎・結果待ちでも URL を返す)| 順 | 内容 |
|---|---|
| 1 | ★(2026-11-05 に済み)★ docs/decisions.md に BB〜BI と 10-27〜10-30 の決定を記録(D-182〜D-194) |
| 2 | ★(2026-11-05 に済み)★ d-watch-api.yaml を YAML として読めるように直す(上の罠4) |
| 2b | ★(2026-11-05 に済み)★ 古い記述を直した: docs/code-map.md:69・:595(予定外を入れない=BG の前)・:656(エラー一覧の列幅が古い)・docs/spec.md:80(「種類の2行目にエラー内容」=今は「詳細」の列)・指示書BB 付録A の D20(「直列化しない」=実装は直列化。D-182)。★code-map の予定外の記述は他にも4か所(:439・:1169・:1328〜1339・:1640 付近)古かったので合わせて直した★ |
| 3 | 必要なら: 開いた行の見出しの EN 対応(罠3) |
| 4 | ★施設69(MEGAUNY稲沢東店・ロボット2台)のデータが入ったら表示を確かめる★(10-30 の確認では問題なし。データ待ち) |
| 5 | 下の「次にやること」(10-07 時点)の PR #6・第12回の回答・点検記録画面(F-05)・契約によるメニューの出し分け・セキュリティはリリース直前、は★まだ残っている前提で、実測してから★進める |
★★133.125.238.144 / clean_watch はステージング。本番DBは別にある★★(D-152。D-148 は破棄)。
status / comment / responded_at / resolved_at)の UPDATE は書き込んでよい(D-152)。それ以外は禁止★★.env.local 更新後。10-02〜10-05 は 1045。D-157)。★10-06 は予定と実績がつながっていなかった★(レポート54行すべて clean_timetable_id が NULL。D-158 末尾)が、★10-07 はレポート87行のうち80行が本清掃の予定に紐づいていた★(予定外7行。D-170 2026-10-07 実測・先方投入)。★投入が終わったかは未確認★/errors)から確かめた★(1行を書いて戻し、4列は完全一致・権限エラーなし。先方投入データ。追記62 §3)。★エラー16行はすべて本清掃に紐づくので /alerts から書ける行は無い★parent_id あり)★だが、★事前チェックで見つかったエラーにどちらの id が入るかは未確認★(第12回で聞く。D-172)| 項目 | 値 |
|---|---|
| ブランチ | develop |
| 最終決定番号 | ★D-174★(アドバイス B2 の根拠の進め方。記録のみ)。最後の実装は ★D-173★(レポートがまだ無い清掃は予定の終了から2時間「結果待ち」。08ba9e9) |
| 最新の追記 | ★追記63★(D-161〜D-171・D-173 の実装と D-172・D-174 の記録) |
main..develop |
★533コミット★(origin/main..origin/develop。fetch 済み)。★HEAD = origin/develop = 04f974a(第12回の送付版)。未 push 0★ |
| ★PR★ | ★#6 open(develop→main)・レビュー未了★。★CI「Lint / Test / Build」は 04f974a で緑(11:4x 確認)★。★レビュー担当は daichi(D-154)★。★積み上げ PR に分けて出し直す予定★(docs/handoff/PRレビュー手順_20261001.md。区切りは数え直す) |
| テスト | ★125ファイル / 2,946件 全パス★(8a657a2。929c5b9・04f974a は資料だけ) |
| 指示書 | 45本(★次は AX★)。★AR・AS・AT(2026-10-02。git log の日時)・AU(2026-10-05)・AV・AW(2026-10-06)は Claude Code で実装済み★。★D-161〜D-171・D-173 は指示書なし★ |
★画面12枚中11枚が実装済み★(★エラー一覧 /errors を 10-06 に足した★)。★空なのは点検記録(F-05。docs/spec.md)だけ★。 ★2026-09-17 に全画面をブラウザで目視確認済み★(追記58)。★2026-10-05 に AR〜AT の変更(清掃結果の表示名・総清掃面積の注記・アラートの状態ボタンと備考)を fixtures で確認★。★AU(顧客の見出し・当期 KPI の式・予定の2表読み)は fixtures の API で境界値を確認済み、ブラウザ目視(EN・375px)は記録なし★(追記60)。★AV(ダッシュボードの直近モード・清掃詳細ログの既定を全期間)は fixtures の本番ビルドを撮影して確認、ステージングでも API を確認済み★(追記61)。★AW(エラー一覧)は fixtures の API と画面・ローカルDB・ステージング(1行を書いて戻した)で確認済み★(追記62)
★2026-10-06〜07 に足したもの(D-161〜D-171・D-173。追記63)★:
GET /reports/facility-performance/export。D-163)/★CSV の値が無い率は空欄★(D-164)null、CSV は空。予定があって異常なしは "Standby.")/★本清掃が成功した事前チェック異常はアラートで薄く表示し「本清掃は成功」の Pill★(main_run_succeeded。対応状況・件数は変えない)/D-Secログの備考の文字の頭を見出しに揃えた(D-171)RESULT_WAIT_MINUTES)まで「結果待ち」で、失敗に数えない★(D-173)— 詳細ログは出発「…」・「結果待ち」・判定なし/ダッシュボードに「結果待ち」カード(成功率の分母に入れない)・直近の清掃は予定が終了した最後の清掃(settleMinutes は削除)/アラートの出発失敗・連続日数・要レスキュー・当期の率も数えない| 順 | 内容 |
|---|---|
| ★1★ | ★資料のコミットを push したあと、PR #6 の CI が緑のままか確認する★(04f974a では緑。11:4x 確認) |
| ★2★ | ★第12回は送付版を作成済み★(docs/handoff/TeamWorks確認事項_第12回_20261007_送付版.md・04f974a。R-1 事前チェックで見つかったエラーの clean_timetable_id は事前チェックの行と本清掃の行のどちらの id か(D-172 P-9)/R-2 clean_task_reports は清掃の終了から最大どれくらい遅れて書かれるか(RESULT_WAIT_MINUTES の見直し。D-173)/R-3 お願い: データ投入(予定と実績の紐づけを含む)が終わったら一言ほしい)。★実際に送ったかは未確認★ → ★送付の確認と回答待ち。回答が来たら受領日を docs/decisions.md に記録★。★serial_number の拡張の再依頼は第12回には入れていない(急がない。D-172)★。P-13 と「予定が履歴に移る時期」も外した(D-172)。R-1 で本清掃の id が入るなら、アラートの「◯分前異常」は出なくなる(D-104)。R-2 の回答で RESULT_WAIT_MINUTES(120)を見直す |
| ★3★ | ★ステージングの投入が終わったら再実測★: 予定と実績のつながり(10-07 は 87行中 80行が予定に紐づく。D-170)・clean_timetable_histories と db.timetable_conflict・ダッシュボードの直近モードの内訳・事前チェックに紐づくエラー行が入ったらアラートからの書き込み(指示書AT 段階9)と main_run_succeeded・結果待ち(D-173)の出方。★prisma db pull は serial_number の拡張を確かめてから・急がない★(D-172) |
| ★4★ | ★PR #6 を積み上げ PR に分けて daichi がレビューし main に入れる★(先に CI 修正の PR。main は 2026-08-27 で停止中。D-154)。★ユーザー回答: レビューが終わったら全部 push する★(D-171 末尾) |
| 5 | ★点検記録画面(F-05)の指示書を書く★(★唯一の未実装画面★。独自ストアなので TeamWorks 待ちが無い。customer_name の説明に残した「ブランド」列もここで合わせる) |
| 6 | ★契約(facilities.contract)によるメニューの出し分け★(★P2。顧客に使わせる前に必ず★。D-160 追記4) |
| 7 | ★セキュリティ強化はリリース直前にまとめて★(D-154。一覧は CLAUDE.md §3: ALLOW_ALL_WHEN_EMPTY・AUTH_TOKEN が changeme・パスワード変更・TLS 等) |
| 8 | ★次フェーズ★: エラーの3区分・D-Sec アラートの取得元の切り替え(第11回 P-8〜P-10。D-158 当方の対応5)。★アドバイス B2 の根拠を本清掃のエラー内容に切り替える★(D-174 で決定。エラーコード(ユーザーが情報収集中)が決まってから) |
| 9 | 後で・要望があれば: 表示する事前チェックの回を設定値で(D-169)/施設別パフォーマンスの CSV の追加列(D-163)/D-160 追記の残り(「解消済みも表示」の性能・375px でサイドバーが畳まれない)/★EN の文言と D-Secログの備考の見出しが EN で "NOTE" の件は、運用が始まって必要になったら直す★(D-171 末尾のユーザー回答)/指示書AV・AW で範囲外にしたもの(AV: 遷移先の条件・Q6・Q7 / AW §10: 件数カード・バッジ・名前の一般化・部品の共通化)/★fixtures で data.anomaly の「実績が予定を上回る」側を再現し直す★(D-173 で有効スケジュールが 11件になり再現できなくなった。追記63 §5) |
docs/handoff/TeamWorks確認事項_第12回_20261007_送付版.md・04f974a。R-1 事前チェックで見つかったエラーの clean_timetable_id は事前チェックの行と本清掃の行のどちらの id か(D-172 P-9)/R-2 clean_task_reports は清掃の終了から最大どれくらい遅れて書かれるか(RESULT_WAIT_MINUTES の見直し。D-173)/R-3 お願い: データ投入(予定と実績の紐づけを含む)が終わったら一言ほしい)。★実際に送ったかは未確認★ → ★送付の確認と回答待ち。回答が来たら受領日を docs/decisions.md に記録★。★serial_number の拡張の再依頼は第12回には入れていない(急がない。D-172)★。P-13 と「予定が履歴に移る時期」も外した(D-172)clean_task_reports 54行すべて clean_timetable_id が NULL(D-158 末尾)→ 10-07 は 87行中 80行が予定に紐づく(D-170))。★ログインできない件(1045)は 10-06 に解消★robot_id は NULL 可になった(10-06 構造で確認)が、★serial_number は varchar(20) のまま★(第11回 P-8 c の拡張は未反映。10-07 も同じ。D-171)。★ユーザー判断: 急がない・db pull もそれまで待つ★(D-172)。それまでは robot_error_reports を select で絞って読む(lib/db/robot-error-select.ts)clean_ratio の訂正(N-3)は待たなくてよい★: 第11回 P-1・P-2=A で★今の式のまま確定★(D-158)。訂正後の列も同じ値になるcustomers は法人で「顧客」(P-15)/本番DBも JST(P-11)/task_area = 0 は 0%(P-5)/当期 KPI はサマリの式(P-6)。★どれも指示書AU で実装済み★★回答が来たら受領日を docs/decisions.md に記録すること★。
★引き継ぎ書 §6 の地雷を必ず読むこと。★ 特に★例外もテスト失敗も出ないまま結果だけ間違う★もの:
facility_ids の null(全件)と [](0件)は別物★facilities.contract は varchar(10) の桁位置★(数値比較すると全施設が「契約なし」)CLAUDE.md §3)status / comment / responded_at / resolved_at)の UPDATE は書き込んでよい(D-152)。それ以外は禁止★★CLAUDE.md §6-6)lib/db/timetable-source.ts を通して読む★(clean_timetables と clean_timetable_histories の両方。直接 cleanTimetable を読むと履歴が抜ける)robot_error_reports は lib/db/robot-error-select.ts の select で読む★(robot_id / robot を読まない)cleanLogs() と cleanLogRunMeta() は mainTimetableWhere() を共有する★(別々に書くと突き合わせが静かにずれる)/prechecks/{id}/status と /errors/{error_id}/status の2本★(どちらも writeRobotErrorColumns() を通る)。★エラー一覧は2段階で読む★(errored_at ?? created_at の順を Prisma で書けないため。D-160 追記2)
lib/prechecks/edit-drafts.ts の1本★(エラー一覧とアラートが共有)。★巡回順の lib/prechecks/status-cycle.ts は削除済み★(D-161)@/lib/db/prisma の同時の動的 import は片方に本物が返る★(テストだけ。vi.spyOn で避ける。追記62 §4)CLAUDE.md §4.4。lib/dashboard/__tests__/aggregate.test.ts が見張る)CleanLogItem.status_1h / status_30m の null は「その分数の事前チェックの予定が無い」、"Standby." は「予定あり・異常なし」★(別物。D-171)。★PrecheckItem.main_run_succeeded は見た目を薄くするだけで、対応状況・未解消の件数は変えない★(D-171)CleanLogItem.result_pending)は departed / grade を変えない旗★(結果待ちの行も departed: false・grade: "×" のまま)。★行を数える・△×を拾う処理を足すときは必ず旗を見る★(見ないと出発失敗に数える)。判定は lib/clean-logs/result-pending.ts の isResultPending() 1本、待つ時間は RESULT_WAIT_MINUTES(★LAUNCH_GRACE_MINUTES とは別物・流用しない★。D-173)作法:
git add -A は禁止★grep -n "^### D-" docs/decisions.md | tail -3 で実測★(^### D-0 では3桁台を拾えない)preview_start の d-watch-fixtures(dev サーバー)と .env.example の開発用トークン): USE_FIXTURES=true npm run build → AUTH_TOKEN=<スクラッチパッドに乱数で作ったテスト用トークン> USE_FIXTURES=true npx next start -p 3100 → アプリ内ブラウザ(Edge は使わない)。★:3000(ユーザーのサーバー)は止めない★。.claude/launch.json の d-watch-fixtures は残っているが使わないnpx prisma generate が要る★npm run build が落ちる★(Turbopack が node_modules のジャンクションを拒否)。★ビルドは本体で★\\ を \ に縮める★(正規表現の \S 等を書くスクリプトは Write ツールで書く)git status --short と git log --oneline -3 を見る★次を実際に実行して★現状を確認し、簡潔に報告してください。★推測で答えないこと。★
git log --oneline | head -10 git status git rev-list --count origin/develop..develop npm test
619e21d★)と一致するかRESULT_WAIT_MINUTES を見直す。D-173)そのうえで、何から進めるかをユーザーに確認してください。
引き継ぎメモとこのコマンド定義は、次の担当者の行動をそのまま決めます。 古い記述を残すと、次のセッションがその指示に従って誤った作業を始めます。 このファイルは要約と道案内に留めてあります。詳細は docs/handoff.md に書いてください。 方針が変わったら、引き継ぎメモへの追記と同時にこのファイルも直してください。