# Claude Code への依頼：回し方をサイトの試算にそろえる（v5・段階2）

設計書：同じフォルダの unity_design_v0.md（0 章「何について正か」）
前の依頼：claude_code_request_v4_json_store.md（段階1。③⑦を JSON から建てた。cs:112）
回している途中にスクリプトを変えない。Assets/ServiceSim/ の中だけで作る。

## 0. 先にやること

1. **作業場所に残っている 10/21 までの変更（22件）を、今回の作業と分けて VCS Check-in する**。コメントは「10/21 までの作業分（あきらめる道・待機場所・字幕など）」。中身は変えない
2. 小さな直し2つ（店や数字には効かない）
   - `CheckAisleWidths` の誤報（細い通路の歩ける幅が 0 m と出る）：SamplePosition の探す半径を navVoxelSize 以上にする
   - store_report.txt の名前に店の名前を入れる（③⑦で上書きされないように）

## 1. 決まったこと（2026-10-22 エイイチ）

- **狭い通路はサイトにそろえる**：サイトの決まりは「ふだんは幅 `normal_width`（1.0m）以上の道を選び、それで届かない卓だけ狭い道を使う」。JSON の細い通路のうち、幅が `meta.settings.normal_width` 未満のもの（⑦の3本・0.8m）を、ロボットにとって通りにくい区画（NavMesh の area コストを大きく）にする。1.0m 以上の道で行ける卓には遠回りで行き、その通路の中にしか止まる位置がない卓だけ入る。③の通路（1.2m）は普通の床のまま
  - 確かめ：⑦の T17・T22 は、段階1では 0.8m の通路を通っていた。そろえたあとは、サイトと同じく 1.0m 以上の道で行くこと（道のりが JSON の dist に近づく）
- **refuges（人がロボットをよける逃げ場）は空のまま**。今の作り（通路のロボットと反対側の出口へ下がる）で進める
- **Unity にしかないもの（組の人数・2人席・ドリンクバー・トイレ・椅子を引く）は残す**。「Unity だけの値」と分かるように、設定と報告に印を付ける

## 2. 読む値（手で写さない）

- 正：`https://pixelstomotors.com/sim/serving-robot-params.json`（試算の条件と店の回し方の値）。`Assets/ServiceSim/` の中に写して使う。写した日時を報告に出す
- `meta.layout_generation` が、店の形の JSON の `meta.generation` と違ったら回さずに止める
- `common` の各値には `role` がある
  - `site_rule`：サイトが正。Unity はこの値を使う（案内45秒・会計90秒・皿を置く10秒・客がロボットから皿を取る25秒・片付け40秒＋40秒・スタッフの歩く速さ 1.0 m/秒 など）
  - `unity_measures`：**読まない**（robot_speed・pause_rate・pause_s・stuck_rate）。Unity で測ってサイトに戻すための仮の値。Unity のロボットの速さ・止まり方は、今の RobotSpec とセンサーのまま
  - `site_only`：使わない（試算の中だけの設定。hop_m など）
- `stores.fam_p1` / `stores.fam_p5`：卓の数・来客のペース（arrivals の真ん中＝普通）・スタッフの人数（staff の真ん中）・料理ができるまで・食事の長さ・呼び出し・倒れやすい物の数など。ServiceSpec と PeopleSpec に手で写してある値は、この JSON から読む形にする（.asset の値は使わない）

## 3. そろえること

| | サイト（正） | いまの Unity → こうする |
|---|---|---|
| 店 | ③ fam_p1・⑦ fam_p5（JSON の店） | 段階1の JsonStoreLayout |
| 条件 | `unity_conditions` の6つ（スタッフ4人・ロボット0/1/2台・1時間42組・上げ膳だけ・1往復で3卓・倒れやすい物もロボットが運ぶ。ロボット0台は使い方・段の数に関係ない） | 条件として選べるようにする。**スタッフの人数とロボット0台を必ず回せるように** |
| 始め方 | 空の店から、`peak_min`（120分）だけ来客し、全員が帰るまで回す（`max_extra_min` で打ち切り） | 8割埋まった店・慣らし15分をやめ、サイトと同じにする |
| 立ち往生 | ロボットが自分で動けなくなったら、スタッフが歩いて行き `rescue_s`（15秒）動かす。ほかの仕事より先 | 受け渡し口へ移す（warp）をやめ、スタッフを呼ぶ形にする。「動けなくなった」の判定は今の stuckAfterStoppedSec のまま |
| 逃がし弁 | なし | あきらめた・移した・卓を空けた、の回数を記録する（0回に近いことを確かめる。消さない） |
| 出す数字 | `meta.metrics` の名前と定義 | 同じ名前・同じ定義で出す。いまの出力と定義が違うもの（例：「客が帰ってから卓が使えるまで」）は、どこが違うかを報告に書く |
| Unity で測る値 | ― | 設計書2章の4つ（実際に走れる速さ・止まっていた長さの分布・動けなくなった割合・止まった割合）を往復ごとに出す。⑦は狭い通路の中と外を分けて出す |

## 4. 確かめること（長く回さない）

1. ③のロボット2台の条件を、乱数の種1つで1回だけ回す（倍速は今までどおり）
2. 出た数字を、`unity_conditions` の同じ条件の `site_result` と並べた表にする（入店待ち・その内訳・料理が届くまで・スタッフの歩いた距離・手がふさがっている割合・ロボットが運んだ割合）。合わなくてよい。どのくらい違うかを見るため
3. 1回にかかった時間（実時間）と、全員が帰るまでのシミュレーション上の時間
4. 逃がし弁の回数・立ち往生でスタッフが呼ばれた回数
5. ⑦で、T17・T22 への道のりが狭い通路を避けているか（道のりと、通った区画）

6条件を何回ずつ回すかは、1回にかかる時間を見てから相談する。

## 5. 出力と記録

- 出力は今までどおり KIOXIA の `r2r2r-data/service_sim/unity/` の下（日付と店の名前と条件が分かるフォルダ名）
- 報告は `claude_code_reports/` に置く
- 確かめが通ったら VCS Check-in する（0 の 22件とは別に）
- 店の形（JSON）が足りない・合わないときは、Unity で埋めずに報告に書いて止める
